一、引言我们在学习32的过程中,固件库是个必不可少的东西,因为程序开发不再是从寄存器层次起始,而要首先去熟悉 stm32 所提供的固件库。那是否一定要使用固件库呢?当然不是。但 stm32 微控制器的寄存器规模可不 是常见的 8 位单片机可以比拟,若自己细细琢磨各个寄存器的意义,必然会消耗相当的时间, 并且对于程序后续的维护,升级来说也会增加资源的消耗。
二、正题以最常用的 gpio 设备的初始化函数为例,如下程序段一:
gpio_inittypedef gpio_initstructure; ○1gpio_initstructure.gpio_pin = gpio_pin_4; ○2gpio_initstructure.gpio_speed = gpio_speed_50mhz; ○3gpio_initstructure.gpio_mode = gpio_mode_out_pp; ○4gpio_init(gpioa , &gpio_initstructure); ○5这是一个在 stm32 的程序开发中经常使用到的 gpio 初始化程序段,其功能是将 gpioa.4 口 初始化为推挽输出状态,并最大翻转速率为 50mhz。下面逐一分解:
首先是o1 ,该语句显然定义了一个 gpio_inittypedef 类型的变量,名为 gpio_initstructure,找出gpio_inittypedef的原型位于
“stm32f10x_gpio.h”文件,原型为如下:
typedef struct{u16 gpio_pin;gpiospeed_typedef gpio_speed;gpiomode_typedef gpio_mode;}gpio_inittypedef;由此可知 gpio_inittypedef 是一个结构体类型同义字,其功能是定义一个结构体,该结 构体有三个成员分别是 u16 类型的 gpio_pin、gpiospeed_typedef 类型的 gpio_speed和 gpiomode_typedef 类 型 的 gpio_mode 。继 续 探 查 gpiospeed_typedef 和gpiomode_typedef 类型,在“stm32f10x_gpio.h”文件中找到对 gpiospeed_typedef 的 定义:
typedef enum{ gpio_speed_10mhz = 1, gpio_speed_2mhz, gpio_speed_50mhz}gpiospeed_typedef;则可知 gpiospeed_typedef 枚举类型同一只,其功能是定义一个枚举类型变量,该变量 可表示 gpio_speed_10mhz、gpio_speed_2mhz 和 gpio_speed_50mhz 三个含义(其中gpio_speed_10mhz 已经定义为 1,读者必须知道 gpio_speed_2mhz 则依次被编译器赋予 2,而 gpio_speed_50mhz 为 3)。同样也在“stm32f10x_gpio.h”文件中找到对 gpiomode_typedef 的定义:
typedef enum{gpio_mode_ain = 0x0,gpio_mode_in_floating = 0x04, gpio_mode_ipd = 0x28, gpio_mode_ipu = 0x48, gpio_mode_out_od = 0x14, gpio_mode_out_pp = 0x10, gpio_mode_af_od = 0x1c, gpio_mode_af_pp = 0x18}gpiomode_typedef;这同样是一个枚举类型同义字,其成员有 gpio_mode_ain、gpio_mode_af_od 等(也 可以轻易判断出这表示 gpio 设备的工作模式)。至此对程序段一的o1 解析可以做一个总结:该行定义一个结构体类型的变量 gpio_initstructure,并且该结构体有 3 个成员,分别为 gpio_pin、gpio_speed 和 gpio_mode,并且 gpio_pin 表示 gpio 设备引脚 gpio_speed 表示 gpio 设备速率和 gpio_mode 表示 gpio 设备工作模式。
中红外激光的产生方式有哪些
努比亚Z20即将发布拥有超级夜景模式一开启可以瞬间把黑夜点亮
正弦交流电的“三要素”
无线充电市场迅速发展与普及
锐龙52600和酷睿i5-8400哪个性价比最高
解析STM32的库函数-1
高通是否要重回数据中心市场?
你知道Linux内核调试关键技术之一的printk?
以80C196MC单片机为控制核心的步进电机恒转矩斩设计
基于Arduino自制儿童小电脑
智慧小区立体安防系统的组成、特点及应用方案
食品亚硝酸盐检测仪的应用及功能介绍
蓝白可调电阻焊接方法_蓝白可调电阻焊接注意事项
Xilinx FPGA重构技术介绍
iPhone8什么时候上市?iPhone8最新消息:外观创新无边框设计,内置指纹识别与无线充电!iPhone8有这4大黑科技?
气体检测仪的使用寿命是多久
禾多科技参加MEET2024智能未来大会
多功能充电器的设计与制作,Multi-function battery charger
不同Pi-pad衰减器的电路方程案例
中国移动正式公布了2019-2020年基站天线集中采购项目中标候选人结果