реклама на сайте
подробности

 
 
> Проблема с SPI., STM32F303VC
Jenya7
сообщение Mar 27 2018, 06:53
Сообщение #1


Профессионал
*****

Группа: Участник
Сообщений: 1 778
Регистрация: 29-03-12
Пользователь №: 71 075



Камень STM32F303VC
Настроил SPI
Код
/*!< SPI Config */
  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_Low;
  SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge;
  SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;
  SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_32;  //APB1=36Mhz => ~1Mhz //APB2=72Mhz                                                                  
  SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;
  SPI_InitStructure.SPI_CRCPolynomial = 7;
  SPI_Init(SPIx, &SPI_InitStructure);

Размер задан - байт - SPI_DataSize_8b
На скопе на клоке вижу 16 бит - после передачи 8 бит посылает еще 8.
Я что то недонастроил?

Передача байта такая
Код
uint32_t SPI_TransferByte(SPI_TypeDef *SPIx, uint8_t data)
{
    uint32_t timeout;

    // All data transmitted/received but SPI may be busy so wait until done.
    timeout = SPI_DELAY;
    while (SPIx->SR & SPI_I2S_FLAG_BSY) { if(!timeout--) return SPI_ERR; }

    // Setting the Data Register (DR) transmits the byte of data on MOSI.
    SPIx->DR = data;

    //  Wait for any data on MISO pin to be received.
    timeout = SPI_DELAY;
    while (!(SPIx->SR & SPI_I2S_FLAG_RXNE)) { if(!timeout--) return SPI_ERR; }

    //  Return the data received on MISO pin.
    return (uint8_t)(SPIx->DR);
}


Сообщение отредактировал Jenya7 - Mar 27 2018, 06:56
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
adnega
сообщение Mar 27 2018, 07:36
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 2 724
Регистрация: 14-05-07
Из: Ярославль, Россия
Пользователь №: 27 702



Цитата(Jenya7 @ Mar 27 2018, 09:53) *
Размер задан - байт - SPI_DataSize_8b
На скопе на клоке вижу 16 бит - после передачи 8 бит посылает еще 8.
Я что то недонастроил?

Есть такая тема в F3.
Перепишите структуру так
Код
typedef struct
{
  __IO uint16_t CR1;      /*!< SPI Control register 1 (not used in I2S mode),       Address offset: 0x00 */
  uint16_t  RESERVED0;    /*!< Reserved, 0x02                                                            */
  __IO uint16_t CR2;      /*!< SPI Control register 2,                              Address offset: 0x04 */
  uint16_t  RESERVED1;    /*!< Reserved, 0x06                                                            */
  __IO uint16_t SR;       /*!< SPI Status register,                                 Address offset: 0x08 */
  uint16_t  RESERVED2;    /*!< Reserved, 0x0A                                                            */
  union
  {
    __IO uint16_t DR16;   /*!< SPI data register,                                   Address offset: 0x0C */
    __IO uint8_t DR8;     /*!< SPI data register,                                   Address offset: 0x0C */
  };
  uint16_t  RESERVED3;    /*!< Reserved, 0x0E                                                            */
  __IO uint16_t CRCPR;    /*!< SPI CRC polynomial register (not used in I2S mode),  Address offset: 0x10 */
  uint16_t  RESERVED4;    /*!< Reserved, 0x12                                                            */
  __IO uint16_t RXCRCR;   /*!< SPI Rx CRC register (not used in I2S mode),          Address offset: 0x14 */
  uint16_t  RESERVED5;    /*!< Reserved, 0x16                                                            */
  __IO uint16_t TXCRCR;   /*!< SPI Tx CRC register (not used in I2S mode),          Address offset: 0x18 */
  uint16_t  RESERVED6;    /*!< Reserved, 0x1A                                                            */
  __IO uint16_t I2SCFGR;  /*!< SPI_I2S configuration register,                      Address offset: 0x1C */
  uint16_t  RESERVED7;    /*!< Reserved, 0x1E                                                            */
  __IO uint16_t I2SPR;    /*!< SPI_I2S prescaler register,                          Address offset: 0x20 */
  uint16_t  RESERVED8;    /*!< Reserved, 0x22                                                            */    
} SPI_TypeDef;

и для 8 и менее -битных посылках используйте SPIx->DR8, а для более 8-битных SPIx->DR16.

Добавлю, что это как раз тот случай, когда ответ можно найти в StdLib.
Код
void SPI_SendData8(SPI_TypeDef* SPIx, uint8_t Data)
{
  uint32_t spixbase = 0x00;

  /* Check the parameters */
  assert_param(IS_SPI_ALL_PERIPH(SPIx));

  spixbase = (uint32_t)SPIx;
  spixbase += 0x0C;
  
  *(__IO uint8_t *) spixbase = Data;
}


В RM это явление описано не очевидно.
Код
When the SPIx_DR register is accessed, data frames are always right-aligned
into either a byte (if the data fits into a byte) or a half-word (see Figure 388). During
communication, only bits within the data frame are clocked and transferred.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Jenya7   Проблема с SPI.   Mar 27 2018, 06:53
|- - Jenya7   Цитата(adnega @ Mar 27 2018, 12:36) Есть ...   Mar 27 2018, 07:49
|- - Сергей Борщ   QUOTE (adnega @ Mar 27 2018, 09:36) Добав...   Mar 27 2018, 09:00
|- - Jenya7   Цитата(Сергей Борщ @ Mar 27 2018, 14:00) ...   Mar 27 2018, 09:23
|- - adnega   Цитата(Сергей Борщ @ Mar 27 2018, 12:00) ...   Mar 27 2018, 09:24
- - Сергей Борщ   QUOTE (Jenya7 @ Mar 27 2018, 11:23) а что...   Mar 27 2018, 10:31
|- - jcxz   Цитата(Сергей Борщ @ Mar 27 2018, 13:31) ...   Mar 27 2018, 11:13
|- - Obam   Цитата(jcxz @ Mar 27 2018, 15:13) ...блок...   Mar 28 2018, 15:18
|- - jcxz   Цитата(Obam @ Mar 28 2018, 18:18) Символи...   Mar 30 2018, 08:47
- - serglg   и куда ж такому "программисту" как я под...   Mar 28 2018, 05:06
|- - adnega   Цитата(serglg @ Mar 28 2018, 08:06) и куд...   Mar 28 2018, 05:38
|- - serglg   Цитата(adnega @ Mar 28 2018, 11:38) Научи...   Mar 28 2018, 10:43
- - MrYuran   Чтобы не плодить тем, добавлю здесь. Вчера у меня ...   Mar 30 2018, 06:26
|- - adnega   Цитата(MrYuran @ Mar 30 2018, 09:26) Чтоб...   Mar 30 2018, 06:49
|- - MrYuran   Цитата(adnega @ Mar 30 2018, 09:49) Вчера...   Mar 30 2018, 07:26
- - Obam   Хозян, как всем известно - барин... да и речь в то...   Mar 30 2018, 14:55
- - jcxz   Цитата(Obam @ Mar 30 2018, 17:55) В коман...   Mar 30 2018, 19:43


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 19th July 2025 - 15:15
Рейтинг@Mail.ru


Страница сгенерированна за 0.01394 секунд с 7
ELECTRONIX ©2004-2016