【STM32】输入捕获实验原理

2023-11-17

目录

输入捕获原理框架:

输入捕获实验工作原理:

1、滤波:

 2、设置捕获极性:

3、设置输入捕获映射通道:

4、预分频:

 5、中断开启:

输入捕获有关库函数及操作:

1.通道初始化函数:TIM_ICInit

2.通道极性设置:TIM_OCxPolarityConfig;

3.获取当前通道捕获值:TIM_GetCapturex;

4.GPIO配置函数:GPIO_Init;

5.中断服务函数:


输入捕获原理框架:

输入捕获实验工作原理:

输入捕获的工作原理:预设分频系数,和捕获沿,检测定时器通道输入的边沿信号,当信号发生跳变并且满足预设条件时,将定时器当前值寄存器CNTx的值存入捕获比较寄存器CCRx中。

捕获过程

捕获的过程大致可以细分为五个步骤:滤波、设定捕获极性、捕获通道设定、预分频、中断设置

1、滤波:

上面的图为滤波步骤的工作设置。滤波简单来说就是将一些杂的波过滤,获得我们所需要的波。

例如我们捕获实验需要特定周期捕获高电平的信号,但是在低电平处发生抖动,导致原本是低电平的地方就有一些高的信号,所以我们要对这些信号进行剔除。

例子

剔除的方法也很简单,就是多次检测,如果每一次检测的结果都为需要的结果,那么我们就认为这个高电平是有效的,而我们设置的信号触发后单次采样的采样的频率f DTS。但是这个频率总得有个来源吧,于是我们使用定时器的时钟频率CK_INT作为它的来源。而定时器TIMx_CCMRx的ICF位就用于选择配置滤波器,但是f DTS与f INT之间的关系的配置需要使用。 TIMx_CRx位去配置:

TIMx_CRx寄存器配置单次采样频率

 而设置需要的采样次数x则由TIMx_CCMR1寄存器的IC1F位来配置:

 2、设置捕获极性:

 这部分主要是用于设置捕获的是上升的信号沿还是下降的信号沿,它是由CCER的CC1P位来配置的。所谓上升沿,就是由低电平变成高电平的瞬间,下降沿就是由高电平变成低电平的瞬间。我们可以设置需要捕获哪一个时候的变化。

3、设置输入捕获映射通道:

 设置输入捕获映射通道,换句话说就是同一个定时器的不同通道捕获到的信号需不需要互换的的设置,它们如果交换那么关系如下图:

通道信号交换

它是由TIMx_CCMR1寄存器的CC1S位配置的,一般情况下,我们就只需要设置那个通道捕获到信号就由那个通道对于设备处理即可。

4、预分频:

 预分频是设置记录到几次上升沿才触发一次捕获。它是由TIMx_CCMR1寄存器的ICPS位来配置的。例如,如果我们设置每2次上升沿触发1次捕获,那么下图可以触发一次捕获

 5、中断开启:

这个就是开启相应的通道中断,它由TIMx_DIER寄存器配置;

输入捕获有关库函数及操作:

输入捕获的一般步骤有:

  • 使能时钟
  • 配置GPIO口
  • 配置定时器
  • 配置输入捕获通道
  • 配置捕获中断
  • 使能定时器
  • 编写中断服务函数

1.通道初始化函数:TIM_ICInit

NVIC_Init(&NVIC_InitStructure);

这个函数与我们PWM之前的函数类似,都是用于初始化定时器通道、配置定时器中断的工作模式的。这里我们用到了它的参数结构体的5个成员:

    TIM5_ICInitStructure.TIM_Channel = TIM_Channel_1;
  	TIM5_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising;
  	TIM5_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI;
  	TIM5_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1;
  	TIM5_ICInitStructure.TIM_ICFilter = 0x00;

第一个成员: TIM_Channel,这个成员就是指定工作的通道;

第二个成员:TIM_ICPolarity,这个成员用来配置我们是采用上升沿捕获还是下降沿捕获;

第三个成员:TIM_ICSelection,这个成员用来配置是否要将输入捕获通道映射到其它的通道,一般选择不用映射,直接direct现在的通道;

第四个成员:TIM_ICPrescaler,这个成员用来配置分频系数;

第五个成员:TIM_ICFilter,这个成员用来配置滤波的次数;

2.通道极性设置:TIM_OCxPolarityConfig;

void TIM_OC1PolarityConfig(TIM_TypeDef* TIMx, uint16_t TIM_OCPolarity);

这个函数用于配置通道的极性,即上升沿捕获还是下降沿捕获。

3.获取当前通道捕获值:TIM_GetCapturex;

