STM32自学☞定时器定时中断案例

news/2024/12/22 19:34:13/

 

a2981065176d4f7d8c4c096937fe625f.jpg

 

 timer_interrupt.c文件

/*

初始化函数编写步骤:

1.打开时钟

2.选择时基单元的时钟源(内部时钟源)

3.配置时基单元

4.NVIC配置

5.启动定时器

*/

#include "stm32f10x.h"

#include "stm32f10x_tim.h"

#include "timer_interrupt.h"

extern uint16_t num;

//初始化函数

void Timer_Init(void)

{

 //开启TIM2的时钟

 RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);

 //选择时基单元的时钟为内部时钟

 TIM_InternalClockConfig(TIM2);

 //时基单元初始化配置

 TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStruct;

 TIM_TimeBaseInitStruct.TIM_ClockDivision=TIM_CKD_DIV1; //指定时钟分频为1分频即不分频

 TIM_TimeBaseInitStruct.TIM_CounterMode=TIM_CounterMode_Up; //配置计数器的模式为向上计数

 TIM_TimeBaseInitStruct.TIM_Period= 10000 - 1; //设置周期值即ARR自动重装器的值

 TIM_TimeBaseInitStruct.TIM_Prescaler= 720 - 1; //设置PSC预分频器的值

 TIM_TimeBaseInitStruct.TIM_RepetitionCounter= 0; //设置重复计数器的值

 TIM_TimeBaseInit(TIM2,&TIM_TimeBaseInitStruct);

 //清除中断标志位

 TIM_ClearFlag(TIM2,TIM_FLAG_Update);

 //TIM2使能,更新中断

 TIM_ITConfig(TIM2,TIM_IT_Update,ENABLE);

 //NVIC配置

 NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //指定中断分组为分组2(2位抢占2位响应)

 NVIC_InitTypeDef NVIC_InitStruct;

 NVIC_InitStruct.NVIC_IRQChannel=TIM2_IRQn; //设置指定中断通道为TIM2_IRQn

 NVIC_InitStruct.NVIC_IRQChannelCmd=ENABLE; //设置指定中断通道使能

 NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority=2; //设置抢占优先级

 NVIC_InitStruct.NVIC_IRQChannelSubPriority=1; //设置响应优先级

 NVIC_Init(&NVIC_InitStruct);

 //启动定时器

 TIM_Cmd(TIM2,ENABLE);

}

//中断函数

void TIM2_IRQHandler(void)

{

 //判断中断线14的中断标志位是不是1

 if(TIM_GetITStatus(TIM2,TIM_IT_Update)==SET)

 {

  num++;

  TIM_ClearITPendingBit(TIM2,TIM_IT_Update);//清除中断标志位

 }

}

timer_interrupt.h文件

#ifndef __TIMER_INTERRUPT_H

#define __TIMER_INTERRUPT_H

void Timer_Init(void);

void TIM2_IRQHandler(void);

#endif

main.c文件

#include "stm32f10x.h"

#include "stm32f10x_tim.h"

#include "delay.h"

#include "OLED.h"

#include "timer_interrupt.h"

uint16_t num;

int main (void)

 //初始化

 OLED_Init();

 Timer_Init();

 OLED_ShowString(1,1,"Num:");

 while(1)

 {

  OLED_ShowNum(1,5,num,5);

  OLED_ShowNum(2,5,TIM_GetCounter(TIM2),5);

  OLED_ShowNum(3,5,TIM_GetPrescaler(TIM2),5);

 }

}

 

 


http://www.ppmy.cn/news/1350377.html

相关文章

​​​​​​C#系列-C#EF框架实现分库分表(21)

在C#中使用Entity Framework (EF)框架实现分库分表(也称为数据库分片或水平切分)是一个相对复杂的过程,因为EF本身并不直接支持分库分表。分库分表通常是为了解决单一数据库的性能瓶颈、数据量过大、高并发等问题而采取的一种策略。 实现分库…

速盾:cdn集群防御空间dns服务器

在当今数字化时代,网络安全和性能成为了企业关注的焦点。速盾的CDN集群防御空间DNS服务器技术为网站提供了更高水平的安全性和性能优化。本文将深入探讨这一技术的关键特点和优势。 1. 集群防御: 速盾的CDN集群防御通过分布在全球的节点集群,…

【Python】单元测试unittest框架

note 使用unittest框架进行单元测试是Python标准库的一部分,提供了编写测试用例、测试套件以及运行测试的能力。测试用例是继承自unittest.TestCase的类。在这个类中,你可以定义一系列的方法来测试不同的行为。每个测试方法都应该以test开头。 文章目录…

华为配置车地通信快速切换实验

配置车地通信快速切换示例 组网图形 图1 配置车地通信快速切换业务示意图 组网需求配置思路配置注意事项操作步骤配置文件 组网需求 某轨交企业为了降低网络部署成本,提升服务质量,希望通过WLAN技术实现车地通信,使部署在地面网络的组播服务器…

已解决org.springframework.web.HttpMediaTypeNotAcceptableException异常的正确解决方法,亲测有效!!!

已解决org.springframework.web.HttpMediaTypeNotAcceptableException异常的正确解决方法,亲测有效!!! 文章目录 问题分析 报错原因 解决思路 解决方法 总结 问题分析 在Spring MVC应用中处理HTTP请求时,我们有…

JavaI/O流 File类(文件)

目录 File类实例 File类 Java的File类是java.io.File的一个类,它表示文件或目录的路径名。这个类在处理文件和目录时非常有用,它提供了很多静态方法来操作文件和目录。 以下是一些File类的常见方法: 构造方法:创建表示文件或目…

洛谷: P1308 [NOIP2011 普及组] 统计单词数

前言: 这道题没理解清题目表达意思,我开始想的是用map来记录个数,然后一个变量记录一开始出现的单词位置,不挺简单的吗,然后....就AC了2个..从错误提示能看到个数没啥问题,但是第一个单词位置不对,看了新样…

【原创 附源码】Flutter安卓及iOS海外登录--Google登录最详细流程

最近接触了几个海外登录的平台,踩了很多坑,也总结了很多东西,决定记录下来给路过的兄弟坐个参考,也留着以后留着回顾。更新时间为2024年2月8日,后续集成方式可能会有变动,所以目前的集成流程仅供参考&#…