STM32通用定时器(原理、结构体、库函数、定时器中断每秒闪烁一次灯) —— 时钟源、分频值、重装载值

参考:stm32定时器与定时器中断
作者:打酱油的
发布时间: 2021-04-11 01:04:09
网址:https://blog.csdn.net/weixin_46098612/article/details/115493737

参考:stm32通用定时器结构体函数+定时器实现led闪烁
作者:点灯小哥
发布时间: 2021-03-09 12:13:32
网址:https://blog.csdn.net/weixin_46016743/article/details/114579672

目录

  • 定时器概念
    • 1.定时器种类(通用定时器、基本定时器、高级定时器)
    • 2.通用计时器特点描述
    • 3.定时器计数模式(向上,向下,向上向下模式)
    • 4.定时器中断、更新、触发事件、输入捕获、输出比较、PWM、分频
    • 5.通用定时器工作过程
  • 通用定时器时钟频率配置、寄存器、结构体、库函数
  • 定时器中断配置步骤(LED每秒闪烁一次)
  • 编程实现

定时器概念

1.定时器种类(通用定时器、基本定时器、高级定时器)

STM32F1XX系列共有八个定时器

两个高级定时器 + 四个通用定时器 + 两个基本定时器
在这里插入图片描述
注:主要使用通用定时器

DMA(Direct Memory Access,直接内存存取) 是所有现代电脑的重要特色,它允许不同速度的硬件装置来沟通,而不需要依于CPU 的大量中断负载。
否则,CPU 需要从来源把每一片段的资料复制到暂存器,然后把它们再次写回到新的地方。在这个时间中,CPU对于其他的工作来说就无法使用。
DMA 传输将数据从一个地址空间复制到另外一个地址空间。当CPU 初始化这个传输动作,传输动作本身是由DMA 控制器来实行和完成。

2.通用计时器特点描述

在这里插入图片描述
注:上面第五点不常用。

通用定时器位于APB1低速总线上在这里插入图片描述

3.定时器计数模式(向上,向下,向上向下模式)

在这里插入图片描述
在这里插入图片描述

4.定时器中断、更新、触发事件、输入捕获、输出比较、PWM、分频

在这里插入图片描述
注:上面5和6用的比较少

在这里插入图片描述

5.通用定时器工作过程

在这里插入图片描述

  • 1、时钟源:
    A.内部时钟APB1分频器CK_INT(改变后的频率)作为时钟源
    B.其他通用定时器 外部引脚2,3,4
    C.其他定时器
    D.外部通道(略)
  • 2、时基单元(时间控制单元) :
    ①预分频(除法1~65535)
    ②计数器时钟
    ③自动重装载值
  • 3、输入部分:
    ①输入引脚(左下角四个外部输入通道)
    ②边沿检测(比如选择上升沿和下降沿捕获,就可以获得脉冲的长度)
  • 4、输出部分 :
    A.输出比较寄存器
    B.周期—重装载值
    C.占空比—比较值(比如上面重装载值设置100作为周期,比较器设置50,那么占空比就为50%)
    在这里插入图片描述

主要关注下面红线部分,即内部时钟APB1作为时钟源。在这里插入图片描述

通用定时器时钟频率配置、寄存器、结构体、库函数

计数器时钟频率计算
在这里插入图片描述

在这里插入图片描述

通用定时器相关寄存器

在这里插入图片描述
通用定时器结构体
在这里插入图片描述
注:真正使用的只有前3个成员,后两个属于高级寄存器才使用

通用定时器库函数
在这里插入图片描述

定时器中断配置步骤(LED每秒闪烁一次)

在这里插入图片描述
江江讲的不对
预分频值:prescaler
时钟分频因子:ClockDivision

编程实现

led.c

前面配置过了

tim.h

#include "stm32f10x.h"                  // Device headervoid tim_config(void);//声明

tim.c

#include "stm32f10x.h"                  // Device header
#include "tim.h"void tim_config(void)
{//2.配置定时器结构体TIM_TimeBaseInitTypeDef	TIMinitStructure;//3.配置NVIC中断控制器结构体  内核寄存器misc.hNVIC_InitTypeDef NVICinitStructure;//1.使能时钟 定时器时钟RCC_APB1PeriphClockCmd( RCC_APB1Periph_TIM2,  ENABLE);NVIC_PriorityGroupConfig( NVIC_PriorityGroup_1);//配置	NVIC中断组TIMinitStructure.TIM_ClockDivision     = TIM_CKD_DIV1; //1分频 也就是不分频TIMinitStructure.TIM_CounterMode       = TIM_CounterMode_Up;//计数模式 选向上 TIMinitStructure.TIM_Period            = 10000-1;	//自动重装载值TIMinitStructure.TIM_Prescaler         = 7200-1;    //预分频值TIM_TimeBaseInit( TIM2, &TIMinitStructure);		TIM_Cmd( TIM2,  ENABLE); //定时器使能 和串口很像//定时器中断配置     允许更新标志位 允许更新/溢出(串口这里也是一个标志位)TIM_ITConfig( TIM2,  TIM_IT_Update,  ENABLE);//配置定时器与中断线联系创建//中断源NVICinitStructure.NVIC_IRQChannel = TIM2_IRQn;//中断通道(源)  中断源是系统定时器2NVICinitStructure.NVIC_IRQChannelPreemptionPriority = 1;//抢占优先级NVICinitStructure.NVIC_IRQChannelSubPriority = 1;//子优先级NVICinitStructure.NVIC_IRQChannelCmd = ENABLE;//使能NVIC_Init( &NVICinitStructure );	
}

