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)

//

//

/

相关推荐
vv啊vv12 分钟前
ROS笔记
笔记
Stanford_110643 分钟前
关于物联网的基础知识(三)——物联网技术架构:连接万物的智慧之道!连接未来的万物之网!
c++·物联网·学习·微信小程序·架构·twitter·微信开放平台
java亮小白19971 小时前
【高项】信息系统项目管理师(三)项目立项管理
经验分享·笔记·学习方法
HinsCoder1 小时前
IDEA使用Git同步教程
java·笔记·git·学习·github·intellij-idea·版本控制
就叫飞六吧1 小时前
Keil C51 与 Keil MDK(ARM-stm32?):嵌入式开发的利器
arm开发·stm32·嵌入式硬件
又熟了1 小时前
stm32新建工程
stm32·单片机·嵌入式硬件
红色的山茶花2 小时前
YOLOv10-1.1部分代码阅读笔记-instance.py
笔记·深度学习·yolo
小猪佩奇TONY2 小时前
Vulkan 学习(12)---- Vulkan pipeline 创建
java·学习·spring
大丈夫立于天地间3 小时前
OSPF - LSA对照表
网络·网络协议·学习·算法·信息与通信