如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)
//
//
/