当前位置: 首页 > news >正文

STM32之定时器

目录

1、定时器介绍

1.定时器工作原理

2.定时器的分类

3.通用定时器主要功能介绍

4.定时器计数模式

5.定时器时钟源

6.定时器溢出时间计算公式

2、定时器中断的实验

 codeMX的配置

代码编写

1.使用到的HAL库函数

1.中断回调函数需要我们重写

2. 在中断模式下启动TIM Base生成(在中断模式下启动定时器)

2.具体代码

1、定时器介绍

在51单片机的时候我们经常使用软件定时,但是软件定时存在不精确、占用CPU资源(在计时期间CPU都在数数)等缺点,在stm32我们就是用硬件定时可以避免软件定时的那些缺点。

1.定时器工作原理

使用精确的时基,通过硬件的方式,实现定时的功能。定时器的核心就是计数器。

2.定时器的分类

  • 基本定时器(TIM6~TIM7)
  • 通用定时器(TIM2~TIM5)
  • 高级定时器(TIM1和TIM8)

我们常用到的是通用定时器

我使用的单片机定时器资源(可以在单片机使用手册上查看)

3.通用定时器主要功能介绍

1 ) 16 位向上、向下、向上 / 向下自动装载计数器( TIMx_CNT )。
2 ) 16 位可编程 ( 可以实时修改 ) 预分频器 ( TIMx_PSC ) ,计数器时钟频率的分频系数为 1 65535 之间的任意数
值。
3 4 个独立通道( TIMx_CH1~4 ),这些通道可以用来作为:
A .输入捕获
B .输出比较
C P WM 生成(边缘或中间对齐模式)
D.单脉冲模式输出
4)可使用外部信号(TIMx_ETR)控制定时器和定时器互连(可以用 1 个定时器控制另外一个定时器)的同步电路。
5)如下事件发生时产生中断/DMA:
A.更新:计数器向上溢出/向下溢出,计数器初始化(通过软件或者内部/外部触发)
B.触发事件(计数器启动、停止、初始化或者由内部/外部触发计数)
C.输入捕获
D.输出比较
E.支持针对定位的增量(正交)编码器和霍尔传感器电路
F.触发输入作为外部时钟或者按周期的电流管理

4.定时器计数模式

5.定时器时钟源

6.定时器溢出时间计算公式

  • PSC:预分频器的值
  • ARR:自动重装载值
  • Tclk:时钟频率
  • Tout:设定的时间
  • 1Mhz=1000000hz(次/秒)
  • 周期(s)=频率(hz)的倒数

2、定时器中断的实验

需求:使用定时器中断方法,没500ms翻转一次LED等的状态

 codeMX的配置

代码编写

1.使用到的HAL库函数
1.中断回调函数需要我们重写

 void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim

参数:定时器的句柄

2. 在中断模式下启动TIM Base生成(在中断模式下启动定时器)

HAL_StatusTypeDef HAL_TIM_Base_Start_IT(TIM_HandleTypeDef *htim)

参数:定时器的句柄

返回的是一个状态值

2.具体代码
//重写中断回调函数
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{if(htim->Instance == TIM2)//确定中断源,确定是谁产生的中断{HAL_GPIO_TogglePin(GPIOB,GPIO_PIN_8);}
}
main函数里面HAL_TIM_Base_Start_IT(&htim2);//在中断模式下启动定时器

3、定时器的其它应用

 STM32之定时器--PWM控制SG90舵机

STM32之定时器--超声波测距

http://www.lryc.cn/news/254939.html

相关文章:

  • Canvas鼠标画线
  • Docker 安装部署 Sentinel Dashboard
  • 第21章网络通信
  • 一、运行时数据区域
  • OCR原理解析
  • 使用com组件编辑word
  • 国产Euler(欧拉)系统安装docker
  • Linux 进程控制
  • [ Linux Audio 篇 ] 音频开发入门基础知识
  • 关于高校电子邮件系统开通双因素认证的经验分享-以清华大学为例
  • 「Swift」类淘宝商品瀑布流展示
  • 道可云会展元宇宙平台全新升级,打造3D沉浸式展会新模式
  • Ant Design Pro初始化报错
  • 第16届中国R会议暨2023X-AGI大会开幕,和鲸科技分享ModelOps在数据科学平台中的实践与应用
  • ❀My学习Linux命令小记录(12)❀
  • MySQL学习day05
  • JAVA面试题7
  • 好用免费的AI换脸5个工具
  • 【Linux】公网远程访问AMH服务器管理面板
  • 随笔-这都是命吗
  • 优化网站性能,从容谈CDN加速的部署与运维
  • JavaScript-事件
  • linux的磁盘管理
  • qt-C++笔记之主线程中使用异步逻辑来处理ROS事件循环和Qt事件循环解决相互阻塞的问题
  • 【Docker】从零开始:18.使用Dockerfile构造自己的KingbaseES数据库镜像
  • YOLOv8独家改进《全网无重复 YOLOv8专属打造》感知聚合SERDet检测头:简单高效涨点,即插即用|检测头新颖改进
  • Android Studio中Flutter项目找不到Android真机设备解决方法
  • Vue 静态渲染 v-pre
  • C语言基础概念考查备忘 - 标识符、关键字、预定义标识符、语法检查、语义检查 ... 左值、右值、对象、副作用、未定义行为、sizeof是什么等等
  • 插件原理与开发