stm32课程设计报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
利用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_Configuration();
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 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_InitStructure); GPIO_InitStructure.GP IO_Pin = GPIO_Pin_4|GPIO_Pin_3;
GPIO_Init(GPIOC, &GPIO_InitStructure);
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_ResetBits(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->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 LED3_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_PriorityGroupConfig(NVIC_PriorityGroup_0); NVIC_Init Structure.NVIC_IRQChannel = TIM2_IRQn;
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
NVIC_Init(&NVIC_InitStructure);
}
void TIM2_Configuration(void)
{
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2 , ENABLE);
TIM_TimeBaseStructure.TIM_Period=1000;