新手上路
- 积分
- 31
- 金钱
- 31
- 注册时间
- 2018-6-27
- 在线时间
- 4 小时
|
3金钱
stm32的TIM1定时器能不能产生4MHZ的信号啊?我的定时器开起来,最多能达到2MHZ左右,再改预分频值和自动重装载寄存器周期值的也不会改变频率。。。。[mw_shl_code=applescript,true]void TIM1_Int_Init(u16 arr,u16 psc)
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
NVIC_InitTypeDef NVIC_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE); //时钟使能
//设置优先级
NVIC_InitStructure.NVIC_IRQChannel = TIM1_UP_TIM10_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;//先占优先级0级
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0; //从优先级0级
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
TIM_TimeBaseStructure.TIM_Period = arr; //设置自动重装载寄存器周期值
TIM_TimeBaseStructure.TIM_Prescaler =(psc-1);//设置预分频值
TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; //设置时钟分割
TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;//向上计数模式
TIM_TimeBaseStructure.TIM_RepetitionCounter = 0;//重复计数设置
TIM_TimeBaseInit(TIM1,&TIM_TimeBaseStructure);
TIM_ClearFlag(TIM1, TIM_FLAG_Update);//清中断标志位
TIM_ITConfig(TIM1,TIM_IT_Update,ENABLE);
TIM_Cmd(TIM1, ENABLE); //使能TIMx外设
}
//定时器3中断服务函数
void TIM1_UP_TIM10_IRQHandler(void)
{
TIM_ClearITPendingBit(TIM1,TIM_IT_Update); //清除中断标志位
LED1=!LED1;//DS1翻转
}[/mw_shl_code]
|
最佳答案
查看完整内容[请看2#楼]
你看看时钟对了吗?TIM1定时器用的是APB2的时钟对于F4系列来说是系统时钟的二分频,也就是84MHz,那么TIM1的输入时钟频率是APB2的两倍,也就是168MHz,根据这个还有溢出时间公式,可以合理计算自动重装值和时钟预分频系数了吧,另外产生50MHz的PWM波,你用168/50=3.36,你得使你的arr与psc的乘积等于3.36,这是不可能的,建议你好好看看资料。
|