×
单片机 > 单片机程序设计 > 详情

基于STM32F103ZET6主控平台实现定时器TIM3的驱动

发布时间:2020-05-26 发布时间:
|

定时器描述:定时器的运用主要是对重装载值和预分频的配置,这两个寄存器配置决定定时器定时的时长,接下来是开启定时器中断,当设置的时长溢出便会进入中断,在相应的中断服务函数中编写要执行的程序即可实现隔一段时间执行一次程序的效果,例如LED的亮灭。


第一步:编写tim.h头文件


#ifndef __TIM_H

#define __TIM_H

#include "sys.h"

void TIM3_Init(u16 arr,u16 psc);//定时器3初始化

#endif

第二步:编写tim.c文件


#include "tim.h"

#include "led.h"

 

void TIM3_IRQHandler(void)

{

if(TIM3->SR&0x0001)

{

LED0=!LED0;

}

TIM3->SR&=~(1<<0);//处理完中断之后应该向 TIM3_SR 的最低位写 0,来清除该中断标志

}

//定时器3中断初始化

void TIM3_Init(u16 arr,u16 psc)

{

RCC->APB1ENR|=1<<1;//开启TIM3定时器时钟

TIM3->ARR=arr;//设置重装载值

TIM3->PSC=psc;//设置预分频值

TIM3->DIER|=1<<0;//开启中断允许

TIM3->CR1|=0x01;//开启定时器3

MY_NVIC_Init(1,3,TIM3_IRQn,2);

}

第三步:编写main函数


#include "sys.h"

#include "usart.h"

#include "delay.h"

#include "led.h"

#include "beep.h"

#include "key.h"

#include "tim.h"

u8 Wl_stat=0;//while标志位

int main(void)

{

// int key_stat;

Stm32_Clock_Init(9);   //系统时钟设置

delay_init(72);     //延时初始化

uart_init(72,115200); //串口初始化为115200

LED_Init();

BEEP_Init();

TIM3_Init(4999,7199);

while(1)

{

if(Wl_stat==0)//代表进入WHILE循环

{

printf("Input While(1)-->rn");

Wl_stat=1;

}

LED1=!LED1;

delay_ms(200);

}

第四步:编译通过后,烧录进STM32F103ZET6开发板,实现程序设计效果即可。


效果:【在完成软件设计之后,我们将编译好的文件下载到精英 STM32 V1 开发板上,观看其运行结果是否与我们编写的一致。如果没有错误,我们将看 DS0 不停闪烁(每 400ms 闪烁一次),而 DS1 也是不停的闪烁,但是闪烁时间较 DS0 慢( 1s 一次)】


关键字:STM32F103ZET6  主控平台  定时器  TIM3 

『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
ARM 汇编的必知必会