23. 将STM32CubeIDE工程转为keil MDK工程¶
在本章节中将介绍如何将STM32CubeIDE工程转为keil MDK工程
必备软件:Java(V1.7及以上版本)和STM32CubeMX(推荐使用最新版本)
Java下载地址:www.java.com/zh_CN/
23.1. 安装Java软件¶
双击安装包“JavaSetup8u151.exe”,具体操作步骤如下:
Java安装步骤1
Java安装步骤2
Java验证成功
在本地新建好文件夹后,把准备好的库文件添加到相应的文件夹下:
23.2. 安装STM32CubeMX软件¶
双击安装包“SetupSTM32CubeMX-4.22.1.exe”,具体操作步骤如下:
STM32CubeMX启动安装
STM32CubeMX接受本许可协议的条款
STM32CubeMX指定安装路径
STM32CubeMX创建快捷方式
STM32CubeMX完成安装
此处的软件版本仅做为演示安装,具体的安装版本以最新版为主。
23.3. 使用STM32CubeMX创建MDK工程¶
这里以串口实验章节的工程代码为例,找到工程目录,打开STM32CubeMX工程文件。
双击打开工程之后,选择生成MDK工程,如下所示
生成代码成功之后有以下提示
点击生成代码之后可看到文件目录下多了MDK-ARM目录,进入之后,双击xxxx.uvprojx工程文件即可打开MDK工程。
打开工程之后将我们的创建的User目录添加到工程中,先添加User工程目录, 然后选择点击Add files添加我们的.c文件。
找到我们的User目录,添加以下两个文件。
完成后如图所示
再添加我们User头文件目录。如下图所示
如果我们的MDK工程不需要使用printf函数作为串口打印,那么我们已经将STM32CubeIDE工程转为MDK工程了。
23.4. MDK工程支持printf串口打印函数¶
由于STM32CUbeIde和MDK使用的编译器不一样,如果我们想要在MDK上实现串口的printf函数, 还需要对串口的重定向函数进行修改。修改之后的代码既能够在STM32CubeIDE上实现printf串口打印函数 也能够在MDK上实现printf串口打印函数。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | //在STM32CubeIDe中使用的编译器的宏
#ifdef __GNUC__
//重定义printf函数
int __io_putchar(int ch)
{
HAL_UART_Transmit(&UartHandle, (uint8_t*)&ch, 1, HAL_MAX_DELAY);
return ch;
}
#endif
//在keil MDK上使用的编译器的宏
#ifdef __CC_ARM
//重定义printf函数
int fputc(int ch, FILE *f)
{
/* 发送一个字节数据到串口 USARTx */
HAL_UART_Transmit(&UartHandle, (uint8_t*)&ch, 1, HAL_MAX_DELAY);
return (ch);
}
#endif
|
同时还得在MDK工程勾选上“Use MicroLIB”。MicoroLIB是缺省C库的备选库,它对标准C库进行了高度优化使代码更少,占用更少资源。
23.5. MDK针对STM32MP157的仿真下载设置¶
此处我们使用STlink进行仿真调试,进入debug设置界面
选择最右边的pack,将enable的钩去掉
返回到设置界面,选择Utilities,将图中框起来部分的钩去掉
再进入debug界面,根据下图操作
关于使用MDK的对于STM32MP157的仿真设置可参考《Using STM32MP1 Cortex-M with Keil MDK.pdf》文档。
23.6. 下载验证¶
在MDK下的仿真运行
在STM32CubeIDE下的仿真运行
警告
当我们使用STM32CubeMX生成MDK工程之后,如果想要再次使用STM32CubeIDE对外设进行配置并重新生成代码, 需要先在STM32CubeMX中将生成工程的类型修改回STM32CubeIDE,否则整个工程将会发生错乱。