欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 财经 > 产业 > 32单片机——GPIO配置步骤

32单片机——GPIO配置步骤

2025/4/26 3:03:14 来源:https://blog.csdn.net/2301_81699298/article/details/147468423  浏览:    关键词:32单片机——GPIO配置步骤

1、使能时钟

__HAL_RCC_GPIOx_CLK_ENABLE();        //x:A~E

2、设置工作模式

HAL_GPIO_Init (GPIO_TypeDef *GPIOx, GPIO_InitTypeDef *GPIO_Init); 

(1)形参1:GPIO_TypeDef *GPIOx是端口号(x:A~E)

(2) 形参2:GPIO_InitTypeDef *GPIO_Init是GPIO_InitTypeDef类型的结构体变量

typedef struct{
  uint32_t Pin;       /* 指定要配置的 GPIO 引脚。-------引脚号
                           此参数可以是 @ref GPIO_pins_define 的任何值 */

  uint32_t Mode;      /* 指定所选引脚的模式。-------模式设置
                           此参数可以是 @ref GPIO_mode_define 的值 */

  uint32_t Pull;      /* 指定所选引脚的 Pull-up 或 Pull-Down 激活。-------上拉下拉设置
                           此参数可以是 @ref GPIO_pull_define */

  uint32_t Speed;     /* 指定选定引脚的速度。-------速度设置
                           此参数可以是 @ref GPIO_speed_define 的值 */
} GPIO_InitTypeDef;

Pin表示引脚号,范围:GPIO_PIN_0到GPIO_PIN_15,另外还有GPIO_PIN_All和GPIO_PIN_MASK可选

例如: LED0被PB5管脚控制,则为GPIO_PIN_5

Mode是GPIO 的模式选择,有以下选择项: 

#define  GPIO_MODE_INPUT                0x00000000u   /*    输入模式     */
#define  GPIO_MODE_OUTPUT_PP     0x00000001u   /*      推挽输出模式    */
#define  GPIO_MODE_OUTPUT_OD    0x00000011u   /*      开漏输出模式   */
#define  GPIO_MODE_AF_PP                0x00000002u   /*     推挽复用模式     */
#define  GPIO_MODE_AF_OD                0x00000012u   /*     开漏复用模式    */
#define  GPIO_MODE_AF_INPUT          GPIO_MODE_INPUT          /*    模拟输入    */

Pull用于配置上下拉电阻,有以下选择项:

#define  GPIO_NOPULL             0x00000000u   /*    无上下拉  */
#define  GPIO_PULLUP             0x00000001u   /*     上拉         */
#define  GPIO_PULLDOWN       0x00000002u   /*     下拉         */ 

Speed用于配置GPIO的速度,有以下选择项:

#define  GPIO_SPEED_FREQ_LOW              (GPIO_CRL_MODE0_1)     /*  低速  */
#define  GPIO_SPEED_FREQ_MEDIUM        (GPIO_CRL_MODE0_0)    /*  中速  */
#define  GPIO_SPEED_FREQ_HIGH             (GPIO_CRL_MODE0)        /*  高速  */ 

3、设置输出状态(可选)

(1) 

HAL_GPIO_WritePin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin, GPIO_PinState PinState);

是GPIO口的写引脚函数

①形参1:端口号,可以选择范围:GPIOA~GPIOG

②形参2:引脚号,可以选择范围:GPIO_PIN_0~GPIO_PIN_15

③形参3:要设置输出的状态,有两个选择:GPIO_PIN_SET表示高电平,GPIO_PIN_RESET表示低电平

(2) 

HAL_GPIO_TogglePin (GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin); 

是GPIO口的电平翻转函数 

①形参1:端口号,可以选择范围:GPIOA~GPIOG

②形参2:引脚号,可以选择范围:GPIO_PIN_0~GPIO_PIN_15

4、读取输入状态(可选)

HAL_GPIO_ReadPin(GPIO_TypeDef *GPIOx, uint16_t GPIO_Pin);

是GPIO口的读引脚函数

(1)形参1:端口号,可以选择范围:GPIOA~GPIOG

(2)形参2:引脚号,可以选择范围:GPIO_PIN_0到GPIO_PIN_15

5、以led初始化为例

void led_init(void){
    GPIO_InitTypeDef g_gppio_struct;
    __HAL_RCC_GPIOE_CLK_ENABLE();  //使能时钟--PE5--LED1
    __HAL_RCC_GPIOB_CLK_ENABLE();  //使能时钟--PB5--LED0
    
    g_gppio_struct.Pin=GPIO_PIN_5;
    g_gppio_struct.Mode=GPIO_MODE_OUTPUT_PP;  //推挽输出
    g_gppio_struct.Pull=GPIO_NOPULL;  //无上下拉
    g_gppio_struct.Speed=GPIO_SPEED_FREQ_HIGH;  //高速
    HAL_GPIO_Init(GPIOE,&g_gppio_struct);  //初始化LED1
    
    g_gppio_struct.Pin=GPIO_PIN_5;
    g_gppio_struct.Mode=GPIO_MODE_OUTPUT_PP;  //推挽输出
    g_gppio_struct.Pull=GPIO_NOPULL;  //无上下拉
    g_gppio_struct.Speed=GPIO_SPEED_FREQ_HIGH;  //高速
    HAL_GPIO_Init(GPIOB,&g_gppio_struct);  //初始化LED0
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词