使用stm32f103c8t6的定时器4的通道3输出100KHZ的脉冲
先查看定时器使用的时钟源(确定定时器的主频为72MHZ)
查看定时器4的通道3默认的PWM输出IO(如果不使用默认IO口,需要确定使用的芯片必须支持输出通道的重映射到其它IO口,不然无法实现输出)
定时器4的通道3输出IO口初始化
static void TIM4_GPIO_Config(void)
{
GPIO_InitTypeDef GPIO_InitStructure;
/** 开启GPIO挂载的时钟源 **/
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB, &GPIO_InitStructure);
}
输出100KHz的脉冲,定时器需要设计响应周期:1 / 100KHz
定时器响应周期计算:(1 / 72MHz) * (TIM_Period+1) * (TIM_Prescaler+1)
定时器频率配置
static void TIM4_Mode_Config(void)
{
TIM_OCInitTypeDef TIM_OCInitStructure;
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
/** 开启定时器时钟源 **/
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE);
/** 设置定时器预装载值(10-1) **/
TIM_TimeBaseStructure.TIM_Period=9;
/** 设置定时器预分频值(72-1) **/
TIM_TimeBaseStructure.TIM_Prescaler= 71;
TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1; //设置时钟分割:TDTS = Tck_tim
TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up; //TIM向上计数模式
TIM_TimeBaseStructure.TIM_RepetitionCounter=0; //重复计数器值
TIM_TimeBaseInit(TIM4, &TIM_TimeBaseStructure); //根据TIM_TimeBaseInitStruct中指定的参数初始化TIMx的时间基数单位
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM1; //选择定时器模式:TIM脉冲宽度调制模式1
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //输出使能
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //输出极性:TIM输出比较极性高
/** 此值决定PWM脉冲的占空比,计算:TIM_Pulse/(TIM_Period+1) 就是占空比 **/
TIM_OCInitStructure.TIM_Pulse = 5; //设置待装入捕获比较寄存器的脉冲值
TIM_OC3Init(TIM4, &TIM_OCInitStructure); //根据TIM_OCInitStruct中指定的参数初始化外设TIMx
// TIM_CtrlPWMOutputs(TIM1,ENABLE); //MOE 主输出使能,注意:使用高级定时器时必须使能
TIM_OC3PreloadConfig(TIM4, TIM_OCPreload_Enable); //CH1预装载使能
TIM_Cmd(TIM4); //使能TIM3
// TIM_SetCompare3(TIM4, 1); //用于修改占空比函数
}