声明:
- 上述为依据自身工作环境、项目需求而提供的解决方案之一,可能存在其他更好的方案;该方案可能存在或出现其他未知问题,因而不保证适用所有情况或例外,仅供参考;不足或错误之处欢迎交流指正,谢谢!
- 该文档参考了部分官方文档及网络链接,文中已注明;本文为原创,如需转载请注明本文出处,谢谢!
由于Keil版权问题及工作需要,STM32开发环境需要由Keil转换到TrueSTUDIO。由于是第一次接触TrueSTUDIO,刚开始使用时遇到了一些基础问题,且发现trueStudio的相关笔记或总结相对Keil而言较少,因此特写此篇总结,备忘;若能帮助到新手,更好。
一、软件环境
- Atollic TrueSTUDIO:version 9.3.0
- STM32CubeMX:version 4.26.0
- STM32CubeProgrammer: version 1.0
二、说明
- 硬件环境跟本教程低耦合,不再赘述。
- 该教程假设读者已经使用过STM32CubeMX及STM32CubeProgrammer,具备STM32相关基础开发经验。
- 确保已分别安装好TrueSTUDIO、STM32CubeMX、STM32CubeProgrammer。
- TrueSTUDIO官方使用手册中,讲解了一种将STM32CubeMX、STM32CubeProgrammer作为插件的形式整合到TrueSTUDIO中生成及烧录程序的方法,但略感配置繁琐且实际开发暂未用到,因而此处不在赘述,想了解具体内容可参见官方手册。本文介绍了一种不需额外进行繁琐配置的方法。
- Keil工程转换为TrueSTUDIO问题。经测试,TrueSTUDIO虽然可以直接导入Keil工程,但导入后的工程需要经过一些配置才能完成编译,相关方法请参考官方文档。本文介绍了通过STM32CubeMX的.ioc文件直接生成TrueSTUDIO工程的方式,以及工程配置、编译过程中的方式方法和部分注意事项,不涵盖其他暂未涉及配置事项。
三、简明步骤
该步骤中主要包括两方面内容:
- 生成TrueStudio工程代码
- 配置TrueStudio工程编译环境
简要步骤如下所述:
1. 使用STM32CubeMX打开或新建所需.ioc文件。
2. 在Project --> Settings面板中根据需要进行配置,如下图。Toolchain/IDE选择TrueSTUDIO即可,其他配置选项不在赘述。
3.生成工程代码。点击Project --> Generate Code,生成TrueStudio工程代码。此时工程中都是STM32CubeMx根据图形化界面配置自动生成的代码,目录结构同STM32CubeMx自动生成的Keil工程大同小异,此处不再赘述。
4. 已有Keil工程的自编API文件移植(复制粘贴)到trueStudio工程。另外,需要将Keil工程中的与本人实际项目开发需求相关的部分.h及.c文件拷贝添加到TrueStudio工程中,主要包括以下几类:
- 通信协议相关驱动文件:如spi_flash.c等,直接拷贝复制过来即可
- FatFs驱动文件:只需修改或替换user_diskio.c文件即可
- DSP库文件:只需添加libarm_cortexM4lf_math.a文件即可(keil使用的是.lib格式文件)
- 其他:算法文件等
5. 配置库文件。由于使用了DSP库,因此需要对DSP库进行配置。在工程的properties --> c/c++ General --> Paths and Symbols面板中进行Includes、Symbols等配置(注:功能上类似于Keil软件中的‘c/c++’面板中的配置),如下图2所示。其中,涉及修改的主要有以下几项:
- 【Symbols】:配置全局宏定义。
- 【Libraries &Library Path】:配置库文件路径及文件名。这里需要特别注意的是:
1) Library Path面板中配置库文件的文件路径,而Libraries中指定所需库文件名。建议先指定库文件的Path,然后再根据下述规则指定库文件名。
2) Libraries面板中指定库文件名有两种方式:一是直接指定名称即可,二是根据根据文件路径直接选取文件。无论哪种方式,都必须注意库文件名的格式:即要去掉路径、去掉lib前缀、去掉.a后缀,否则编译时出错。具体的,如我们需要使用GNU编译器对应的DSP库文件libarm_cortexM4lf_math.a(该文件建议预先添加到磁盘工程目录中),需要将其文件名修改为arm_cortexM4lf_math,如图3所示。
6. 配置编译文件格式(可选)。默认会生成hex文件,保存在工程目录下的DEBUG文件夹中。如需生成Bin文件,在项目属性的Build Step面板中(见下图4)按需进行如下配置即可。
- 若编译后生成hex,添加(IDE默认):
arm-atollic-eabi-objcopy.exe -O ihex “${BuildArtifactFileBaseName}.elf” “${BuildArtifactFileBaseName}.hex” |
- 若编译后生成bin,则添加:
arm-atollic-eabi-objcopy.exe -O binary “${BuildArtifactFileBaseName}.elf” “${BuildArtifactFileBaseName}.bin” |
三、其他
主要包括配置实现串口打印log功能、堆栈内存配置文件说明。
1. 配置实现串口打印log功能。
首先,将下表中的代码复制粘贴到工程中即可;
#ifdef __GNUC__ #define PUTCHAR_PROTOTYPE int __io_putchar(int ch) PUTCHAR_PROTOTYPE { HAL_UART_Transmit(&huart3, (uint8_t*)&ch, 1, HAL_MAX_DELAY); return ch; } #endif
int _write(int file, char *ptr, int len) { int DataIdx; for (DataIdx = 0; DataIdx < len;DataIdx++) { __io_putchar(*ptr++); } return len; } |
其次,为使printf中支持浮点型数据,需在Tool Settings配置中添加命令:-u_printf_float,见下图4:
2. 配置堆栈内存分配、程序运行起始地址。
根据需要可在工程根目录下的STM32F427VI_FLASH.ld文件中直接修改。
四、参考资料
1. 官方文档
- 略,不再列出
2. 网络链接
- printf功能配置:https://blog.****.net/niu_88/article/details/86684065
- DSP库配置:https://blog.****.net/weixin_41070133/article/details/86002523
- 编译命令配置:https://blog.****.net/niu_88/article/details/86684318
- 插件集成相关:https://blog.****.net/chang_jiang123/article/details/84841976