前言
本文主要的参考资料为正点原子的 <STM32F429开发指南——HAL库版本>。
更新顺序:
- 20201026——添加下载线连接。
- 20210203——更新新版本的内核头文件。
新建文件夹
- 新建一个名称Template的文件夹。
- 在Template文件下,新建CORE,HALLB,OBJ,USER四个文件夹。当然,以上5个文件夹是正点原子推荐的分类方法,可以根据个人的实际需要修改。如下图所示:
新建工程
-
新建项目:打开keil->Project->New uVision Project.
-
将目录定位到刚刚新建的USER 中。文件名填写Template。点击保存。
-
选择芯片型号。本人使用的STM32F429IGT6,此处选择。点击确定 。
-
出现下方这个选项,直接点击取消即可。
5.此时,USER 文件夹中的如下图所示,可以将Listings和Objects文件夹删除。
删除后如下图所示:
官方硬件支持包
-
下载STM32CubeF4固件包。可以直接百度下载最新版。目前官网地址为:https://www.st.com/en/embedded-software/stm32cubef4.html#get-software。
解压后
-
首先,定位到 \Drivers\STM32F4xx_HAL_Driver 文件夹下。 如下图所示,其中Inc文件中放置的是头文件,Src文件夹中放置的c文件。chm文件为HAL库的说明文档,可以深入研究。
-
我们将Inc文件夹和Src文件夹复制到工程中建立的HALLIB文件夹下。如下图所示。
-
定位到 \Drivers\CMSIS\Device\ST\STM32F4xx\Source\Templates\arm 。将其中的startup_stm32f410rx.s 复制到 CORE 文件夹下。如下图所示。
-
定位到 \Drivers\CMSIS\Include 文件夹。将其中的 cmsis_armcc.h,core_cm4.h,core_cmFunc.h,core_cmInstr.h,core_cmSimd.h 五个头文件复制到 CORE文件夹。如下图所示:
-
定位到 \Drivers\CMSIS\Device\ST\STM32F4xx\Include 文件夹。将其中的 stm32f4xx.h,stm32f429xx.h,system_stm32f4xx.h 文件复制到USER文件夹中。
-
定位到 \Projects\STM32F429I-Discovery\Templates 文件夹。如下图所示:
-
打开 第7步 中的 Inc文件夹 ,将其中所有头文件 复制到 USER文件夹 中,如下图所示。
-
打开 第7步 中的 Src 文件夹,且将其中所有的c文件复制到 USER 文件夹中。如下图所示。
10 将 正点原子 提供的 SYSTEM文件夹 复制进工程中。随便进入正点原子的历程中,即可找到该文件夹,复制完毕如下图所示。
配置Keil
- 右击 工程Target 1,点击 Manage Project Items…,如下图所示:
2. 将 Project Targets: 名称修改为Template,且在Groups中 新建 USER,SYSTEM,CORE,HALLIB四个组。如下图所示:
- 向HALLIB组中添加文件。选中HALLIB,点击Add Files… 。将**\HALLIB\Src**中所有文件添加到该组中。如下图所示。
这里可以只选择用到的外设对应文件。但是,也可以偷懒将所有文件添加进来。所有文件都添加的坏处是:编译时间增加。 这里面有三个文件是在STM32F429中是用不到的,可以删除。分别为:
- stm32f4xx_hal_dsi.c
- stm32f4xx_hal_lptim.c
- stm32f4xx_hal_msp_template.c
注意:
除了以上3个文件需要删除,还有几个文件必须删除。此处在正点原子文档上没有说明,为:
- stm32f4xx_hal_timebase_tim_template.c:工程中若添加此文件,则会与delay.c文件冲突,调用delay_ms()函数时会陷入死循环。
- 对应添加剩下几组的文件,添加结果分别如下图所示:
需要注意的是,默认添加的都是c文件。CORE文件夹中的文件包含s文件和头文件,此时在添加时,需要修改文件类型为All files(*.*),如下图所示:
注意:
在新版本中的内核中没有这几个文档。用以下几个文档代替。
这几个都是必要头文件,缺一不可。
- 点击 确定 按钮,添加完成。
- 设置头文件路径。如下图所示顺序,添加所有头文件所在文件夹。
添加结果如下图所示:
-
添加全局宏定义表示符。可以直接复制 USE_HAL_DRIVER,STM32F429xx 到下图中。
-
修改编译文件存放目录。
编译验证
- 将 main.c 文件中用以下程序代替。
#include "sys.h"
#include "delay.h"
#include "usart.h"
void Delay(__IO uint32_t nCount);
void Delay(__IO uint32_t nCount)
{
while(nCount--) {}
}
int main(void)
{
GPIO_InitTypeDef GPIO_Initure;
HAL_Init(); //初始化HAL库
Stm32_Clock_Init(360,25,2,8); //设置时钟,180Mhz
__HAL_RCC_GPIOB_CLK_ENABLE(); //开启GPIOB时钟
GPIO_Initure.Pin=GPIO_PIN_0|GPIO_PIN_1; //PB1,0
GPIO_Initure.Mode=GPIO_MODE_OUTPUT_PP; //推挽输出
GPIO_Initure.Pull=GPIO_PULLUP; //上拉
GPIO_Initure.Speed=GPIO_SPEED_HIGH; //高速
HAL_GPIO_Init(GPIOB,&GPIO_Initure);
while(1)
{
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_0,GPIO_PIN_RESET); //PB0置0
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_1,GPIO_PIN_SET); //PB1置1
Delay(0x7FFFFF);
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_0,GPIO_PIN_SET); //PB0置1
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_1,GPIO_PIN_RESET); //PB1置0
Delay(0x7FFFFF);
}
}
- 点击编译按钮,编译整个工程,如下图所示:
结果如下图,0警告和0错误。
下载线连接
在ARM使用过程中,首推的下载方式为SWD,该模式只需4根连接线即可。我们首先看开发板的电路图:
通过上图可知,我们只需连接以下4根线:
- VDD(电源线)
- GND(地线)
- SWDIO(数据线)
- SWCLK(时钟线)
则可以选择4个管脚为1、20、7、9,实际连接线如下图所示:
注意:
- 并不是说使用SWD模式就必须只连接该4条线,只需将keil下载模式设置正确,即使用杜邦线或者是正点原子提供的排插将20根线全部连接上,同样可以使用SWD模式。此4根线的连接方式,只是为了更好的理解SWD模式占用的连接线比较少!
下载验证
- 按照以下四张图 设置下载参数。
- 点击 LOAD 按钮,下载程序,如下图所示。
3. 设置成功,两个LED灯交替闪烁。