STM32 新建寄存器版本MDK工程简要步骤

新建工程文件夹

新建一个工程根目录文件夹,并在该文件夹里新建D/M/O/P/U文件夹。

  • Drivers:存放与硬件相关的驱动层文件
  • Middlewares:存放正点原子提供的中间层组件文件和第三方中间层文件
  • Output:存放工程编译输出文件
  • Projects:存放MDK工程文件
  • User:存放HAL库用户配置文件、main.c、中断处理文件以及分散加载文件

Drivers文件夹

  • BSP:存放开发板板级支持包驱动代码,如各种外设驱动
  • CMSIS:存放CMSIS底层代码,如启动文件(.s文件)等
  • SYSTEM:存放正点原子系统级核心驱动代码

Projects文件夹

该文件夹用于存放编译器(MDK、IAR等)工程文件,为了方便区分,在该文件夹下新建:MDK-ARM文件夹,用于存放MDK的工程文件。

  • DebugConfig:用于存放调试设置信息文件(.dbgconf),不可删除!
  • Listings:用于存放编译过程产生的链接列表等文件
  • Objects:用于存放编译过程产生的调试信息、.hex、预览、.lib文件等

魔术棒设置

设置全局宏定义:STM32F103xE,用于定义所用STM32型号,在stm32f1xx.h里面会用到该宏定义。

设置优化等级为-O0,可以得到最好的调试效果。

勾选C99模式,即使用C99C语言标准。

AC5和AC6编译器对比


CMSIS

CMSIS(微控制器软件接口标准):Cortex Microcontroller Software Interface Standard,是由ARM和其合作的芯片厂商(ST、NXP)、软件工具厂商(KEIL、IAR),共同制定的标准。

  1. 用户层(用户代码)
  2. 中间层(CMSIS)
  3. 硬件层

HAL库简介

ST公司为了方便用户开发STM32芯片开发,提供了三种库:

  1. 标准外设库(Standard Peripheral Libraries)
  2. HAL库(硬件抽象层):Hardware Abstraction Layer
  3. LL库:Low Layer

不同方式的优缺点:

  1. 直接操作寄存器:执行效率高、时间成本高
  2. 标准库:F0/1/2/3/4L1,目前已停止维护
  3. HAL库:全系列兼容,ST目前主推的库,兼容性、易移植性
  4. LL库:全系列兼容,与HAL库捆绑发布,轻量级,效率高,不匹配部分复杂外设

STM32Cube固件包

STM32Cube固件包是ST公司根据CMSIS开发的固件包。

Drivers文件夹里又包含三个文件夹:

  • BSP:板级支持包,用于适配ST官方的开发板(可参考)
  • CMSIS:符合CMSIS的组件,包括:DSP库、Cortex-M内核及其设备文件、微控制器专用头文件、启动文件、专用系统文件等
  • STM32F1xx_HAL_Driver:HAL库外设驱动源码,包括F1系列HAL库源文件和头文件

CMSIS标准规定软件包目录

  • Driver:CMSIS驱动程序外设接口API的头文件
  • Include:CMSIS-Core(Cortex-M)和CMSIS-DSP需要包括的头文件等

Device和Include文件夹的关键文件介绍

  • stm32f1xx.h:是所有F1系列的顶层头文件,通过条件编译来包含某个芯片的头文件,定义通用的枚举类型,定义通用的宏定义。
  • stm32f103xe.h:包含中断编号定义、外设寄存器结构体类型定义、寄存器映射、寄存器位定义、外设判定
  • system_stm32f1xx.c/.h:定义了系统初始化函数SystemInit和系统时钟更新函数
  • startup_stm32f103ex.s:大容量F103系列芯片的启动文件

HAL库文件夹结构

  • HAL库和LL库驱动源码
  • 用户手册

HAL库文件介绍

  • stm32f1xx_hal.c/.h:HAL库初始化、系统滴答、HAL库延时等相关函数
  • stm32f1xx_hal_conf.h:HAL库的用户配置文件,用于裁剪HAL库、配置晶振参数等
  • stm32hxx_hal_def.h:包含HAL库通用的枚举类型数据和宏定义
  • stm32f1xx_hal_cortex.h/.c:内核通用函数定义和声明,如NVIC、MPU、系统软复位、Systick,主要是对core_cm3.h文件的相关函数再次封装
  • stm32f1xx_hal_ppp.c/.h:任意外设驱动源码,PPP表示任意外设
  • stm32f1xx_hal_ppp_ex.c/.h:主要是存放外设的扩展功能的驱动源码,PPP表示任意外设
  • stm32f1xx_ll_ppp.c/.h:LL库驱动源码,在部分stm32f1xx_hal_ppp.c或stm32f1xx_hal_ppp_ex.c中会被调用

HAL库回调函数

HAL_PPP_MspInit()/_DeInit()

该函数主要用于存放外设使用到的GPIO、CLOCK、NVIC、DMA等初始化代码

HAL_PPP_ProcessCpltCallback()

由于外设中断或DMA中断调用,HAL库中断公共处理函数已经实现对中断标记位读取、判断和清除操作,用户只需要专注于中断逻辑功能的实现即可

HAL_PPP_ErrorCallback()

外设或DMA中断中发生的错误,用于发生错误处理

HAL库的用户配置文件(stm32f1xx_hal_conf.h)

  1. 裁剪HAL库外设驱动源码(不进行编译)
  2. 设置外部高速晶振频率
  3. 设置外部低速晶振频率

stm32f1xx_hal.c文件

c 复制代码
HAL_StatusTypeDef HAL_Init(void)
{
	__HAL_FLASH_PREFETCH_BUFFER_ENBALE();//使能FLASH预取缓冲
	HAL_NVIC_SetPrioorityGrouping(NVIC_PRIORITYGROUP_2);/*配置中断优先级分组*/
	/*使用滴答定时器作为时钟基准,配置1ms滴答(时钟源为HSI)*/
	HAL_InitTick(TICK_INT_PRIORITY);
	HAL_MspInit();/* 初始化其它底层硬件(如果必要) */
	return HAL_OK;
}

设置全局宏定义:USE_HAL_DRIVER和STM32F103xE

相关推荐
lantiandianzi3 分钟前
基于单片机的老人生活安全监测系统
单片机·嵌入式硬件·生活
东胜物联26 分钟前
探寻5G工业网关市场,5G工业网关品牌解析
人工智能·嵌入式硬件·5g
stm32发烧友29 分钟前
基于STM32的智能家居环境监测系统设计
stm32·嵌入式硬件·智能家居
hairenjing11238 小时前
使用 Mac 数据恢复从 iPhoto 图库中恢复照片
windows·stm32·嵌入式硬件·macos·word
模拟IC攻城狮10 小时前
华为海思招聘-芯片与器件设计工程师-模拟芯片方向- 机试题-真题套题题目——共8套(每套四十题)
嵌入式硬件·华为·硬件架构·芯片
IT B业生10 小时前
51单片机教程(六)- LED流水灯
单片机·嵌入式硬件·51单片机
一枝小雨10 小时前
51单片机学习心得2(基于STC89C52):串口通信(UART)
单片机·嵌入式硬件·51单片机
IT B业生11 小时前
51单片机教程(一)- 开发环境搭建
单片机·嵌入式硬件·51单片机
u01015265812 小时前
STM32F103C8T6学习笔记2--LED流水灯与蜂鸣器
笔记·stm32·学习
海绵波波10713 小时前
Webserver(4.8)UDP、广播、组播
单片机·网络协议·udp