你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32库函数注释翻译,每个函数使用说明及使用示例  

[复制链接]
bb123 发布时间:2016-8-22 16:14
STM32接口篇之SPI接口和W25Q16初始化详解1 X+ F, ~/ f& n
& w2 p) {! Q$ J1 y
STM32库函数说明和使用示例---EXTI库
9 ~' S, z7 r8 |- V) F4 p! n! N9 Y( J  R( L* y. H
STM32库函数翻译,每个函数说明及示例-RCC(时钟)篇(上)
2 J5 G/ A1 I; z  U; |$ s" d0 A0 |0 z1 O8 b; e0 D- S

# A6 O7 ]/ u+ G( p" ~/ |( K+ q/ r2 I' `/ V' \; I6 F8 K* M
后续会推出更新版本的库函数的相关详细说明文章
STM32库函数说明及示例(版本V1.4.0)
----第一篇:GPIO库
相关术语说明:
gpio:通用输入输出接口
gpio管脚:一个io管脚,这个管脚可以有多个配置。在库函数中用GPIO_Pin_1这样的宏定义表示
gpio端口(gpio分组):一组gpio管脚的信息。在库函数中用宏定义GPIOA GPIOB等表示

2 W) s- E& \; V' i" \* d
1      gpio库说明
库文件名:stm32f4xx_gpio.c
文档提示翻译:
如何使用这个驱动
(1)       使用RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOx, ENABLE)函数使能GPIO的AHB总线时钟。
(2)       使用GPIO_Init()函数对每个引脚进行四种可能的配置
《1》       输入状态:Floating(浮空), Pull-up(上拉), Pull-down(下拉)
《2》       输出状态:Push-Pull (上拉下拉)(Pull-up(上拉), Pull-down(下拉) or no Pull(不上拉也不下拉)),Open Drain(开漏) (Pull-up(上拉), Pull-down(下拉) or no Pull(不上拉也不下拉)),在输出模式,速度配置成2MHZ,25MHZ,50MHZ和100MHZ.
《3》       第二功能:上拉下拉和开漏
《4》       模拟:当一个管脚被用作ADC通道或者DAC输出的时候,需要配置成此模式
(3)       外设的第二功能:
《1》       在ADC和DAC模式,使用GPIO_InitStruct->GPIO_Mode = GPIO_Mode_AN把需要的管脚配置成模拟模式
《2》       对于其它的管脚(定时器,串口等):
l  使用GPIO_PinAFConfig()函数把管脚和需要的第二功能进行连接
l  使用GPIO_InitStruct->GPIO_Mode = GPIO_Mode_AF把需要的管脚配置成第二功能模式
l  通过成员变量GPIO_PuPd, GPIO_OType and GPIO_Speed选择类型,上拉下拉和输出速度
l  调用函数GPIO_Init()
(4)       在输入模式,使用函数GPIO_ReadInputDataBit()得到配置好管脚的电平
(5)       在输出模式,使用函数GPIO_SetBits()/GPIO_ResetBits()设置配置好IO的高低电平
(6)       在复位过程和刚刚复位后,第二功能是无效的,GPIO被配置成了输入浮空模式(JTAG管脚除外)
(7)       当LSE振荡器关闭的时候,LSE振荡器管脚OSC32_IN和OSC32_OUT可以作为通过IO来使用(分别用PC14和PC15表示)。LSE的优先级高于GPIO函数
(8)       当HSE振荡器关闭的时候,HSE振荡器管脚OSC_IN和OSC_OUT可以作为通用IO(PH0,PH1)来使用。HSE的优先级高于GPIO函数。

$ l) R) M, a: h# n+ b& v
2      具体函数说明
初始化和配置相关函数
1.  void GPIO_DeInit(GPIO_TypeDef* GPIOx)
函数解释:gpio的反初始化函数,该函数的作用是把GPIO相关的寄存器配置成上电复位后的默认状态,在第一次初始化前或者不再使用某一个接口后可以调用该函数。
函数参数说明:GPIOx:gpio的分组,如GPIOA  GPIOB  GPIOC等的宏定义(这些宏定义在头文件stm32f4xx.h中,由厂家写好,我们直接使用即可)

