初级会员

- 积分
- 130
- 金钱
- 130
- 注册时间
- 2018-11-15
- 在线时间
- 49 小时
|
1金钱
/**
利用基本定时器5实现延时函数 实现1us延时
*/
void tim5_init(void)
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
// NVIC_InitTypeDef NVIC_InitStructure;
/*AHB = 96MHz,RCC_CFGR的PPRE1 = 4,所以APB1 = 24MHz,TIM2CLK = APB1*2 = 48MHz */
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM5, ENABLE);/*使能定时器时钟*/
/* Time base configuration */
TIM_TimeBaseStructure.TIM_Period = 48; //自动重装载值
TIM_TimeBaseStructure.TIM_Prescaler =0; //定时器分频
TIM_TimeBaseStructure.TIM_CounterMode =TIM_CounterMode_Up; //向上计数模式
TIM_TimeBaseInit(TIM5, &TIM_TimeBaseStructure);
TIM_ITConfig(TIM5,TIM_IT_Update,DISABLE); //禁止定时器5更新中断
// /*这里没有必要使能重装载寄存器*/
// TIM_ARRPreloadConfig(TIM5, ENABLE); //自动重装载寄存器使能
// NVIC_InitStructure.NVIC_IRQChannel=TIM5_IRQn; //定时器5中断
// NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0x01; //抢占优先级1
// NVIC_InitStructure.NVIC_IRQChannelSubPriority=0x03; //子优先级3
// NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
// NVIC_Init(&NVIC_InitStructure);
//
// /* 设置更新请求源只在计数器上溢或下溢时产生中断 */
// TIM_UpdateRequestConfig(TIM5,TIM_UpdateSource_Global);
// TIM_ClearFlag(TIM5, TIM_FLAG_Update);
}
void delay_n_us(u16 i)
{
TIM5->ARR = 48*i-1;
TIM5->CR1 |=0x01; //使能计数器
while(TIM5->CNT)
{}
TIM5->CR1 = ~(1<<0); //计数器失能
}
上面是我的代码,这样延时为什么不准啊,
|
|