main.c

#include "stm32f10x.h"   // Device header
#include "usart.h"
#include "led.h"
#include "tim.h"//添加头文件路径void delay(uint16_t time)
{uint16_t i = 0;while(time--){i=12000;while(i--);}
}int main(void)
{		LED_Init();tim_config();GPIO_SetBits( GPIOC,  GPIO_Pin_13);//默认关灯while(1){}
}//4. 配置定时器中断服务函数  函数名必须和固件库一样
void TIM2_IRQHandler(void)
{static uint16_t temp;//静态变量 变量保持//定时器标志位(允许更新/溢出) if(TIM_GetITStatus( TIM2,  TIM_IT_Update) != RESET) //判断定时器中断标志位是否被打开  在头文件stm32f10x_tim.h里{                                                   //每秒开启一次中断 定时器本质也就是计数器 不用再写delay函数一直占用CPU的资源了if(temp++ %2 == 1) //求余  奇偶判断{GPIO_ResetBits( GPIOC,  GPIO_Pin_13); }	else{GPIO_SetBits( GPIOC,  GPIO_Pin_13); 				}		 } TIM_ClearITPendingBit( TIM2,  TIM_IT_Update);//最后记得清除定时器中断标志位  
}	

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

关于错误error C4430 error C2365 error C2078 error C2440 error C2143的处理。

关于错误error C4430 error C2365 error C2078 error C2440 error C2143的处理。 楼主在公司接手了一段代码。编译的时候发现一个很奇怪的问题,就是获取最新代码的时候能编译通过,然后下次就编译不通过了,提示如下错误。 后来发现问题出在std…

返回json数据

拦截器的配置,导致只能返回boolean类型的数据,那么要让前端知道在哪里被拦截了,拦截了什么,这就要用到json数据,返回相应的数据,package com.sysh.web.interceptor;/** * Created by sjy Cotter on 2018/7/24. */impor…

STM32端口复用和端口重映射

参考:stm32 端口复用和重映射 作者:点灯小哥 发布时间: 2021-03-09 13:49:19 网址:https://blog.csdn.net/weixin_46016743/article/details/114581032 目录端口复用1.什么是端口复用2. 如何配置端口复用(以PA9、PA10串口为例)端口…

Scala学习:Curry化的函数

2019独角兽企业重金招聘Python工程师标准>>> 在第1章,我们说过Scala允许你创建新的“感觉像是原生语言支持”的控制抽象。尽管到目前你已经看到的例子都的确是控制抽象,不过任何人都不会 误以为它们是原生语言支持的。为了搞明白如何让控制抽…

js 获取session_Python实战案例:这是你见过的最详细的JS加密登录某博

0x00 抓包分析简单的搜索之后发现,很多参数都是登陆上面这个请求返回的值,这个请求在输入完账号光标到达密码框时就会生成!0x01 加密逻辑分析搜索su可以很快找到加密的位置,上图看到e.su和e.sp都是由sinaSSOEncoder这个函数生成的&#xff0c…

Maven镜像源

Maven仓库镜像 修改Maven setting.xml文件 在 标签内添加以下镜像。 注意&#xff1a;如果构建错误&#xff0c;请根据错误信息&#xff0c;调整镜像位置 <mirror> <id>repo2</id> <mirrorOf>central</mirrorOf> <name>Human Readable …

STM32通用定时器输出PWM控制舵机 —— 重装载值、比较值、当前值

参考&#xff1a;stm32 定时器输出PWM原理及工作原理控制舵机 作者&#xff1a;点灯小哥 发布时间&#xff1a; 2021-03-09 23:17:52 网址&#xff1a;https://blog.csdn.net/weixin_46016743/article/details/114606662 参考&#xff1a;stm32之pwm输出 作者&#xff1a;打酱油…

nzhtl1477-ただいま帰りました ( bfs )

nzhtl1477-ただいま帰りました 题目描述 珂学题意&#xff1a; 你是威廉&#xff01;你要做黄油蛋糕给珂朵莉吃~&#xff01; 68号岛有n个商店&#xff0c;有的商店直接有小路连接&#xff0c;小路的长度都为1 格里克告诉了你哪些地方可能有做黄油蛋糕的原料 但是那个人是个坑货…

STM32系统定时器SysTick(只能向下递减)延时闪烁灯

