用stm32F030F4调试nrf24l01模块,但是本来在其他地方运行好好的代码,移植过来却不行了,使用的是hal库,没办法出了问题还是要深入进去看HAL库内部的封装。
实验分为两块儿板子,一块儿作为发送,一块儿作为接收。经过各种交叉验证,可以测试出来发送端没问题,可是接收端一上电就挂掉了。调试之后发现是进入了hardfault错误。
而发送和接收都是公用的底层代码,为什么只有接收端进入hardfault,但是发送端却没有。只能一步步跟踪,最终定位在HAL库的SPI发送函数里面。
如下图所示,箭头所指地方,执行到这里一下就over了。
看下这条语句,首先想到的进入hardfault的原因:是不是操作pData越界了?检查定义的buffer和要发送的数据长度没有问题,buffer长度为5,发送个数也为5。所以不存在这种情况。
那么还有什么可能?
先来看看我定义的发送数组,也就是pData指针所操作的缓冲区:
TX_AD