除编码器模式外,其他时钟源都是上升沿才使计数器加加
TRGI外部时钟模式1是来自接口选择器的时钟源
该接口选择器可以选择:
ITRX属于别的定时器来的级联时钟源,它可以使其他定时器作为他自己的滤波器、
TI1_ED是从捕获通道1嫁接上来的时钟源,它的作用是可以让捕获通道1的信号下降沿变上升沿,上升沿不变,使得上下升沿都能使计数器加加
TI1FP1是从捕获通道1嫁接上来的时钟源,没啥特别功能
TI2FP2是从捕获通道2嫁接上来的时钟源,没啥特别功能
ETRF也是外接引脚,其实外部时钟模式2的外部引脚就是来自这个引脚选择器的ETRF,它两的唯一区别是走引脚选择器的ETRF会触发一次TGI事件,走外部时钟模式2的ETRF没有触发
编码器模式:是把捕获通道1,2的TI1FP1,TI2FP2嫁接到编码器接口
内部时钟模式就是内部总线传过来的时钟
#include "./BSP/TIMER/gtim.h"
TIM_HandleTypeDef g_timx_pwm_chy_handle;
/* 通用定时器PWM输出初始化函数 */
void gtim_timx_pwm_chy_init(uint16_t arr, uint16_t psc)
{
TIM_OC_InitTypeDef timx_oc_pwm_chy;
g_timx_pwm_chy_handle.Instance = TIM3;
g_timx_pwm_chy_handle.Init.Prescaler = psc;
g_timx_pwm_chy_handle.Init.Period = arr;
g_timx_pwm_chy_handle.Init.CounterMode = TIM_COUNTERMODE_UP;
HAL_TIM_PWM_Init(&g_timx_pwm_chy_handle);
timx_oc_pwm_chy.OCMode = TIM_OCMODE_PWM1;
timx_oc_pwm_chy.Pulse = arr / 2;
timx_oc_pwm_chy.OCPolarity = TIM_OCPOLARITY_LOW;
HAL_TIM_PWM_ConfigChannel(&g_timx_pwm_chy_handle, &timx_oc_pwm_chy, TIM_CHANNEL_2);
HAL_TIM_PWM_Start(&g_timx_pwm_chy_handle, TIM_CHANNEL_2);
}
/* 定时器输出PWM MSP初始化函数 */
void HAL_TIM_PWM_MspInit(TIM_HandleTypeDef *htim)
{
if(htim->Instance == TIM3)
{
GPIO_InitTypeDef gpio_init_struct;
__HAL_RCC_GPIOB_CLK_ENABLE();
__HAL_RCC_TIM3_CLK_ENABLE();
gpio_init_struct.Pin = GPIO_PIN_5;
gpio_init_struct.Mode = GPIO_MODE_AF_PP; /* 推挽复用 */
gpio_init_struct.Pull = GPIO_PULLUP; /* 上拉 */
gpio_init_struct.Speed = GPIO_SPEED_FREQ_HIGH; /* 高速 */
HAL_GPIO_Init(GPIOB, &gpio_init_struct);
__HAL_RCC_AFIO_CLK_ENABLE();
__HAL_AFIO_REMAP_TIM3_PARTIAL();
}
}