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)被熄灭。