4 通用定时器(TIM3 )
通用定时器(TIM3)主要用于以下场合:对输入信号进行计数、测量输入信号的脉冲宽度和产生输出波形等。
4.1 TIM3 主要特性
16 位自动装载计数器。(可实现向上计数、向下计数、向上/下计数)。
16 位可编程预分频器。(分频系数可配置为 1 到 65536 之间的任意值)
TIM3 最多支持 4 个通道
通道工作模式:PWM 输出、输出比较、单脉冲模式输出、输入捕获
如下事件发生时产生中断/DMA:
更新事件
触发事件
输入捕获
输出比较
可通过外部信号控制定时器
多个定时器内部连接在一起,以实现定时器的同步或链接
增量(正交)编码器接口:用于追踪运行轨迹和解析旋转方位
霍尔传感器接口:用于三相电机控制
支持捕获内部比较器输出信号。
通用定时器PWM输出程序配置
//使用 TIM3 的CH1(PA6) CH2(PA7)
void TIM3_PWM_Init(u32 arr,u32 psc)
{
GPIO_InitType GPIO_InitStructure;
TIM_TimeBaseInitType TIM_TimeBaseStructure;
OCInitType TIM_OCInitStructure;
/* TIM3 clock enable */
RCC_EnableAPB1PeriphClk(RCC_APB1_PERIPH_TIM3, ENABLE);
/* GPIOA and GPIOB clock enable */
RCC_EnableAPB2PeriphClk(RCC_APB2_PERIPH_GPIOA |
RCC_APB2_PERIPH_AFIO,ENABLE);
GPIO_InitStruct(&GPIO_InitStructure);
/* GPIOA Configuration:TIM3 Channel1, 2, 3 and 4 as alternate function
push-pull */
GPIO_InitStructure.Pin = GPIO_PIN_6;
GPIO_InitStructure.GPIO_Mode = GPIO_MODE_AF_PP;
GPIO_InitStructure.GPIO_Current = GPIO_DC_LOW;
GPIO_InitStructure.GPIO_Alternate = GPIO_AF2_TIM3;
GPIO_InitPeripheral(GPIOA, &GPIO_InitStructure);
GPIO_InitStructure.Pin = GPIO_PIN_7;
GPIO_InitStructure.GPIO_Alternate = GPIO_AF2_TIM3;
GPIO_InitPeripheral(GPIOA, &GPIO_InitStructure);
/* Time base configuration */
TIM_TimeBaseStructure.Period = arr;
TIM_TimeBaseStructure.Prescaler = psc;
TIM_TimeBaseStructure.ClkDiv = 0;
TIM_TimeBaseStructure.CntMode = TIM_CNT_MODE_UP;
TIM_InitTimeBase(TIM3, &TIM_TimeBaseStructure);
//pwm通道配置
TIM_OCInitStructure.OcMode = TIM_OCMODE_PWM1;
TIM_OCInitStructure.OcPolarity = TIM_OC_POLARITY_HIGH;
/* PWM1 Mode configuration: Channel1 */
TIM_OCInitStructure.OutputState = TIM_OUTPUT_STATE_ENABLE;
TIM_OCInitStructure.Pulse = 0;
/* PWM1 Mode configuration: Channel2 */
TIM_OCInitStructure.OutputState = TIM_OUTPUT_STATE_ENABLE;
TIM_OCInitStructure.Pulse = 0;
TIM_InitOc1(TIM3, &TIM_OCInitStructure);
TIM_InitOc2(TIM3, &TIM_OCInitStructure);
TIM_ConfigOc1Preload(TIM3, TIM_OC_PRE_LOAD_ENABLE);
TIM_ConfigOc2Preload(TIM3, TIM_OC_PRE_LOAD_ENABLE);
TIM_ConfigArPreload(TIM3, ENABLE);
/* TIM3 enable counter */
TIM_Enable(TIM3, ENABLE);
}
int main(void)
{
vAllOutputPinInit();
TIM3_PWM_Init(1200-1,800-1);//50HZ
while (1)
{
DC12V_WS_EN(1);
TIM_SetCmp1(TIM3,600);//%50占空比
TIM_SetCmp2(TIM3,300);//%25占空比
}
编译程序下载到芯片用逻辑分析仪可以查看波形---- 输出波形符合程序设计波形
PA6
PA7
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)