历史上的今天
今天是:2025年01月11日(星期六)
2020年01月11日 | STM32--今天下午遇到了两个BUG
2020-01-11 来源:eefocus
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的魔术棒里预定义,这样就不用改头文件了。截图如下:
史海拾趣
|
大多数嵌入式产品的显示终端都选择LCD,但在某些需要大屏幕显示的应用中,工业级LCD的价格比较昂贵,且现有的大屏幕显示器(包括CRT显示器和LCD显示器)一般都采用统一的15针VGA显示接口.三星公司ARM9芯片S3C2410以其强大的功能和高性价比在目前嵌入式产 ...… 查看全部问答> |
|
从一开始接触单片机就萌发了这个想法,刚开始想做一个太阳能热水器的温度水位的无线采集装置的,动机很简单,原来的控制器只有一个,我们家农村的房子有5个卫生间和一个厨房都需要知道现在热水器的温度和水位是多少了,所以在实际应用中添加了这些 ...… 查看全部问答> |
|
请问,各位大牛,我现在买了TI的simpliciTI协议下的开发套件,但是现在想换成zigbee协议进行开发,因此想自己画两个Smart RF05 BB的板子,但是在TI的官网上并没有找到其外围电路图,请问哪位有资源分享下一啊,不甚感激!!!… 查看全部问答> |
|
贡献小弟自己写的软件,用NTC设计温度传感器的时候,很好的工具。1、参数设置 NTC的相关参数:R25,B必须依照实际进行设置。 分压电阻与NTC串联分压,有上拉分压和下拉分压接法。按照实际设置分 ...… 查看全部问答> |
|
实现功能 将音频频谱显示在BBB 的液晶屏上 硬件设计电路 音频采集电路,以及一些信号放大电路 软件设计 使用BBB的AD 将信号前端处理后的信号进行AD 转换,然后使用fftw进行傅里叶变换,根据需要决定是否使用neon指令集和posix线程库 预 ...… 查看全部问答> |
|
这是在国赛前做的,为准备国赛练练手,没做全题 动力用的是57步进;步进电机驱动器是 TB-6560;1000线编码器;F103主控。 使用编码器需要注意的问题:虽然使用编码器能够得到准确的角度信息,基本用不上滤波,可以直接使用,但是对角速度信 ...… 查看全部问答> |




