23. 将STM32CubeIDE工程转为keil MDK工程

在本章节中将介绍如何将STM32CubeIDE工程转为keil MDK工程

必备软件:Java(V1.7及以上版本)和STM32CubeMX(推荐使用最新版本)

Java下载地址:www.java.com/zh_CN/

STM32CubeMX下载地址:http://www.st.com/content/st_com/en/products/development-tools/software-development-tools/stm32-software-development-tools/stm32-configurators-and-code-generators/stm32cubemx.html

23.1. 安装Java软件

双击安装包“JavaSetup8u151.exe”,具体操作步骤如下:

Java安装步骤1

Java安装步骤1

Java安装步骤2

Java安装步骤2

Java验证成功

Java验证成功

在本地新建好文件夹后,把准备好的库文件添加到相应的文件夹下:

23.2. 安装STM32CubeMX软件

双击安装包“SetupSTM32CubeMX-4.22.1.exe”,具体操作步骤如下:

STM32CubeMX启动安装

STM32CubeMX启动安装

STM32CubeMX接受本许可协议的条款

STM32CubeMX接受本许可协议的条款

STM32CubeMX指定安装路径

STM32CubeMX指定安装路径

STM32CubeMX创建快捷方式

STM32CubeMX创建快捷方式

STM32CubeMX完成安装

STM32CubeMX完成安装

此处的软件版本仅做为演示安装,具体的安装版本以最新版为主。

23.3. 使用STM32CubeMX创建MDK工程

这里以串口实验章节的工程代码为例,找到工程目录,打开STM32CubeMX工程文件。

STM32CubeMX_10

双击打开工程之后,选择生成MDK工程,如下所示

STM32CubeMX_11

生成代码成功之后有以下提示

STM32CubeMX_12

点击生成代码之后可看到文件目录下多了MDK-ARM目录,进入之后,双击xxxx.uvprojx工程文件即可打开MDK工程。

STM32CubeMX_13 STM32CubeMX_14

打开工程之后将我们的创建的User目录添加到工程中,先添加User工程目录, 然后选择点击Add files添加我们的.c文件。

STM32CubeMX_15

找到我们的User目录,添加以下两个文件。

STM32CubeMX_16 STM32CubeMX_17

完成后如图所示

STM32CubeMX_18

再添加我们User头文件目录。如下图所示

STM32CubeMX_19 STM32CubeMX_20 STM32CubeMX_21 STM32CubeMX_22

如果我们的MDK工程不需要使用printf函数作为串口打印,那么我们已经将STM32CubeIDE工程转为MDK工程了。

23.4. MDK工程支持printf串口打印函数

由于STM32CUbeIde和MDK使用的编译器不一样,如果我们想要在MDK上实现串口的printf函数, 还需要对串口的重定向函数进行修改。修改之后的代码既能够在STM32CubeIDE上实现printf串口打印函数 也能够在MDK上实现printf串口打印函数。

修改串口重定向函数(bsp_debug_usart.c文件)
 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库进行了高度优化使代码更少,占用更少资源。

STM32CubeMX_23

23.5. MDK针对STM32MP157的仿真下载设置

此处我们使用STlink进行仿真调试,进入debug设置界面

STM32CubeMX_24

选择最右边的pack,将enable的钩去掉

STM32CubeMX_25

返回到设置界面,选择Utilities,将图中框起来部分的钩去掉

STM32CubeMX_26

再进入debug界面,根据下图操作

STM32CubeMX_27

关于使用MDK的对于STM32MP157的仿真设置可参考《Using STM32MP1 Cortex-M with Keil MDK.pdf》文档。

23.6. 下载验证

在MDK下的仿真运行

STM32CubeMX_28

在STM32CubeIDE下的仿真运行

STM32CubeMX_29

警告

当我们使用STM32CubeMX生成MDK工程之后,如果想要再次使用STM32CubeIDE对外设进行配置并重新生成代码, 需要先在STM32CubeMX中将生成工程的类型修改回STM32CubeIDE,否则整个工程将会发生错乱。