初级会员

- 积分
- 158
- 金钱
- 158
- 注册时间
- 2017-11-5
- 在线时间
- 31 小时
|

楼主 |
发表于 2019-1-24 09:09:53
|
显示全部楼层
追加一下代码
void Timer3_Init(u16 arr,u16 psc)
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;
NVIC_InitTypeDef NVIC_InitStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE); ///使能TIM3时钟
TIM_TimeBaseInitStructure.TIM_Period = arr-1; //自动重装载值
TIM_TimeBaseInitStructure.TIM_Prescaler=psc-1; //定时器分频
TIM_TimeBaseInitStructure.TIM_CounterMode=TIM_CounterMode_Up; //向上计数模式
TIM_TimeBaseInitStructure.TIM_ClockDivision=TIM_CKD_DIV1;
TIM_TimeBaseInit(TIM3,&TIM_TimeBaseInitStructure);//初始化TIM3
TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE); //允许定时器3更新中断
TIM_Cmd(TIM3,ENABLE); //使能定时器3
NVIC_InitStructure.NVIC_IRQChannel=TIM3_IRQn; //定时器3中断
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0x2; //抢占优先级1
NVIC_InitStructure.NVIC_IRQChannelSubPriority=0x0; //子优先级3
NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
NVIC_Init(&NVIC_InitStructure);
}
void Timer4_Init(u16 arr,u16 psc)
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;
NVIC_InitTypeDef NVIC_InitStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4,ENABLE); ///使能TIM3时钟
TIM_TimeBaseInitStructure.TIM_Period = arr-1; //自动重装载值
TIM_TimeBaseInitStructure.TIM_Prescaler=psc-1; //定时器分频
TIM_TimeBaseInitStructure.TIM_CounterMode=TIM_CounterMode_Up; //向上计数模式
TIM_TimeBaseInitStructure.TIM_ClockDivision=TIM_CKD_DIV1;
TIM_TimeBaseInit(TIM4,&TIM_TimeBaseInitStructure);//初始化TIM3
TIM_ITConfig(TIM4,TIM_IT_Update,ENABLE); //允许定时器3更新中断
TIM_Cmd(TIM4,ENABLE); //使能定时器3
NVIC_InitStructure.NVIC_IRQChannel=TIM4_IRQn; //定时器3中断
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0x2; //抢占优先级1
NVIC_InitStructure.NVIC_IRQChannelSubPriority=0x1; //子优先级3
NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
NVIC_Init(&NVIC_InitStructure);
}
void Timer4_Init(u16 arr,u16 psc)
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;
NVIC_InitTypeDef NVIC_InitStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4,ENABLE); ///使能TIM3时钟
TIM_TimeBaseInitStructure.TIM_Period = arr-1; //自动重装载值
TIM_TimeBaseInitStructure.TIM_Prescaler=psc-1; //定时器分频
TIM_TimeBaseInitStructure.TIM_CounterMode=TIM_CounterMode_Up; //向上计数模式
TIM_TimeBaseInitStructure.TIM_ClockDivision=TIM_CKD_DIV1;
TIM_TimeBaseInit(TIM4,&TIM_TimeBaseInitStructure);//初始化TIM3
TIM_ITConfig(TIM4,TIM_IT_Update,ENABLE); //允许定时器3更新中断
TIM_Cmd(TIM4,ENABLE); //使能定时器3
NVIC_InitStructure.NVIC_IRQChannel=TIM4_IRQn; //定时器3中断
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0x2; //抢占优先级1
NVIC_InitStructure.NVIC_IRQChannelSubPriority=0x1; //子优先级3
NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
NVIC_Init(&NVIC_InitStructure);
}
void Timer4_Init(u16 arr,u16 psc)
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;
NVIC_InitTypeDef NVIC_InitStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM4,ENABLE); ///使能TIM3时钟
TIM_TimeBaseInitStructure.TIM_Period = arr-1; //自动重装载值
TIM_TimeBaseInitStructure.TIM_Prescaler=psc-1; //定时器分频
TIM_TimeBaseInitStructure.TIM_CounterMode=TIM_CounterMode_Up; //向上计数模式
TIM_TimeBaseInitStructure.TIM_ClockDivision=TIM_CKD_DIV1;
TIM_TimeBaseInit(TIM4,&TIM_TimeBaseInitStructure);//初始化TIM3
TIM_ITConfig(TIM4,TIM_IT_Update,ENABLE); //允许定时器3更新中断
TIM_Cmd(TIM4,ENABLE); //使能定时器3
NVIC_InitStructure.NVIC_IRQChannel=TIM4_IRQn; //定时器3中断
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0x2; //抢占优先级1
NVIC_InitStructure.NVIC_IRQChannelSubPriority=0x1; //子优先级3
NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
NVIC_Init(&NVIC_InitStructure);
}
void TIM3_IRQHandler(void)
{
if(TIM_GetITStatus(TIM3,TIM_IT_Update)==SET) //溢出中断
{
GPIOD->ODR = Wave1_Buffer[cnt1++];
if(cnt1>=BUFFER1_SIZE) cnt1=0;
}
TIM_ClearITPendingBit(TIM3,TIM_IT_Update); //清除中断标志位
}
void TIM4_IRQHandler(void)
{
if(TIM_GetITStatus(TIM4,TIM_IT_Update)==SET) //溢出中断
{
GPIOE->ODR = Wave2_Buffer[cnt2++];
if(cnt2>=BUFFER2_SIZE) cnt2=0;
}
TIM_ClearITPendingBit(TIM4,TIM_IT_Update); //清除中断标志位
}
void Setup_Frequency(uint8_t channel,uint16_t counter,uint8_t psc)
{
switch(channel)
{
case CHANNEL1:Timer3_Init(counter,psc);break;
case CHANNEL2:Timer4_Init(counter,psc);break;
default:break;
}
}
需要信号的时候开始初始化定时器及中断 |
|