浙江中钦建设有限公司网站,wordpress过滤html标签了,厦门网页设计学校,视频解析wordpressSTM32-HAL库08-TIM的输出比较模式#xff08;输出PWM的另一种方式#xff09;
一、所用材料#xff1a;
STM32F103C6T6最小系统板 STM32CUBEMX#xff08;HAL库软件#xff09; MDK5 示波器或者逻辑分析仪
二、所学内容#xff1a;
通过定时器TIM的输出比较模式得到预…STM32-HAL库08-TIM的输出比较模式输出PWM的另一种方式
一、所用材料
STM32F103C6T6最小系统板 STM32CUBEMXHAL库软件 MDK5 示波器或者逻辑分析仪
二、所学内容
通过定时器TIM的输出比较模式得到预定频率与占空比的PWM波形其中定时器输出比较模式与PWM模式的区别在于PWM模式在同一个TIM下所有输出口的频率一致不能单独控制单个的频率而输出比较模式就弥补了这一缺点可以对同一个TIM下的各个输出口分别设置频率。
三、CUBEMX配置
第一步老三件套-RCC,SYS,时钟树配置 第二步TIM配置
关键参数配置
Prescale-71auto reload preload-DisableOutput Compare Channel1 -Mode - Toggle on matchOutput Compare Channel2 -Mode - Toggle on match 以及点亮TIM2的所有中断
第二步MDK5程序配置
只需要在main.c中加入中断回调函数即可具体程序如下
/* USER CODE END Header */
/* Includes ------------------------------------------------------------------*/
#include main.h
#include tim.h
#include gpio.h
/* USER CODE BEGIN PTD */
uint16_t OC_Channel1_Pulse125; //改变该值可以改变PWM1的频率
uint16_t OC_Channel2_Pulse1000; //改变该值可以改变PWM2的频率
uint32_t F_PWM1; //PWM1的频率设定值
uint32_t F_PWM2; //PWM2的频率设定值float OC_Channel1_Duty50; //PWM1占空比设定
float OC_Channel2_Duty50; //PWM2占空比设定void SystemClock_Config(void);int main(void)
{HAL_Init();SystemClock_Config();/* Initialize all configured peripherals */MX_GPIO_Init();MX_TIM1_Init();/* USER CODE BEGIN 2 */HAL_TIM_OC_Start_IT(htim1,TIM_CHANNEL_1); //使能TIM4通道1的输出比较中断TIM_CCxChannelCmd(TIM1,TIM_CHANNEL_1,TIM_CCx_ENABLE); //使能TIM4通道1HAL_TIM_OC_Start_IT(htim1,TIM_CHANNEL_2); //使能TIM4通道1的输出比较中断TIM_CCxChannelCmd(TIM1,TIM_CHANNEL_2,TIM_CCx_ENABLE); //使能TIM4通道1/* USER CODE END 2 *//* Infinite loop *//* USER CODE BEGIN WHILE */while (1){F_PWM18000;OC_Channel1_Pulse1000000/F_PWM1;F_PWM25000;OC_Channel2_Pulse1000000/F_PWM2;HAL_Delay(1);/* USER CODE END WHILE *//* USER CODE BEGIN 3 */}/* USER CODE END 3 */
}/* USER CODE BEGIN 4 */
void HAL_TIM_OC_DelayElapsedCallback(TIM_HandleTypeDef *htim)
{uint32_t OC_Count 0;OC_Count __HAL_TIM_GET_COUNTER(htim);if(htim-Instance TIM1){if(htim-Channel HAL_TIM_ACTIVE_CHANNEL_1){if(GPIO_PIN_RESET HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_8)){__HAL_TIM_SET_COMPARE(htim1,TIM_CHANNEL_1,OC_Count OC_Channel1_Pulse - OC_Channel1_Duty*OC_Channel1_Pulse/100);}else{__HAL_TIM_SET_COMPARE(htim1,TIM_CHANNEL_1,OC_Count OC_Channel1_Duty*OC_Channel1_Pulse/100);}}else if(htim-Channel HAL_TIM_ACTIVE_CHANNEL_2){if(GPIO_PIN_RESET HAL_GPIO_ReadPin(GPIOA,GPIO_PIN_9)){__HAL_TIM_SET_COMPARE(htim1,TIM_CHANNEL_2,OC_Count OC_Channel2_Pulse - OC_Channel2_Duty*OC_Channel2_Pulse/100);}else{__HAL_TIM_SET_COMPARE(htim1,TIM_CHANNEL_2,OC_Count OC_Channel2_Duty*OC_Channel2_Pulse/100);}}}
}
/* USER CODE END 4 */
本文中的代码资源免费提供下载页面如下 https://download.csdn.net/download/qq_45854134/88495306