|
问题描述:创建一个最基本的工程(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的原因,暂时还没搞清楚其中原理 望解答。 |
如何将电机转速度控制在0.1RPM以下?我尝试过将SPEED_UNIT改为480,电机转速度可以控制在0.125RPM,但最转到250RPM时,编码器计数好像溢出了
STSPIN32G4内部驱动电压输出问题
使用Hal库的SPI读取磁边传感器导致STM32G4无法运行
int 与 float 之间的转换
定时器触发SPI
stm32G474RBT3的flash擦除寿命是多少?
stm32g474RE 输出4相波形,如何精准输出ADC触发的问题。
有关STM32H743ZGT6 驱动RTL8201F-VB芯片驱动的问题,有奖寻求帮助
STM32G491 flash擦除的问题,请教大神
STM32G4 FLASH擦除不了,寻求各位大佬、官方的帮助
微信公众号
手机版
是否有在别的地方u16Debug 做操作呢? 如果在中断里有对该变量做操作,在定义它时不妨加上volatile.
是的。其他地方没有对u16Debug做操作,定义它时加上volatile也同样会有该问题。
目前问题已经规避,方法已经在上面更新了,但还不知道其中原理
如果没有其他地方更改这个变量,怎么会变化呢?可以尝试声明为static变量,规避其他地方改动,我确信这个值将不会改变,一直为10.
检查是不是有野指针的操作,导致写入到这个地址。