《stm32课程设计报告》由会员分享,可在线阅读,更多相关《stm32课程设计报告(7页珍藏版)》请在金锄头文库上搜索。
1、 利用TIM定时器的中断和定时功能实现跑马灯 一、原理及目的 1、学习stm32库开发 2、理解和熟悉I/O的使用; 3、进一步掌握定时器、中断处理程序的编程方法 4、利用库函数开发实现跑马灯 二、电路原理图 三、流程图 四、软件算法(代码) 1、Main.c #include “stm32f10x.h“ #include “bsp_led.h“ #include “bsp_TiMbase.h“ volatile u32 time = 0; int i=0; int main(void) LED_GPIO_Config(); TIM2_Configuration(); TIM2_NVIC_Co
2、nfiguration(); RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2 , ENABLE); while(1) if ( time = 1000 ) time = 0; i+; if(i=3) i=0; switch(i) case 0: LED1(OFF);LED2(OFF);LED3(ON);break; case 1: LED1(ON);LED2(OFF);LED3(OFF);break; case 2: LED1(OFF);LED2(ON);LED3(OFF);break; 2、led.c #include “bsp_led.h“ void
3、LED_GPIO_Config(void) GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOC, ENABLE); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOB, GPIO_In
4、itStructure.GPIO_Pin = GPIO_Pin_4|GPIO_Pin_3; GPIO_Init(GPIOC, GPIO_SetBits(GPIOB, GPIO_Pin_0); GPIO_SetBits(GPIOC, GPIO_Pin_4|GPIO_Pin_3); 3、led.h #ifndef _LED_H #define _LED_H #include “stm32f10x.h“ #define ON 0 #define OFF 1 #define LED1(a) if (a) GPIO_SetBits(GPIOB,GPIO_Pin_0); else GPIO_ResetBi
5、ts(GPIOB,GPIO_Pin_0) #define LED2(a) if (a) GPIO_SetBits(GPIOC,GPIO_Pin_4); else GPIO_ResetBits(GPIOC,GPIO_Pin_4) #define LED3(a) if (a) GPIO_SetBits(GPIOC,GPIO_Pin_3); else GPIO_ResetBits(GPIOC,GPIO_Pin_3) #define digitalHi(p,i) p-BSRR=i; #define digitalLo(p,i) p-BRR=i; #define digitalToggle(p,i) p
6、-ODR =i; #define LED1_TOGGLE digitalToggle(GPIOB,GPIO_Pin_0) #define LED1_OFF digitalHi(GPIOB,GPIO_Pin_0) #define LED1_ON digitalLo(GPIOB,GPIO_Pin_0) #define LED2_TOGGLE digitalToggle(GPIOC,GPIO_Pin_4) #define LED2_OFF digitalHi(GPIOC,GPIO_Pin_4) #define LED2_ON digitalLo(GPIOC,GPIO_Pin_4) #define L
7、ED3_TOGGLE digitalToggle(GPIOC,GPIO_Pin_3) #define LED3_OFF digitalHi(GPIOC,GPIO_Pin_3) #define LED3_ON digitalLo(GPIOC,GPIO_Pin_3) void LED_GPIO_Config(void); #endif /* _LED_H */ bsp_TiMbase.c #include “bsp_TiMbase.h“ void TIM2_NVIC_Configuration(void) NVIC_InitTypeDef NVIC_InitStructure; NVIC_Prio
8、rityGroupConfig(NVIC_PriorityGroup_0); NVIC_InitStructure.NVIC_IRQChannel = TIM2_IRQn; NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0; NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3; NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; NVIC_Init( void TIM2_Configuration(void) TIM_TimeBaseIni
9、tTypeDef TIM_TimeBaseStructure; RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2 , ENABLE); TIM_TimeBaseStructure.TIM_Period=1000; TIM_TimeBaseStructure.TIM_Prescaler= 71; TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1; TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up; TIM_TimeBaseInit(TIM2,
10、 TIM_ClearFlag(TIM2, TIM_FLAG_Update); TIM_ITConfig(TIM2,TIM_IT_Update,ENABLE); TIM_Cmd(TIM2, ENABLE); RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2 , DISABLE); 4、bsp_TiMbase.h #ifndef TIME_TEST_H #define TIME_TEST_H #include “stm32f10x.h“ void TIM2_NVIC_Configuration(void); void TIM2_Configuration(void); #endif 五、效果图