金牌会员
 
- 积分
- 2765
- 金钱
- 2765
- 注册时间
- 2018-11-8
- 在线时间
- 438 小时
|
5金钱
情况如图 主函数while循环里只有一条测试函数和500ms的延时函数测试函数里通过SPI 发送48 FF FF FF读取芯片的状态寄存器
返回值是xx 90 00 00 或者xx 10 00 00代表状态正常
之后然后发送43 FF FF FF读取芯片结果寄存器
被测量是个湿度传感器 现在的情况是正常运行时一切正常
我为了测试传感器输出 对传感器哈一口气 然后偶然间发现状态寄存器会返回xx FF FF FF
按照手册这是绝对不可能的(部分位未使用 正常应该回复0)
用示波器观察波形 在异常状态下MISO线上也给出了正确的波形 但是DEBUG中看到SPI->DR寄存器在异常状态下数据全是FF
另外我跟同样用这个芯片的好友要了一份他好用的程序 用CUBEMX加HAL库写的 一切正常(哈气不影响数据,硬件是同一个电路板,备用电路板现象相同,个人认为可以排除硬件原因)
我直接用寄存器写的程序 但是我把我的SPI收发函数和测试函数移植到他的程序上 依然一切正常(个人认为排除了初始化及各种配置的影响 测试函数里仅包含SPI收发函数、数据处理、printf部分)
而且该BUG会持续一段时间后自动恢复,目前测试结果 几秒至几十秒即可恢复
求大佬分析下可能的原因及解决措施
示波器黄色线为SCLK 粉色线为MOSI 绿色线为MISO
|
-
正常情况下状态寄存器波形
-
正常情况下结果寄存器波形
-
异常情况下状态寄存器波形
-
异常状态下状态寄存器返回值
-
正常情况下结果寄存器返回值
-
正常情况下状态寄存器返回值
|