Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: STM32F051 SPI
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
MiklPolikov
Настраиваю SPI1 в STM32F05 на передачу 8 бит в режиме master. На осциллографе вижу, что передаются 16 бит (SCK делает 16 тактов)
Первые 8 бит мои, остальные нули. CRC отключен , длинна данных выбрана 8 бит. Откуда же берутся лишние биты ?

Код
        RCC->APB2RSTR|=RCC_APB2RSTR_SPI1RST;  //сброс настроек SPI1
        RCC->APB2RSTR&=~RCC_APB2RSTR_SPI1RST;  
    
     SPI1->CR1|=SPI_CR1_MSTR; // мастер
    
     SPI1->CR2&=~SPI_CR2_DS; //
     SPI1->CR2|=SPI_CR2_DS_0|SPI_CR2_DS_1|SPI_CR2_DS_2; // данные 8 бит
        
     SPI1->CR1|=SPI_CR1_SSM; //
     SPI1->CR1|=SPI_CR1_SSI; // непонятно зачем, но без этого не работает из-за внутреннего конфликта сигналов
    
     SPI1->CR1|=SPI_CR1_SPE; //включили SPI1
    
     SPI1->DR=0xFF; //передаём данные
     while(1){}
AHTOXA
Не уверен насчёт F0, но в F1 для получения 8 битных посылок нужно записать CR2 = 0.
HHIMERA
Пользуйтесь поиском...
http://electronix.ru/forum/index.php?showt...t&p=1103800

HHIMERA
Да... и ещё...
Цитата(MiklPolikov @ Dec 23 2012, 00:44) *
Код
    
     SPI1->CR2&=~SPI_CR2_DS; //
     SPI1->CR2|=SPI_CR2_DS_0|SPI_CR2_DS_1|SPI_CR2_DS_2; // данные 8 бит

Для STM32F0XX не верен... причина описана в даташите...
Правильнее будет не устанавливать, а сбрасывать биты...
Код
   SPI1->CR2 |= SPI_CR2_DS;         /*!< DS[3:0] Data Size */
//   SPI1->CR2 &= ~SPI_CR2_DS_0;      /*!< Bit 0 */
//   SPI1->CR2 &= ~SPI_CR2_DS_1;      /*!< Bit 1 */
//   SPI1->CR2 &= ~SPI_CR2_DS_2;      /*!< Bit 2 */
   SPI1->CR2 &= ~SPI_CR2_DS_3;      /*!< Bit 3 */
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.