移植前准备

  1. HAL库工程(可用STM32CubeMX直接生成)
  2. 正点原子SYSTEM文件夹(任意一个例程里面复制出来就行,但记住一定要是HAL库例程)
  3. 平台为keil5
  4. STM32开发板(我这里用的是正点原子的探索者,MCU为F4系列)

工程创建

我们在用STM32CubeMX创建工程代码的时候有一点需要注意,在Cube中不要去使能USART1,因为在SYSTEM文件的usart.c中已经把USART1进行了初始化,这里再去使能一次不仅会失败而且重新引入usart.h和usart.c与SYSTEM文件中的文件名相同而冲突,最后报错。

正点原子android移植 正点原子官方_工程文件


其他一切正常,工程创建完毕后将 SYSTEM 文件夹粘贴至与Cube同一目录下,也就是这里。

正点原子android移植 正点原子官方_stm32_02

c文件以及头文件的引入

代码生成后我们打开keil5工程文件,正常情况下打开工程文件后项目栏只有三个文件夹,分别是 Application/User , Drivers/STM32F4xx_HAL_DriverDrivers/CMSIS 如下图

正点原子android移植 正点原子官方_stm32_03


接下来我们单击“魔法棒”右边的图标,也就是File extensions

正点原子android移植 正点原子官方_物联网_04


进入下一个界面将SYSTEM文件夹中的 .c 文件都包含进来

正点原子android移植 正点原子官方_工程文件_05


当然 .h的包含则是在 “魔法棒”C/C++ 选项卡中,这里注意选到最后一级文件夹即可,也就是含有 .h 文件的文件夹

正点原子android移植 正点原子官方_工程文件_06


至此,所有相关文件都引入完成。

使能串口

很多朋友在完成以上基本步骤后以为已经结束了,便迫不及待地去点编译,于是报了一大堆错

正点原子android移植 正点原子官方_单片机_07


这时候就觉得束手无策了,但其实是还缺少了两个步骤,因为我们当时在配置Cube的时候是没有使能usart的,所以自然是不会帮你使能有关HAL库函数的,同时也没有引入相关 .c文件,这就需要我们认为地去完成这两个步骤。

.c文件的包含

跟之前的 .c文件引入方法相同找到 Drivers/STM32F4xx_HAL_Driver/Src路径下把 stm32f4xx_hal_uart.cstm32f4xx_hal_usart.c包含进来即可

正点原子android移植 正点原子官方_正点原子android移植_08

使能有关功能

这就需要找到 stm32f4xx_hal_conf.h这个文件,进去可以看到有许多HAL库外设的使能,如果有在 STM32CubeMX中使能的外设这里会自动加上使能,如果没有这里就仍是注释状态。这边需要我们手动使能一下串口和定时器外设

正点原子android移植 正点原子官方_工程文件_09

结束

完成以上步骤之后,再进行一次编译,就能开心收获两个鸭蛋啦,本次移植也算圆满完成。