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);

定时器函数

img

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

更新于

请我喝[茶]~( ̄▽ ̄)~*

bangdexuanyuan 微信支付

微信支付