STM32G0学习手册——使用HAL库进行PWM实验
Posted SCCELE
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了STM32G0学习手册——使用HAL库进行PWM实验相关的知识,希望对你有一定的参考价值。
目录
前言
在CubeMx中配置PWM,预分频系数和计数的值决定了波形的周期,pulse决定了占空比。
PWM边沿对齐模式(向上计数)
在PWM模式1下,TIMx_CNT<TIMx_CCRx时,PWM参考信号OCxREF为高,否则为低。
PWM边沿对齐模式(向下计数)
TIMx_CR1中的DIR为1时,执行向下计数。在PWM模式1时,TIMx_CNT>TIMx_CCRx时OCxREF为低,否则为高。
PWM模式1与PWM模式2区别
PWM模式1
在向上计数时,一旦TIMx_CNT<TIMx_CCR1时通道1为有效电平,否则为无效电平
在向下计数时,一旦TIMx_CNT>TIMx_CCR1时通道1为无效电平(OC1REF=0),否则为有效 电平(OC1REF=1)。
PWM模式2
在向上计数时,一旦TIMx_CNT<TIMx_CCR1时通道1为无效电平,否则为有效电平
在向下计数时,一旦TIMx_CNT>TIMx_CCR1时通道1为有效电平,否则为无效电平。
有效电平和无效电平由CCER这个寄存器的CCxP来决定
CC1P:输入/捕获1输出极性(Capture/Compare 1 output polarity)
配置为输出:0:OCx高电平有效 1:OCx低电平有效
实验步骤
生成一个10ms周期的PWM波形,占空比从10~100.。
- CubeMx生成芯片工程,配置SWD调试接口,HSE使用"Crystal/Ceramic Resonator"
- PA0引脚配置为GPIO_EXTI0(配置EXTI中断)
- PB1引脚配置为TIM3_CH4,在TIM3视图中Clock Source 选择"Internal Clock",Channel4选择"PWM Generation CH4"
- 预分频系数填6400-1,计数值填100-1。(计算方法)
- 在工程项目栏中填入项目名称、路径、版本
- 在代码生成中选择自己需要的选项,最后生成代码
- 在int main函数里面添加pwm初始化代码
/* USER CODE BEGIN 2 */
HAL_TIM_PWM_Start(&htim3,TIM_CHANNEL_4);
/* USER CODE END 2 */
- 在int main() 后面添加EXTI上升沿中断回调函数
/* USER CODE BEGIN 4 */
void HAL_GPIO_EXTI_Rising_Callback(uint16_t GPIO_Pin)
/* Prevent unused argument(s) compilation warning */
UNUSED(GPIO_Pin);
HAL_Delay(20);
if(HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_0)==GPIO_PIN_SET)
if(duty_cycle==0)
duty_cycle+=10;
if(duty_cycle==100)
duty_cycle=-10;
Set_PWM_DUTYCYCLE(duty_cycle);
duty_cycle+=duty_cycle;
/* USER CODE END 4 */
- 在int main() 前面添加自定义改变PWM参数的函数
/* USER CODE BEGIN PV */
uint8_t duty_cycle=0;
/* USER CODE END PV */
/* USER CODE BEGIN 0 */
void Set_PWM_DUTYCYCLE(uint8_t duty_cycle)
TIM_OC_InitTypeDef sConfigOC;
sConfigOC.OCMode = TIM_OCMODE_PWM1;
sConfigOC.Pulse = duty_cycle;
sConfigOC.OCPolarity = TIM_OCPOLARITY_HIGH;
sConfigOC.OCFastMode = TIM_OCFAST_DISABLE;
if (HAL_TIM_PWM_ConfigChannel(&htim3, &sConfigOC, TIM_CHANNEL_4) != HAL_OK)
Error_Handler();
HAL_TIM_MspPostInit(&htim3);
HAL_TIM_PWM_Start(&htim3,TIM_CHANNEL_4);
/* USER CODE END 0 */
- 在debug选项卡中勾上"Reset and Run",编译。烧录
- 当你不停按下按钮时,就会看到LED等从暗到亮,从亮到暗变化。
以上是关于STM32G0学习手册——使用HAL库进行PWM实验的主要内容,如果未能解决你的问题,请参考以下文章
STM32G0学习手册——I2C总线使用(使用硬件I2C-HAL库)
STM32G0学习手册——FreeRTOS中使用printf-stdarg.c进行串口打印