0%

HAL库 - 定时器输出比较

输出比较的8钟模式

输出比较的8钟模式

输出时的CH1,为正极性,信号原样输出
输出时的CH1N,为负极性,信号取反输出

通道的使用方法

通道的使用方法
最上面的三个选项都是Input Capture(输入捕获)
PWM Generation 代表PWM的产生,和PWM1和PWM2有关
Forced Output 代表强制输出,和Force Active或Force Inactive有关
Output Compare代表除PWM外的其他6种模式

模式含义
No Output两种输出都禁止
CHx只使能正常输出
CHxN只使能互补输出
CHx CHxN两种输出都使能

常用函数

HAL_StatusTypeDef HAL_TIM_PWM_Start(TIM_HandleTypeDef *htim, uint32_t CHANNEL)
作用:启动PWM正常输出
参数htim:填写定时器句柄指针。例如:&htim1
参数CHANNEL:通道,例如TIM_CHANNEL_1

HAL_StatusTypeDef HAL_TIMEx_PWM_Start(TIM_HandleTypeDef *htim, uint32_t CHANNEL)
作用:启动PWM互补输出
参数htim:填写定时器句柄指针。例如:&htim1
参数CHANNEL:通道,例如TIM_CHANNEL_1

__HAL_TIM_GET_PRESCALER(__HANDLE__)
作用:读PSC预分频器

__HAL_TIM_SET_PRESCALER(__HANDLE__, __VAL__)
作用:写PSC预分频器

__HAL_TIM_GET_COUNTER(__HANDLE__)
作用:读CNT计数器
__HAL_TIM_SET_COUNTER(__HANDLE__, __VAL__)
作用:写CNT计数器

__HAL_TIM_GET_COMPARE(__HANDLE__, __CHANNEL__)
作用:读CCR重复计数器
__HAL_TIM_SET_COMPARE(__HANDLE__, __CHANNEL__, __VAL__)
作用:写CCR重复计数器

示例:呼吸灯正常输出和互补输出

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/* USER CODE BEGIN WHILE */
HAL_TIM_PWM_Start(&htim1, TIM_CHANNEL_1);//启动正常输出
HAL_TIMEx_PWMN_Start(&htim1, TIM_CHANNEL_1);//启动互补输出
while (1)
{
float t = HAL_GetTick() * 0.001;//获取当前时间
float duty = 0.5 * sin(2*3.14*t)+0.5;//计算占空比
uint16_t arr = __HAL_TIM_GetAutoreload(&htim1);
uint16_t ccr = duty * (arr + 1);//计算CCR寄存器的值
__HAL_TIM_SET_COMPARE(&htim1, TIM_CHANNEL_1, ccr);//计算结果写入ccr

/* USER CODE END WHILE */

/* USER CODE BEGIN 3 */
}