首页 > 其他分享 >文件stm32f4xx.h 解析

文件stm32f4xx.h 解析

时间:2023-10-23 20:00:37浏览次数:34  
标签:文件 USE HAL DRIVER BIT 解析 REG stm32f4xx define

本文简短不看版:这个是头文件的头文件

这个文件是个头文件,它又包含了两个头文件(通过在 Keil 魔法棒工具定义两个宏 STM32F407xx 和 USE_HAL_DRIVER 开关)
#include "stm32f407.h" //某一特定F4型号芯片寄存器定义
#include "stm32f4xx_hal.h"//HAL库函数(HAL库编程的API总集合)
  然后在编程的时候,就只要包含stm32f4xx.h就可以了。 (这样一来,一样的程序不需要修改文件本身,只需要修改编译器定义的宏,就可以在所有 F4 系列芯片正确运行)

因为不同的芯片寄存器映射不同,从而按道理程序也不同,但通过上述的映射,

F4 系列芯片的程序,都可以以 stm32f4xx.h 作为头文件。(无论是什么型号,是F407 还是 F429,是VET还是IGT)

相当于对芯片型号进行了抽象化。

 

详细介绍:

首先在文件开头,官方简介如下:

  /*
  *          The file is the unique include file that the application programmer
  *          is using in the C source code, usually in main.c. This file contains:
  *           - Configuration section that allows to select:
  *              - The STM32F4xx device used in the target application
  *              - To use or not the peripheral抯 drivers in application code(i.e. 
  *                code will be based on direct access to peripheral抯 registers 
  *                rather than drivers API), this option is controlled by 
  *                "#define USE_HAL_DRIVER"
  */

 

翻译为中文 *该文件是程序员在 C 源码中使用的唯一的包含文件(通常在 main.c 当中) *该文件包含了以下内容: *-配置部分,允许选择: *-目标应用程序中使用的 STM32F4XX 型号。 *-通过预编译宏:#define USE_HAL_DRIVER 来确定程序是寄存器编程方式,还是HAL库编程方式。     程序的主要架构: 第一部分:定义了芯片型号的宏STM32F4 、STM32F407xx(这部分推荐在编译器中定义,以防止一直修改这个文件)
#if !defined  (STM32F4)
    #define STM32F4
#endif /* STM32F4 */

#if !defined (STM32F407xx)
    #define STM32F407xx
#endif
  第二部分:定义 USE_HAL_DRIVER(这部分也推荐在编译器中定义,以防止一直修改这个文件)
#if !defined  (USE_HAL_DRIVER)
/**
 * @brief 如果想要寄存器编程,将其注释掉
   */
  #define USE_HAL_DRIVER
#endif /* USE_HAL_DRIVER */
  第三部分:由上面第一部分的宏定义,包含具体芯片的头文件
#if defined(STM32F405xx)
  #include "stm32f405xx.h"
#elif defined(STM32F407xx)
  #include "stm32f407xx.h"  //假设第一部分定义了STM32F407xx,那么该文件包含 stm32f407xx.h 这个头文件
#elif ....
  #include ...
#endif

 

第四部分:由上面第二部分的宏定义(USE_HAL_DRIVER),包含具体芯片的HAL库头文件

#if defined (USE_HAL_DRIVER)
 #include "stm32f4xx_hal.h"
#endif /* USE_HAL_DRIVER */

 

第五部分:定义各种状态(用作各种函数的返回参数)

//Flag 和 中断标志: RESET 和 SET 
typedef enum 
{
  RESET = 0U, 
  SET = !RESET
} FlagStatus, ITStatus;

//使能标志: DISABLE 和 ENABLE 
typedef enum 
{
  DISABLE = 0U, 
  ENABLE = !DISABLE
} FunctionalState;
#define IS_FUNCTIONAL_STATE(STATE) (((STATE) == DISABLE) || ((STATE) == ENABLE))

//错误标志: SUCCESS 和 ERROR 
typedef enum
{
  SUCCESS = 0U,
  ERROR = !SUCCESS
} ErrorStatus;

 

第六部分:定义寄存器编程的相关读写操作

