问题描述:创建一个最基本的工程(STM32G474),只配置时钟和GPIO(作为debug pin),代码如下: #include "main.h" #include "gpio.h" uint16_t u16Debug = 10; int main(void) { HAL_Init(); SystemClock_Config(); MX_GPIO_Init(); while (1) { if (u16Debug == 59390) { HAL_GPIO_TogglePin(GPIOC, GPIO_PIN_2); } } } 程序将u16Debug初始化为10,但通过debug pin会发现,程序运行一会后(4ms--5ms),u16Debug被改写为59390,不知是何原因? 目前我的几个发现是 1.只有第一个变量会被改写,例如在u16Debug之后再定义一个变量u16Debug2,u16Debug2是不会被改写的; 2.代码下载到MCU flash后,如果MCU自动运行,必然复现该问题。但如果MCU不会自动运行,需要通过按开发板上的reset按钮重新复位并启动MCU或者通过keil的debug功能启动MCU,则不会出现该问题。 更新:因为我发现出现该问题的工程都是“MCU会自动运行”,因此考虑是魔法棒里ST-Link Debugger的设置问题。最终定位到ST-Link Debugger的Flash Download选项卡中要勾选Reset and Run,那么MCU就会自动运行了,且可以复现上述问题。同时,如果在Pack选项卡中取消勾选Enable,那么上述问题就没有了。所以应该是Pack的原因,暂时还没搞清楚其中原理 望解答。 |
电能变换
求助:PMSM电机编码器线数(分辨率)为80000线,超过MCSDK5.4.8软件所能设置的最大线数65535,请问如何解决
STM32 SPI从机用DMA方式实现全双工,数据传输过程中出错。
数字电源-G474(三项维也纳):MCU两处外部时钟源设置为 经过运放检测三项电流信号的A B C相的疑问。
STM32N6570-DK预装的Demo在哪里下载?
使用STM32F103控制两步进电机同时进行不同的运动(软件指令驱动),与控制一个电机的不同之处在于哪里?
求一个STM8S207例程
stm32g474 板卡偶发flash的某块代码区被擦除
L99H92 的驱动问题?
L9663驱动开发
是否有在别的地方u16Debug 做操作呢? 如果在中断里有对该变量做操作,在定义它时不妨加上volatile.
是的。其他地方没有对u16Debug做操作,定义它时加上volatile也同样会有该问题。
目前问题已经规避,方法已经在上面更新了,但还不知道其中原理
如果没有其他地方更改这个变量,怎么会变化呢?可以尝试声明为static变量,规避其他地方改动,我确信这个值将不会改变,一直为10.
检查是不是有野指针的操作,导致写入到这个地址。