这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » STM32 » [转]STM32G0学习手册——使用HAL库进行PWM实验

共1条 1/1 1 跳转至

[转]STM32G0学习手册——使用HAL库进行PWM实验

菜鸟
2021-02-22 10:53:26     打赏

目录

前言

PWM模式1与PWM模式2区别

实验步骤


前言

在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等从暗到亮,从亮到暗变化。

原帖地址:https://blog.csdn.net/zrb2753/article/details/106037127?spm=1001.2014.3001.5501



共1条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]