在我用串口调试pid参数时,程序下载之后发现一直卡在timer的初始化函数里面,我的一开始的初始化顺序如图。
也就是连最基本的OLED显示字符串都显示不了。一直不知道原因,后来在一次偶然的排查中发现让我把定时器中断的时间调长一点(差不多1s),程序就可以运行。但是我是用串口调试pid,中断时间间隔不能很长,当我把中断时长调为25ms时,程序又卡在timer初始化里。把我气坏了。这是我的中断服务函数。justfloat-test函数就是串口发送数据的函数。
刚开始觉得没啥问题后来用stlink进行debug时才发现问题。函数不是卡在timer-init里,而是卡在serial串口发送函数里。
一直卡在这个while循环里。就是说我在timer初始化函数里怎么会用到串口呢?后来想了想才发现是进中断后,触发了串口发送,而我的串口初始化在后面,时间太短(25ms)根本执行不完串口初始化,才导致标志位一直为零,卡在循环里面。
后来调了一下初始化顺序,函数就能很好的运行了。
虽然只是一个小问题,但是自己解决了,还尝试第一次发CSDN,也是蛮有成就感的。
本人也是刚接触stm32没多久,如有错误,欢迎大家批评指正。