|
|
  |
посоветуйте STM32 cortex M3, частота шины максимальная, SPI чтобы стабильно держал обещанные 16 МГц |
|
|
|
Feb 15 2013, 08:02
|
Знающий
   
Группа: Свой
Сообщений: 600
Регистрация: 27-05-05
Пользователь №: 5 482

|
QUOTE (Метценгерштейн @ Feb 15 2013, 12:19)  буду иметь ввиду- не знал.
а по STM32- кто с SPI работал успешно? а в чем проблема то? у меня работал stm32f105, 107, 205. частоты на память не помню, но не 2Мгц точно. точнее на 10х не мерил, неинтересно было, на 205 30Мгц при 120 тактовой - соответсвенно даташиту приведите свой код инициализациии, включая инициализацию RCC, чтоб не гадать
|
|
|
|
|
Feb 15 2013, 10:15
|

Профессионал
    
Группа: Модераторы
Сообщений: 1 120
Регистрация: 17-06-04
Пользователь №: 37

|
Если Вы используете библиотеку CMSIS: У меня SPI в STM32F205 нормально работает. Компилю кейлом. При инициализации я использую библиотеку CMSIS. В начале работы с проектом столкнулся с несоответствием скоростей USART ожидаемым. В файле stm32f2xx.h есть строки Код #if !defined (HSE_VALUE) #define HSE_VALUE ((uint32_t)25000000) /*!< Value of the External oscillator in Hz */ #endif /* HSE_VALUE */ Или подправьте там или вставьте в проект глобальный дефайн, чтоб HSE_VALUE стала равняться частоте вашего кварца. Из этой константы клоки высчитываются. Цитата Программатор где-то брать надо будет купите самый дешёвый STM32___Discovery и будет Вам ST-Link.
--------------------
Если зайца бить, его можно и спички научить зажигать Сколько дурака не бей - умнее не будет. Зато опытнее
|
|
|
|
|
Feb 15 2013, 10:51
|
Профессионал
    
Группа: Свой
Сообщений: 1 357
Регистрация: 12-04-05
Из: Петербург
Пользователь №: 4 079

