您的位置:首页
stm32定时器实现60秒定时秒表
2016-04-21 22:03
483 查看
#include "led.h" #include "delay.h" #include "key.h" #include "sys.h" #include "lcd.h" #include "usart.h" #include "timer.h" #include "beep.h" extern u32 sec; int main(void) { delay_init(); //延时函数初始化 NVIC_Configuration(); //设置NVIC中断分组2:2位抢占优先级,2位响应优先级 uart_init(9600); //串口初始化为9600 LED_Init(); LCD_Init(); BEEP_Init(); TIM3_Int_Init(9999,7199);//10Khz的计数频率, 延时1s == 1000 000us while(1) { LCD_ShowString(30,70,200,16,16,"Zhaocundang:14160310317"); LCD_ShowString(30,162,200,2,16,"Second Clock:"); LCD_ShowNum(150,162,sec,2,16); } }
#include "timer.h" #include "led.h" #include "sys.h" #include "usart.h" #include "lcd.h" #include "beep.h" #include "delay.h" ////////////////////////////////////////////////////////////////////////////////// //本程序只供学习使用,未经作者许可,不得用于其它任何用途 //ALIENTEK战舰STM32开发板 //定时器 驱动代码 //正点原子@ALIENTEK //技术论坛:www.openedv.com //修改日期:2012/9/3 //版本:V1.0 //版权所有,盗版必究。 //Copyright(C) 广州市星翼电子科技有限公司 2009-2019 //All rights reserved ////////////////////////////////////////////////////////////////////////////////// volatile u32 sec=0; //通用定时器3中断初始化 //这里时钟选择为APB1的2倍,而APB1为36M //arr:自动重装值。 //psc:时钟预分频数 //这里使用的是定时器3! // TIM3完成定时60s void TIM3_Int_Init(u16 arr,u16 psc) { TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; NVIC_InitTypeDef NVIC_InitStructure; RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); //时钟使能 //定时器TIM3初始化 TIM_TimeBaseStructure.TIM_Period = arr; //设置在下一个更新事件装入活动的自动重装载寄存器周期的值 TIM_TimeBaseStructure.TIM_Prescaler =psc; //设置用来作为TIMx时钟频率除数的预分频值 TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; //设置时钟分割:TDTS = Tck_tim TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up; //TIM向上计数模式 TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure); //根据指定的参数初始化TIMx的时间基数单位 TIM_ITConfig(TIM3,TIM_IT_Update,ENABLE ); //使能指定的TIM3中断,允许更新中断 //中断优先级NVIC设置 NVIC_InitStructure.NVIC_IRQChannel = TIM3_IRQn; //TIM3中断 NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; //先占优先级0级 NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3; //从优先级3级 NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ通道被使能 NVIC_Init(&NVIC_InitStructure); //初始化NVIC寄存器 TIM_Cmd(TIM3, ENABLE); //使能TIMx } //定时器3中断服务程序 void TIM3_IRQHandler() //TIM3中断 { if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET) //检查TIM3更新中断发生与否 { TIM_ClearITPendingBit(TIM3, TIM_IT_Update ); //清除TIMx更新中断标志 LED1=!LED1; } sec++; if(sec==60) { //赵存档 QQ463431476 http://www.cnblogs.com/xiaobo-Linux/ LED0=0; delay_ms(100); LED0=1; delay_ms(100); LED0=0; delay_ms(100); LED0=1; delay_ms(100); BEEP=1; delay_ms(200); BEEP=0; sec=0; } }
相关文章推荐
- FZU月赛20160416 ABEF
- 用matlab实现同一个序列重复N倍
- stm32定时器实现60秒定时秒表
- 如何用ModelsimSE仿真IP核-以PLL为例
- iOS 多线程
- 二、测试作业
- Python函数式编程——学习笔记
- 无权最短路径
- Backbone与Angular的比较
- 深入理解ThreadLocal
- Spark 基础 —— 元组(tuple)
- sql连接自读串
- 输出中文的解决方式
- M*N矩阵旋转
- Educational Codeforces Round 12 A. Buses Between Cities 水题
- 如何用ModelsimSE仿真IP核-以PLL为例
- 个人工作总结(3)
- 团队冲刺第二天
- iOS 多线程 浅述
- addin注册菜单命令名称冲突解决