STM32的HAL库开发---通用定时器(TIMER)---定时器脉冲计数

一、脉冲计数实验原理

1、 外部时钟模式1:核心为蓝色部分的时基单元,时基单元的时钟源可以来自四种,分别是内部时钟PCLK、外部时钟模式1,外部时钟模式2、内部定时器触发(级联)。而脉冲计数就是使用外部时钟模式1和外部时钟模式2。

当使用外部时钟模式1的时候,输入信号主要来自定时器的通道1和通道2,然后通过信号TI1FP1和TI2FP2来到TRGI,然后经过从模式控制器来到时基单元。在从模式控制器里边的从模式选择外部时钟模式1,而外部时钟模式1实际上信号可以来自于TI1FP1、TI2FP2、TI1F_ED三种,其中TI1F_ED为双边沿检测,当来一个脉冲之后,无论是上升沿还是下降沿,TI1F_ED都有效,都会触发计数器计数,如果分频系数是1,一个脉冲会记两个数。而TI1FP1和TI2FP2只能是一种边沿,记一个信号。

分频系数为1时,直接读取计数器的值就是脉冲的个数。

2、外部时钟模式2:信号来自TIMx_ETR引脚,经过极性选择、边沿检测器、预分频器、输入滤波器,来到ETRF,设置从模式控制器模式为外部时钟模式2,然后来到时基单元。

例子:外部时钟模式1,信号配置成通道2输入。

设置SMS为111,外部时钟模式1,信号从定时器通道2来到TI2,然后首先经过滤波器,滤波器可以设置ICF进行设置。 然后设置边沿检测器,通过CC2P位来设置是上升沿还是下降沿有效,然后设置TRGI信号源,设置为110,信号来自TI2FP2,这块的设置跟输入捕获时候设置有些类似。

二、通用定时器脉冲计数实验配置步骤

1、HAL_TIM_IC_Init()函数,配置定时器基础工作参数。跟base_init函数一样。

2、HAL_TIM_IC_Msplnit()函数,配置NVIC、CLOCK、GPIO等。

3、HAL_TIM_SlaveConfigSynchro()函数,配置定时器从模式等。

4、HAL _TIM_IC_Start()函数,使能输入捕获并启动计数器。

5、__HAL_TIM_GET_COUNTERO()宏定义,获取计数器的值。

6、__HAL_TIM_SET_COUNTERO()宏定义,设置计数器的值。

 三、通用定时器脉冲计数实验

实验:将定时器2通道1输入的高电平脉冲作为定时器2的时钟,并通过串口打印脉冲数,定时器2通道1为PA0  PA0接的按键 按下一次产生一个脉冲

1、寄存器配置版本

注意:在配置过程中PSC设置为1时,都正常,但是PSC设置的值不是1时,一定要软件产生更新事件,由于PSC有影子寄存器,实际起作用的是影子寄存器,不软件产生更新事件,PSC的值会在计数器溢出的时候进入影子寄存器。

在HAL库里边这个软件更新事件在初始化函数最后写了。

#include "./BSP/TIMER/TIM_IC.h"void TIM_IC_Init(void)
{//开启GPIOA时钟RCC->APB2ENR |= (1 << 2);//设置PA0为输入模式GPIOA ->CRL &= ~(0X03 << 0);//设置PA0为输入下拉GPIOA->CRL |= (1 << 3);GPIOA->CRL &= ~(1 << 2);	//开启定时器2时钟RCC->APB1ENR |= (1 << 0);//设置分频系数PSCTIM2->PSC = 5;//开启ARR寄存器缓冲功能TIM2->CR1 |= (1 << 7);//设置计数器向上计数模式TIM2->CR1 &= ~(1 << 4);//设置TS位  为 101接TI1FP1TIM2->SMCR |= (1 << 6);TIM2->SMCR &= ~(1 << 5);TIM2->SMCR |= (1 << 4);//设置SMS为外输时钟模式1  111TIM2->SMCR |= 0X07;//设置输入滤波 IC1F 0000TIM2->CCMR1 &= ~(0X0F << 4);		//设置CC1P 上升沿捕获TIM2->CCER &= ~(1 << 1);//设置ARR值为999 TIM2->ARR = 999;//使能计数器 CEN位TIM2->CR1 |= (1<< 0);//***********注意:重要****************//软件产生更新事件  使PSC的值立即生效  //由于PSC有影子寄存器  不软件产生更新事件  PSC的值会等到计数器溢出是才生效TIM2->EGR |= (1 << 0);
}

