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
STM32 region `FLASH' overflowed by xxx bytes 问题解决_第1张图片
修改之后,build成功可以下载进芯片,但是程序跑不起来。STM32L031只有32K Flash空间,人为增加软件识别的空间大小,并不能解决问题。

3. 正确的解决方式

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

在STM32CUBEIDE的Project–Properties里,找到Optimization选项
STM32 region `FLASH' overflowed by xxx bytes 问题解决_第2张图片
将debug和release的编译优化,都选择Optimize for size
STM32 region `FLASH' overflowed by xxx bytes 问题解决_第3张图片
STM32 region `FLASH' overflowed by xxx bytes 问题解决_第4张图片
或者所有类型都采用Optimize for size
STM32 region `FLASH' overflowed by xxx bytes 问题解决_第5张图片
Apply后退出。代码里敲个空格,保存后重新build project,编译链接成功。下载到芯片,串口中断接收运行正常。

-End-

你可能感兴趣的:(STM32,STM32,FLASH,overflowed,STM32CUBE,FLASH,overflowed,STM32,编译优化选择)