4.系统定时器基本定时器

目录

系统定时器

系统定时器(systick)--内核

系统定时器结构

系统滴答定时器寄存器--内核

定时周期的确定公式

配置滴答定时器

系统定时器应用

应用1.定时器构造时间点任务,解决while循环阻塞问题

应用2.定时器构造精准的ms延时

应用3.按键非阻塞

STM32中的定时器

STM32 中定时器分类以及相关作用

STM32 中基本定时器的时钟源

STM32 中基本定时器的基本结构

预分频器预装载

预分频器是否开启

中断触发周期

代码


系统定时器

系统定时器(systick)--内核

系统定时器结构

系统滴答定时器寄存器--内核

        处理器有一个 24bit 的定时器—SysTick,它从重装载值向下计数到 0,产生溢出,如果使能了中断,就会产生中断,在下一个时钟,再次将重装载值放到计数器中。

        SYSTICK_LOAD 重装载值寄存器 -- 内核手册 4.5.2        

                重装载值寄存器是 24 位,所以可以填写的最大值 2^24-1

        SYSTICK_VAL 当前值寄存器        

        SYSTICK_CTRL 控制和状态寄存器 -- 内核手册 4.5.1

        

定时周期的确定公式

1. 根据选择的时钟源,CTRL 寄存器的位 2 置 1,选择 AHB(72M)作为时钟源

2. 所以计数的频率 F=72M

3. 更新 1 次数据的时间 t=1/F=1/72000000 s

4. 定时器的中断触发周期 T=ARR*t

5. 假如想要 1ms 的周期 T,需要计多少次数?

ARR:指重装载值

T=ARR*t=1ms=0.001s=ARR*1/72000000 s

ARR= T/t=1ms/(1/72000000 s)=72000

所以 ARR=72000

6. 想想最大的中断的触发周期是多少?

T=ARR*t=2^24*1/72000000 s=0.23s

配置滴答定时器

SysTick_Config(SystemCoreClock/1000);//72000

系统定时器应用

应用1.定时器构造时间点任务,解决while循环阻塞问题

一定要清0

应用2.定时器构造精准的ms延时

 

应用3.按键非阻塞

main

STM32中的定时器

STM32 中定时器分类以及相关作用

STM32 定时器分为 3 类:基本定时、通用定时器和高级定时器等

作用:

基本定时器:定时

通用定时器:定时+PWM+输入捕获+编码

高级定时器:通用定时器+死区+刹车

实时时钟 独立看门狗 窗口看门狗 本质上都是定时器

使用不同系列芯片,一定要确定,有没有该资源

STM32 中基本定时器的时钟源

TIM1 到 TIM8 预分频器前面的时钟都是 72M 的

STM32 中基本定时器的基本结构

有黑影的是有影子寄存器

预分频器预装载

 预分频器控制寄存器更改之后,不会立马生效,等这一次周期走完后,写到预分频缓冲器中才会生效。

预分频器是否开启

 使能预装载就是必须走完当前周期,下个周期才会生效。

中断触发周期

定时器的频率 CK_PSC F=72000000HZ

定时器的计数频率 CK_CNT f=F/PSC PSC 预分频值

更新一次数据的时间 t=1/f=PSC/F

计数的周期(触发中断的周期) T=ARR*t=ARR*PSC/F ARR 重装载值寄存器

需要 1ms 的中断周期:

T=ARR*PSC/F=1ms ARR*PSC=1ms*F=0.001*72000000=72000

注意:PSC 和 ARR 都是 16 位的寄存器,最大只能填入 65535

需要 5ms 的中断周期:

T=ARR*PSC/F=5ms ARR*PSC=5ms*F=0.005*72000000=360000

定时器的最大中断触发周期:

T=ARR*t=ARR*PSC/F=65535*65535/72000000 s=59.65s

代码

Tim6为例

寄存器:

	//1.开APB1的时钟RCC->APB1ENR |= (0x01 << 4);//2.CR1的位0置1TIM6->CR1 |= (0x01 << 0);//3.DIER的位0置1TIM6->DIER |= (0x01 << 0);//4.设置重装载寄存器TIM6->ARR = 10000 - 1;//5.设置预分频寄存器TIM6->PSC = 7200 - 1;//6.配置NVIC优先级NVIC_SetPriority(TIM6_IRQn, 9);//抢占2次级1//7.使能TIM6的NVICNVIC_EnableIRQ(TIM6_IRQn);

 库函数:

uint16_t PrescalerValue = 0;RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM6, ENABLE);//开TIM6时钟PrescalerValue = (uint16_t) (SystemCoreClock / 10000) - 1;TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;//定义结构体TIM_TimeBaseStructure.TIM_Period = PrescalerValue;//重装载值TIM_TimeBaseStructure.TIM_Prescaler = 7200  - 1;//预分频值TIM_TimeBaseStructure.TIM_ClockDivision = 0;//时钟分割,不等于6和7的时候才有用TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;//不等于6和7的时候才有用,6 7 只能向上计数TIM_TimeBaseInit(TIM6, &TIM_TimeBaseStructure);TIM_Cmd(TIM6, ENABLE);//使能定时器TIM_ITConfig(TIM6, TIM_IT_Update, ENABLE);//开启定时器中断TIM_PrescalerConfig(TIM6, PrescalerValue, TIM_PSCReloadMode_Immediate);NVIC_InitTypeDef NVIC_InitStructure;NVIC_InitStructure.NVIC_IRQChannel = TIM6_IRQn;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2;NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;NVIC_Init(&NVIC_InitStructure);