#define SET_BIT(REG, BIT)     ((REG) |= (BIT))  //将寄存器REG与BIT掩码或,从而置1
#define CLEAR_BIT(REG, BIT)   ((REG) &= ~(BIT))//将寄存器REG和BIT掩码与非,从而置0
....
#define CLEAR_REG(REG)        ((REG) = (0x0)) //清零

 

标签:文件,USE,HAL,DRIVER,BIT,解析,REG,stm32f4xx,define
From: https://www.cnblogs.com/FBsharl/p/17783334.html

相关文章

  • 使用Git版本控制查看文件的更改历史
    内容来自DOChttps://q.houxu6.top/?s=使用Git版本控制查看文件的更改历史如何查看单个文件的完整更改历史记录?gitlog--[filename]显示了文件的提交历史,但我如何查看更改的文件内容?对于图形视图,请使用gitk:gitk[filename]若要跟踪文件重命名后的文件:gitk--follo......
  • IO流,对象流,将对象序列化到文件中,将对象反序列化到内存中
    一一一、序列化!!一、首先创建一个对象类,实现Serializable标记接口 对象中,实现了接口,三个私有属性,并且创建了无参有参构造,get和set方法和toString方法 (一个标准的对象模型)二、序列化到外部文件 结果: 也是一堆乱码,还是因为用字节输出的原因。 二二二、反序列化! 结......
  • redis 配置文件 - 启动redis 使用文件配置启动
    #Redisconfigurationfileexample.##Notethatinordertoreadtheconfigurationfile,Redismustbe#startedwiththefilepathasfirstargument:##./redis-server/path/to/redis.conf#Noteonunits:whenmemorysizeisneeded,itispos......
  • Selenium4 上传文件,弹出对话框(非input框)
    场景:点击一个按钮,然后弹出对话框,从本地选择需要上传的文件,自动关闭对话框。最后在点击web页面的ok按钮提交上传文件。ps:因为这里是按钮上传,所以用input框的sendkeys方法是无法上传成功的了。下面是点击按钮上传成功的案例,需要注意的是,上传时,还需要了解各个按键是什么text来......
  • java实现文件上传到服务器
    本文实例为大家分享了java实现文件上传到服务器的具体代码,供大家参考,具体内容如下1、运行jar包,发送post请求publicstaticvoidmain(String[]args){    //StringfilePath="C:/Users/706293/IT_onDuty.xls";    StringfilePath=args[0];    String......
  • AntDesignVue 通过点击确定按钮实现文件上传
    示例图相关代码<template><div><a-modalv-model:visible="props.uploadVisible"width="1300px":footer="null"maskClosable@......
  • [侯捷_C++面向对象高级开发_上] 2 头文件和类的声明
    1.CvsC++关于数据和函数CDataFunctions对于C来说,数据大部分情况是所有函数都可以访问的,这样对程序来说会变得很混乱C++DataMembersMemberFunctions对于C++来说,数据和函数封装在一起形成类,可以设定为数据只能让类里的函数访问,具有良好的组织性2.C++关于数......
  • ETL实现实时文件监听
    一、实时文件监听的作用及应用场景实时文件监听是一种监测指定目录下的文件变化的技术,当产生新文件或者文件被修改时,可实时提醒用户并进行相应处理。这种技术广泛应用于数据备份、日志管理、文件同步和版本控制等场景,它可以帮助用户及时发现和解决问题,提高工作效率。应用场景包括但......
  • 这些文件都是7-Zip自解压缩文件(SFX)的默认模板。每个文件名后缀代表不同类型的操作系统
    这些文件都是7-Zip自解压缩文件(SFX)的默认模板。每个文件名后缀代表不同类型的操作系统和处理器架构。Default.SFX:这是用于32位Windows操作系统的默认SFX模板,其中包含了7-Zip解压程序。Default64.SFX:这是用于64位Windows操作系统的默认SFX模板,其中包含了7-Zip解压程序。WinCon.S......
  • iOS发布证书.p12文件无密码解决办法及导出带密码的新.p12文件方法
    ​  摘要:本文将以iOS技术博主身份,分享解决使用无密码的.p12文件发布应用时遇到的问题,并介绍如何以带密码的方式重新导出.p12文件的方法。通过本文提供的步骤,开发者可以顺利完成证书的发布流程。引言在iOS应用发布过程中,有时候会遇到使用无密码的.p12文件的情况。然而,在一......