当前位置: 首页 > news >正文

STM32F103定时器1每毫秒中断一次

定时器溢出中断,在程序设计中经常用到。在使用TIM1和TIM8溢出中断时,需要注意“TIM_TimeBaseStructure.TIM_RepetitionCounter=0;”,它表示溢出一次,并可以设置中断标志位。    

TIM1_Interrupt_Initializtion(1000,72); //当arr=1000,psc=72时,则为1ms溢出一次就设置中断标志位,,误差为1us;

因为标准库默认TIM_TimeBaseStructure.TIM_RepetitionCounter=10,就表示溢出10次,才设置中断标志位。

若忘记设置,就是导致溢出时间不准确,严重会浪费调试时间。

时间久了,就会忘记,还是记录一下,加深记忆。

TIM1程序如下:

#include "Timer1.h"u16 TIM1_MillisecondCounter;
u8  TIM1_SecondFlag;void TIM1_Interrupt_Initializtion(u16 arr,u16 psc);//函数声明//定时器1中断初始化
//APB2时钟为72MHz
//arr:自动重装值。
//psc:时钟预分频数
//TIM_CKD_DIV1:定时器时钟 = 输入频率
//TIM_CKD_DIV2:定时器时钟 = 输入频率/2
//TIM_CKD_DIV4:定时器时钟 = 输入频率/4
//TIM1溢出时间: arr*psc/72000000/TIM_CKD_DIVx
//TIM1_Interrupt_Initializtion(1000,72);//当arr=1000,psc=72时,则为1ms,误差为1us;
void TIM1_Interrupt_Initializtion(u16 arr,u16 psc)
{TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;NVIC_InitTypeDef NVIC_InitStructure;
//	u8 ch;RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE); //使能定时器TIM1的APB2外设时钟//定时器TIM1初始化TIM_TimeBaseStructure.TIM_Period = arr-1; //设置在下一个更新事件装入活动的自动重装载寄存器周期的值	TIM_TimeBaseStructure.TIM_Prescaler =psc-1; //设置用来作为TIMx时钟频率除数的预分频值TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; //设置时钟分割:TDTS = Tck_tim//计算公式:arr*psc/72000000/1,当arr=1000,psc=72时,则溢出时间为1ms,误差为1us;TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  //TIM向上计数模式TIM_TimeBaseStructure.TIM_RepetitionCounter=0;//TIM1溢出一次,则中断1次;TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure); //根据指定的参数初始化TIMx的时间基数单位TIM_SetCounter(TIM1,0);                      //设置TIM1的计数器值为0;TIM_ClearFlag(TIM1, TIM_FLAG_Update);        //清除TIM1溢出的待处理标志位TIM_ClearITPendingBit(TIM1, TIM_IT_Update ); //清除TIM1中断的待处理位TIM_ITConfig(TIM1,TIM_IT_Update,ENABLE ); //允许TIM1溢出产生中断//中断优先级NVIC设置//NVIC_PriorityGroup_4设置NVIC中断分组4:表示抢占优先级为4位,取值为0~15,没有响应优先级,取值为0//NVIC_PriorityGroup_3设置NVIC中断分组3:表示抢占优先级为3位,取值为0~7,响应优先级只有1位,取值为0~1//NVIC_PriorityGroup_2设置NVIC中断分组3:表示抢占优先级为2位,取值为0~3,响应优先级只有2位,取值为0~3//NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4);//设置系统中断优先级分组4NVIC_InitStructure.NVIC_IRQChannel = TIM1_UP_IRQn;  //TIM1中断NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;  //设置抢占优先级为1NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;  //设置响应优先级为0NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;     //IRQ通道被使能NVIC_Init(&NVIC_InitStructure); //根据NVIC_InitStruct中指定的参数初始化NVIC嵌套向量中断控制寄存器TIM_Cmd(TIM1, ENABLE);//使能TIM1外设TIM1_MillisecondCounter=0;
}//函数功能:TIM1每1ms溢出中断一次
void TIM1_UP_IRQHandler()
{if (TIM_GetITStatus(TIM1,TIM_IT_Update) != RESET) //TIM1计数器溢出产生中断{TIM1_MillisecondCounter++;if(TIM1_MillisecondCounter>=1000){TIM1_MillisecondCounter=0;TIM1_SecondFlag=1;}TIM_ClearITPendingBit(TIM1,TIM_IT_Update); //清除TIM1计数器的溢出中断标志;}
}

