STM32--今天下午遇到了两个BUG。记录一下(栈溢出和串口调试)
2017-04-27 12:37
411 查看
1、栈溢出
调试时发现有个调节PWM占空比的参数会莫名其妙的乱跳。观察代码,求这个系数的函数只在系统初始化的时候求过一次,之后就再也没有调用过。
单步执行代码,发现初始化时第一次运行时求出的系数是对的,但是全速运行后,这里面的系数就变了。
既然我没有调用函数来修改这个值,那肯定是被别的区域的值覆盖了。
打开map文件,看一下Trans_1_BaseStructre这个结构体周围都有哪些数据
ModbusSend这数组是用来发送串口数据的,空运行的时候里面全是0,那只可能是__initial_sp影响了。而__initial_sp是栈底地址,所以应该是栈溢出了。
想起来之前因为某种原因把栈空间改成512字节,所以才导致溢出。把栈大小改为1024字节后就都正常了。
2、串口不正常。用上位机软件发送一串数字,单片机收到的全是乱码,都不知道是啥。
首先检查了一下串口初始化的各个参数,并和以前正常的代码对比了一下,发现参数都正确。
一番对比后,发现是串口的波特率不对
我明明想初始化成4800bps,但是出来的是6635这个鬼东西。
心想莫非是系统时钟出问题了?可是仿真界面的时钟也是对的:
在定时器里面写了个IO口翻转的测试代码,发现IO口翻转的频率和设想的一致,所以系统的时钟应该没问题。
单步跟踪USART_Init(USART1, &USART_InitStructure)串口初始化函数,发现里面的RCC_GetClocksFreq(&RCC_ClocksStatus)这个函数得出的系统时钟竟然是24M。。
再单步运行进去,最终发现是HSE_VALUE这个宏定义没有修改
把这个宏定义修改成正确值后就都正常了。
这个宏定义也可以在keil的魔术棒里预定义,这样就不用改头文件了。截图如下:
调试时发现有个调节PWM占空比的参数会莫名其妙的乱跳。观察代码,求这个系数的函数只在系统初始化的时候求过一次,之后就再也没有调用过。
单步执行代码,发现初始化时第一次运行时求出的系数是对的,但是全速运行后,这里面的系数就变了。
既然我没有调用函数来修改这个值,那肯定是被别的区域的值覆盖了。
打开map文件,看一下Trans_1_BaseStructre这个结构体周围都有哪些数据
ModbusSend这数组是用来发送串口数据的,空运行的时候里面全是0,那只可能是__initial_sp影响了。而__initial_sp是栈底地址,所以应该是栈溢出了。
想起来之前因为某种原因把栈空间改成512字节,所以才导致溢出。把栈大小改为1024字节后就都正常了。
2、串口不正常。用上位机软件发送一串数字,单片机收到的全是乱码,都不知道是啥。
首先检查了一下串口初始化的各个参数,并和以前正常的代码对比了一下,发现参数都正确。
一番对比后,发现是串口的波特率不对
我明明想初始化成4800bps,但是出来的是6635这个鬼东西。
心想莫非是系统时钟出问题了?可是仿真界面的时钟也是对的:
在定时器里面写了个IO口翻转的测试代码,发现IO口翻转的频率和设想的一致,所以系统的时钟应该没问题。
单步跟踪USART_Init(USART1, &USART_InitStructure)串口初始化函数,发现里面的RCC_GetClocksFreq(&RCC_ClocksStatus)这个函数得出的系统时钟竟然是24M。。
再单步运行进去,最终发现是HSE_VALUE这个宏定义没有修改
把这个宏定义修改成正确值后就都正常了。
这个宏定义也可以在keil的魔术棒里预定义,这样就不用改头文件了。截图如下:
相关文章推荐
- 最近调试STM32利用串口2调试MEO-6Q GPS模块遇到的问题和解决办法
- 记录一下学Android遇到的坑 编译apk 手机出现两个应用,卸载的时候两个都卸载了。
- 今天下午调试了一下IE6.0的bug
- 整合两个工程遇到的小问题~记录一下
- 安卓使用到ActionBar的时候遇到的两个bug,做一下总结
- 记录一下开发过程中遇到的一些让人纠结的bug
- 今天在此记录一下自身遇到的一些bug
- 遇到数个bug,记录一下
- 记录安卓遇到的两个小bug,望初学者写代码的时候引以为戒
- STM32调试过程中遇到BIN文件生成问题记录
- 记录一下今天遇到的两只bug
- 作DNN CrossArticle模块BUG修改时,遇到2个小问题,在此记录一下。
- 【不算奇葩的问题】MDK调试stm32遇到BEAB BKPT 0xAB,重定向printf的BUG
- ST LINK V2接线图用于STM32调试 记录一下
- 作DNN CrossArticle模块BUG修改时,遇到2个小问题,在此记录一下。
- 遇到数个bug,记录一下
- 调试VB操作USB串口多次失败后,重启一下机器
- 记录一下工作中遇到的问题!!!
- PROTEUS串口仿真遇到的BUG
- 今天遇到了一个错误,记录一下,以后在发生这样的问题,有个查找。