目录
一、本实例测试的目的
二、硬件和CubeMX项目配置
1、硬件开发板
2、项目配置
(1)定时器TIM2_CH1
(2)时钟和Debug
三、使用比较功能生成PWM
1、启动定时器
2、TIM2_CH1通道GPIO初始化
3、下载与测试
一、本实例测试的目的
- 使用TIM2_CH1的输出比较功能,控制PA5引脚翻转输出,使得LD2闪烁;
- LD2闪烁频率受CCR控制;
- 通过输出比较生成的PWM的起始位置由CCR控制;
二、硬件和CubeMX项目配置
1、硬件开发板
本试验使用的硬件资源参考本文作者的文章:细说STM32单片机使用通用定时器生成固定占空比和可变占空比PWM波的方法-CSDN博客 https://wenchm.blog.csdn.net/article/details/142212487http:// https://wenchm.blog.csdn.net/article/details/142212487
2、项目配置
(1)定时器TIM2_CH1
Channel1选择Output Compare CH1;Clock Source选择Internal Clock;
- One PulseMode复选框用于设置单脉冲模式,定时器输出比较的单脉冲模式是一种特殊模式,有一组以“HAL_TIM_OnePulse”为前缀的HAL 驱动函数。本例不使用单脉冲模式。
- Counter Settings组用于设置定时器的基本参数,主要设置结果如下。
- PSC的值设置为16999,所以计数器时钟频率为10000Hz。
- ARR的值设置为4999,所以定时器 UEV事件周期为500ms。
- Output Compare Channel1组是通道1的输出比较参数,各个参数的意义和设定值如下。
- Mode,输出比较模式,有冻结、有效电平、翻转等多种选择。这里设置为Toggle on match,也就是在计数器的值与CCR的值相等时,使CH1输出翻转。
- Pulse,脉冲宽度,也就是CCR的值,这里设置为3000,所以脉冲宽度是300 ms。
- Output compare preload,设置CCR是否使用预装载功能。本示例设置为Enable或Disable无影响。
- CH Polarity,通道极性。本示例模式设置为匹配时输出翻转,与此参数无关。
如果CCR和计数器的值匹配,就会使CH1的输出翻转。从原理图上可以看出,CH1的输出是一个方波信号,且不管CCR的值为多少(需要小于ARR的值),方波的占空比总是50%,脉宽总是与ARR的值相等。
(2)时钟和Debug
HSE选择外部晶振,24MHZ,APB1 = APB2 = 170MHz;
Debug选择Serial Wire;
三、使用比较功能生成PWM
自动定义表示定时器TIM2的外设对象变量htim2,在函数MX_TIM2_Init()中,设置htim2各参数的值之后,调用HAL_TIM_Base Init()进行定时器初始化,调用HAL_TIM_OC_Init() 进行输出比较初始化,然后使用TIM_OC_InitTypeDef类型的变量sConfigOC设置输出比较通道的参数,再调用函数HAL_TIM_OC_ConfigChannel()对TIM2的CH1进行输出比较配置。
1、启动定时器
/* USER CODE BEGIN 2 */
HAL_TIM_Base_Start(&htim2); //启动定时器TIM2
HAL_TIM_OC_Start(&htim2,TIM_CHANNEL_1); //启动CH1的输出比较功�??
/* USER CODE END 2 */
2、TIM2_CH1通道GPIO初始化
自动生成 :
void HAL_TIM_MspPostInit(TIM_HandleTypeDef* htim)
{
GPIO_InitTypeDef GPIO_InitStruct = {0};
if(htim->Instance==TIM2)
{
/* USER CODE BEGIN TIM2_MspPostInit 0 */
/* USER CODE END TIM2_MspPostInit 0 */
__HAL_RCC_GPIOA_CLK_ENABLE();
/**TIM2 GPIO Configuration
PA5 ------> TIM2_CH1
*/
GPIO_InitStruct.Pin = GPIO_PIN_5;
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
GPIO_InitStruct.Pull = GPIO_PULLUP;
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
GPIO_InitStruct.Alternate = GPIO_AF1_TIM2;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
/* USER CODE BEGIN TIM2_MspPostInit 1 */
/* USER CODE END TIM2_MspPostInit 1 */
}
}
3、下载与测试
下载、运行,用眼睛观察到LD2以生成的PWM的频率闪烁。