解析STM32的库函数-1

发布者:RainbowJoy最新更新时间:2024-07-31 来源: elecfans关键字:STM32  库函数  固件库 手机看文章 扫描二维码
随时随地手机看文章

一、引言

我们在学习32的过程中,固件库是个必不可少的东西,因为程序开发不再是从寄存器层次起始,而要首先去熟悉 STM32 所提供的固件库。那是否一定要使用固件库呢?当然不是。但 STM32 微控制器的寄存器规模可不 是常见的 8 位单片机可以比拟,若自己细细琢磨各个寄存器的意义,必然会消耗相当的时间, 并且对于程序后续的维护,升级来说也会增加资源的消耗。


二、正题

以最常用的 GPIO 设备的初始化函数为例,如下程序段一:

GPIO_InitTypeDef GPIO_InitStructure; ○1

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4; ○2

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; ○3

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; ○4

GPIO_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 设备工作模式。


关键字:STM32  库函数  固件库 引用地址:解析STM32的库函数-1

上一篇:STM32时钟系统的基础知识
下一篇:STM32的DMA的五大问题

推荐阅读最新更新时间:2026-03-20 11:46

stm32固件库Bitbang操作
// GPIO 位操作 #include stm32f4xx.h // 这里只定义了 GPIO ODR和IDR这两个寄存器的位带别名区地址,其他寄存器的没有定义 //SRAM 位带区: 0X2000 0000~0X200F 0000 //SRAM 位带别名区:0X2200 0000~0X23FF FFFF //外设 位带区: 0X4000 0000~0X400F FFFF //外设 位带别名区:0X4200 0000~0X43FF FFFF // 把“位带地址+位序号”转换成别名地址的宏 #define BITBAND(addr, bitnum) ((addr & 0xF0000000)+0x02000000+
[单片机]
《嵌入式-STM32开发指南》第一部分 入门篇 - 第7章 STM32固件库与STM32Cube产品介绍
自STM32标准库出道以来,备受广大工程师和公司的喜爱,但是,从2013年开始,ST逐渐停止了对标准外设库的更新和维护。目前,ST全力推崇HAL库,STM32Cube就是与HAL库配合使用图形化编程官方IDE。 7.1 STM32库简介 到目前为止,ST有标准外设库(SPL 库)、HAL 库、LL 库 三种。前两者都是常用的库,后面的 LL 库是 ST 最近才添加,随 HAL 源码包一起提供,目前支持的芯片也偏少。各库如下所示: 图1 标准库、HAL 库、LL 库对比.png 其中,SPL 库 和 HAL 库两者相互独立,互不兼容。几种库的比较如下: 图2各个库对比.png 目前几种库对不同芯片的支持情况如下: 图
[单片机]
STM32固件库
很久没有碰单片机了,两年了吧,因为项目需要,最近入手一块红牛的开发板,核心为STM32F103ZE。虽然以前做过大概半年的stm32的开发,现在天天在.net平台下写代码,已经忘记的差不多,恰逢周末,补补课,以后用的时候也方便点。 ST推出的FW大大提高了单片机SW的开发效率,所以在新建工程前先来了解下这个SDK。我使用的是最新的v3.5固件库,这个固件库可以分为三个部分: 1、内核支持(..STM32F10x_StdPeriph_Lib_V3.5.0LibrariesCMSISCM3CoreSupport) 2、硬件系统支持(..STM32F10x_StdPeriph_Lib_V3.5.0LibrariesCMSI
[单片机]
STM32固件库SYSTEM文件夹介绍
SYSTEM 文件夹里面的代码,此文件夹里面的代码由 ALIENTEK 提供,包含了几乎每个实验都可能用到的延时函数,位带操作,串口打印代码等。SYSTEM 文件夹下包含了 delay、 sys、 usart 等三个文件夹。分别包含了 delay.c、 sys.c、usart.c 及其头文件 delay.h,sys.h,usart.h。 delay 文件夹代码介绍 delay 文件夹内包含了 delay.c 和 delay.h 两个文件,这两个文件用来实现系统的延时功能,其中包含 3 个函数: void delay_init(u8 SYSCLK); //该函数用来初始化 2 个重要参数:fac_us 以及 fac_ms;同时把
[单片机]
浅谈STM32芯片行丝印含义,固件库命名规则及三大结构发展图示
STM32芯片上的5行丝印 1、ARM代表ARM内核,ARM后面跟着的是 X,代表芯片版本 内核是不变的 只是ST的版本 X是最终版本,就是以后这个型号就不会再升级了,有数字的代理以后还可以升级 2/3、第二行和第三行是型号 4、原厂出厂编号 5、MYS是马来西亚封装产地,641是代表2016年41周生产的 CHN是国内封装产地 STM32固件库命名规则 1、系统文件名和源文件名以‘ stm32f10x_’的形式表示。 2、在单一文件中使用的常量在该文件中定义。在多个文件中使用的常量定义在头文件中。所有常量都以大写字母表示。 3、寄存器当做常量看待,同样以大写字母表示,多数情况下,在STM3210X参考手册中使用相同的缩写
[单片机]
浅谈<font color='red'>STM32</font>芯片行丝印含义,<font color='red'>固件库</font>命名规则及三大结构发展图示
STM32固件库实现led亮灭闪烁和音频发生器设计
概述 本文使用STM32F10X,软件为Keil uVision5,仿真软件Proteus 8 Professional 电路图 实现代码 学习笔记 8个led 电路图 8个led亮灭实现代码 实现代码 //8¸öledÈ«ÁÁÈ«Ãð #include stm32f10x.h int main() { GPIO_InitTypeDef star; //配置开启GPIO时钟 RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE); //设置GPIO输出模式 //stm32F1提供了4种输出模式(推挽输出、开漏输出 、复用推挽输出 、复用开漏输出)和3
[单片机]
<font color='red'>STM32</font><font color='red'>固件库</font>实现led亮灭闪烁和音频发生器设计
STM32基于固件库学习笔记(3)串口的收发功能+WiFi基础配置
串口设置的一般步骤 1) 串口时钟使能,GPIO 时钟使能   注:串口是挂载在 APB2 下面的外设还需要需要挂载复用时钟使能 //挂载时钟(复用PA) 串口时钟使能,GPIO 时钟使能,复用时钟使能 RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1|RCC_APB2Periph_GPIOA|RCC_APB2Periph_AFIO,ENABLE); 2) 串口复位 //系统刚开始配置外设的时候,都会先执行复位该外设的操作。 void USART_DeInit(USART_TypeDef* USARTx);//串口复位 3) GPIO 端口模式设置  注意:RXT、TXT输
[单片机]
<font color='red'>STM32</font>基于<font color='red'>固件库</font>学习笔记(3)串口的收发功能+WiFi基础配置
STM32基于固件库学习笔记(4)(通用定时器)TIM3定时1S中断
有 TIME1 和 TIME8 等高级定时器,也有 TIME2~TIME5 等通用定时器,还有 TIME6 和TIME7 等基本定时器。 通用定时器:是一个通过可编程预分频器(PSC)驱动的 16 位自动装载计数器(CNT)构成;可以用来测量输入信号的脉冲长度(输入捕获)或者产生输出波形(输出比较和 PWM)等功能。 STM3 的通用 TIMx (TIM2、TIM3、TIM4 和 TIM5)定时器功能包括:  1)16 位向上、向下、向上/向下自动装载计数器(TIMx_CNT)。  2)16 位可编程(可以实时修改)预分频器(TIMx_PSC),计数器时钟频率的分频系数为 1~65535 之间的任意数值。  3)4
[单片机]
小广播
最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

厂商技术中心

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2026 EEWORLD.com.cn, Inc. All rights reserved