STM32学习之:定时器 软件计时
2017-10-18 16:58
337 查看
stm32定时器实现60秒定时秒表
#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; } }
相关文章推荐
- 嵌入式系统学习——STM32之UCOS-III中断和时间管理及软件定时器
- stm32-学习经验总结 ———UCOSIII-软件定时器
- STM32上使用UCOSII--软件定时器和任务延时
- 嵌入式系统学习——STM32之通用定时器
- 4000 stm32的定时器学习
- STM32学习之:定时器简介
- 单片机入门学习十三 STM32单片机学习十 通用定时器
- STM32学习笔记:通用定时器基本设定
- STM32系统学习——TIM(基本定时器)
- 定时器的使用(学习计时器软件开发…
- STM32学习笔记之定时器输入捕获实验
- ucos-iii学习之软件定时器管理
- STM32的定时器学习
- STM32学习--定时器(通用定时器)3
- STM32学习--定时器(通用定时器)1
- STM32学习笔记6-定时器中断
- cortex_m3_stm32嵌入式学习笔记(八):定时器中断实验(定时器的更新中断)
- stm32学习笔记——入门定时器中断
- (转)STM32学习笔记(5):通用定时器PWM输出
- STM32学习笔记(5):通用定时器PWM输出