STM32引脚复用功能详解(标准库、LL库、HAL库对比)
STM32的(标准库、LL库、HAL库)引脚复用功能(以GPIO输出PWM为例)
前言:STM32的GPIO引脚工作模式上拉输入、浮空输入、模拟输入、下拉输入,输出有推挽输出、开漏输出、复用推挽、复用开漏,此次详细描述复用推挽以及复用开漏模式。
IO引脚内部详解

1.时基单元
2.输出比较单元
3.GPIO配置
4运行控制
分别对应标准库:(使用PA0引脚,TIME2定时器)
1.TIM_TimeBaseInit(TIM2, &TIM_TimeBaseInitStructure); //时基单元
2.TIM_OC3Init(TIM2, &TIM_OCInitStructure); //输出比较单元
3.GPIO_Init(GPIOA, &GPIO_InitStructure); //GPIO配置
4.TIM_Cmd(TIM2, ENABLE); //使能TIM2,定时器开始运行//运行控制
HAL库
1.HAL_TIM_Base_Init(&htim2);//时基单元
2.HAL_TIM_PWM_ConfigChannel(&htim2, &sConfigOC, TIM_CHANNEL_1);//输出比较单元
3. HAL_GPIO_Init(MCO1_GPIO_PORT, &gpio);//GPIO配置
4.HAL_TIM_PWM_Start(&htim2,TIM_CHANNEL_1);//运行控制
gpio.Mode = GPIO_MODE_AF_PP;//复用推挽输出功能
gpio.Speed = GPIO_SPEED_FREQ_HIGH;//引脚速度快速
gpio.Pull = GPIO_NOPULL;
gpio.Pin = MCO1_PIN;
/* MCO1 Clock Enable */
MCO1_CLK_ENABLE();
HAL_GPIO_Init(MCO1_GPIO_PORT, &gpio);
/* Configure the MCO clock source */
__HAL_RCC_MCO1_CONFIG(RCC_MCOSource, RCC_MCODiv);
LL库对应设置如下:
- LL_TIM_Init(TIM2, &TIM_InitStruct);//时基单元
- LL_TIM_OC_Init(TIM2, LL_TIM_CHANNEL_CH1, &TIM_OC_InitStruct);//输出比较
- LL_GPIO_Init(STM32_PWM_GPIO_Port, &GPIO_InitStruct);//GPIO配置
- LL_TIM_CC_EnableChannel(TIM2,LL_TIM_CHANNEL_CH1);
LL_TIM_EnableCounter(TIM2);
LL_TIM_EnableAllOutputs(TIM2);//运行控制
GPIO_InitStruct.Pin = STM32_PWM_Pin;
GPIO_InitStruct.Mode = LL_GPIO_MODE_ALTERNATE;//复用功能
GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_VERY_HIGH;
GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_PUSHPULL;
GPIO_InitStruct.Pull = LL_GPIO_PULL_NO;
GPIO_InitStruct.Alternate = LL_GPIO_AF_2;//复用模式2
LL_GPIO_Init(STM32_PWM_GPIO_Port, &GPIO_InitStruct);
图片内容参考江协科技
作者:@#~~孙