void RCC_AHBPeriphClockCmd(uint32_t RCC_AHBPeriph, FunctionalState NewState); | |
void RCC_APB2PeriphClockCmd(uint32_t RCC_APB2Periph, FunctionalState NewState); | |
void RCC_APB1PeriphClockCmd(uint32_t RCC_APB1Periph, FunctionalState NewState); |
定时器函数
void RCC_APB2PeriphClockCmd(uint32_t RCC_APB2Periph, FunctionalState NewState);
NewState 参数是一个枚举类型,用于指示要使能或禁用指定的外设时钟。可选值为:ENABLE 和 DISABLE。
例 1-1:以下代码片段用于使能 GPIOA 和 USART1 外设的时钟:
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_USART1, ENABLE); |
在操作外设之前,必须先使能其时钟。
# 2、引脚配置
GPIO_InitTypeDef 结构体是 STM32 固件库中提供给开发者的一个方便、易用的工具,当我们要配置一个 GPIO 引脚时,需要设置该引脚的多个参数,如引脚方向、输出类型、速度、上拉 / 下拉模式等,这些参数需要通过寄存器进行设置。而寄存器的操作比较繁琐,容易出错,因此 STM32 固件库提供了 GPIO_InitTypeDef 结构体,它封装了对 GPIO 外设寄存器的访问,使得开发者可以通过设置结构体的成员变量,来快速、简单地配置 GPIO 引脚的多个参数。
先配置 GPIO_InitTypeDef 结构体;结构体的定义如下:
这个是已经配置好的模式
typedef struct | |
{ | |
uint16_t GPIO_Pin; /*!< Specifies the GPIO pins to be configured. | |
This parameter can be any value of @ref GPIO_pins_define */ | |
GPIOSpeed_TypeDef GPIO_Speed; /*!< Specifies the speed for the selected pins. | |
This parameter can be a value of @ref GPIOSpeed_TypeDef */ | |
GPIOMode_TypeDef GPIO_Mode; /*!< Specifies the operating mode for the selected pins. | |
This parameter can be a value of @ref GPIOMode_TypeDef */ | |
}GPIO_InitTypeDef; |
GPIO_Pin 表示要配置的 GPIO 引脚,可以使用逻辑或运算符 “|” 将多个引脚组合在一起。
GPIO_Mode 表示 GPIO 引脚的工作模式。
输入 | 输出 | ||
---|---|---|---|
GPIO_Mode_AIN | 模拟输入 | GPIO_Mode_Out_OD | 普通开漏输出 |
GPIO_Mode_IN_FLOATING | 浮空输入 | GPIO_Mode_Out_PP | 普通推挽输出 |
GPIO_Mode_IPU | 上拉输入 | GPIO_Mode_AF_OD | 复用推挽输出 |
GPIO_Mode_IPD | 下拉输入 | GPIO_Mode_AF_PP | 复用开漏输出 |
GPIO_Speed 表示 GPIO 引脚的速度,可选值为低速(GPIO_Speed_2MHz)、中速(GPIO_Speed_10MHz)或高速(GPIO_Speed_50MHz)。
一般默认为普通推挽输出
** 例 2-1:** 将 PA0 和 PA1 两个引脚配置为 50MHz 的推挽输出,并应用于 GPIOA 外设。
GPIO_InitTypeDef GPIO_InitStructure;// 这个 GPIO_InitStructure 就是一个结构体的名称,你也可以改为 u, 然后后面的名称对应都变成 u 就行 | |
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1; | |
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; | |
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; | |
GPIO_Init(GPIOA, &GPIO_InitStructure); |
以上代码将 GPIOA 的 PA0 引脚输出低 / 高电平,即将 PA0 引脚对应的寄存器的输出位设置为 0/1。
注意:在操作 GPIO 引脚之前,必须先配置其为输出模式。否则,GPIO 引脚将不能输出电平。
* 注意:在很多开发板上,GPIO 输出控制 LED 等外设的亮灭,常常使用了 PNP 型晶体管或是开漏输出方式。这种方式下,当 GPIO 引脚输出低电平时,PNP 型晶体管或是开漏输出器件会通电,外设(如 LED)被点亮,而当 GPIO 引脚输出高电平时,PNP 型晶体管或是开漏输出器件不通电,外设(如 LED)被熄灭。