STM32CubeMX生成的MDK项目无法调试运行的解决办法

开发环境描述

MCU:STM32G474RBT3

晶振频率:8M

STM32CubeMX :6.14.0

固件库:STM32Cube FW_G4 V1.6.1

Keil : V5.38.0

问题描述

最近使用STM32CubeMX开发STM32G474RB,配置了一个LED的程序测试,配置好cubemx后生成的MDK,编译烧录到stm32后无法成功点亮LED,进入debug后,发现程序直接就处于运行状态了,并卡在汇编的这一行:0x44820C00 0000      MOVS          r0,r0

无法进行任何调试,0x44820C00地址也是一个异常的地址。

一开始以为是没勾选MicroLIB,勾选后发现能调试了,但是卡在

uint32_t HAL_SYSTICK_Config(uint32_t TicksNumb)
{
   return SysTick_Config(TicksNumb);
}

systick初始化之后出了问题,随后发现,SystemCoreClock系统时钟等数值都不对

网上找了很多教程都无法解决,最后通过设置MDK解决,在此记录下来,与大家分享解决方法。

解决方法

STM32CubeMX中仅配置了2个LED,RCC,SWD,此处仅放图,没什么特别的操作。

随后生成项目并打开keil,点击魔术棒,在Linker选项卡中,选中Use Memory Layout from Target Dialog,这一步很重要!之前种种异常都是因为这个默认没选中导致的,下面的那个sct文件是cubemx生成的,但是有问题,所以要选这个,使用Target选项卡中设置的Flash和RAM地址。

随后在Debug选项卡,选好调试器后,点开Settings,我用的STlink

如图设置

确定退出后,在while(1)中插入点灯代码

		HAL_Delay(500);
		HAL_GPIO_TogglePin(LED1_GPIO_Port, LED1_Pin);
		HAL_GPIO_TogglePin(LED2_GPIO_Port, LED2_Pin);

烧录后即可看到LED闪烁了。

调试也没有问题了。

总结

解决问题的关键是

1、在Linker选项卡中,选中Use Memory Layout from Target Dialog

2、在Debug ——》Setting 中,Pack选项卡,取消选中Enable

原因嘛,应该是Cubemx生成的“stm32g474xx_flash.sct”文件有问题,有兴趣的可以自行对Use Memory Layout from Target Dialog中后生成的sct文件,Cubemx的bugs,习惯了就好了。。。

如图,经过对比可发现,Cubemx生成的.sct文件,少了方框中的两行,加上了也好了,也可以改这个文件,不然每次在Cubemx改动后重新生成项目,Cubemx都会把Use Memory Layout from Target Dialog去掉,还要再操作一遍挺麻烦的,改这个文件加两行代码也行。

   *.o (RESET, +First)
   *(InRoot$$Sections)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值