STM32通用定时器实现us微秒延时
为了获取精确延时,STM32芯片中往往会使用内核中的嘀嗒时钟Systick作为参考时钟。当嘀嗒时钟被占用做其他用途时,比如RTOS中的节拍器;就需要采用其他方法进行延时。
这里提出一种采用通用定时器作为延时的参考时钟的方法。
首先选择基础定时器即可,配置定时器参数,主要关注预分频器寄存器TIMx_PSC,它的大小决定了延时的最小单位,由于TIM2的时钟为84MHz,所有TIM2_PSC设置为84,即每一次计数对应1us。另外,这里计数器采用向下计数,便于程序判断。
1 void Delay_Timer_Init(void) 2 { 3 TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStruct; 4 5 RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); 6 7 TIM_TimeBaseStructInit(&TIM_TimeBaseInitStruct); 8 TIM_TimeBaseInitStruct.TIM_ClockDivision = TIM_CKD_DIV1; 9 TIM_TimeBaseInitStruct.TIM_CounterMode = TIM_CounterMode_Down; 10 TIM_TimeBaseInitStruct.TIM_Period = 100-1; 11 TIM_TimeBaseInitStruct.TIM_Prescaler = (84-1); 12 TIM_TimeBaseInit(TIM3, &TIM_TimeBaseInitStruct); 13 14 while((TIM3->SR & TIM_FLAG_Update)!=SET); 15 TIM3->SR = (uint16_t)~TIM_FLAG_Update; 16 }
延时函数如下,对CNT寄存器赋延时值,然后通过判断Update标志位进行阻塞延时。
1 void Delay_us(uint32_t us_cnt) 2 { 3 TIM3->CNT = us_cnt-1; 4 TIM3->CR1 |= TIM_CR1_CEN; 5 while((TIM3->SR & TIM_FLAG_Update)!=SET); 6 TIM3->SR = (uint16_t)~TIM_FLAG_Update; 7 TIM3->CR1 &= ~TIM_CR1_CEN; 8 }
在没有外部中断的情况下,对延时精度进行测试。测试方法是周期性控制GPIO管脚的输出电平:
1 while(1) 2 { 3 PEOUT_REG(1) = 1; 4 Delay_us(1); 5 PEOUT_REG(1) = 0; 6 Delay_us(1); 7 }
以下结果来自示波器测量,与实际1us稍有偏差,大概在1.2us左右:
转载于:https://www.cnblogs.com/xincz/p/7836597.html
STM32通用定时器实现us微秒延时相关推荐
- STM32 通用定时器原理介绍
一.STM32 通用定时器简介 STM32F1 的通用定时器是一个通过可编程预分频器(PSC)驱动的 16 位自动装载计数器 (CNT)构成.STM32 的通用定时器可以被用于:测量输入信号的脉冲长度 ...
- STM32——通用定时器
一.三种定时器区别 定时器分为:高级定时器.通用定时器和基本定时器 二.通用定时器功能特点描述 STM32F4的通用TIMx(TIM2.TIM3.TIM4和TIM5)定时器功能特点包括: ·16/32 ...
- stm32通用定时器用做外部脉冲计数器的例程
最近几天要用到stm32对外部输入脉冲进行计数,很自然想到定时器,可是手上资料没有讲解stm32定时器如何用作外部计数器的,在网上找例程,也没找到几个正确的,自己硬着头皮仔细研究参考手册,终于知道如何 ...
- STM32通用定时器(原理、结构体、库函数、定时器中断每秒闪烁一次灯) —— 时钟源、分频值、重装载值
参考:stm32定时器与定时器中断 作者:打酱油的 发布时间: 2021-04-11 01:04:09 网址:https://blog.csdn.net/weixin_46098612/article ...
- stm32cubemx中文_用 STM32 通用定时器做微秒延时函数(STM32CubeMX版本)
概述 在使用 DHT11 的时候,时序通信需要微秒来操作,STM32CubeMX 自带一个系统时钟,但是实现的是毫秒级别的.因此就自己用通用计时器实现一个. 文章目录 环境: 开发板:STM32F ...
- stm32通用定时器1s延时实现LED闪烁
stm32有很多定时器,每种定时器的功能也不尽相同,今天学习了如何用通用定时器实现1s延时,使LED灯闪烁,现总结如下: 步骤总结: 使能定时器时钟->配置定时器结构体->清空定时器标志位 ...
- STM32通用定时器输出PWM控制舵机 —— 重装载值、比较值、当前值
参考:stm32 定时器输出PWM原理及工作原理+控制舵机 作者:点灯小哥 发布时间: 2021-03-09 23:17:52 网址:https://blog.csdn.net/weixin_4601 ...
- STM32 通用定时器基本原理
STM32F10x系列总共最多有8个定时器: 三种STM32定时器区别: 通用定时器功能特点描述: ①. STM32 的通用 TIMx (TIM2.TIM3.TIM4 和 TIM5)定时器功能特点包括 ...
- stm32延时us寄存器_自己写一个STM32 HAL库的US微秒延时函数
当本菜鸟开始接触STM32的时候还是看了原子哥的寄存器教程才跳坑的. 现在ST已经把HAL库推向了主流,但是令我不解的是,HAL那么强大,居然没有一个微秒级别的延时函数?! 黑人问号脸. 好了,废话不 ...
最新文章
- spring mvc xml格式输入输出
- 集群批量管理工具parallel ssh的安装及使用
- matlab基础试题,MATLAB基础试题题目及答案,课程2020最新期末考试题库,章节测验答案...
- [jQuery基础] jQuery事件相关
- html5中的FileReader对象
- thymeleaf模板的应用
- three.js 05-06 之 CylinderGeometry 几何体
- SMCJ系列TVS瞬态抑制二极管型号参数表
- VirtualBox虚拟机几种网络连接方式介绍
- 在Netbeans中搭建Android开发环境
- 计算机毕业设计Java医院管理系统(系统+源码+mysql数据库+Lw文档)
- Hadoop新手篇:hadoop入门基础教程 1
- 厉害了,可以不重启JVM就替换掉已经加载的类?
- 设置 VMware 虚拟网络编辑器
- 【狂神Java笔记】Java网络编程实战详细笔记整理(附代码)
- C++中const int*, const int * const, 和 int const *区别
- 基于Python模仿流量攻击的方法对字节编码攻击
- Android FaceBook登录接入--散列密钥获取
- Oracle 10g在线整理碎片索引是否失效
- 微信支付0.2%费率商户号开通