【stm-3】定时器定时中断定时器外部时钟

devtools/2024/10/18 8:23:52/

1.定时器定时中断

(1)main.c

#include "Device/Include/stm32f10x.h"   // Device header
#include "Delay.h"
#include "OLED.h"
#include "timer.h"
uint16_t Num;
int main(void)
{OLED_Init();Timer_Init();OLED_ShowString(1,1,"Num:");//OLED_Clear();while(1){OLED_ShowNum(1,5,Num,5);OLED_ShowNum(2,5,TIM_GetCounter(TIM2),5);}
}

(2)timer.c

#include "Device/Include/stm32f10x.h"   // Device header
extern uint16_t Num;
void Timer_Init(void)
{RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);TIM_InternalClockConfig(TIM2);TIM_TimeBaseInitTypeDef TIM_TimeBaseInitstructure;TIM_TimeBaseInitstructure.TIM_ClockDivision=TIM_CKD_DIV1;TIM_TimeBaseInitstructure.TIM_CounterMode=TIM_CounterMode_Up;TIM_TimeBaseInitstructure.TIM_Period=10000-1;//定时器周期,实际就是ARR的值。计10000个数TIM_TimeBaseInitstructure.TIM_Prescaler=14400-1;//7200-1;//PSC.72MHZ下7200分频TIM_TimeBaseInitstructure.TIM_RepetitionCounter=0;//重复计数器,高级控制寄存器专用寄存器位,这里不用设置TIM_TimeBaseInit(TIM2,&TIM_TimeBaseInitstructure);//初始化定时器TIM_ClearFlag(TIM2,TIM_FLAG_Update);//手动清除标志位TIM_ITConfig(TIM2,TIM_IT_Update,ENABLE);//开启计数器中断NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);NVIC_InitTypeDef NVIC_InitTypeDefstructure;NVIC_InitTypeDefstructure.NVIC_IRQChannel=TIM2_IRQn;//设置中断通道NVIC_InitTypeDefstructure.NVIC_IRQChannelCmd=ENABLE;NVIC_InitTypeDefstructure.NVIC_IRQChannelPreemptionPriority=2;NVIC_InitTypeDefstructure.NVIC_IRQChannelSubPriority=1;NVIC_Init(&NVIC_InitTypeDefstructure);TIM_Cmd(TIM2,ENABLE);//计数器使能
}
void TIM2_IRQHandler(void)
{if(TIM_GetITStatus(TIM2,TIM_IT_Update)==SET)//检查中断标志位{Num++;TIM_ClearITPendingBit(TIM2,TIM_IT_Update);//清除中断标志位}
}

(3)timer.h

#ifndef __TIMER_H
#define __TIMER_Hvoid Timer_Init(void);#endif

2.定时器外部时钟 

(1)timer.c 

