STM32CubeMX是一个很好的工具,不过每次修改一点点东西后,再生成的工程都要全部重新编译,用的外设多了,文件数量也多了很多,编译速度奇慢无比,实在是烦= =。
刚开始也没找到啥好办法,网上大多数人都只是说在CubeMX里的不要设置成复制所有库文件,但是就算是这样做了,文件多一点,编译时间就要两分钟以上了。
然后看到有人说是编译器的问题,新的编译器Compiler V6速度会快很多,那就开始吧。
KEIL版本升级
旧版本的KEIL是没有的,具体可以看一下Option for Target -> Target -> ARM Compiler
于是我去下载安装了最新版本MDK-ARM Version 5.26
为了解决每次打开工程都会有的新版本DFP未安装提示(一直使用的是初学STM32的时候安装的旧版本),顺便下载安装了Keil.STM32F4xx_DFP.2.13.0.pack
STM32CubeMX版本升级
此处使用的是STM32CubeMX 5.1.0 ,STM32Cube_FW_F4_V1.24.0
旧版本的固件包好像会有问题,要用新版本的固件包又要用新版本的STM32CubeMX,对比了一下发现USB部分库文件改动比较大。
所以我只能重新配置STM32CubeMX,重新生成工程。
对比
看网上别人的操作,还要在C/C++那一页选择Language C,最好选择gun,据说是因为编译器支持的比较好。但是我选择其他的也没什么影响。
以下是选择旧版本Compiler V5时用的时间,2分钟多。。。真不知道之前我是怎么忍受得了的。
我的电脑CPU是i5-4200M,以前初学的时候,用的是标准库,再怎么样也不会让我等这么长时间。
选择新版本CompilerV6,CPU占用率飙到100%,刷刷的就编译完了。
后续
新出现的2个警告:
../Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_ll_usb.c(940): warning: '__packed__' attribute ignored when parsing type [-Wignored-attributes]
USBx_DFIFO((uint32_t)ch_ep_num) = *((__packed uint32_t *)pSrc);
^~~~~~~~
../Drivers/STM32F4xx_HAL_Driver/Inc/stm32f4xx_hal_def.h(115): note: expanded from macro '__packed'
#define __packed __attribute__((__packed__))
^~~~~~~~~~
还没搞懂是什么意思。
发现printf的不能用了,pritnf会直接卡死。
实验了一下其他方法,要这样才行:
在main.c或usart.c里重定义一下
/* USER CODE BEGIN 1 */
//重映射fputc函数,此函数为多个输出函数的基础函数
int fputc(int ch, FILE *f)
{
HAL_UART_Transmit(&huart1,(uint8_t*)&ch,1,HAL_MAX_DELAY);
return ch;
}
/* USER CODE END 1 */