' {* A& l' N- Z
2.  void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef*GPIO_InitStruct)
函数解释:gpio的初始化函数,该函数的作用是对io进行初始化。
函数参数说明:(1)GPIOx:gpio的分组,如GPIOA  GPIOB GPIOC等的宏定义。
(2)GPIO_InitStruct:gpio的初始化相关结构体。该结构体里面的成员变量决定了我们具体的初始化参数。以下进行说明:
l  GPIO_Pin:指定具体的IO脚,如GPIO_Pin_0   GPIO_Pin_1这样的宏定义,这些宏由厂家写好,我们直接使用即可。
l  GPIO_Mode:指定gpio的模式,有以下四种模式:
GPIO_Mode_IN(输入),GPIO_Mode_OUT(输出),GPIO_Mode_AF(第二功能),GPIO_Mode_AN(模拟),可以直接使用这四种宏定义。
l  GPIO_Speed:指定IO的最快翻转速度,也就是当使用IO产生频率(如PWM)的最快速度。有以下四种速度的配置:
GPIO_Low_Speed (低速),GPIO_Medium_Speed(中等速度),GPIO_Fast_Speed(快速),GPIO_High_Speed(高速),可以直接使用这四种宏定义。
l  GPIO_OType:指定选择管脚的输出类型,有以下两种配置:
GPIO_OType_PP (推挽方式输出),GPIO_OType_OD(开漏方式输出),可以直接使用这两种宏定义。
Tips:
推挽输出:推挽输出就是单片机引脚可以直接输出高电平电压。低电平时接地,高电平时输出单片机电源电压。这种方式可以不接上拉电阻。但如果输出端可能会接地的话,这个时候输出高电平可能引发单片机运行不稳定,甚至可能烧坏引脚。推挽方式的驱动力更大。
开漏输出:开漏输出就是不输出电压,低电平时接地,高电平时不接地。如果外接上拉电阻,则在输出高电平时电压会拉到上拉电阻的电源电压。这种方式适合在连接的外设电压比单片机电压低的时候。
l  GPIO_PuPd。指定选择管脚的上拉和下拉模式。有如下三种配置:
GPIO_PuPd_NOPULL(不上拉也不下拉),GPIO_PuPd_UP(上拉),GPIO_PuPd_DOWN(下拉)。Tips:这些都是IO的内部上拉或者下拉模式,也可以接上拉和下拉电阻通过硬件进行外部上拉和外部下拉。
% w: S" I  G1 j2 m/ S
3.  void GPIO_StructInit(GPIO_InitTypeDef* GPIO_InitStruct)
函数解释:gpio结构体的初始化。对GPIO_InitStruct结构体进行默认配置
函数参数说明:GPIO_InitStruct,直接传入该结构体的指针,在该函数内会对结构体进行初始化。

% A- y' d3 _1 @% Z3 Z$ v* ^# Z
4.  void GPIO_PinLockConfig(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
函数解释:锁定gpio的寄存器,锁定的寄存器是GPIOx_MODER,GPIOx_OTYPER, GPIOx_OSPEEDR,GPIOx_PUPDR, GPIOx_AFRL and GPIOx_AFRH。在下一次复位前,被锁定的管脚不能被修改。
函数参数说明:GPIOx:gpio的分组(如GPIOA,GPIOB等)。GPIO_Pin:具体的gpio管脚(如GPIO_Pin_0   GPIO_Pin_1这样的宏定义)

* F- ~' S* R! E# z
GPIO的读写函数
1.  uint8_t GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, uint16_tGPIO_Pin)
函数解释:读取io输入管脚的值
函数参数说明:GPIOx:gpio的分组/gpio端口;GPIO_Pin:具体的gpio管脚
函数返回值说明:输入管脚的值Bit_SET(高电平) Bit_RESET(低电平)
5 Q/ I' c- o6 Q$ B; K" C" i5 H
2.  uint16_t GPIO_ReadInputData(GPIO_TypeDef* GPIOx)
函数解释:读取输入io数据,该函数用于读取一个IO分组的所有数据
函数参数说明:GPIOx:gpio的分组/gpio端口
函数返回值说明:一个io端口的所有数据 (输入状态)

