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)

//

//

/

相关推荐
HXR_plume18 分钟前
【计算机网络】王道考研笔记整理(1)计算机网络体系结构
网络·笔记·计算机网络
笑鸿的学习笔记34 分钟前
qt-C++语法笔记之Stretch与Spacer的关系分析
c++·笔记·qt
景彡先生1 小时前
STM32中SPI协议详解
stm32·单片机·嵌入式硬件
艾莉丝努力练剑1 小时前
【C语言】学习过程教训与经验杂谈:思想准备、知识回顾(三)
c语言·开发语言·数据结构·学习·算法
巴伦是只猫1 小时前
【机器学习笔记Ⅰ】3 代价函数
人工智能·笔记·机器学习
ZZZS05161 小时前
stack栈练习
c++·笔记·学习·算法·动态规划
位东风2 小时前
【c++学习记录】状态模式,实现一个登陆功能
c++·学习·状态模式
Star Curry2 小时前
【新手小白的嵌入式学习之路】-STM32的学习_GPIO 8种模式学习心得
stm32·嵌入式硬件·学习
ZERONG_H2 小时前
STM32固件升级设计——内部FLASH模拟U盘升级固件
stm32·单片机·嵌入式硬件
猫猫的小茶馆2 小时前
【STM32】ADC模数转换基本原理
stm32·单片机·嵌入式硬件·mcu·51单片机