main.c

调用内核中断

NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/222.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

基于SpringBoot和PostGIS的应急运输事件影响分析-以1.31侧翻事故为例

目录 前言 一、技术实现路径 1、需要使用的数据 2、空间分析方法 二、相关模块设计与实现 1、运输路线重现开发 2、事故点影响范围实现 3、WebGIS可视化实现 三、讨论 1、界面结果展示 2、影响范围分析 四、总结 前言 在交通运输发达的当今社会&#xff0c;应急运输…

Python爬虫(20)Python爬虫数据存储技巧:二进制格式(Pickle/Parquet)性能优化实战

目录 背景介绍一、二进制存储的核心优势二、Python Pickle&#xff1a;轻量级对象序列化1. 基本介绍2. 代码示例3. 性能与局限性 三、Apache Parquet&#xff1a;列式存储的工业级方案1. 基本介绍2. 代码示例&#xff08;使用PyArrow库&#xff09;3. 核心优势 四、性能对比与选…

C++从入门到实战(十三)C++函数模板与类模板初阶讲解

C从入门到实战&#xff08;十三&#xff09;C函数模板与类模板初阶讲解 前言一、为什么需要模板1. 函数重载的问题2. 泛型编程和模板的作用 二、函数模板2.1 函数模板格式2.2 函数模板的原理2.3 函数模板的实例化&#xff08;1&#xff09;隐式实例化&#xff1a;&#xff08;2…

游戏引擎学习第261天:切换到静态帧数组

game_debug.cpp: 将ProfileGraph的尺寸初始化为相对较大的值 今天的讨论主要围绕性能分析器&#xff08;Profiler&#xff09;以及如何改进它的可用性展开。当前性能分析器已经能够正常工作&#xff0c;但我们希望通过一些改进&#xff0c;使其更易于使用&#xff0c;特别是在…

《Python星球日记》 第36天:线性代数基础

名人说:路漫漫其修远兮,吾将上下而求索。—— 屈原《离骚》 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 专栏:《Python星球日记》,限时特价订阅中ing 目录 一、标量、向量、矩阵的基本概念1. 标量2. 向量3. 矩阵二、矩阵运算1. 矩阵加法2. 矩阵乘法3. 矩…

【SF顺丰】顺丰开放平台API对接(注册、API测试篇)

1.注册开发者账号 注册地址&#xff1a;顺丰企业账户中心 2.登录开发平台 登录地址&#xff1a;顺丰开放平台 3.开发者对接 点击开发者对接 4.创建开发对接应用 开发者应用中“新建应用”创建应用&#xff0c;最多创建应用限制数量5个 注意&#xff1a;需要先复制保存生产校验…

【Linux】进程地址空间

&#x1f4dd;前言&#xff1a; 这篇文章我们来讲讲进程地址空间&#xff1a; &#x1f3ac;个人简介&#xff1a;努力学习ing &#x1f4cb;个人专栏&#xff1a;Linux &#x1f380;CSDN主页 愚润求学 &#x1f304;其他专栏&#xff1a;C学习笔记&#xff0c;C语言入门基础…

【Java学习】反射

目录 反射类 一、泛型参数 二、反射类类型 三、实例化 1.实例化材料 2.结构信息可使用化 四、使用 1.Class —类完整结构信息 1.1Class<类>实例化 1.2Class<类>实例获取 1.2.1Class类静态获取&#xff1a; 1.2.2信息类静态获取 1.2.3信息类非静态获取 …

MVC、MVP、MVVM三大架构区别

1、MVC架构 M&#xff08;Model&#xff09;&#xff1a;主要处理数据的存储、获取、解析。 V&#xff08;View&#xff09;&#xff1a;即Fragement、Activity、View等XML文件 C&#xff08;Controller&#xff09;&#xff1a;主要功能为控制View层数据的显示&#xff0c;…

科创大赛——知识点复习【c++】——第一篇

目录 输入 一、cin 二、scanf 三、gets 四、getchar 五、fgets 输出 一、cout 二、printf 基本数据类型 一&#xff0c;数据类型有哪些&#xff1f; 二&#xff0c;整型&#xff08;Integer Types&#xff09; 1&#xff0c;修饰符 2&#xff0c;整型数据的数据范…

java学习之数据结构:四、树(代码补充)

这部分主要是用代码实现有序二叉树、树遍历、删除节点 目录 1.构建有序二叉树 1.1原理 1.2插入实现 2.广度优先遍历--队列实现 3.深度优先遍历--递归实现 3.1先序遍历 3.2中序遍历 3.3后序遍历 4.删除 4.1删除叶子节点 4.2删除有一棵子树的节点 4.3删除有两棵子树的节…

基于 HTML 和 CSS 实现的 3D 翻转卡片效果

一、引言 在网页设计中&#xff0c;为了增加用户的交互体验和视觉吸引力&#xff0c;常常会运用一些独特的效果。本文将详细介绍一个基于 HTML 和 CSS 实现的 3D 翻转卡片效果&#xff0c;通过对代码的剖析&#xff0c;让你了解如何创建一个具有立体感的卡片&#xff0c;在鼠标…