#pragma vector=15
__interrupt void TIM2_UPD_OVF_BRK_IRQHandler (void) {
GPIO_WriteReverse(GPIOD, GPIO_PIN_2); TIM2_ClearITPendingBit(TIM2_IT_UPDATE); }
//////////通用寄存器TIM2,3,5既然这样应该没有太大的区别 #pragma vector=6
__interrupt void EXIT_PORTB_IRQHander(void) {
if((GPIO_ReadInputData(GPIOB)&GPIO_PIN_1)==0x00) {
temp++; if(temp%2==0) TIM2_Cmd(ENABLE); else
TIM2_Cmd(DISABLE); } }
/*************程序实现功能:按键控制灯以不同的频率闪动***************/ /************即实现功能为,发光二极管分别以1S,2S,3S的周期闪烁*******/ #include \
#define uchar unsigned char #define uint unsigned int #define ulong unsigned long unsigned int temp; void delay(ulong i) {
ulong j;
for(j=0;j
void CLK_Configuration(void); void GPIO_Configuration(void); void TIM2_Configuration(void); void EXIT_Configuration(void); void main(void) {
CLK_Configuration();
GPIO_Configuration(); EXIT_Configuration(); TIM2_Configuration(); enableInterrupts(); while (1) { } }
void CLK_Configuration(void) {
CLK_HSIPrescalerConfig(CLK_PRESCALER_HSIDIV1); }
void GPIO_Configuration(void) {
GPIO_DeInit(GPIOB); GPIO_DeInit(GPIOD);
GPIO_Init(GPIOD, GPIO_PIN_2, GPIO_MODE_OUT_PP_LOW_FAST); GPIO_Init(GPIOB, GPIO_PIN_1, GPIO_MODE_IN_FL_IT); }
void TIM2_Configuration(void) {
TIM2_DeInit();///设置timer2定时器 TIM2_TimeBaseInit( TIM2_PRESCALER_2048 ,8000); /*对TIM2时钟进行预分频得到计数时钟 */
TIM2_ITConfig(TIM2_IT_UPDATE ,ENABLE); /*允许更新中断使能*/
// TIM2_GenerateEvent(TIM2_EVENTSOURCE_UPDATE); /*设置事件源为更新事件*/
// TIM2_UpdateRequestConfig(TIM2_UPDATESOURCE_REGULAR );/*更新请求使能,只有当计数器溢出时产生更新中断*/
// TIM2_SelectOnePulseMode( TIM2_OPMODE_REPETITIVE ); /*发生更新事件时计数器不停止*/
TIM2_SetCounter(65536-8000); /*16位向上计数器初值*/
TIM2_Cmd(ENABLE); /*使能计数器*/ }
void EXIT_Configuration(void) {
EXTI_DeInit();
EXTI_SetExtIntSensitivity(EXTI_PORT_GPIOB, EXTI_SENSITIVITY_FALL_ONLY); }
/*TIM2定时/向上溢出中断编号为13,中断编号+2*/ #pragma vector=15
__interrupt void TIM2_UPD_OVF_BRK_IRQHandler (void) {
GPIO_WriteReverse(GPIOD, GPIO_PIN_2); TIM2_ClearITPendingBit(TIM2_IT_UPDATE); }
//////////通用寄存器TIM2,3,5既然这样应该没有太大的区别 #pragma vector=6
__interrupt void EXIT_PORTB_IRQHander(void) {
if((GPIO_ReadInputData(GPIOB)&GPIO_PIN_1)==0x00) {
temp++;
if(temp%2!=0)
TIM2_Cmd(DISABLE); else {
TIM2_Cmd(ENABLE);/////////////注意使能位的开通一定不要丢掉了 switch(temp) {
case 2:TIM2_TimeBaseInit( TIM2_PRESCALER_2048 ,8000);break; case 4:TIM2_TimeBaseInit( TIM2_PRESCALER_4096 ,8000);break; case 6:TIM2_TimeBaseInit( TIM2_PRESCALER_8192 ,8000);break; default:TIM2_TimeBaseInit( TIM2_PRESCALER_2048 ,8000),temp=1; } } } }
以下这个程序与上相同:
/*************程序实现功能:按键控制灯以不同的频率闪动*******************/
#include \
#define uchar unsigned char #define uint unsigned int
#define ulong unsigned long unsigned int temp; void delay(ulong i) {
ulong j;
for(j=0;j
void CLK_Configuration(void); void GPIO_Configuration(void); void TIM2_Configuration(void); void EXIT_Configuration(void); void main(void) {
CLK_Configuration(); GPIO_Configuration(); EXIT_Configuration(); TIM2_Configuration(); enableInterrupts(); while (1) { } }
void CLK_Configuration(void) {
/* Fmaster = 16MHz */
CLK_HSIPrescalerConfig(CLK_PRESCALER_HSIDIV1); }
void GPIO_Configuration(void) {
/* GPIOD reset */ GPIO_DeInit(GPIOB); GPIO_DeInit(GPIOD);
/* Configure PD1 (LED1) as output push-pull low (led switched on)10MHZ */
GPIO_Init(GPIOD, GPIO_PIN_2, GPIO_MODE_OUT_PP_LOW_FAST); GPIO_Init(GPIOB, GPIO_PIN_1, GPIO_MODE_IN_FL_IT); }
void TIM2_Configuration(void)
相关推荐: