
问题描述:创建一个最基本的工程(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的原因,暂时还没搞清楚其中原理 望解答。 |
STM32G491RE上电出现DFU模式
STM32L431内部温度AD值不随温度变化
STM32G431的3.3V引脚对地电阻变小
STM32L031G6U6芯片,使用Flash模拟EEPROM功能,同数据写入不同地址,读取对比不一样,这是为什么?
STM32G473RC timer8的CCDS bit, Capture/Compare DMA selection.
请教专家,STM8L052的GPIO口做输入检测,为什么不能反应管脚实际电压变化?
各位大佬们多提提宝贵建议定位根本原因,跪谢。STM32L452 在未知情况下打开了读保护RDP?MCU无法运行,只有解除读保护后重新烧录固件
STM32G431 数据手册上有个图有点不理解
STM32G473RC多个定时器同步的问题
STM32CubeG4 HAL库 V1.6.1 版本中的 stm32g4xx_hal.h 文件宏定义BUG
是否有在别的地方u16Debug 做操作呢? 如果在中断里有对该变量做操作,在定义它时不妨加上volatile.
是的。其他地方没有对u16Debug做操作,定义它时加上volatile也同样会有该问题。
目前问题已经规避,方法已经在上面更新了,但还不知道其中原理
如果没有其他地方更改这个变量,怎么会变化呢?可以尝试声明为static变量,规避其他地方改动,我确信这个值将不会改变,一直为10.
检查是不是有野指针的操作,导致写入到这个地址。