诡异死机现象
在使用N32G43x做步进电机驱动,程序不变,使用调试器下载复位运行(不掉电),所有功能有正常。如果是重新上电运行,则只要调用flash模拟eeprom存储参数功能函数,MCU就会死机,即便是刚烧录完,啥也没操作,只要是断电重新上电,程序运行就变得诡异。把flash存储内部函数调用注释,则会出现DAC输出异常,变得莫名其妙。有网友遇到过类似的问题吗? PS: 在N32G430片子也遇到一个诡异现象,板子调试引脚swd没有引脚复用,软件也没有配置复用,但烧录程序后就不能再使用调试器二次烧录,最后定位到是跟显示初始化函数有关,只要把该函数里的两个子函数放到平级调用(如下2、3行代码,放到app_Display_Init()就不行),就恢复可以正常烧录了,真的十万个为什么?app_Display_Init(gPar_holdreg_s.workmode);
AutoMC_DisplayAbs_Handles.AutoMC_DisAbs_DevInit(); //显示设备初始化
AutoMC_DisplayAbs_Handles.AutoMC_DisAbs_Clean(); //清屏
可能是第二条起作用,以前遇到过一次,是配置错误导致的。检查了好几遍才发现。因为用的是库函数,可能底层的冲突表面看不出来。 这是把SWD给搞死了呗。
楼主,不行就单步进入函数看看哪条语句执行后,jtag就挂掉了,再分析吧。 只要调用flash模拟eeprom存储参数功能函数,MCU就会死机,估计eeprom地址不太对,导致破坏了程序空间,仔细看看配置吧。DAC输出异常,可能是调用了flash模拟eeprom存储的数据。 alienmiller 发表于 2023-8-17 11:46
只要调用flash模拟eeprom存储参数功能函数,MCU就会死机,估计eeprom地址不太对,导致破坏了程序空间,仔细 ...
问题是使用调试器下载程烧录并复位运行,是可以正常运行的,如果是地址不对,那不管哪种启动方式都会出错呀。而且这个部分代码是我们的商业代码,在多个项目使用中。 gaoyang9992006 发表于 2023-8-17 08:37
可能是第二条起作用,以前遇到过一次,是配置错误导致的。检查了好几遍才发现。因为用的是库函数,可能底层 ...
第二行是初始化oled控制IO,引脚与swd无关,假如是配置错误,那么不管放在哪个层次调用都会出问题吧。 曾经碰到这种问题的原因是有变量没有初始化就用了,仿真下载时这个没有初始化的变量还是上次正确运行的值,重新上电后值不定导致运行不正常 是不是考虑监测一下电源电压有没有突然下降的现象呢 flash操作的时序是满足要求的吗 楼主调用这个函数的时候指定地址操作了吗 请问什么叫平级调用啊?这个还怎么分呢 这个得对一下芯片的存储空间的分配吧
楼主抛弃库函数自己写配置试试看
配置错误 换一块单片机试试看,已经遇到过很多次了。不是每一片都可以按标准频率跑起来 这个更多只有从外设配置上检查 程序崩了吧 从现象来看应该配置冲突了 我感觉编程这么多年,还没怎么遇到MCU死机的情况,程序标准化后基本就遇不到了,这种情况应该是和你的程序关系极大
页:
[1]
2