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

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

[复制链接]
50031185 提问时间: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个回答
toofree 回答时间:2019-9-23 12:11:17
说“SPI HAL库有BUG”,这个不至于。要不,把程序再看看?

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

50031185 回答时间: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管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版