/******************************************************************************* **函数名称:void timer4Init() **功能描述:定时器4参数初始化 **入口参数:无 **输出:无 *******************************************************************************/ 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 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 } /* 主函数 */ int main(void) { asm("sim"); //关闭系统总中断 CLK_CKDIVR = 0x00; //CPUDIV = 1 HSIDIV = 1 内部时钟 = 16Mhz Timer4Init(); //调用定时器4初始化函数 LED3Init(); //调用LED3初始化函数 while(1) { PC_ODR ^= 0x40; //异或取反PC->6 ,控制LED3进行周期性亮灭亮灭操作 TIM4Delayms(1000); //调用定时器4进行精确延时1000毫秒,即1秒 } } |
更多回帖