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

|
QUOTE (Метценгерштейн @ Feb 15 2013, 16:51)  CODE SPI1->CR1 |= SPI_CR1_BR; //Baud rate = Fpclk/256 } строка ни о чем не говорит? 36000000/256 = 140,625 кГц
|
|
|
|
|
Feb 17 2013, 10:31
|
Знающий
   
Группа: Свой
Сообщений: 600
Регистрация: 27-05-05
Пользователь №: 5 482

|
Цитата(Метценгерштейн @ Feb 17 2013, 14:45)  8 МГц- это частота PCLK2 - при ней может работать только до частоты клоков 2 МГц или ниже. Если делителем не выставлять PCLK2, то на нее идет 32 МГц- вообще не работает.
Скажите, какой код написать для проверки, что где выставить и я это проверю.
Я замыкаю МИСО на МОСИ, получаю эхо. Должно же так работать тоже. для stm32L делал давно и сейчас проверить неначем, исходники тоже на работе, появлюсь там через пару недель. для 103, 105, 107 при PCLK 32МГц все работало при делителе SPI 2 и 4. для приведенного ниже кода PCLK 36МГц Update - код из рабочего проекта на stm32f105V, соответсвенно SPICLK=18МГц. работает с AT25DF321 CODE void sFLASH_LowLevel_Init(void) { GPIO_InitTypeDef GPIO_InitStructure;
/*!< sFLASH_SPI_CS_GPIO, sFLASH_SPI_MOSI_GPIO, sFLASH_SPI_MISO_GPIO and sFLASH_SPI_SCK_GPIO Periph clock enable */ RCC_APB2PeriphClockCmd(sFLASH_CS_GPIO_CLK | sFLASH_SPI_MOSI_GPIO_CLK | sFLASH_SPI_MISO_GPIO_CLK | sFLASH_SPI_SCK_GPIO_CLK, ENABLE); /*!< sFLASH_SPI Periph clock enable */ if (sFLASH_SPI == SPI1) RCC_APB2PeriphClockCmd(sFLASH_SPI_CLK, ENABLE); else RCC_APB1PeriphClockCmd(sFLASH_SPI_CLK, ENABLE); /*!< Configure sFLASH_SPI pins: SCK */ GPIO_InitStructure.GPIO_Pin = sFLASH_SPI_SCK_PIN; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_Init(sFLASH_SPI_SCK_GPIO_PORT, &GPIO_InitStructure);
/*!< Configure sFLASH_SPI pins: MOSI */ GPIO_InitStructure.GPIO_Pin = sFLASH_SPI_MOSI_PIN; GPIO_Init(sFLASH_SPI_MOSI_GPIO_PORT, &GPIO_InitStructure);
/*!< Configure sFLASH_SPI pins: MISO */ GPIO_InitStructure.GPIO_Pin = sFLASH_SPI_MISO_PIN; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_Init(sFLASH_SPI_MISO_GPIO_PORT, &GPIO_InitStructure); /*!< Configure sFLASH_CS_PIN pin: sFLASH Card CS pin */ GPIO_InitStructure.GPIO_Pin = sFLASH_CS_PIN; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_Init(sFLASH_CS_GPIO_PORT, &GPIO_InitStructure); }
unsigned char sFLASH_SendByte(unsigned char byte) { /*!< Loop while DR register in not emplty */ while (SPI_I2S_GetFlagStatus(sFLASH_SPI, SPI_I2S_FLAG_TXE) == RESET); /*!< Send byte through the SPI1 peripheral */ SPI_I2S_SendData(sFLASH_SPI, byte); /*!< Wait to receive a byte */ while (SPI_I2S_GetFlagStatus(sFLASH_SPI, SPI_I2S_FLAG_RXNE) == RESET); /*!< Return the byte read from the SPI bus */ return SPI_I2S_ReceiveData(sFLASH_SPI); }
void sFLASH_Init(void) { SPI_InitTypeDef SPI_InitStructure;
sFLASH_LowLevel_Init(); /*!< Deselect the FLASH: Chip Select high */ sFLASH_CS_HIGH();
/*!< SPI configuration */ SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex; SPI_InitStructure.SPI_Mode = SPI_Mode_Master; SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b; SPI_InitStructure.SPI_CPOL = SPI_CPOL_High; SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge; SPI_InitStructure.SPI_NSS = SPI_NSS_Soft; #if defined (STM32F10X_LD_VL) || defined (STM32F10X_MD_VL) || defined (STM32F10X_HD_VL) || defined (STM32F10X_CL) SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_2; #else SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_4; #endif
SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB; SPI_InitStructure.SPI_CRCPolynomial = 7; SPI_Init(sFLASH_SPI, &SPI_InitStructure);
/*!< Enable the sFLASH_SPI */ SPI_Cmd(sFLASH_SPI, ENABLE); }
Сообщение отредактировал IgorKossak - Feb 17 2013, 11:15
Причина редактирования: [codebox] для длинного кода, [code] - для короткого!!!
|
|
|
|
|
Feb 17 2013, 11:25
|
Знающий
   
Группа: Свой
Сообщений: 600
Регистрация: 27-05-05
Пользователь №: 5 482

|
QUOTE (Метценгерштейн @ Feb 17 2013, 17:13)  я не вижу никаких особых отличий, кроме того, что я не через структуру все сделал- плохой тон)
если замыкать МИСО на МОСИ, должен же эхо корректно получать? а не особые отличия какие? должен. осциллографом шину смотрели?
|
|
|
|
|
Feb 17 2013, 15:12
|
Знающий
   
Группа: Свой
Сообщений: 600
Регистрация: 27-05-05
Пользователь №: 5 482

|
QUOTE (Метценгерштейн @ Feb 17 2013, 19:58)  смотрел, конечно. Там, что тему с проблемой приводил- мне W5100 wiznet выдает число 13, а я своим STM32 не могу его прочитать. Начал копать и отрыл, что на скоростях больше 2 МБит глючит.
Отличия- что через структуру. Я и так тоже делал. в той теме не совсем понятно, поэтому спрошу 1. эхо на высоких частотах работает? 2. осциллограммы сняты, лог. анализатором, проведите еще снятые осциллографом в нормальном аналоговом режиме 3. попробуйте в 16-битном режиме поработать, я когда с ads7843 разбирался, она у меня в 8-битном тоже отказывалась нормально работать, причину чесно говоря не выяснил, да и лень было
|
|
|
|
|
Feb 18 2013, 06:56
|
Знающий
   
Группа: Свой
Сообщений: 600
Регистрация: 27-05-05
Пользователь №: 5 482

|
QUOTE (Метценгерштейн @ Feb 17 2013, 23:15)  да фронты не завалены были. смотрел тоже. Что именно посмотреть? а 16 бит и 8 бит режимы чем отличаются? осциллограмму SCL и MISO в аналоговом режиме. передаются 8 и 16 бит соответсвенно  в глючном режиме как отличаются принятый и переданный байты? попробуйте сделать задержку несколько тактов после выставления флага RNE - ощущение что не успеват записаться последний бит.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|