stm32课程设计报告

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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;

相关文档
最新文档