STM32基于HAL的模板工程创建(STM32芯片是F103C8)

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”
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值