OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 5878|回复: 6

STM32作为SPI的主机,频繁操作从机Ble 时, SPI停止工作

[复制链接]

95

主题

549

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3293
金钱
3293
注册时间
2016-1-7
在线时间
541 小时
发表于 2023-2-24 13:41:15 | 显示全部楼层 |阅读模式
5金钱
本帖最后由 challenger 于 2023-2-24 13:49 编辑

项目是主机是STM32F0芯片,SPI作为主机挂在上面,分别为SCK,MISO, MOSI,CS, IRQ 这几根线。

从机为BLENrg 芯片,也有5根线:  SCK,MISO, MOSI,CS, IRQ 这几根线。


分别对应管脚的接法为:

             STM32F0             BLENrg  

             SCK                    SCK  
             MISO                  MISO
             MOSI                 MOSI
             CS                     CS
            IRQ                     IRQ

正常情况下,STM32F0主机,向从机BLENrg芯片,发数据时,只需将主机CS拉低为0,便可以选中从机,顺利发数据到从机。从机向主机主动发数据时,从机BLENrg脚需置高,从而触发主机IRQ脚上升沿中断。检测到中断,主机STM32F0便将CS脚拉低,这时,从机CS处于选中状态,从机便可以发数据到主机了。

          但是长久测试时,发现从机突然IRQ脚变高电平为1, 且一直处于1,电平拉不下来,从而导置SPI通信中断,无法继续进行,但是从机的定时器还在走,说明从机没死机,只是电平无法拉低,让电平翻转一下。这样,让从机发数据时,再能将IRQ置高。但是一直为高电平,必须将从机bleNrg 芯片复位键按一下,复位之后,从机又正常与主机双向通信了。  有哪位大神遇到过这么奇怪的问题? 从机IRQ脚电平为何一直为高?我如何强制将其拉低?让SPI通信继续进行???



最佳答案

查看完整内容[请看2#楼]

搞定了,在 ErrorCallback中 复位从机SPI总线,然后再在里面重新开启接收发送中断,发生错误时,丟掉一包后,又回归正常。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

95

主题

549

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3293
金钱
3293
注册时间
2016-1-7
在线时间
541 小时
 楼主| 发表于 2023-2-24 13:41:16 | 显示全部楼层
搞定了,在 ErrorCallback中 复位从机SPI总线,然后再在里面重新开启接收发送中断,发生错误时,丟掉一包后,又回归正常。
回复

使用道具 举报

95

主题

549

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3293
金钱
3293
注册时间
2016-1-7
在线时间
541 小时
 楼主| 发表于 2023-2-24 16:34:44 | 显示全部楼层
程序跑进:

void HAL_SPI_IRQHandler(SPI_HandleTypeDef *hspi)
{
。。。。。。。。。。。。。。

。。。。。。。。。。。。。。。。

     if ((HAL_IS_BIT_SET(itsource, SPI_CR2_TXDMAEN)) || (HAL_IS_BIT_SET(itsource, SPI_CR2_RXDMAEN)))
     {
。。。。。
     }
      else
      {
        /* Call user error callback */
#if (USE_HAL_SPI_REGISTER_CALLBACKS == 1U)
        hspi->ErrorCallback(hspi);
        printf("HAL_SPI_IRQHandler99\r\n");
#else
        HAL_SPI_ErrorCallback(hspi);      ////////////////////////////////////程序跑进这里了。。。。。。。。。。。。。。。。。。。。。。。。。。。。
        printf("HAL_SPI_IRQHandleraa\r\n");        
        
#endif /* USE_HAL_SPI_REGISTER_CALLBACKS */
        
      }
}


程序跑到:HAL_SPI_ErrorCallback(hspi); 这里了。。。。
回复

使用道具 举报

70

主题

6698

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
12692
金钱
12692
注册时间
2012-11-26
在线时间
3711 小时
发表于 2023-2-25 09:07:49 | 显示全部楼层
大概率从机有问题了
回复

使用道具 举报

95

主题

549

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3293
金钱
3293
注册时间
2016-1-7
在线时间
541 小时
 楼主| 发表于 2023-2-25 19:13:06 | 显示全部楼层
jermy_z 发表于 2023-2-25 09:07
大概率从机有问题了

从机报错  进入了HAL_SPI_ErrorCallback(hspi);  然后从机的IRQ电平一直为高了。。。网上查贴说要复位从机SPI,但这种方法,我有点不想用。。。
回复

使用道具 举报

2

主题

446

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4133
金钱
4133
注册时间
2018-5-14
在线时间
902 小时
发表于 2023-2-27 08:52:22 | 显示全部楼层
用W5500也有这个问题的,硬件SPI改软件模拟吧,就速度没硬件快,其他都正常
回复

使用道具 举报

95

主题

549

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3293
金钱
3293
注册时间
2016-1-7
在线时间
541 小时
 楼主| 发表于 2023-3-11 21:33:27 | 显示全部楼层
目前检测到Spi 从机ErrorCallback=0x04 ,有介绍说是spi从机接收中断溢出了。。。这是什么鬼???
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-24 14:59

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表