[STM32F4] SPI这边怎么配置?

[复制链接]
1409|30
zhuhuis 发表于 2020-9-7 22:35 | 显示全部楼层
void shortDelay(uint16_t delay){
    while(delay--);
}

uint16_t APP_ReadAdc(){

    int16_t  delay=4;
    uint16_t data=0;
    SPI2_CS_GPIO_Port->BSRR = SPI2_CS_Pin;  //cs high
    SPI2_SCK_GPIO_Port->BRR = SPI2_SCK_Pin; //sck low
    DRV_LedOn(2);
   
    while(delay--){
        shortDelay(1);
        SPI2_SCK_GPIO_Port->ODR ^= SPI2_SCK_Pin;
    }
      
    SPI2_CS_GPIO_Port->BRR = SPI2_CS_Pin;   //cs low

    for(delay=15; delay>=0; delay--){
         SPI2_SCK_GPIO_Port->BSRR = SPI2_SCK_Pin; //sck high
         //正常在这里读数据
          if(SPI2_MISO_GPIO_Port->IDR & SPI2_MISO_Pin)
          {
            data |= 1<<delay;
          }
         SPI2_SCK_GPIO_Port->BRR = SPI2_SCK_Pin; //sck low
    }
   
    SPI2_SCK_GPIO_Port->BSRR = SPI2_SCK_Pin; //high
    DRV_LedOff(2);
    return data;
}
chenjunt 发表于 2020-9-7 22:40 | 显示全部楼层

使用标准固件库试试
 楼主| chuxh 发表于 2020-9-7 22:44 | 显示全部楼层
弄出来了,但是使用HAL库的接收函数,通信时钟SCLK配置的慢点,就会出现通信超时,请问这个是什么原因?
xxrs 发表于 2020-9-7 22:48 | 显示全部楼层
具体是什么
 楼主| chuxh 发表于 2020-9-7 22:55 | 显示全部楼层
具体是SCLK=PCLK1/32及以上(大于等于32分频)调用HAL库的接收函数就会出现通信超时
 楼主| chuxh 发表于 2020-9-7 23:01 | 显示全部楼层
但是SCLK=PCLK1/16及以下(小于等于16分频)就能正常接收数据了。
lium 发表于 2020-9-7 23:04 | 显示全部楼层
HAL库SPI的接收函数中有个超时计算,请问有研究过的吗?
 楼主| chuxh 发表于 2020-9-7 23:07 | 显示全部楼层
HAL_StatusTypeDef HAL_SPI_Receive(SPI_HandleTypeDef *hspi, uint8_t *pData, uint16_t Size, uint32_t Timeout)
juventus9554 发表于 2020-9-7 23:14 | 显示全部楼层
只是一个片选一个接受的问题 波特率对了就行啊
xxrs 发表于 2020-9-7 23:17 | 显示全部楼层
接收的话三根线就可以啊
 楼主| chuxh 发表于 2020-9-7 23:21 | 显示全部楼层

嗯,我再好好缕一缕吧,有了好消息及时通知大家
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 在线客服 返回列表 返回顶部