发新帖我要提问
12
返回列表
打印
[STM32F4]

SPI这边怎么配置?

[复制链接]
楼主: chuxh
手机看帖
扫描二维码
随时随地手机跟帖
21
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;
}

使用特权

评论回复
22
chenjunt| | 2020-9-7 22:40 | 只看该作者

使用标准固件库试试

使用特权

评论回复
23
chuxh|  楼主 | 2020-9-7 22:44 | 只看该作者
弄出来了,但是使用HAL库的接收函数,通信时钟SCLK配置的慢点,就会出现通信超时,请问这个是什么原因?

使用特权

评论回复
24
xxrs| | 2020-9-7 22:48 | 只看该作者
具体是什么

使用特权

评论回复
25
chuxh|  楼主 | 2020-9-7 22:55 | 只看该作者
具体是SCLK=PCLK1/32及以上(大于等于32分频)调用HAL库的接收函数就会出现通信超时

使用特权

评论回复
26
chuxh|  楼主 | 2020-9-7 23:01 | 只看该作者
但是SCLK=PCLK1/16及以下(小于等于16分频)就能正常接收数据了。

使用特权

评论回复
27
lium| | 2020-9-7 23:04 | 只看该作者
HAL库SPI的接收函数中有个超时计算,请问有研究过的吗?

使用特权

评论回复
28
chuxh|  楼主 | 2020-9-7 23:07 | 只看该作者
HAL_StatusTypeDef HAL_SPI_Receive(SPI_HandleTypeDef *hspi, uint8_t *pData, uint16_t Size, uint32_t Timeout)

使用特权

评论回复
29
juventus9554| | 2020-9-7 23:14 | 只看该作者
只是一个片选一个接受的问题 波特率对了就行啊

使用特权

评论回复
30
xxrs| | 2020-9-7 23:17 | 只看该作者
接收的话三根线就可以啊

使用特权

评论回复
31
chuxh|  楼主 | 2020-9-7 23:21 | 只看该作者

嗯,我再好好缕一缕吧,有了好消息及时通知大家

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则