2、 库函数版本

tim_inCapture.h头文件程序

#ifndef __TIM_INCAPTURE_H
#define __TIM_INCAPTURE_H#include "stm32f1xx.h"void TIM_IC_Init(uint16_t psc,uint16_t arr);#endif

tim_inCapture.c源文件程序

#include "./BSP/TIMER/tim_inCapture.h"TIM_HandleTypeDef htim;void TIM_IC_Init(uint16_t psc,uint16_t arr)
{htim.Instance = TIM2;htim.Init.AutoReloadPreload = TIM_AUTORELOAD_PRELOAD_ENABLE;htim.Init.CounterMode = TIM_COUNTERMODE_UP;htim.Init.Period = arr;htim.Init.Prescaler = psc;//定时器初始化 PSC ARR 计数模式 ARR缓冲功能HAL_TIM_IC_Init(&htim);TIM_SlaveConfigTypeDef sSlaveConfig = {0};//设置双边沿触发//sSlaveConfig.InputTrigger = TIM_TS_TI1F_ED;//设置单边沿触发sSlaveConfig.InputTrigger = TIM_TS_TI1FP1;sSlaveConfig.SlaveMode = TIM_SLAVEMODE_EXTERNAL1;	sSlaveConfig.TriggerFilter = 0X0;sSlaveConfig.TriggerPolarity = TIM_TRIGGERPOLARITY_RISING;//这个是输入分频的  这个在外部时钟模式1没有用 外部时钟模式2有分频 sSlaveConfig.TriggerPrescaler = TIM_TRIGGERPRESCALER_DIV1;//定时器从模式配置HAL_TIM_SlaveConfigSynchro(&htim, &sSlaveConfig);//启动定时器 HAL_TIM_IC_Start(&htim, TIM_CHANNEL_1);
}void HAL_TIM_IC_MspInit(TIM_HandleTypeDef *htim)
{if(htim ->Instance == TIM2){//开启定时器2时钟__HAL_RCC_TIM2_CLK_ENABLE();//开启GPIOA时钟__HAL_RCC_GPIOA_CLK_ENABLE();GPIO_InitTypeDef GPIO_Init;GPIO_Init.Mode = GPIO_MODE_INPUT;GPIO_Init.Pin = GPIO_PIN_0;GPIO_Init.Pull = GPIO_PULLDOWN;GPIO_Init.Speed = GPIO_SPEED_FREQ_HIGH;//速度是输出用的 可以不设置//初始化PA0为下拉输入HAL_GPIO_Init(GPIOA, &GPIO_Init);		}
}

main,c主函数程序

#include "./SYSTEM/sys/sys.h"
#include "./SYSTEM/usart/usart.h"
#include "./SYSTEM/delay/delay.h"
#include "./BSP/LED/led.h"
#include "./BSP/TIMER/tim_inCapture.h"uint8_t count = 0;//捕获高电平完成
int main(void)
{HAL_Init();                         /* 初始化HAL库 */sys_stm32_clock_init(RCC_PLL_MUL9); /* 设置时钟, 72Mhz */delay_init(72);                     /* 延时初始化 */led_Init();                         /* LED初始化 */usart_init(115200);TIM_IC_Init(0 ,999);while(1){ LED0(1);LED1(0);delay_ms(500);LED0(0);LED1(1);delay_ms(500);count = TIM2->CNT;printf("脉冲个数:%d\r\n",count);}
}

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

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

相关文章

甘肃省医保刷脸设备激活步骤

医保刷脸设备激活开通操作流程 激活社保 一、拆下刷脸设备&#xff0c;按右侧按键设置Wi-Fi和内网 Wi-Fi可连接个人热点&#xff0c;用于获取安装地址 配置Wi-Fi成功以后&#xff0c;输入机构代码&#xff0c;点击“获取”&#xff0c;安装地址获取成功&#xff1b; 断开Wi-…

一个sql只能有一个order by

ORDER BY 子句在 SQL 中只能出现一次&#xff0c;静态部分和动态部分只能写一个 ORDER BY

【Linux网络编程】之守护进程

【Linux网络编程】之守护进程 进程组进程组的概念组长进程 会话会话的概念会话ID 控制终端控制终端的概念控制终端的作用会话、终端、bash三者的关系 前台进程与后台进程概念特点查看当前终端的后台进程前台进程与后台进程的切换 进程组 进程组的概念 当我们使用以下命令查与…

MySQL的底层原理与架构

前言 了解MySQL的架构和原理对于很多的后续很多的操作会有很大的帮助与理解。并且很多知识都与底层架构相关联。 了解MySQL架构 通过上面的架构图可以得知&#xff0c;Server层中主要由 连接器、查询缓存、解析器/分析器、优化器、执行器 几部分组成的&#xff0c;下面将主要…

自动化测试工具selenium的安装踩坑

先安装Python 然后pip install selenium 浏览器安装驱动 火狐版本&#xff1a;132.0 geckodriver应用W3C WebDriver兼容远程服务器与根据gecko的浏览器互动的代理&#xff0c;该程序流程出示WebDriver协议书叙述的HTTP API&#xff0c;用以与Gecko浏览器(如Firefox)通讯 下…

apisix网关ip-restriction插件使用说明

ip-restriction插件可以在网关层进行客户端请求ip拦截。 当然了&#xff0c;一般不推荐使用该方法&#xff0c;专业的事专业工具做。建议有条件&#xff0c;还是上防火墙或者waf来做。 官方文档&#xff1a;ip-restriction | Apache APISIX -- Cloud-Native API Gateway whit…

Baklib赋能数字内容体验个性化推荐提升用户体验的未来之路

内容概要 随着数字化时代的不断发展&#xff0c;用户对内容消费的需求日益多样化&#xff0c;个性化推荐成为提升用户体验的重要手段。Baklib以其先进的技术手段&#xff0c;在数字内容领域内积极推动个性化推荐的实施&#xff0c;从而满足用户在信息获取和内容消费中的独特需…

【SqlServer】SQL Server Management Studio (SSMS) 下载、安装、配置使用及卸载——保姆级教程

超详细的 SQL Server Management Studio (SSMS) 下载、安装、连接数据库配置及卸载教程 SQL Server Management Studio (SSMS) 是微软提供的图形化管理工具&#xff0c;主要用于连接、管理和开发 SQL Server 数据库。以下是详细的 SSMS 下载、安装、连接数据库以及卸载的完整教…

【慕伏白教程】Zerotier 连接与简单配置

文章目录 下载与安装 WindowsLinux apt安装官方脚本安装 Zerotier 配置 新建网络网络配置 终端配置 WindowsLinux 下载与安装 Windows 进入Zerotier官方下载网站&#xff0c;点击下载 在下载目录找到安装文件&#xff0c;双击打开后点击 Install 开始安装 安装完成后&…

BUU22 [护网杯 2018]easy_tornado 1

打开题目以后出现三个文件&#xff0c;查看源代码&#xff0c;突破口在于这三个文件都有特殊的格式 python的tornado漏洞 Tornado 是一个用 Python 编写的 Web 框架&#xff08;和flask一样&#xff0c;只不过flask是轻量级的&#xff0c;而tornado可以处理高流量&#xff09…

Windows Docker笔记-Docker拉取镜像

通过在前面的章节《安装docker》中&#xff0c;了解并安装成功了Docker&#xff0c;本章讲述如何使用Docker拉取镜像。 使用Docker&#xff0c;主要是想要创建并运行Docker容器&#xff0c;而容器又要根据Docker镜像来创建&#xff0c;那么首当其冲&#xff0c;必须要先有一个…

接入 deepseek 实现AI智能问诊

1. 准备工作 注册 DeepSeek 账号 前往 DeepSeek 官网 注册账号并获取 API Key。 创建 UniApp 项目 使用 HBuilderX 创建一个新的 UniApp 项目&#xff08;选择 Vue3 或 Vue2 模板&#xff09;。 安装依赖 如果需要在 UniApp 中使用 HTTP 请求&#xff0c;推荐使用 uni.requ…

攻防世界 文件上传

题目名称-文件包含 今天的题大概提一下解题思路就好了 这里要使用php://filter 在此基础上因为网页过滤了一些关键字 我们要进行爆破 UCS-4* UCS-4BE UCS-4LE* UCS-2 UCS-2BE UCS-2LE UTF-32* UTF-32BE* UTF-32LE* UTF-16* UTF-16BE* UTF-16LE* UTF-7 UTF7-IMAP UTF-8* ASCII…

胜任力冰山模型:深入探索职业能力的多维结构

目录 1、序言 2、什么是胜任力&#xff1f; 3、任职资格和胜任力的区别 4、胜任力冰山模型&#xff1a;职场能力的多维展现 4.1、冰山水面上的部分 4.2、冰山水面下的部分 4.3、深层的个人特质与价值观 5、如何平衡任职资格与胜任能力 6、结语 1、序言 在快速发展的I…

在 Flownex 中创建自定义工作液

在这篇博文中&#xff0c;我们将了解如何在 Flownex 中为流网添加和定义一种新的流体温度相关工作材料。 Flownex 物料管理界面 在 Flownex 中使用与温度相关的流体材料时&#xff0c;了解其特性与温度的关系非常重要。这种了解可确保准确预测各种热条件下的流体行为&#xff0…

工业物联网平台-视频识别视频报警新功能正式上线

前言 视频监控作为中服云工业物联网平台4.0的功能已经上线运行。已为客户服务2年有余&#xff0c;为客户提供多路视频、实时在线监视和控制能力。服务客户实时发现现场、产线、设备出现随机故障、事故等&#xff0c;及时到场处理维修。 视频识别&视频报警新功能当前正式上…

4.PPT:日月潭景点介绍【18】

目录 NO1、2、3、4​ NO5、6、7、8 ​ ​NO9、10、11、12 ​ 表居中或者水平/垂直居中单元格内容居中或者水平/垂直居中 NO1、2、3、4 新建一个空白演示文稿&#xff0c;命名为“PPT.pptx”&#xff08;“.pptx”为扩展名&#xff09;新建幻灯片 开始→版式“PPT_素材.doc…

NetCore Consul动态伸缩+Ocelot 网关 缓存 自定义缓存 + 限流、熔断、超时 等服务治理

网关 OcelotGeteway 网关 Ocelot配置文件 {//单地址多实例负载均衡Consul 实现动态伸缩"Routes": [{// 上游 》》 接受的请求//上游请求方法,可以设置特定的 HTTP 方法列表或设置空列表以允许其中任何方法"UpstreamHttpMethod": [ "Get", &quo…

数据结构与算法(test1)

一、树和二叉树 1. 看图&#xff0c;完成以下填空 (1).树的度为________。 (2).树中结点的最大层次&#xff0c;称为树的_____或树的______&#xff0c;值是______。 (3).结点A和B的度分别为________ 和 ________。 (4).结点A是结点B的________。 (5).结点B是结点A的________…

【GitLab CI/CD 实践】从 0 到 1 搭建高效自动化部署流程

网罗开发 &#xff08;小红书、快手、视频号同名&#xff09; 大家好&#xff0c;我是 展菲&#xff0c;目前在上市企业从事人工智能项目研发管理工作&#xff0c;平时热衷于分享各种编程领域的软硬技能知识以及前沿技术&#xff0c;包括iOS、前端、Harmony OS、Java、Python等…