金牌会员
 
- 积分
- 1132
- 金钱
- 1132
- 注册时间
- 2015-7-31
- 在线时间
- 155 小时
|
发表于 2016-4-26 11:45:47
|
显示全部楼层
本帖最后由 lx911gt 于 2016-4-28 12:37 编辑
[mw_shl_code=c,true]static void TIM2_Config(void)
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
TIM_OCInitTypeDef TIM_OCInitStructure;
/* TIM2 开启时钟 */
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);
/* TIM2基本配置 */
TIM_TimeBaseStructure.TIM_Period = Speed;
TIM_TimeBaseStructure.TIM_Prescaler = 0; //设置预分频:不预分频,即为72MHz
TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1 ; //设置时钟分频系数:不分频
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //向上计数模式
TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);
/* PWM2模式通道1 */
TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2; //配置为PWM模式2
TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //使能比较输出
TIM_OCInitStructure.TIM_Pulse = 200; //设置跳变值,当计数器计数到这个值时,电平发生跳变
TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_High; //当定时器计数值小于跳变值时为高电平
TIM_OC2Init(TIM2, &TIM_OCInitStructure); //使能通道2
TIM_OC2PreloadConfig(TIM2, TIM_OCPreload_Enable);
TIM_ARRPreloadConfig(TIM2, ENABLE); //使能TIM2重载寄存器ARR
TIM_ClearFlag(TIM2,TIM_FLAG_CC2); //清除中断标志
TIM_ITConfig(TIM2,TIM_IT_CC2,ENABLE); //使能指定的TIM2中断,允许比较输出
TIM_Cmd(TIM2, DISABLE); //关闭TIM2,在用的时候打开
}[/mw_shl_code]
中断函数:大概写一下,具体按自己要求写
[mw_shl_code=c,true]void TIM2_IRQHandler(void)
{
if (TIM_GetITStatus(TIM2, TIM_FLAG_CC2) != RESET) //检查指定的TIM中断发生与否:TIM 中断源
{
TIM_ClearITPendingBit(TIM2, TIM_FLAG_CC2); //清除TIMx的中断待处理位:TIM 中断源
if(CW)
Rotate_Cnt++;
if(CCW)
Rotate_Cnt--;
}
}[/mw_shl_code]
方波的输出通道是tim2->ch2,你看看你的片子是多少脚自己改一下
中断配置
[mw_shl_code=c,true]NVIC_InitTypeDef NVIC_InitStructure;
NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure); [/mw_shl_code]
|
|