使用CubeMX配置GPIO进行STM32开发

        参考《STM32中文参考手册_V10》,研究CubeMX中有关GPIO的配置。

一、配置参数

1)GPIO output level:只有当引脚设置为“GPIO output”时才需要设置

        High:GPIO输出初始化为高电平

        Low:GPIO输出初始化为低电平

2)GPIO mode

        Output Push Pull:推挽输出,能输出高低电平,且高低电平都有驱动能力。以PB13引脚为例,若需要通过其控制LED灯,则该引脚应配置为“Output Push Pull”模式,对应标准库函数中的“GPIO_Mode_Out_PP”

        Output Open Drain:开漏输出,只能输出低电平,需要借助外部上拉电阻才能输出高电平,对应标准库函数中的“GPIO_Mode_Out_OD”

        Analog mode:模拟输入,ADC采样信号输入引脚的配置模式,对应标准库函数中的“GPIO_Mode_AIN”

        Alternate Function Push Pull:推挽式复用功能,对应标准库函数中的“GPIO_Mode_AF_PP”

        Input mode:输入模式,配合No pull-up/pull-down可形成GPIO_Mpde_IN_FLOATING、GPIO_Mode_IPD、GPIO_Mode_IPU等不同工作模式

3)GPIO Pull-up/Pul-down

        No pull-up/pull-down:无内部上拉或下拉

        Pull-up:内部上拉

        Pull-down:内部下拉

4)Maximum output speed

        Low:低速,对应标准库函数中的“GPIO_Speed_2MHz”

        Medium:中速,对应标准库函数中的“GPIO_Speed_10MHz”

        High:高速,对应标准库函数中的“GPIO_Speed_50MHz”

5)User Label:用户标签,可以按照需要给引脚命名

  • 普通GPIO口配置(用于控制LED灯)
  •   ADC引脚配置
  •  串行烧录引脚配置
  •  TIM比较输出引脚配置
  •  UART引脚配置
  •  二、代码对比

  • 普通GPIO配置(CubeMX生成的代码)
  •   /*Configure GPIO pin Output Level */
      HAL_GPIO_WritePin(GPIOB, GPIO_PIN_12, GPIO_PIN_RESET);
    
      /*Configure GPIO pin : PB12 */
      GPIO_InitStruct.Pin = GPIO_PIN_12;
      GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
      GPIO_InitStruct.Pull = GPIO_NOPULL;
      GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
      HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);
  • 普通GPIO配置(标准库代码)
  • 	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;	
    	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;          		                      
    	GPIO_Init(GPIOB, &GPIO_InitStructure);	
  • ADC引脚配置(CubeMX生成的代码)
  •     GPIO_InitStruct.Pin = GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_2;
        GPIO_InitStruct.Mode = GPIO_MODE_ANALOG;
        HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
  • ADC引脚配置(标准库代码)
  • 	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
    	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;//ADC0
    	GPIO_Init(GPIOA, &GPIO_InitStructure);
    
    	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
    	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;//ADC1
    	GPIO_Init(GPIOA, &GPIO_InitStructure);	
    	
    	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
    	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;//ADC2
    	GPIO_Init(GPIOA, &GPIO_InitStructure);	
  • UART引脚配置(CubeMX生成的代码)
  •     GPIO_InitStruct.Pin = GPIO_PIN_9|GPIO_PIN_12;
        GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
        GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
        HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
    
        GPIO_InitStruct.Pin = GPIO_PIN_10;
        GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
        GPIO_InitStruct.Pull = GPIO_NOPULL;
        HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
  • UART引脚配置(标准库代码)
  • 	//TX
        GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
        GPIO_Init(GPIOA, &GPIO_InitStructure); 
    	
        //RX  	
    	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
        GPIO_Init(GPIOA, &GPIO_InitStructure); 
    	
    	//RN
    	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;
    	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
    	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    	GPIO_Init(GPIOA, &GPIO_InitStructure);
    

    三、小结

            使用CubeMX生成的代码与标准库代码基本一致,初学者配置起来感觉还是挺繁琐的,容易漏配或错配。

    物联沃分享整理
    物联沃-IOTWORD物联网 » 使用CubeMX配置GPIO进行STM32开发

    发表回复