$ t! I/ h$ T# a
3.  uint8_t GPIO_ReadOutputDataBit(GPIO_TypeDef* GPIOx, uint16_tGPIO_Pin)
函数解释:读取io输出管脚的值
函数参数说明:GPIOx:gpio的分组/gpio端口;GPIO_Pin:具体的gpio管脚
函数返回值说明:输出管脚的值Bit_SET(高电平) Bit_RESET(低电平)

7 q& J9 y# D1 h9 X: o* v
4.  uint16_t GPIO_ReadOutputData(GPIO_TypeDef* GPIOx)
函数解释:读取输出io分组/端口的值
函数参数说明:GPIOx:gpio的分组/gpio端口
函数返回值说明:一个io端口的所有数据 (输出状态)
2 x) ^- B9 B. T# _# }: p
5.  void GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
函数解释:对io管脚进行置位(输出高电平)。这个函数使用GPIOx_BSRR寄存器来实现原子读或者修改操作。在这种情况下,在读和修改访问时发生一个IRQ中断是没有危险的。
函数参数说明:GPIOx:gpio的分组/gpio端口;GPIO_Pin:具体的gpio管脚或者是io管脚的组合
" r! i2 u( ]& G6 K
6.  void GPIO_ResetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
函数解释:对io管脚进行复位(输出低电平)。这个函数使用GPIOx_BSRR寄存器来实现原子读或者修改操作。在这种情况下,在读和修改访问时发生一个IRQ中断是没有危险的。
函数参数说明:GPIOx:gpio的分组/gpio端口;GPIO_Pin:具体的gpio管脚或者是io管脚的组合

8 B' l& M! x! [: |2 u
7.  void GPIO_WriteBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, BitActionBitVal)
函数解释:对某一位进行写入操作
函数参数说明:GPIOx:gpio的分组/gpio端口;GPIO_Pin:具体的gpio管脚;BitVal:写入高电平或者低电平(Bit_RESET:写入低电平 Bit_SET:写入高电平)

; j4 K# w' a* w6 ^, |( i+ \, H5 _
8.  void GPIO_Write(GPIO_TypeDef* GPIOx, uint16_t PortVal)
函数解释:对gpio端口进行写入操作,适用于对统一端口的多个管脚的写入
函数参数说明:GPIOx:gpio的分组/gpio端口; BitVal:写入高电平或者低电平(Bit_RESET:写入低电平 Bit_SET:写入高电平)

- n/ U+ G* r3 r' s
9.  void GPIO_ToggleBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
函数解释:翻转指定的gpio口,也就是说,如果当前的io是低电平,则变成高电平,如果当前io是高电平,则变成低电平
函数参数说明:GPIOx:gpio的分组/gpio端口;GPIO_Pin:具体的gpio管脚。

8 d5 a# E2 L2 J, J4 S2 W4 c
Gpio复用功能配置函数
1.  void GPIO_PinAFConfig(GPIO_TypeDef* GPIOx, uint16_t GPIO_PinSource,uint8_t GPIO_AF)
函数解释:改变指定管脚的映射关系。即配置指定管脚的复用功能。
函数参数说明:GPIOx:gpio的分组/gpio端口;GPIO_PinSource:具体要配置成复用功能的管脚(如GPIO_Pin_0   GPIO_Pin_1这样的宏定义);GPIO_AF:选择该管脚要使用的复用功能。

, p: `0 Y: [! ~! C* \+ _3 X0 H2 B  `/ _7 k& c$ o$ Z% ]/ H
代码示例:
示例一:把gpioa6配置成输出管脚,并配置成高电平
         GPIO_InitTypeDefGPIO_InitStruct;
         RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA,ENABLE);
         GPIO_InitStruct.GPIO_Pin= GPIO_Pin_6;
         GPIO_InitStruct.GPIO_Mode= GPIO_Mode_OUT;
         GPIO_InitStruct.GPIO_PuPd= GPIO_PuPd_UP;

