STM32 硬件I2C 死循环 自动退出

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了STM32 硬件I2C 死循环 自动退出相关的知识,希望对你有一定的参考价值。

STM32 用库函数使用硬件I2C,看到库函数用的while死循环来检测标志位。
我们都知道,while死循环是程序大忌,如果I2C通讯异常,那程序不是一直死在这里了吗?STM32 不就瘫痪了吗?
请问,STM32 官方库是如何考虑这个问题的?

参考技术A 自己加判断语句,要是检测不到器件就重新初始化! 参考技术B 应该是看门狗 ?

arm程序退出死循环

ldr lr,=halt_loop
ldr pc,=main
halt_loop:
b halt_loop

配置了链接寄存器指向的是halt_loop,在pc跳到主函数运行结束之后,pc的值会指向链接寄存器lr,然后就跳到halt_loop这个死循环上了,这是程序结束至死循环的意思。

1、如果main是死循环,那么本条语句是不会执行,cpu在一直取指运行。
2、如果main不是死循环,那么main返回后,执行汇编里面的这条循环。
如果不这么做,cpu会继续往下执行,然而后边并没有代码了,就会会把垃圾数据当做指令,触发未定义指令异常,导致系统崩溃可能就重启了

以上是关于STM32 硬件I2C 死循环 自动退出的主要内容,如果未能解决你的问题,请参考以下文章

stm32硬件i2c缺陷解决方法

stm32硬件i2c缺陷解决方法

怎样找出产生stm32硬件错误的原因

STM32F10x_模拟I2C读写_硬件I2C读写

关于STM32的I2C硬件DMA实现

STM32入门笔记——独立看门狗