uint16_t TIM_GetCapture1(TIM_TypeDef* TIMx);

这个函数用于获取当前我们通道捕获到的数值,即捕获比较寄存器存放的值

4.GPIO配置函数:GPIO_Init;

void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct)

GPIO的配置函数与前面GPIO的配置函数所需要做的类似,只不过需要具体去修改几个特定的参数:
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD;

    GPIO_ResetBits(GPIOA,GPIO_Pin_0);

GPIO的选择模式要选择为输入模式,并且要将GPIO的默认电平改为低电平。

5.中断服务函数:

捕获中断函数内部实现逻辑

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【STM32】输入捕获实验原理 的相关文章

  • ARM 的启动过程是怎样的?

    我们知道 对于X86架构 按下电源按钮后 机器开始执行0xFFFFFFF0处的代码 然后开始执行BIOS中的代码以进行硬件初始化 BIOS 执行后 它使用引导加载程序将操作系统映像加载到内存中 最后 操作系统代码开始运行 对于ARM架构 使
  • 适用于arm(cortex-m3)的位置独立可执行文件(-pie)

    我正在使用codesourcery g lite 基于gcc4 7 2版本 为stm32 Cortex m3 编程 我希望动态加载可执行文件 我知道我有两个选择 1 可重定位的elf 需要一个elf解析器 2 具有全局偏移寄存器的位置无关代
  • 使用 gnueabihf 为 ARMv6 构建

    我尝试为 ARMv6 构建应用程序 但失败了 我猜问题是工具链支持硬浮点 但 ARMv6 不支持 好吧 首先我设置 march armv6 编译失败 opt gcc linaro arm linux gnueabihf 4 8 2014 0
  • ARM架构中不同处理器模式下如何使用内核堆栈?

    据我了解 每个进程都有一个用户堆栈和内核堆栈 除此之外 ARM 架构中的每种模式都有一个堆栈 所以我想知道不同的堆栈和堆栈指针在 ARM 模式下如何工作 另外 何时会使用与进程关联的内核堆栈 何时会使用与进程关联的内核堆栈 当您进行系统调用
  • DSP 库 - RFFT - 奇怪的结果

    最近我一直在尝试在我的STM32F4 Discovery评估板上进行FFT计算 然后将其发送到PC 我已经调查了我的问题 我认为我对制造商提供的 FFT 函数做错了 我正在使用 CMSIS DSP 库 现在我一直在用代码生成样本 如果工作正
  • GCC ARM 汇编预处理器宏

    我正在尝试使用汇编 ARM 宏进行定点乘法 define MULT a b asm volatile SMULL r2 r3 0 1 n t ADD r2 r2 0x8000 n t ADC r3 r3 0 n t MOV 0 r2 ASR
  • Linux malloc() 在 ARM 和 x86 上的行为是否不同?

    这个网站上有很多关于内存分配的问题 但是我 找不到专门解决我的问题的人 这 问题 https stackoverflow com questions 19148296 linux memory overcommit details似乎最接近
  • ARM + gcc:不要使用一大块 .rodata 部分

    我想使用 gcc 编译一个程序 并针对 ARM 处理器进行链接时间优化 当我在没有 LTO 的情况下编译时 系统会被编译 当我启用 LTO 时 使用 flto 我收到以下汇编错误 错误 无效的文字常量 池需要更近 环顾网络 我发现这与我系统
  • 分析 Cortex-M7 (stm32f7) 上的 memcpy 性能

    简洁版本 从 GNU ARM 工具链中提取的 memcpy 的性能指标在 ARM Cortex M7 上对于不同的副本大小似乎差异很大 即使复制数据的代码始终保持不变 这可能是什么原因造成的 长版 我是使用 GNU Arm 工具链 11 2
  • STM32 传输结束时,循环 DMA 外设到存储器的行为如何?

    我想问一下 在以下情况下 STM32 中的 DMA SPI rx 会如何表现 我有一个指定的 例如 96 字节数组 名为 A 用于存储从 SPI 接收到的数据 我打开循环 SPI DMA 它对每个字节进行操作 配置为 96 字节 是否有可能
  • 了解 ctags 文件格式

    我使用 Exhuberant ctags 来索引我的 c 项目中的所有标签 c project 是 Cortex M7 微控制器的嵌入式软件 结果是一个标签文件 我正在尝试阅读该文件并理解所写的内容 根据我找到的 ctags 和 Exhub
  • 基于 Windows 8 ARM 的平板电脑上的 VB6

    随着 Windows 8 将支持 VB6 我的问题是 Microsoft 是否在任何地方表示 是或否 VB6 应用程序将在基于 ARM 的平板电脑上运行 如果没有 是否有任何 ARM 模拟器 以便我们可以在 Windows 8 ARM 平板
  • ARM 系统调用的接口是什么?它在 Linux 内核中的何处定义?

    我读过有关 Linux 中的系统调用的内容 并且到处都给出了有关 x86 架构的描述 0x80中断和SYSENTER 但我无法追踪 ARM 架构中系统调用的文件和进程 任何人都可以帮忙吗 我知道的几个相关文件是 arch arm kerne
  • stm32l0: 执行MI命令失败。使用 vFlashErase 数据包擦除闪存时出错

    我正在使用 Nucleo STM32L031 和 AC6 STM32 工作台 eclipse 我编写应用程序并进入调试模式 一切正常 直到我在应用程序中添加另一个功能 我注意到当我删除 评论 新函数 软件可以再次进入调试模式 但是当我添加
  • 架构armv7的重复符号

    尝试在我现有的应用程序中使用 Layar SDK 时出现以下错误 我该如何解决这个问题 Ld Users pnawale Library Developer Xcode DerivedData hub afxxzaqisdfliwbzxbi
  • 需要一些建议来开始在 ARM(使用 Linux)平台上编程

    我 也许 很快就会在托管 Linux 发行版的 ARM 平台上工作 我不知道哪个发行版 我知道该项目涉及视频流 但我无法告诉你更多信息 其实我只收到通知 还没见到任何人 我从来没有在这样的平台上工作过 所以我的想法是在项目开始之前进行测试
  • 可以对 Xcode 中的 Arm 架构设置进行一些澄清

    据我了解 iPhone 5将采用新的架构 armv7s 我的项目具有有效的架构armv7 并且有Build Active Architecture Only set to true 由于现在商店中的每个应用程序都是为armv6 and or
  • 哪些 GCC 优化标志对二进制大小影响最大?

    我正在使用 GCC 为 ARM 开发 C 我遇到了一个问题 我没有启用优化 我无法创建二进制文件 ELF https en wikipedia org wiki Executable and Linkable Format 对于我的代码 因
  • GCC:如何在 MCU 上完全禁用堆使用?

    我有一个在基于 ARM Cortex M 的 MCU 上运行并用 C 和 C 编写的应用程序 我用gcc and g 编译它并希望完全禁用任何堆使用 在 MCU 启动文件中 堆大小已设置为 0 除此之外 我还想禁止代码中意外使用堆 换句话说
  • aarch64 Linux 硬浮点或软浮点

    linux系统有arm64 有arm架构armv8 a 如何知道 Debian 运行的是硬浮动还是软浮动 符合 AAPCS64 GNU GCC for armv8仅提供硬浮动aarch64工具链 这与 armv7 a 的 GCC 不同 后者

