STM32学习之 模块初始化和常用GPIO函数笔记

如LED模块初始化:

c 复制代码
void LED_Init(void)
{
	/*开启时钟*/
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);		//开启GPIOA的时钟
	
	/*GPIO初始化*/
	GPIO_InitTypeDef GPIO_InitStructure;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1 | GPIO_Pin_2;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(GPIOA, &GPIO_InitStructure);						//将PA1和PA2引脚初始化为推挽输出
	
	/*设置GPIO初始化后的默认电平*/
	GPIO_SetBits(GPIOA, GPIO_Pin_1 | GPIO_Pin_2);				//设置PA1和PA2引脚为高电平
}

开启时钟:
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);

这行代码用于开启 GPIOA 的时钟。在 STM32 中,所有的外设都需要开启相应的时钟才能正常工作。这里通过RCC_APB2PeriphClockCmd函数开启了 GPIOA 的时钟,参数RCC_APB2Periph_GPIOA指定了要开启时钟的外设是 GPIOA,ENABLE表示开启时钟。

GPIO 初始化:

首先定义了一个GPIO_InitTypeDef类型的结构体GPIO_InitStructure,这个结构体用于配置 GPIO 的参数。

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;

设置 GPIO 的模式

设置 GPIO 的模式为推挽输出(Push - Pull Output)。推挽输出模式可以提供较强的驱动能力,适合驱动 LED 等外部设备。

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1 | GPIO_Pin_2;

初始化引脚

指定要初始化的引脚为 PA1 和 PA2。这里使用了按位或操作来选择多个引脚。

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

设置 GPIO 输出速度

设置 GPIO 的输出速度为 50MHz。这个参数决定了 GPIO 引脚的输出驱动速度。

GPIO_Init(GPIOA, &GPIO_InitStructure);

调用GPIO_Init函数来初始化 GPIOA 的引脚。第一个参数GPIOA指定了要初始化的 GPIO 端口,第二个参数&GPIO_InitStructure是指向前面配置好的结构体的指针,用于传递配置参数。

设置 GPIO 初始化后的默认电平:
GPIO_SetBits(GPIOA, GPIO_Pin_1 | GPIO_Pin_2);

这行代码用于设置 PA1 和 PA2 引脚为高电平。在初始化后,将引脚设置为高电平可以确保在没有其他操作时,LED 处于关闭状态(假设 LED 是低电平点亮的情况)。

整体完成了对 STM32 的 GPIOA 的 PA1 和 PA2 引脚的初始化,将它们配置为推挽输出模式,并设置了初始电平为高电平,通常用于控制连接到这两个引脚上的 LED。

基本都是这个流程

//
GPIO_ReadInputDataBit

用来读取输入数据寄存器某一个端口的输入值。它的参数是指定外设和某一个端口。返回值代表这个端口的高低电平。读取按键,我们就需要用到这个函数。

GPIO_ReadInputData

比上一函数少了个bit ,它是用来读取整个输入数据寄存器,参数只有一个GPIOx,用来指定外设。返回值是是一个16位的数据,每一位代表一个端口值。

GPIO_ReadOutputDataBit

用来读取输出数据寄存器的某一个。所以原则上来说,它并不是用来读取端口的输入数据的,这个函数一般用于输出模式下,用来看一下自己输出的是什么。

GPIO_ReadOutputData

最后一个函数也是少了一个bit,意思也是一样,是用来读取整个输出寄存器的

///

//
GPIO_ResetBits函数

将指定的 GPIO 引脚设置为低电平;

函数原型:void GPIO_ResetBits ( GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin )。其中GPIOx为要操作的 GPIO端口(如GPIOA、GPIOB等),GPIO_Pin为要设置为低电平的引脚编号,可以是单个引脚(GPIO_Pin_0),也可以是多个引脚的组合(通过按位或操作,如GPIO_Pin_0 | GPIO_Pin_1)

GPIO_WriteBit函数

对指定的 GPIO 引脚进行操作,可以将引脚设置为高电平或者低电平;

函数原型:void GPIO_WriteBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin,BitAction BitVal)。GPIOx和GPIO_Pin含义同上,BitVal是BitAction类型的参数,它可以是Bit_RESET(代表低电平)或者Bit_SET(代表高电平)。

GPIO_Write函数

对指定的 GPIO 端口进行操作,一次性设置端口中所有引脚的电平;

函数原型:void GPIO_Write(GPIO_TypeDef* GPIOx, uint16_t PortVal)。GPIOx为要操作的GPIO端口,PortVal是一个uint16_t类型的值,这个值的每一位对应一个引脚的电平状态,例如对于GPIOA端口,如果PortVal的最低位为0,则PA0引脚为低电平;如果为1,则PA0引脚为高电平。

假设有一个 8 位的外部设备接口连接到GPIOA的PA0 - PA7引脚,要输出一个字节的数据0x55(二进制为01010101)到这个接口,可以使用GPIO_Write(GPIOA, 0x55)

//

//

/

相关推荐
xiaoxiangsiyan3 分钟前
网络智能化转型核心模块全解析
运维·服务器·网络·数据库·学习·架构·php
Messy create21 分钟前
【BMS-AFE汇总】
stm32·能源
北风toto24 分钟前
软件设计师(中级)做题笔记
笔记
minglie126 分钟前
espidf的iic波特律动oled
学习
从零开始的嵌入式之旅29 分钟前
day32
linux·c语言·经验分享·笔记·嵌入式硬件
MartinYeung51 小时前
[论文学习]智能合约不变式防御网络犯罪
网络·学习·智能合约
xx~t1 小时前
嵌入式学习——进程与线程2
linux·c语言·学习·进程与线程
我爱cope1 小时前
【计算机网络 | 网络层10:OSPF 与 BGP:自治系统内部和互联网之间如何路由?】
网络·学习·计算机网络·智能路由器
白猫不黑1 小时前
网络空间安全/信息安全专业学习规划(超级详细版)
运维·学习·安全·web安全·网络安全·信息安全
HyperAI超神经1 小时前
MiniMax H3 突破视频生成边界,音画内容一体生成;Ornith-1.5-35B-A3B 探索推理模型自进化训练新模式
人工智能·深度学习·学习·音视频·多模态·视频生成·推理模型