STM32 region `FLASH‘ overflowed by xxx bytes 问题解决

STM32 Region `FLASH’ overflowed by xxx bytes 问题解决

1. 问题现象

用STM32CUBEIDE建立的STM32L031工程,在使能HAL_UART_Receive_IT(&huart2, (uint8_t *)&aRxBuffer, 1);时,也即使能串口2的接收中断时,build project时报错 Region FLASH overflowed by xxx bytes。
在这里插入图片描述在这里插入图片描述

2. 不正确的解决方式

网上有一种介绍的方式,将工程目录下的编译脚本文件进行修改,打开ld文件
在这里插入图片描述
修改FLASH (rx)值为更大的值, 如36K
在这里插入图片描述
修改之后,build成功可以下载进芯片,但是程序跑不起来。STM32L031只有32K Flash空间,人为增加软件识别的空间大小,并不能解决问题。

3. 正确的解决方式

因为采用非中断的轮询(polling)方式接收串口数据成功,基本判断是编译优化对uart中断方式接收产生的代码过大。所以可进行编译优化的调整。

在STM32CUBEIDE的Project–Properties里,找到Optimization选项
在这里插入图片描述
将debug和release的编译优化,都选择Optimize for size
在这里插入图片描述
在这里插入图片描述
或者所有类型都采用Optimize for size
在这里插入图片描述
Apply后退出。代码里敲个空格,保存后重新build project,编译链接成功。下载到芯片,串口中断接收运行正常。

ST升级了STM32CUBEIDE版本后,控制菜单变成了下面这样,推理使用即可:
在这里插入图片描述
-End-

猜你喜欢

转载自blog.csdn.net/hwytree/article/details/103125176