STM32F103C8T6在DEBUG卡死在 B.

tech2022-12-26  71

今天在前几天的功能上加上了串口通信的功能,在搬好野火的砖后,很自信的打开了DEBUG,然而…翻车了,程序还没有跑到主程序,在初始化就死掉了 于是乎看了下代码发现停在了B.这里 打开度娘,又涨了新知识(B 是跳转的意思,“.”是指当前地址),原来程序死在这里,B.前面的xxxx_TRQHandler,直觉告诉我,是我的中断出现问题了,然后去找串口初始化的问题 在串口初始化的里开启了接收中断,但是忘记了写中断服务函数,导致程序跳到了B,这里 在加上接收服务中断函数后,终于能够跑进主函数了 函数正常运行,问题解决! 但是没有写中断服务函数为什么会跳转到B.呢?这个问题激起了我的好奇心,于是往上找找答案

在这里插入代码片 Default_Handler PROC .... EXPORT USART1_IRQHandler [WEAK] EXPORT USART2_IRQHandler [WEAK] EXPORT USART3_IRQHandler [WEAK] .... USART1_IRQHandler USART2_IRQHandler USART3_IRQHandler .... B . ENDP ALIGN

通过度娘的帮助,我大概明白了没写中断服务函数在B.死循环的原因了 EXPORT我把它理解为一个中断,【WEAK】是弱定义,就是在用户没有定义窗口中断服务函数的时候,接收中断的时候就会默认这是中断服务函数,然后就跳到了B.这里进行无限循环。

因为使用串口只是用来发送数据,所以就没考虑要写接收中断服务函数…

出现这个问题还是因为砖版得不够细心

问题得以解决,继续肝… …

最新回复(0)