
问题描述:创建一个最基本的工程(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的原因,暂时还没搞清楚其中原理 望解答。 |
关于使用cubemx配置stm32g473re的opamp工作模式:Programmable gain amplifier mode with external filtering
++和--运算时数据在正数时计算是正确的,负数时有时候会溜掉计数。
在其他电脑上编译成功没有错误并且能够烧录,换了电脑之后编译出现一堆错误,并且不能烧录程序
stm32G4的SPI通信问题
关于三轴陀螺仪 I3G4250D
关于STM32G474 双BANK的测试问题
STM32G474CBT6上电瞬间用示波器测得io口产生较大电压(浪涌电压)
STM432G4单片机IAP程序+上位机
STM32G473 flash擦除时程序卡死
使用stm32F407连接PHY芯片进行以太网通讯,一插网线就会进入错误中断。
是否有在别的地方u16Debug 做操作呢? 如果在中断里有对该变量做操作,在定义它时不妨加上volatile.
是的。其他地方没有对u16Debug做操作,定义它时加上volatile也同样会有该问题。
目前问题已经规避,方法已经在上面更新了,但还不知道其中原理
如果没有其他地方更改这个变量,怎么会变化呢?可以尝试声明为static变量,规避其他地方改动,我确信这个值将不会改变,一直为10.
检查是不是有野指针的操作,导致写入到这个地址。