中级会员
 
- 积分
- 266
- 金钱
- 266
- 注册时间
- 2015-11-28
- 在线时间
- 52 小时
|
1金钱
//主定时器TIM4
//从定时器TIM1
void TIM_pwm32Init(u16 TIMx_master_Period,u16 slave_pulse)
{
GPIO_InitTypeDef GPIO_InitStructure;
TIM_OCInitTypeDef TIM_OCInitStructure;
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
NVIC_InitTypeDef NVIC_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB, ENABLE); //引脚时钟初始化
RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE);//
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4, ENABLE); //时钟使能
//从定时器引脚初始化
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_11 | GPIO_Pin_9;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &GPIO_InitStructure);
//主定时器初始化
TIM_TimeBaseStructure.TIM_Period = TIMx_master_Period; //定时器加载值
TIM_TimeBaseStructure.TIM_Prescaler = 7199; //定时器分频值
TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1;
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //计数加
TIM_TimeBaseInit(TIM4, &TIM_TimeBaseStructure); //设置
TIM_OC1PreloadConfig(TIM4, TIM_OCPreload_Enable); //允许预装载
TIM_SelectOutputTrigger(TIM4, TIM_TRGOSource_Update); //选择主定时器的级联输出信号为TRGO。
TIM_SelectMasterSlaveMode(TIM4, TIM_MasterSlaveMode_Enable); //打开主定时器的主从模式
//从定时器初始化
TIM_TimeBaseStructure.TIM_Period = 10000; //定时器加载值
TIM_TimeBaseStructure.TIM_Prescaler = 71;
TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure); //从定时器的时基定义
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2; //PWM1模式
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //比较输出使能
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //高电平有效
TIM_OCInitStructure.TIM_Pulse = 10001-slave_pulse; //脉宽
TIM_OC1Init(TIM1, &TIM_OCInitStructure); //从定时器的CH1输出
TIM_OC2Init(TIM1, &TIM_OCInitStructure); //从定时器的CH1输出
/* One Pulse Mode selection */
TIM_SelectOnePulseMode(TIM1, TIM_OPMode_Single);
TIM_OC1PreloadConfig(TIM1, TIM_OCPreload_Enable); //允许预装载
TIM_OC2PreloadConfig(TIM1, TIM_OCPreload_Enable); //允许预装载
TIM_SelectSlaveMode(TIM1, TIM_SlaveMode_Trigger); //从定时器的从模式选择,比如门控模式,触发模式等
TIM_SelectMasterSlaveMode(TIM1, TIM_MasterSlaveMode_Enable); //打开主定时器的主从模式
TIM_SelectInputTrigger(TIM1, TIM_TS_ITR3); //选择从定时器为外部时钟触发.此行非常关键,必须执行
TIM_Cmd(TIM4, ENABLE);
}
|
最佳答案
查看完整内容[请看2#楼]
高级定时器有个输出的总开关,应该是你总开关没开。MOE
void TIM_CtrlPWMOutputs(TIM_TypeDef* TIMx, FunctionalState NewState)
{
/* Check the parameters */
assert_param(IS_TIM_LIST2_PERIPH(TIMx));
assert_param(IS_FUNCTIONAL_STATE(NewState));
if (NewState != DISABLE)
{
/* Enable the TIM Main Output */
TIMx->BDTR |= TIM_BDTR_MOE;
}
else
{
/* Disable the TIM Main ...
|