前言:学了一段时间的库函数,惊觉原来现在大家都在学HAL库。我哭,现在开始跟着正点原子把HAL库学一遍,希望来得及!!!
创建项目包含的文件:
7,STM32CubeF1固件包中:
CMSIS-Include中包含以下6个cmsis;在CMSIS-Device-ST-STM32F1XX-Include中保留三个红色头文件;CMSIS-Device-ST-STM32F1XX-Source-Templates中包含剩下两个白色头文件。
新建HAL库工程
点亮一个LED灯
- 使用正点原子HAL事例代码,在SYSTEM文件下创建BSP文件如下图:
- 在BSP文件下创建LED文件夹:
- 在MDK中新建并保存文件至LED文件夹中,分别新建文件led.c与led.h。
- 在MDK中添加工程分组,点击
在led.h文件中写入代码:
#ifndef __LED_H
#define __LED_H
#include "sys.h"
#endif
#define LED0 PAout(8) //LED0,这里使用位操作定义端口
#define LED1 PDout(2) //LED1
void LED_Init(void);
#endif
防止重复包含led.h
在led.c文件中初始化端口
void LED_Init(void)
{
GPIO_InitTypeDef GPIO_Initure;
__HAL_RCC_GPIOA_CLK_ENABLE(); //开启GPIOA时钟
__HAL_RCC_GPIOD_CLK_ENABLE(); //开启GPIOD时钟
GPIO_Initure.Pin=GPIO_PIN_8; //PB8
GPIO_Initure.Mode=GPIO_MODE_OUTPUT_PP; //推挽输出
GPIO_Initure.Pull=GPIO_PULLUP; //上拉
GPIO_Initure.Speed=GPIO_SPEED_FREQ_HIGH; //高速
HAL_GPIO_Init(GPIOA,&GPIO_Initure);
GPIO_Initure.Pin=GPIO_PIN_2; //PD2
HAL_GPIO_Init(GPIOD,&GPIO_Initure);
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_8,GPIO_PIN_SET); //PA8置1,默认初始化后灯灭
HAL_GPIO_WritePin(GPIOD,GPIO_PIN_2,GPIO_PIN_SET); //PD2置1,默认初始化后灯灭
}
在主函数main.c中写入函数:
int main(void)
{
HAL_Init(); //初始化HAL库
Stm32_Clock_Init(RCC_PLL_MUL9); //设置时钟,72M
delay_init(72); //初始化延时函数
LED_Init(); //初始化LED
while(1)
{
LED0=0; //LED0亮
LED1=1; //LED1灭
delay_ms(500);
LED0=1; //LED0灭
LED1=0; //LED1亮
delay_ms(500);
}
}