前言PWM模式1与PWM模式2区别实验步骤
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