|
1.void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct) 定义:Init是Initiate的简写,而Initiate有“开始”的意思,所以这个函数就是GPIO的初始化函数。且主要初始化哪一个引脚的工作模式和速度。(根据函数名简写的词得到全写的单词,再根据全写的单词去揣测这个函数的功能,有助于记忆这个函数哦) 输入:这个函数的输入包含了两个。①、GPIO_TypeDef* GPIOx:这个输入变量主要是指GPIOA、GPIOB、GPIOC...等这些,可以从A到G。这就好比C51单片机的PA口、PB口和PC口,但是STM32的“口”比C51多一些。②、 GPIO_InitTypeDef* GPIO_InitStruct:这个输入变量是个结构体,也就是说,你得先构造一个结构体然后才能往这个函数里面输入。这个结构体包含了三个内容:指定GPIO口的哪一引脚(GPIO_Pin)、这一引脚要以什么工作方式工作(GPIO_Mode)、工作速度是多少(GPIO_Speed)。这个也好理解,这个初始化函数可以对每个口的每个引脚设定自己的工作特点。③、GPIO_Pin:用来指定引脚,注意书写格式GPIO_Pin_数字。比如:GPIO_Pin_0;GPIO_Pin_1。$ r/ }3 y9 H0 v9 ?5 m' v
GPIO_Mode:用来指定每个引脚的工作模式,输入输出共有八种工作模式。我们引用内部的代码看看八种模式是怎么书写的。/ ~" [3 o1 b) Q6 t1 U
也就是说,我们输入模式的时候,要按照它所要求的格式进行书写!GPIO_Speed:STM32的引脚主要有如下的三种初始化速度。它用枚举法,把具有的三个速度放置在了一个结构体中。我们输入,在当前萌新时期下,输入这三个速度最好,等到大佬时候再其他速度。最后还是要注意书写格式!!!
输出:对函数无输出,但是实际上对芯片的若干引脚进行的初始化,只是这样的结果我们不必在C语言平台里面看到,故对C函数而言是无输出。" k* ]: i( S `2 D$ \2 G - U* W% [/ w. N G& ~: t 例子:
可见,这个程序段是对GPIOD口的2引脚进行工作模式(PP)和工作速度(50MHz)的初始化。 + t) P' {. f5 T0 ~" f. l5 B 注意:先设置一个结构体,然后再对结构体里面的内容进行填充,最后把这个结构体输入到初始化函数中。最后但也很重要的是,我们输入到函数里面,对结构体,我们用指针引入进去就好了!!!&+结构体名。 2. uint8_t GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin); 定义:"ReadInputDataBit"中文直译就是“读”“输入”“数据”“位”,所以这个函数是用来读取某一个口的某一引脚的电平(0或1)。 输入:①、GPIO_TypeDef* GPIOx:指的是哪一个“口”,具体啥内容和啥书写格式与前面一样。②、uint16_t GPIO_Pin:指的是哪一个引脚,具体啥内容和啥书写格式与前面一样。 输出:高低电平。 ' ^) L, I. Q( K) C4 R+ e& _: H' V 例子:: w$ C* `0 F9 o' n
3. uint16_t GPIO_ReadInputData(GPIO_TypeDef* GPIOx);& o' R) @( ] \' |) q K' T+ U1 M 定义:"ReadInputData"中文直译就是“读”“输入”“数据”,与前面的对比就是他这个函数少了“位”这个符号。所以这个函数是用来读取某一个口所有引脚的电平。5 a" ~9 H- l3 v1 b6 F" q& y# t: A 输入:GPIO_TypeDef* GPIOx:哪一个口。) _5 L3 V* Y5 r+ r! t7 r6 \2 C 输出:一组的高低电平。 7 P. [$ R. I! W) V N* G; ]: A 例子:
4. uint8_t GPIO_ReadOutputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);) o1 a9 |0 g' l7 | 定义:"ReadOutputDataBit"中文直译就是“读”“输出”“数据”“位”,所以这个函数是用来读取某一个口的某一引脚的输出电平(0或1)。% A# [9 }0 V1 F& H- e0 y) s 输入:①、GPIO_TypeDef* GPIOx:指的是哪一个“口”,具体啥内容和啥书写格式与前面一样。②、uint16_t GPIO_Pin:指的是哪一个引脚,具体啥内容和啥书写格式与前面一样。 输出:高低电平。(指这个函数的输出) 例子:
+ L) X+ B9 N. Y) k* Y/ w- i) }' e 5. uint16_t GPIO_ReadOutputData(GPIO_TypeDef* GPIOx); & J! y: s, \: Y 定义:"ReadOutputData"中文直译就是“读”“输出”“数据”,与前面的对比就是他这个函数少了“位”这个符号。所以这个函数是用来读取某一个口所有引脚的输出电平。3 X3 e4 ~; V& x$ x8 n# N& n 输入:GPIO_TypeDef* GPIOx:哪一个口。: s$ M1 B4 }5 j% { 输出:一组的高低电平。(指函数的输出)3 e9 Y% x; p+ H0 y0 l8 r* ~' Z4 I) B7 j 例子:
6. void GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin); 定义:"SetBits"中文直译就是“设置”“位”,所以这个函数是用来给某一个口的某个引脚进行高低电平设置的。 输入:①、GPIO_TypeDef* GPIOx:指的是哪一个“口”,具体啥内容和啥书写格式与前面一样。②、uint16_t GPIO_Pin:指的是哪一个引脚,具体啥内容和啥书写格式与前面一样。6 L+ U" G" N3 K7 t 输出:对函数无输出,但是实际上对芯片的若干引脚进行的高低电平设置,只是这样的结果我们不必在C语言平台里面看到,故对C函数而言是无输出。. x2 q; ]! g" x! ~6 }( w3 f3 u 例子:- y1 j/ q0 q7 C5 N" @
7. void GPIO_ResetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin); 定义:"ResetBits"中文直译就是“重设置”“位”,所以这个函数是用来给某一个口的某个引脚进行高低电平设置的。主要是低电平(复位)。; T) `" p- v! G# z 输入:①、GPIO_TypeDef* GPIOx:指的是哪一个“口”,具体啥内容和啥书写格式与前面一样。②、uint16_t GPIO_Pin:指的是哪一个引脚,具体啥内容和啥书写格式与前面一样。" Q5 ?. s6 ]! D+ }# w( ~- G3 D& v 输出:对函数无输出,但是实际上对芯片的若干引脚进行的高低电平设置,只是这样的结果我们不必在C语言平台里面看到,故对C函数而言是无输出。# j5 D) B# V- M. O 例子:
8. void RCC_APB2PeriphClockCmd(uint32_t RCC_APB2Periph, FunctionalState NewState)& Z0 a' p+ w+ j/ @ 定义:STM32认为,每个引脚都要有自己的时钟设置,因此我们在进行位操作或者“口”操作的时候,要先对我们即将操作的“口”进行时钟设定。 输入:①、uint32_t RCC_APB2Periph:这个是用来选中你要进行时钟设定的“口”。例如:RCC_APB2Periph_GPIOD;RCC_APB2Periph_GPIOA。然后注意怎么书写这个变量。②、FunctionalState NewState:这个是一个标记,里面用枚举法告诉了我们只能有两个形式。具体代码入下:% H2 H, y3 @/ w, a) K/ @- h/ S' w
/ N3 O" p9 w8 ?# ]# z5 e& O 输出:对函数无输出,但是实际上对芯片的某个口进行了时钟设置,只是这样的结果我们不必在C语言平台里面看到,故对C函数而言是无输出。 例子:# V# a3 L* ?7 U& l8 z* t+ E2 q
———————————————— 版权声明:被大佬糊弄的只会点灯的小菜鸡7 n) T) y4 k, J! ?' e 如有侵权请联系删除 + d( O& ~$ L7 p2 L: m1 G+ U7 B : `4 U: ]( k+ I! V+ d) R0 y |
【STM32H735G-DK 测评】STM32H735G-DK External Loder 编译和测试
Keil-MDK 在线调试设置断点的高级用法
请教下STM32N6570 怎么把分辨率改成320x240并可以全屏显示
【福利三:逢7发帖赢大礼】想要充分利用STM32H743VI片内的RAM空间(但并不顺利)
基于stm32平台上的IC-MU磁绝对值编码器SPI通讯和码盘数据处理
使用STM32 MCU和MPU连接PDM数字麦克风
分享STM32资料-采用 STM32U031R8 MCU 的 STM32 Nucleo-64 开发板,官方资料,数据手册等资料
HRTIM 指南
使用 STM32 的 DWT 单元监控内存
DAC,COMP,HRTIM Fault 功能的使用
微信公众号
手机版