本帖最后由 @jd 于 2019-9-1 15:20 编辑
void Timer4Init()
{
TIM4_IER_bit.TIE = 0; // 禁止(触发)中断
TIM4_IER_bit.UIE = 0; // 产生
TIM4_EGR_bit.UG = 1; // 允许产生更新事件
TIM4_PSCR_bit.PSC = 7; // 计数器时钟=主时钟16MHz / 128 = 125KHz (每8us计数值加1)
TIM4_ARR = 125; //设定定时器4产生1毫秒重装载时的计数值,255是最大值
TIM4_CNTR = 0x00; // 设定计数器的初值
}
/*******************************************************************************
**函数名称:void TIM4Delayms(unsigned int ms)
**功能描述:定时器4参进行精确延时,最小为1毫秒,最大65535
**入口参数:unsigned int ms 1=< ms <= 65535
**输出:无
*******************************************************************************/
void TIM4Delayms(unsigned int ms)
{
TIM4_CNTR = 0x00; // 设定计数器的初值
TIM4_CR1_bit.CEN = 1; //启动定时器4开始计数
while(ms--)
{
while(TIM4_SR_bit.UIF == 0); //等待计数是否达到1毫秒
TIM4_SR_bit.UIF = 0; //计数完成1毫秒,清除相应的标志
}
TIM4_CR1_bit.CEN = 0; //延时全部结束,关闭定时器4
}
我对代码中UG位置1,具体什么作用不太清楚,对这段程序来讲,对UG置1,TIM4是不是立即重新初始化了,而延时不需要中断,只需要更新就行?还有就是TIM4的精确延时最大为65535
|