Template_HAL
本文参考了正点原子的模板创建方式
这个模板工程再https://github.com/nianchuSu/Template_HAL.git
HAL库模板
1.新建文件夹
2.Drivers
BSP
CMSIS
Device 复制的HAL官方固件库的Device下CMSIS的Device文件夹 文件夹下ST\STM32F1xx文件夹中只保留了Include和 Source文件夹
Include 里面包含了6个文件 可以通过新建HAL工程搜索工程中,复制这6个文件到这里
cmsis_armcc.h
cmsis_armclang.h
cmsis_compiler.h
cmsis_version.h
core_cm3.h
mpu_armv7.h
也可以再工程目录下的\Drivers\CMSIS\Include中找
也可以通过在STM32CubeMX生成任意的工程中搜索
STM32F1xx_HAL_Driver
直接复制HAL固件包的STM32F1xx_HAL_Driver,删除其余文件/文件夹,只剩下图所示
SYSTEM
这个文件是第三方提供的
3.其余文件夹
Project
直接新建一个MDK-ARM文件夹
4.User文件
下图文件来源
HAL固件库的STM32Cube_FW_F1_V1.8.0\Projects\STM3210E_EVAL\Templates
Projects
STM3210E_EVAL
Templates
新建工程框架
目录
选择芯片
删除文件夹
可以选择所有设置完成之后再删除
工程文件添加
文件结构修改
Startup启动文件
位置Template_HAL_LIB\Drivers\CMSIS\Device\ST\STM32F1xx\Source\Templates\arm
特别说明,这里根据自己所有的芯片选择
User
Template_HAL_LIB\Drivers\CMSIS\Device\ST\STM32F1xx\Source\Templates
Drivers/STM32F1xx_HAL_Driver 所用驱动文件用啥添加啥,也可以全选
#####必选9个文件
stm32f1xx_hal.c
stm32f1xx_hal_cortex.c
stm32f1xx_hal_dma.c
stm32f1xx_hal_gpio.c
stm32f1xx_hal_gpio_ex.c
stm32f1xx_hal_rcc.c
stm32f1xx_hal_rcc_ex.c
stm32f1xx_hal_uart.c
stm32f1xx_hal_usart.c
只读钥匙解决
解决修改文件夹属性
魔术棒设置
宏定义USE_HAL_DRIVER,STM32F103xB
上图说明宏定义
USE_HAL_DRIVER 需要用HAL库就需要包含这个
STM32F103xB 对应芯片的不同,选择不同的宏定义
USE_HAL_DRIVER,STM32F103xB
下载选择
新建main.c文件
测试文件
#include "sys.h"
#include "delay.h"
/*
模板工程已创建完成 1-2步骤必须配置
1.还需要初始化HAL库
2.设置时钟--直接调用sys.c文件函数
3.开启对应的总线时钟使能,设置IO口的属性/参数
*/
int main(void)
{
HAL_Init(); /*初始化HAL库*/
SystemClock_Config(); /*72MHz*/
__HAL_RCC_GPIOA_CLK_ENABLE(); /*GPIOA时钟使能 再rcc.h的500行附件宏函数*/
__HAL_RCC_GPIOB_CLK_ENABLE();
/*GPIO_InitTypeDef 在gpio.c里面找*/
GPIO_InitTypeDef gpio_pa4 = { /*设置IO参数*/
.Pin = GPIO_PIN_4, /*Pin4*/
.Mode = GPIO_MODE_OUTPUT_PP, /*推挽输出*/
.Pull = GPIO_NOPULL, /*输出可以不设置这项参数,输入才需要设置*/
.Speed = GPIO_SPEED_FREQ_HIGH /*高速,输入不需要设置这个参数*/
};
HAL_GPIO_Init(GPIOA, &gpio_pa4); /*初始化PA4引脚*/
HAL_GPIO_WritePin(GPIOA, GPIO_PIN_4, GPIO_PIN_RESET); // 设置PA4输出低电平
GPIO_InitTypeDef gpio_pb9 = {0};
gpio_pb9.Pin = GPIO_PIN_9; /*Pin9*/
gpio_pb9.Mode = GPIO_MODE_OUTPUT_OD; /*开漏输出*/
gpio_pb9.Pull = GPIO_NOPULL; /*输出可以不设置这项参数,输入才需要设置*/
gpio_pb9.Speed = GPIO_SPEED_FREQ_LOW; /*低速,输入不需要设置这个参数*/
HAL_GPIO_Init(GPIOB, &gpio_pb9); /*初始化PB9引脚*/
HAL_GPIO_WritePin(GPIOB, GPIO_PIN_9, GPIO_PIN_SET); // 设置PB9输出高电平
while(1)
{
delay_ms(500);
HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_4); // 翻转状态
HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_9);
delay_ms(1000);
HAL_GPIO_TogglePin(GPIOA, GPIO_PIN_4);
HAL_GPIO_TogglePin(GPIOB, GPIO_PIN_9);
}
}
直接编译,出现HAL库问题,直接解决
双击出错位置,自动跳转
删除#include “main.h”
新增#include “stm32f1xx_hal.h”