最近,在使用STM8L051F3进行编程的时候,使用PC0和PC1进行模拟IIC编程,对于调试中出现的__iar_unhandled_exception的问题,对于该问题,自己的一些解决方法,并记录
对两种SDA配置方向的函数进行比较
方式1 DDR寄存器配置在CR1和CR2之前
方式2 DDR寄存器配置在CR1和CR2之后
在不开启中断的情况下,方式1 和方式2 在运行时,都没有发现问题。但是在开启中断后,方式1就会出现问题,在配置完DDR和CR1之后,函数就进入死循环,通过查看汇编可以看到如下代码
一直在这里面出不来,通过度娘的帮助,进入这里的原因是因为我们在使用寄存器编程时,大部分的中断函数没有编写,触发了中断,但是中断不知道跳转到哪里运行。
通过查询资料手册发现
当我们在输出模式下,配置成10M输出的时候,如果配置成输入模式时,对应的就是使能外部中断。所以在配置还未完成的时候就跳转到上述的死循环中。
解决方法
方式1 : 配置输出模式的时候,不配置成10MHz,及CR2的寄存器的位,不置1即可
方式2:将DDR寄存器的配置放置到CR1和CR2的寄存器后面,这个也是我现在使用的方法
这是我在使用STM8L051F3出现问题,对于其他STM8系列的芯片是否会用这样的问题,没有试验过,并不清楚,如果大家有出现类似的问题,可以试试我这个方法是否可以解决的你问题。
本文为原创文章,如需转载请标明出处。如有疑问可以私信咨询