* H0 ~) I5 ?- U7 }% [+ d
         GPIO_Init(GPIOA,&GPIO_InitStruct);
2 Q  e( c2 R+ d/ K' x( e6 D
         GPIO_SetBits(GPIOA,GPIO_Pin_6);
' _6 _8 N3 ^3 `' [# y
示例二:把gpioe4配置成输入
         GPIO_InitTypeDefGPIO_InitStruct;
         RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOE,ENABLE);
         GPIO_InitStruct.GPIO_Pin= GPIO_Pin_4;
         GPIO_InitStruct.GPIO_Mode= GPIO_Mode_IN;
         GPIO_InitStruct.GPIO_PuPd= GPIO_PuPd_UP;
         GPIO_Init(GPIOE,&GPIO_InitStruct);
$ e5 |5 n$ A4 Q
示例三:配置复用功能 PA9 PA10 配置成串口1的收发接口
GPIO_InitTypeDef GPIO_InitStructure;
         RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA,ENABLE);//使能GPIOA时钟
         RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);//使能USART1时钟
         //串口1对应引脚复用映射
         GPIO_PinAFConfig(GPIOA,GPIO_PinSource9,GPIO_AF_USART1);//GPIOA9复用为USART1
         GPIO_PinAFConfig(GPIOA,GPIO_PinSource10,GPIO_AF_USART1);//GPIOA10复用为USART1
         //USART1端口配置
         GPIO_InitStructure.GPIO_Pin= GPIO_Pin_9 | GPIO_Pin_10; //GPIOA9与GPIOA10
         GPIO_InitStructure.GPIO_Mode= GPIO_Mode_AF;//复用功能
         GPIO_InitStructure.GPIO_Speed= GPIO_Speed_50MHz;      //速度50MHz
         GPIO_InitStructure.GPIO_OType= GPIO_OType_PP; //推挽复用输出
         GPIO_InitStructure.GPIO_PuPd= GPIO_PuPd_UP; //上拉
         GPIO_Init(GPIOA,&GPIO_InitStructure);//初始化PA9,PA10
2 X, ]3 X6 L# Q% Y9 F# Y( u6 T4 s: K

9 E5 e$ w. h; @, A* D! @
$ s+ j. r! B! a2 h: b  O/ l' N! G
! C8 J+ m0 v. j! A- S" Z

STM32库函数说明及示例-GPIO篇-麦子原创.pdf

下载

732.32 KB, 下载次数: 960

gpio篇

评分

参与人数 2 ST金币 +15 收起 理由
uwyciw100 + 5 很给力!
zero99 + 10 赞一个!

查看全部评分

赞 2 收藏 11 评论59 发布时间:2016-8-22 16:14

举报

59个回答
bb123 回答时间:2016-8-23 14:07:58
已经更新第二篇了《 STM32库函数翻译,每个函数说明及示例-RCC(时钟)篇(上)》   因为字数太多和图片显示问题  后面有两个函数的说明和文中的图片请大家下载文章后面的附件观看   谢谢大家支持 有问题欢迎大家讨论
bb123 回答时间:2016-8-23 09:11:00
感谢大家支持  我更有动力了    正在写RCC(时钟)的库函数详细分析    今天有望上传
bb123 回答时间:2016-8-22 17:07:38
没人回复啊  自己顶一个  绝对原创  大家看了有什么建议请尽管提哦
beebird 回答时间:2016-8-22 18:42:54
好文,特别适合初学者,顶一个
beebird 回答时间:2016-8-22 18:44:46
对库不熟悉可以看看,盼望楼主坚持弄下去,造福新手
gameng 回答时间:2016-8-22 20:04:10
谢谢楼主分享!特别适合我们初学者。
infobull 回答时间:2016-8-22 21:54:54
不错,支持一个,顶
lisingch 回答时间:2016-8-22 21:58:23
谢谢楼主分享,这花了不少心思。
disheng4688 回答时间:2016-8-23 08:15:20

5 [+ Z# C8 x7 x: a( |- F* t谢谢楼主分享,赞
zero99 回答时间:2016-8-23 08:37:23
支持
wofei1314 回答时间:2016-8-23 09:02:51
后排帮顶~
从STM8开始 回答时间:2016-8-23 09:16:30
谢谢分享,顶
cos12a-21701 回答时间:2016-8-23 12:22:04
大力支持。
gameng 回答时间:2016-8-23 13:30:52
坐等楼主杰作!
1234下一页

所属标签

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版