当前位置:   article > 正文

#带你读懂嵌入式应用开发 stm_xxxx.h驱动头文件(官方提供)_嵌入式.h源文件

嵌入式.h源文件

目录

#必备知识普及

#C语言预处理指令 

#C语言结构体定义

#查找取值小技巧

#讲解头文件内容部分

        


#必备知识普及

        前言:写这篇,是记录,同时也是为了让更多刚入门的,小伙伴,更好的读懂头文件,读懂.看懂STM_xxxx.h,驱动头文件时很重要的。

#C语言预处理指令 

        预处理指令,这些指令通常执行在程序编译之前,也就是说,程序在执行之前,是先执行预处理指令的,.h头文件里面会有各种预处理指令,宏定义,防止重复引用定义,

常见的预处理指令,以及作用

  1. #define //定义:定义一个常量或者宏使用
  2. //使用格式
  3. #define u8 uint_8;//u8就代表着uint_8 这个类型
  4. #define IS_TIM_OPM_MODE(MODE) (((MODE) == TIM_OPMode_Single) || \
  5. ((MODE) == TIM_OPMode_Repetitive))//这种代表了,等于后面两个函数的其中一种
  6. #define TIM_OCMode_Timing ((uint16_t)0x0000)//同理代表后面这个寄存器地址
  7. #ifndef xxxxx //如果没有定义xxx这个宏 就执行语句块1
  8. //语句块1
  9. #ifdef xxxxx //如果定义这个宏,则执行语句块1
  10. //语句块1
  11. #include "stm32f4xx.h"//引入一个头文件
  12. #endif //预处理指令结束标识,这一句就代表结束预处理指令

使用,预处理指令防止重复引用 .h(头文件)定义

  1. #ifndef __STM32F4xx_TIM_H //如果没有定义这个宏,执行语句块1
  2. #define __STM32F4xx_TIM_H //语句块1定义这个宏
  3. #enfif //预处理指令结束

          防止重复引用的作用,主要是,在.h文件中,定义变量,在引入到多个其他文件中使用,是不会报变量重复定义这个错误的,如果在.c文件中定义 变量  在其他文件中引入.c 文件,会报重复定义变量的这个错误,报错如下,.h文件中有这个定义,所以就不会报错,这个定义还是比较重要的。 

        具体驱动文件实例如下,第一个#endif 是#ifdef _cplusplus,的结束标识,头文件的#endif结束在最后,截图没有截上,这里首先是,头文件防止重复引用的定义,如果没有定义 _cplusplus,这个宏,extern "C" 是 C++ 中的一种编译指令,它用于指定链接器在处理特定的函数或变量时,按照 C 风格(C linkage)进行链接和解析  #endif 结束这一段预处理指令  然后引入一个头文件。

  1. extern "C" {
  2. extern int myCFunction(int x, int y); // 显示声明为 C 风格
  3. }

        预处理指令,定义寄存器地址,这些地址,对应这寄存器,这些寄存器,有什么功能可以在官方数据手册里面去查询,中文数据手册连接放在末尾。

#C语言结构体定义

        通常在写码的时候,会对各种,结构体进行,结构体变量赋值,这些结构体变量的定义就在.h头文件里面,具体见下图,可能有的小伙伴,对这种结构体定义方式比较陌生。

        常见结构体定义类型,作用,效果

  1. int main()
  2. {
  3. struct person//定义一个结构体
  4. {
  5. char name;
  6. char age;
  7. char addresss;
  8. };
  9. struct person s1;//声明一个结构体变量s1
  10. return 0;
  11. }

还有一种,在声明结构体的时候,顺带着,定义变量

  1. int main()
  2. {
  3. struct person
  4. {
  5. char name;
  6. char age;
  7. char addresss;
  8. }s1,s2,s3;
  9. return 0;
  10. }

        这种struct定义的结构体,如果需要重新定义一个结构体变量,前面需要加上struct person进行声明,有没有能少敲几个字的有下面

        是用关键字 typedef struct 定义结构体类型,效果,作用 

  1. int main()
  2. {
  3. typedef struct person
  4. {
  5. char name;
  6. char age;
  7. char addresss;
  8. }s1;//这里s1 不是生命变量的意思
  9. s1 s2;//这里可以直接使用 s1 去声明 s2是struct person类型的结构体变量
  10. //这里s1 其实就相当于 struct person
  11. return 0;
  12. }

        怎么去理解typedef 这个关键字,其实就相当于#define   s1 struct person;这个语句,就是用s1去代替了 struct person  直接使用 s1 去声明结构体变量就可以。

        到这里还有点不一样对不对,少了,结构体名称对不对,在驱动文件里面,这里使用了匿名结构,也就是不声明 结构体类型名称同时生命结构体变量

  1. int main()
  2. {
  3. struct //这里没有结构体名称
  4. {
  5. char name;
  6. char age;
  7. char addresss;
  8. }s1, s2, s3;//结构体变量
  9. return 0;
  10. }

        然后,在搭配 关键字 typedef 进行使用

  1. int main()
  2. {
  3. typedef struct //这里没有结构体名称
  4. {
  5. char name;
  6. char age;
  7. char addresss;
  8. }s1;//这里 s1 代表着 struct
  9. s1 s2;//s2 就是被声明出来的结构体变量
  10. return 0;
  11. }

#查找取值小技巧

        当赋值一个陌生的结构体变量,不知道取什么值,或者该选择官方定义好的值的时候,可以使用  ctrl+f  快捷键,进行查找取值,具体演示如下。  

        这是一个查找取值的小技巧,挺使用的。

#讲解头文件内容部分

        如果有了上面的基本知识,读 stm_xxxx.h驱动头文件应该没什么困难了,这里主要带着小伙伴们认识一下头文件里面的内容部分,本文教程用例,驱动头文件将上传,放在最后末尾

        1头文件介绍部分

        这一部分在开头,主要是,作者,开发时间,简介,证书什么的。

        2防止重引用头文件定义,预处理指令部分

        

        头文件定义(防止重引用),预处理指令部分,然后引入头文件都在这里。

        3结构体定义部分

前两个部分之后,就是大量的结构体定义部分,平时查找的最多的也在这里

         4#define定义宏,成员体变量取值部分

这里主要定义,各种宏定义,还有结构体成员取值类型,宏后面跟的那些是,寄存器地址,通过这些地址,对寄存器写或者读,实现某种效果,具体这个地址的寄存器有什么用,得找数据手册,链接最后。

        5头文件生命函数部分

这个部分主要生命.c文件(源文件),中定义地函数。也是经常查重函数定义。

 链接:https://pan.baidu.com/s/12SM_KSvwXXyTqAvosVA-gQ 
        提取码:zhiy

 最后希望对你有所帮助!!!个人理解,如有失误,欢迎指出,核实立改。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/912780
推荐阅读
相关标签
  

闽ICP备14008679号