参考&#xff1a;stm32 系统定时器 SysTick 作者&#xff1a;点灯小哥 发布时间&#xff1a; 2021-03-10 13:46:00 网址&#xff1a;https://blog.csdn.net/weixin_46016743/article/details/114633245 参考&#xff1a;stm32之系统定时器 作者&#xff1a;打酱油的&#xff1b…

WMS学习笔记:1.尝试加载WMS

1.首先找一个可用的WMS栅格地图服务&#xff1a;http://demo.cubewerx.com/demo/cubeserv/cubeserv.cgi 获取GetCapabilities&#xff1a; http://demo.cubewerx.com/demo/cubeserv/cubeserv.cgi?serviceWMS&requestGetCapabilities 2.在ArcGIS中添加GIS空间服务 2.在ArcC…

python后缀名切割_python批量将.xls转化为.xlsx,包括文件名和后缀分割

import osimport pandas as pd#此方法用将xls转化为xlsxdef transformat():global path #定义为全局变量path os.getcwd()#获取当前工作路径file os.listdir(path)#获取当前路径下的所有文件for f in file:file_name_be,suff os.path.splitext(f)#对路径进行分割&#xff0c…

005.LVM删除

一 删除LVM步骤 卸载挂载点移除LV移除VG移除PV删除配置文件二 卸载挂载点 1 [rootkauai ~]# umount /dev/vg01/lv01 #先卸载挂载点 三 移除LV 1 [rootkauai ~]# lvremove /dev/vg01/lv01 #移除lv2 Do you really want to remove active logical volume lv01? [y/n]: y3 …

判断CPU是大端还是小端

#include "stdafx.h" #include <iostream> using namespace std;/* #大端模式&#xff08;Big_endian&#xff09;&#xff1a;字数据的高字节存储在低地址中&#xff0c;而字数据的低字节则存放在高地址中。 #小端模式&#xff08;Little_endian&#xff09;&…

mysqli 扩展_MySQLi的优势

1. 功能增加了2&#xff0c;效率大大增加(以后的PHP项目改成mysqli)3&#xff0c;更稳定mysqli使用面向对象技术&#xff0c;但也支持过程化的使用方式mysqli扩展中给我提供了三个类&#xff1a;1. mysqli和连接有关的类2. mysqli_result表达了对数据库的查询所返回的结果集。 …

STM32F4开发板硬件简介

更多干货推荐可以去牛客网看看&#xff0c;他们现在的IT题库内容很丰富&#xff0c;属于国内做的很好的了&#xff0c;而且是课程刷题面经求职讨论区分享&#xff0c;一站式求职学习网站&#xff0c;最最最重要的里面的资源全部免费&#xff01;&#xff01;&#xff01;点击进…

【莫比乌斯反演】10.30破译密码

初涉的话先留坑吧 题目大意 $\sum_{i_1}^{a_1}\sum_{i_2}^{a_2}\cdots\sum_{i_m}^{a_m}(i_1,i_2,\cdots,i_m)$ $a_i<1e6,2<m<10$ 题目分析 首先寄存两篇比较好的博客&#xff1a; 1.铃悬的数学小讲堂——狄利克雷卷积与莫比乌斯反演 2.[学习笔记]莫比乌斯反演常见模型…

演示:EIGRP非等价负载均衡(故障分析与解决篇)

演示&#xff1a;EIGRP非等价负载均衡的故障分析与排除故障背景&#xff1a;在如下图14.20所示的网络环境&#xff0c;工程师完成了环境中所有路由器的接口地址配置有EIGRP动态路由协议的启动&#xff0c;目前每台EIGRP路由器邻居关系正常&#xff0c;路由学习正常&#xff0c;…

STM32超声波模块测距串口输出/通用定时器中断并输出PWM控制舵机/系统定时器延时

参考&#xff1a;stm32 超声波模块 原理 实现测距 舵机使用 作者&#xff1a;点灯小哥 发布时间&#xff1a; 2021-03-10 19:37:16 网址&#xff1a;https://blog.csdn.net/weixin_46016743/article/details/114643703 目录效果展示超声波传感器原理超声波测距编程步骤代码编写…

js json转xml(可自定义属性,区分大小写)

直接上代码~ 在网上找了很多例子&#xff0c;大多数不适用&#xff0c;而且麻烦&#xff0c;自己进行了一些调整&#xff0c;完成了一个可以区分大小写的json转xml的小功能~ 功能实现js&#xff1a; function CreatXmlDoc(obj){this.tagNameobj.tagName;this.properties obj.p…

mysql安装主从配置_MySQL安装与主从配置

我是ssh远程 配置的&#xff1b;略微有些不同&#xff0c;大家自己斟酌。1.安装MySQLsudo yum install mysql mysql-server sudo chgrp -R mysql /var/我是ssh远程 配置的&#xff1b;略微有些不同&#xff0c;大家自己斟酌。1.安装MySQLsudo yum install mysql mysql-serversu…