TIM1头文件

#ifndef __Timer1_H
#define __Timer1_H	
#include "stm32f10x.h" //使能uint8_t,uint16_t,uint32_t,uint64_t,int8_t,int16_t,int32_t,int64_textern u8  TIM1_SecondFlag;extern void TIM1_Interrupt_Initializtion(u16 arr,u16 psc);#endif

main,c程序

#include "stm32f10x.h" //使能uint8_t,uint16_t,uint32_t,uint64_t,int8_t,int16_t,int32_t,int64_t
#include "stdio.h"  //getchar(),putchar(),scanf(),printf(),puts(),gets(),sprintf()
#include "USART1.h"
//注意:"USART1.h"要放在 "stdio.h" 包含文件之后,如果这个位置颠倒了,业不能打印浮点数。
#include "Timer1.h"int main(void)
{NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4);//设置系统中断优先级分组4USART1_Serial_Interface_Enable(115200);printf("\r\nCPU reset\r\n");TIM1_Interrupt_Initializtion(1000,72);//当arr=1000,psc=72时,则为1ms,误差为1us;while(1){if(TIM1_SecondFlag){TIM1_SecondFlag=0;printf("TIM1_SecondFlag=%u\r\n",TIM1_SecondFlag);}}
}

http://www.xdnf.cn/news/498673.html

相关文章:

  • 机器学习中的过拟合及示例
  • 咖啡叶子病害检测数据集VOC+YOLO格式1468张4类别均为单叶子
  • mac-M系列芯片安装软件报错:***已损坏,无法打开。推出磁盘问题
  • PySide6 GUI 学习笔记——常用类及控件使用方法(常用类颜色常量QColorConstants)
  • JavaScript 中的 for...in 和 for...of 循环详解
  • 深入理解 TypeScript 中的 unknown 类型:安全处理未知数据的最佳实践
  • Qt Widgets模块功能详细说明,基本控件:QLabel(一)
  • 园区综合能源系统容量优化配置全流程解析:从业务逻辑到 MATLAB 实现
  • 计算机视觉与深度学习 | Matlab实现EMD-LSTM和LSTM时间序列预测对比(完整源码和数据)
  • 计算机视觉与深度学习 | Python实现EMD-SSA-VMD-LSTM-Attention时间序列预测(完整源码和数据)
  • C语言指针深入详解(一):内存和地址、指针变量和地址、指针变量类型的意义、指针运算
  • 2025.05.17淘天机考笔试真题第三题
  • Compose笔记(二十三)--多点触控
  • 1688 数据接口调用秘籍:高效获取商品实时信息的开发指南
  • Redis技术深度解析
  • Elasticsearch 查询与过滤(Query vs. Filter)面试题
  • Vue3(一)
  • 机器学习 KNN算法
  • 当硅基存在成为人性延伸的注脚:论情感科技重构社会联结的可能性
  • 震荡指标工具
  • 如何在 Windows 10 或 11 上通过命令行安装 Node.js 和 NPM
  • Redis配置与优化:提升NoSQL数据库性能的关键策略
  • MinIO深度解析:从入门到实战——对象存储系统全指南
  • 智慧水务关键一环:Profinet转Modbus TCP网关驱动供水系统高效互联
  • 蓝牙耳机什么牌子好?倍思值得冲不?
  • 软件设计师考试《综合知识》创建型设计模式考点分析
  • NY309NY318美光科技颗粒NY319NY320
  • SVN 版本控制入门指南
  • 项目QT+ffmpeg+rtsp(二)——海康威视相机测试
  • 【学习心得】英伟达的诸多显卡性能对比