【STM32—寄存器版本】定时器中断

本人使用的是正点原子的ministm32

整体思路

我们的stm32拥有很多定时器,它的作用就跟它的名字一样,可以设定中断发生的时间。本次实验的显现就是通过定时器让LED1闪烁,LED0则作为对照

代码部分

main函数

#include "sys.h"
#include "usart.h"  
#include "delay.h" 
#include "led.h" 
#include "timer.h"
int main(){
 Stm32_Clock_Init(9);
 uart_init(72,9600);
 delay_init(72);
 LED_Init();
 TIM3_Int_Init(5000,7199);//10Khz的计数频率。计数5K次为500ms
 while(1){
 LED0=!LED0;
  delay_ms(200);
 } 
}

timer.c

#include "timer.h"
#include "led.h"
//定时器3中断服务程序
void TIM3_IRQHandler(void){
 if(TIM3->SR &0X0001){//SR=1,更新中断等待响应
 LED1=!LED1;
 }
 TIM3->SR &=~(1<<0);//通过软件置0,清除中断标志位
}
void TIM3_Int_Init(u16 arr,u16 psc){
 RCC->APB1ENR|=1<<1;     //TIM3时钟使能
 TIM3->PSC=psc;//预分频器
 TIM3->ARR=arr;//设定计时器自动重装载值
 //中断时间=((arr+1)*(psc+1))/Tclk;
 //Tclk:TIM的输入时钟频率(Mhz)
 //tout:中断时间(us)
 TIM3->DIER |=1<<0;//允许更新中断
 TIM3->CR1 |=0x01;//使能定时器3
 MY_NVIC_Init(1,3,TIM3_IRQn,2);
}

timer.h

#ifndef _TIMER_H
#define _TIMER_H
#include "sys.h"
void TIM3_Int_Init(u16 arr,u16 psc);
#endif
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值