你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32F0 系列的SPI HAL库(1.10.1)有bug

[复制链接]
AI++ 提问时间:2019-9-23 00:17 /
接收3个字节时 就进入硬件错误了,

                HAL_GPIO_WritePin(GPIOB,GPIO_PIN_12,GPIO_PIN_RESET);
        HAL_SPI_Transmit(&SPI_Handler2,&txbuf,3,1000);
        HAL_GPIO_WritePin(GPIOB,GPIO_PIN_12,GPIO_PIN_SET);
        HAL_Delay(1);
        HAL_GPIO_WritePin(GPIOB,GPIO_PIN_12,GPIO_PIN_RESET);
        HAL_SPI_TransmitReceive (&SPI_Handler2,&txbuf,recvbuf,3,100);
        HAL_GPIO_WritePin(GPIOB,GPIO_PIN_12,GPIO_PIN_SET);




每次走到 HAL_SPI_TransmitReceive  (  )就死机了
有啥办法修复?




收藏 评论2 发布时间:2019-9-23 00:17

举报

2个回答
七哥 回答时间:2019-9-23 12:11:17
说“SPI HAL库有BUG”,这个不至于。要不,把程序再看看?

txbuf,recvbuf,这两个都是怎么定义的?
如果都是数组的话,那么传的参数应该都是数组名或数组元素0的地址。
“HAL_SPI_TransmitReceive (&SPI_Handler2,&txbuf,recvbuf,3,100); ”
你在,这条中使用&txbuf,应该是错误的。除非你的txbuf是一个变量,但是变量的话,发送3个长度那显然也不对。

AI++ 回答时间:2019-9-23 21:42:38
toofree 发表于 2019-9-23 12:11
说“SPI HAL库有BUG”,这个不至于。要不,把程序再看看?

txbuf,recvbuf,这两个都是怎么定义的?

找到问题所在了,
我不确定这个错误和编译器有没有关系,我用的编译器是GCC


由于声明的发送或者接受缓存数组没有4字节对齐,所以在访问时出错了,
下面是HAL库中的部分代码,我觉得可能是忘了改8位模式的代码了
这是16位收发的代码



下面是8位模式的处理代码
QQ截图20190923213030.png

自己修改库文件我怕改出BUG,所以简单的解决办法是


给发送和接收数组前加上字节对齐声明

__ALIGN_END char RecvRDAC_buf[6];

这样接收数据的时候就运行正常了






关于意法半导体
我们是谁
投资者关系
意法半导体可持续发展举措
创新和工艺
招聘信息
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
关注我们
st-img 微信公众号
st-img 手机版