定时器中断实验
2016-10-06 20:18
381 查看
实验内容
通过定时器中断配置,每500ms中断一次,然后中断服务函数中控制LED实现LED1状态取反(闪烁)。
Tout(溢出时间)=(ARR+1)(PSC+1)/Tclk
实验步骤
1、能定时器时钟。
RCC_APB1PeriphClockCmd();
2、初始化定时器,配置ARR,PSC。
TIM_TimeBaseInit();
3、开启定时器中断,配置NVIC。
void TIM_ITConfig();
NVIC_Init();
4、使能定时器。
TIM_Cmd();
5、编写中断服务函数。
TIMx_IRQHandler();
实验代码
main.c
time.h
time.c
通过定时器中断配置,每500ms中断一次,然后中断服务函数中控制LED实现LED1状态取反(闪烁)。
Tout(溢出时间)=(ARR+1)(PSC+1)/Tclk
实验步骤
1、能定时器时钟。
RCC_APB1PeriphClockCmd();
2、初始化定时器,配置ARR,PSC。
TIM_TimeBaseInit();
3、开启定时器中断,配置NVIC。
void TIM_ITConfig();
NVIC_Init();
4、使能定时器。
TIM_Cmd();
5、编写中断服务函数。
TIMx_IRQHandler();
实验代码
main.c
#include "led.h" #include "delay.h" #include "usart.h" #include "time.h" int main() { delay_init(); NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); uart_init(115200); LED_Init(); TIM3_Int_Init(4999, 7199); // 10Khz的计数频率,计数到5000为500ms while(1) { LED0 = !LED0; printf("OK\r\n"); delay_ms(250); } }
time.h
#ifndef __TIME_H #define __TIME_H #include "sys.h" void TIM3_Int_Init(u16 arr, u16 psc); #endif
time.c
#include "time.h" #include "led.h" void TIM3_Int_Init(u16 arr, u16 psc) { NVIC_InitTypeDef NVIC_InitStruct; TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStruct; // TIM3时钟使能; RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE); // 初始化定时器; TIM_TimeBaseInitStruct.TIM_ClockDivision = TIM_CKD_DIV1; // 设置时钟分割; TIM_TimeBaseInitStruct.TIM_CounterMode = TIM_CounterMode_Up; // TIM向上计数; TIM_TimeBaseInitStruct.TIM_Period = arr; // 设置自动重装载周期值; TIM_TimeBaseInitStruct.TIM_Prescaler = psc; // 设置分频系数; TIM_TimeBaseInit(TIM3,&TIM_TimeBaseInitStruct); // 打开更新中断; TIM_ITConfig(TIM3, TIM_IT_Update, ENABLE); // 中断优先级NVIC设置; NVIC_InitStruct.NVIC_IRQChannel = TIM3_IRQn; NVIC_InitStruct.NVIC_IRQChannelCmd = ENABLE; NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority = 0; NVIC_InitStruct.NVIC_IRQChannelSubPriority = 3; NVIC_Init(&NVIC_InitStruct); // 使能TIM3; TIM_Cmd(TIM3, ENABLE); } void TIM3_IRQHandler(void) { if (TIM_GetITStatus(TIM3,TIM_IT_Update) != RESET) { LED1 = !LED1; TIM_ClearITPendingBit(TIM3, TIM_IT_Update); } }
相关文章推荐
- 中断和定时器实验--c语言实现中断嵌套
- zynq 的定时器中断实验
- 定时器中断实验
- 外部中断与定时器中断实验(修改)
- STM32串口采样与仪表步进电机控制程序(主程序与串口程序,需用正点原子定时器中断实验程序模板)
- mini2440 定时器中断实验
- 【实验六】定时器中断实验
- 4、定时器中断实验
- 定时器中断实验
- 一起学mini2440裸机开发(十一)--mini2440定时器0中断实验
- S02_CH08_ ZYNQ 定时器中断实验
- Zigbee之旅(四):几个重要的CC2430基础实验——定时器中断
- STM32单片机学习(5) 定时器中断实验
- stm32定时器中断实验
- Zigbee之旅(四):几个重要的CC2430基础实验——定时器中断(转)
- STM32实验1:定时器中断同时产生两路不同频率的信号
- 实验3 RTC定时器的应用及中断机制
- 实验二:外部中断与定时器/计数器中断实验
- STM32定时器中断实验-TIM3
- 定时器中断 流水灯实验