|
так я и купил STM32 -Discovery плату. Код #define HSE_VALUE ((uint32_t)8000000) /*!< Value of the External oscillator in Hz*/ внешний кварц как раз 8 МГц. Там частота шины всего 32 Мгц. вот код CODE #include "stm32l1xx.h" #include "USART1.h" #include "stm32l1xx_gpio.h"
uint8_t temp, send_data = 0x01;
//Инициализация GPIO void gpio_init() { RCC->AHBENR |= RCC_AHBENR_GPIOAEN | RCC_AHBENR_GPIOBEN; //Тактирование портов A, B //Линини SPI1 (Master) //PA12(MOSI), PA11(MISO), PA5(SCK), PA4(NSS) - AF, Push-Pull, AF5(SPI1) GPIOA->MODER |= GPIO_MODER_MODER12_1 | GPIO_MODER_MODER11_1 | GPIO_MODER_MODER5_1 | GPIO_MODER_MODER4_1; //Alternate function GPIOA->OTYPER &= ~(GPIO_OTYPER_OT_12 | GPIO_OTYPER_OT_11 | GPIO_OTYPER_OT_5 | GPIO_OTYPER_OT_4); //Push-Pull GPIOA->AFR[1] |= (5<<16 | 5<<12); //PA12 = AF5, PA11 = AF5 GPIOA->AFR[0] |= (5<<20 | 5<<16); //PA5 = AF5, PA4 = AF5 RCC->AHBENR |= RCC_AHBENR_GPIOAEN; //настравиваем вывод порта PA8 GPIOA->MODER |= GPIO_MODER_MODER8_1; GPIOA->OTYPER &= ~GPIO_OTYPER_OT_8; GPIOA->PUPDR &= ~GPIO_PUPDR_PUPDR8; GPIOA->OSPEEDR |= GPIO_OSPEEDER_OSPEEDR8; GPIOA->AFR[1] &= ~GPIO_AFRH_AFRH8; RCC->CFGR &= ~RCC_CFGR_MCOPRE; } //Инициализация SPI1, SPI2 void spi_init() { /*Настройка SPI1 (Master) 8 бит данных, MSB передается первым, программный режим управления NSS, вывод NSS (PA4) разрешено использовать в качестве выхода*/ RCC->APB2ENR |= RCC_APB2ENR_SPI1EN; //Тактирование модуля SPI1 SPI1->CR1 |= SPI_CR1_BR; //Baud rate = Fpclk/256 SPI1->CR1 &= ~SPI_CR1_CPOL; //Полярность тактового сигнала SPI1->CR1 &= ~SPI_CR1_CPHA; //Фаза тактового сигнала SPI1->CR1 &= ~SPI_CR1_DFF; //8 бит данных SPI1->CR1 &= ~SPI_CR1_LSBFIRST; //MSB передается первым SPI1->CR1 |= SPI_CR1_SSM; //Программный режим NSS SPI1->CR1 |= SPI_CR1_SSI; //Аналогично состоянию, когда на входе NSS высокий уровень SPI1->CR2 |= SPI_CR2_SSOE; //Вывод NSS - выход управления slave select SPI1->CR1 |= SPI_CR1_MSTR; //Режим Master SPI1->CR1 |= SPI_CR1_SPE; //Включаем SPI1 }
int main() { Init_USART1(); gpio_init(); //Вызов функции инициализации портов spi_init(); //Вызов функции инициализации модулей SPI RCC->CFGR |= RCC_CFGR_MCO_SYSCLK; //вывод на PA8 SYSCLK for ( uint8_t data =0; data <10; data ++) { // SPI1->DR = data; //Пишем в буфер передатчика SPI1. После этого стартует обмен данными // while(!(SPI1->SR & SPI_SR_RXNE)); //Ожидаем окончания приема данных модулем SPI1 (RXNE =1 - приемный буфер содержит данные) // temp = SPI1->DR;//Считываем данные из приемного буфера SPI1. При этой операции происходит очистка буфера и сброс флага RXNE // // Usart1_Send_Byte_HEX (temp); // Usart1_Send_String ("\r\n"); Usart1_Send_Byte_HEX (data); Usart1_Send_String ("->");
while(!(SPI1->SR & SPI_SR_TXE)) ; SPI1->DR = data; //Пишем в буфер передатчика SPI1. После этого стартует обмен данными while(!(SPI1->SR & SPI_SR_RXNE)); //Ожидаем окончания приема данных модулем SPI1 (RXNE =1 - приемный буфер содержит данные) temp = SPI1->DR;//Считываем данные из приемного буфера SPI1. При этой операции происходит очистка буфера и сброс флага RXNE Usart1_Send_Byte_HEX (temp); Usart1_Send_String ("\r\n"); } for (;;) { } } и сама тема с проблемойпока что нравится 205-й
Сообщение отредактировал Метценгерштейн - Feb 15 2013, 12:36
Причина редактирования: [codebox] для длинного кода, [code] - для короткого!!!
|
|
|
|
|
Feb 16 2013, 07:16
|
Частый гость
 
Группа: Свой
Сообщений: 112
Регистрация: 1-05-09
Из: Ростов-на-Дону
Пользователь №: 48 518

|
STM32F207 с Атмеловской флешкой работает на 30MHz. Цитата(Метценгерштейн @ Feb 15 2013, 14:51)  так я и купил STM32 -Discovery плату. Какую именно?
--------------------
«У современных мобильных телефонов такая же вычислительная мощь, что и у компьютеров NASA в 60-е годы. И в то время этого хватало, чтобы запустить человека в космос, а сегодня — только чтобы запускать птиц в свиней.»
|
|
|
|
|
Feb 16 2013, 09:41
|
Местный
  
Группа: Свой
Сообщений: 252
Регистрация: 9-10-08
Из: Московская обл.
Пользователь №: 40 797

|
Был у нас проект как раз на L151, данные снимались с SPI-датчика и сливались в SPI-флешку. Процессор работал на своих полных 32МГц, флешка вроде бы 16, датчики медленнее, точно скорости не помню уже.. зато помню забавный момент - заменили кварц на вдвое более быстрый, а инициализацию PLL я исправить забыл  в итоге проц вполне успешно работал на частоте вдвое выше номинала. PS а вы не пробовали работать по второму SPI? их же два в этих процах.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|