随机推荐

  • 三角函数常见基本公式

    定义式 图形 正弦 sin 余弦 cos 正切 tan或tg 余切 cot或ctg 正割 sec 余割 csc 函数关系 商数关系 倒数关系 平方关系 和差角公式 二角和差公式 三角和公式 积化和差公式 倍角公式 二倍角公式 三倍角公式 四
  • centos7初始化操作-时间同步/网络防火墙/本地源/ssh/等

    一 chrony安装及配置 验证 说明 协议 NTP协议 时间同步必要场景 集群 日志 加密协议等 相关文章 https blog csdn net weixin 44515412 article details 106875753 1 安
  • 使用Lodop控件打印表单和二维码

    文章目录 1 了解Lodop 1 1Lodop的定义 1 2Lodop主要函数 1 3Lodop的下载 2 在页面中引入Lodop 3 支持的浏览器 4 Lodop的应用 4 1使用Lodop打印表单 4 2打印二维码 1 了解Lodop
  • Python学习笔记(十二)————判断语句相关

    目录 1 布尔类型的定义 2 比较运算符 3 if语句 4 if else语句 5 if elif else语句 1 布尔类型的定义 布尔类型的字面量 True 表示真 是 肯定 False 表示假 否 否定 布尔类型的数据 不仅可以通过定
  • UNI APP---Android端原生插件开发实战(一)

    1 前言 最近一个项目要求我们的产品必须走网络隧道 并且提供了对应的SDK 很明显只能通过原生开发的方式才能实现这个流程 笔者没有做过原生开发 也没有学过java 所以也踩了不少坑啊 花了两天时间总算完成任务 今天系统的总结下步骤 由于是根
  • 第一章 Qt入门

    2017 10 20 HelloZEX 感谢奇趣科技公司 Trolltech Qt门户 https www qt io 为我们提供了Qt 一种图形用户界面框架 利用Qt提供的C 应用程序开发框架 可以轻松实现 一次编写 随处编译 跨平台解决
  • 深度学习过程中测试准确率先上升后下降是为什么?

    很典型的过拟合问题 过拟合问题的表现 在训练过程中的验证准确率前上升 后下降 即在验证集上的表现先好后差 造成过拟合的原因 数据相对模型来说比较简单 即模型的表达能力过剩 在初始训练阶段 模型逐渐开始学习到一些信息 因而在验证集上的表现是提
  • setTimeout引发的刨根问底

    setTimeout 定时器 是JavaScript中一个比较重要且常用的方法 该方法用于在指定的毫秒数后调用函数或计算表达式 平时开发可能基本都是使用 setTimeout fn ms 的形式 当然还有比较神奇的用法 特别是在前端面试中
  • flex弹性布局教程-07容器属性flex-direction

    本节目标 掌握flex direction的使用 了解主轴变化的概念 内容摘要 本篇讲解了容器属性 flex direction 用来设置主轴的方向 阅读时间大约10 15分钟 flex容器属性 前面讲的属性都是设置在项目上的 另外还有6个
  • hud 1467(动态规划。解题报告)

    题目的地址 http acm hdu edu cn showproblem php pid 1467 在给出的三角型中 找出最大的白色三角形 三角形最大个数可用层数表示 分别对向上 和向下的三角形进行遍历 如果向下的三角形a i j 为白
  • 5V升压8.4V 25W升压充电一体芯片选型

    第一款AH3300 5V升压8 4V 25W升压充电一体芯片AH3300是一款工作于4V到28V的PFM升压型充电控制集成电路 AH3300两串锂电池升压充电芯片 内部集成有基准电压源 5V电压调制单元 电感电流检测单元 电池电压检测电路和
  • 离线环境下批量配置Python的各种依赖包

    如何在离线环境下一次性的批量配置Python依赖包 如果你的工作环境要求断网或离线 那么在进行Python的环境配置时需要频繁下载依赖包 例如在配置tensorflow或者mmdetection等 如果一个一个下载导入内网那就很坑 如何批量
  • Python(六):函数与Lambda表达式

    函数与Lambda表达式 1 函数 还记得 Python 里面 万物皆对象 么 Python 把函数也当成对象 可以从另一个函数中返回出来而去构建高阶函数 比如 参数是函数 返回值是函数 函数的定义 函数以def关键词开头 后接函数名和圆括
  • Redis-cli简单操作命令

    Redis一大特点就是提供list set zset hash等数据结构的存储 下面就是它的一些主要操作命令 redis cli h ip p 6379 SELECT 1 切换数据库 DBSIZE 查看当前数据库key的数量 FLUSHDB
  • shell 里执行sqlldr,not found

    解决方法 设置用户的环境变量 方法1 把Oracle的环境变量加到运行命令的用户的 home username bash profile里 方法2 直接切换Oracle用户执行
  • Pandas的学习(读取mongodb数据库集合到DataFrame,将DataFrame类型数据保存到mongodb数据库中)

    1 读取mongodb数据库集合到DataFrame import pymongo import pandas as pd client pymongo MongoClient 数据库连接字符串 第二种方式 host localhost p
  • python3 No module named 'PIL'

    在python3 scrapy框架已经安装好的情况下 还是出现了 python3 No module named PIL 在Python3下 PIL已经被Pillow替代了 所以只需要安装Pillow就可以了 使用命令 pip3 insta
  • 字符编码和字符集有什么区别?Unicode是什么,和UTF-8是什么关系?你想知道的都在这篇文章了

    前言 想必大家编写代码时肯定和我一样 也遇到过汉字乱码的问题 特别是 有时候和上下游对接接口 不能统一编码格式的话 一堆乱码问题 让人头皮发麻 那么为什么会有这么多的乱码问题 什么是字符编码 什么是字符集 他们之间有什么区别和联系 什么是
  • VMware的两种备份方式

    1 VMware的系统备份方式 快照备份 克隆备份 2 快照备份 快照 又称还原点 就是保存在拍快照时候的系统的状态 包含了所有的内容 在后期的时候随时可以恢复 拍摄快照 第一步 启动Linux的操作系统 快照备份是在系统启动后进行操作的
  • 【STM32】输入捕获实验原理

    目录 输入捕获原理框架 输入捕获实验工作原理 1 滤波 2 设置捕获极性 3 设置输入捕获映射通道 4 预分频 5 中断开启 输入捕获有关库函数及操作 1 通道初始化函数 TIM ICInit 2 通道极性设置 TIM OCxPolarit