#include "Device/Include/stm32f10x.h"   // Device header
extern uint16_t Num;
void Timer_Init(void)
{RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);GPIO_InitTypeDef GPIO_Initstructure;GPIO_Initstructure.GPIO_Mode=GPIO_Mode_IPU;GPIO_Initstructure.GPIO_Pin=GPIO_Pin_0;GPIO_Initstructure.GPIO_Speed=GPIO_Speed_50MHz;GPIO_Init(GPIOA,&GPIO_Initstructure);TIM_ETRClockMode2Config(TIM2,TIM_ExtTRGPSC_OFF,TIM_ExtTRGPolarity_NonInverted,0x0F);//外部时钟->外部时钟模式2->不分频->高电平或者上升沿有效->TIM_TimeBaseInitTypeDef TIM_TimeBaseInitstructure;TIM_TimeBaseInitstructure.TIM_ClockDivision=TIM_CKD_DIV1;TIM_TimeBaseInitstructure.TIM_CounterMode=TIM_CounterMode_Up;//定时器计数方式TIM_TimeBaseInitstructure.TIM_Period=10-1;//定时器周期,实际就是ARR的值。计9个数TIM_TimeBaseInitstructure.TIM_Prescaler=2-1;//每遮挡一次,CNT值+1,加到9,上面num+1。TIM_TimeBaseInitstructure.TIM_RepetitionCounter=0;//重复计数器,高级控制寄存器专用寄存器位,这里不用设置TIM_TimeBaseInit(TIM2,&TIM_TimeBaseInitstructure);//初始化定时器TIM_ClearFlag(TIM2,TIM_FLAG_Update);//手动清除标志位TIM_ITConfig(TIM2,TIM_IT_Update,ENABLE);//开启计数器中断NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);NVIC_InitTypeDef NVIC_InitTypeDefstructure;NVIC_InitTypeDefstructure.NVIC_IRQChannel=TIM2_IRQn;//设置中断通道NVIC_InitTypeDefstructure.NVIC_IRQChannelCmd=ENABLE;NVIC_InitTypeDefstructure.NVIC_IRQChannelPreemptionPriority=2;NVIC_InitTypeDefstructure.NVIC_IRQChannelSubPriority=1;NVIC_Init(&NVIC_InitTypeDefstructure);TIM_Cmd(TIM2,ENABLE);//计数器使能
}
void TIM2_IRQHandler(void)
{if(TIM_GetITStatus(TIM2,TIM_IT_Update)==SET)//检查中断标志位{Num++;TIM_ClearITPendingBit(TIM2,TIM_IT_Update);//清除中断标志位}
}


http://www.ppmy.cn/devtools/37037.html

相关文章

大数据分析入门之10分钟掌握GROUP BY语法

前言 书接上回大数据分析入门10分钟快速了解SQL。 本篇将会进一步介绍group by语法。 基本语法 SELECT column_name, aggregate_function(column_name) FROM table_name GROUP BY column_name HAVING condition假设我们有students表,其中有id,grade_number,class…

CoPilot 产品体验:提升 OpenNJet 的控制管理和服务提供能力

文章目录 前言系统架构介绍CoPilot 配置CoPilot 插件规范 体验 CoPilot 实例CoPilot: Broker 实例CoPilot: Ctrl 实例 开发其他语言编写的 CoPilot目标主要思路具体实现执行 go 程序代码 功能扩展总结 前言 CoPilot 是 OpenNJet 的一个重要组成部分,它在 Master-Wo…

Prompt提示词教程 | 提示工程指南 | 提示词示例 入门篇

在上一节中,我们介绍并给出了如何赋能大语言模型的基本示例。如果还没看而且是刚入门的同学建议看下,有个基本概念。 Prompt提示词教程 | 提示工程指南 | 提示工程简介https://blog.csdn.net/HRG520JN/article/details/138523705在本节中,我…

基于springboot的汽车资讯网站源码数据库

基于springboot的汽车资讯网站源码数据库 随着信息技术在管理上越来越深入而广泛的应用,管理信息系统的实施在技术上已逐步成熟。本文介绍了汽车资讯网站的开发全过程。通过分析汽车资讯网站管理的不足,创建了一个计算机管理汽车资讯网站的方案。文章介…

【Vue3源码学习】— CH3.4 baseCreateRenderer 详解

baseCreateRenderer 详解 1. 源码结构分析2. optionsoptions传入说明3. 方法归类4. 关键职责4.1 初始化和环境配置4.2 底层 DOM 操作方法的设置4.3 核心渲染逻辑4.4 生命周期和更新机制4.5 水合功能的支持5. 关键流程解析5.1 方法定义5.2 渲染触发5.3 渲染细节处理6. 总结接下来…

智慧监测IN!计讯物联筑牢高速滑坡预警“安全锁”

在现代社会,高速公路以其高速、便捷的特性,早已成为连接城市与地区之间的重要纽带,承载着日益增长的车流和人流。然而,随着车流量的激增,高速公路面临的运营压力和安全挑战也随之加大,其中滑坡风险尤为突出…

力扣---二叉树的锯齿形层序遍历

给你二叉树的根节点 root ,返回其节点值的 锯齿形层序遍历 。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。 示例 1: 输入:root [3,9,20,null,null,15,…

【mysql】深入探索mysql中的各种约束条件

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,…