请教stm32 i2c轮询为什么要在此处关闭中断

请教stm32 i2c轮询为什么要在此处关闭中断,第1张

STM32的I2C的Bug:因为ack信号时间很短暂,一旦错过了这个短暂的ACK信号,STM32就挂了。CPU要处理很多不同的任务,一旦其他任务占用了CPU,ACK就容易被错过。 官网不承认这个Bug,给出的解决方案是:用最高优先级的DMA来实现I2C传输。

恶心的程序设计
#1:又一个不使用库函数的?
一般使用库函数,可读性好多了,别人也更容易阅读,
特殊地方可采用直接寄存器写值的方式!
#2: 需理解中断的意义, 你在中断函数里面加这么大的延时有何意义?
这是单片机程序设计的忌讳, 可设全局变量,然后中断发生改变全局变量的值
再在执行函数里面判断全局变量的值。
#3: 中断函数未清除中断标志位

你分别对io进行设置 比如设置PA1,PA2。 如果中断是下降沿中断,则中断发生后,对应的io口应该为低电平,这时候你去测A1,A2的电平,看看那个是低电平,就知道那个发生了中断。 仅供参考,具体以实际情况为准


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/13410411.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-07-30
下一篇 2023-07-30

发表评论

登录后才能评论

评论列表(0条)

保存