第十九天-输入捕获实验

一、输入捕获概述

1、输入捕获框图

2、输入捕获工作详解

①设置输入捕获滤波器

可以设置滤波,滤除一些高电平脉宽不足的脉冲信号。

②设置捕获极性

③输入捕获映射

④输入捕获分频器

这里的捕获是将计数器的值存入比较寄存器中,分频次的作用是设置几个上升沿/下降沿来临,才执行一次捕获。

⑤发生捕获时产生中断

3、相关引脚

在数据手册中可以查看。

因为我们要使用按键模拟输入的波形,PA0为WAKE_UP按键,所以可以使用TIM5通道1或者TIM2通道1。

二、相关库函数

注意这里GPIO的下拉输入,只是针对该实验,因为按键只会模拟高电平。

一般在输入捕获中,GPIO使用浮空输入。

三、相关实验

1、实验目的

2、相关代码

time.h
#ifndef __TIMER_H
#define __TIMER_H
#include "stm32f10x.h"//标志位 1:是否完成本次捕捉 1:上次是否捕捉到高电平 6:计时器重装载次数
extern u8 flag;
//获取的比较值
extern u16 cValue;void Timer_Int_Init(u16 preScaler,u16 value);void Timer_PWM_Init(u16 preScaler,u16 value);void Timer_Cap_Init(u16 preScaler,u16 value);#endif
time.c
//定义flag
u8 flag = 0;
u16 cValue = 0;void TIM2_IRQHandler()
{//如果计时器发生更新if(TIM_GetITStatus(TIM2,TIM_IT_Update) == SET){//如果超过最大更新次数,则为捕捉完毕if((flag & 0x3F) == 0x3F){flag |= 0x80;}else{flag++;}//清空中断标志位TIM_ClearITPendingBit(TIM2,TIM_IT_Update);}//如果捕捉到上升沿 / 下降沿if(TIM_GetITStatus(TIM2,TIM_IT_CC1) == SET){//如果上次未捕捉上升沿 此时需要捕捉上升沿if((flag & 0x40) == 0){flag = 0;cValue = 0;TIM_SetCounter(TIM2, 0); // 清零计数器TIM_Cmd(TIM2, ENABLE);   // 然后启动flag |= 0x40;TIM_OC1PolarityConfig(TIM2,TIM_OCPolarity_Low);//捕捉下降沿}else //如果上次已捕捉上升沿,此次应该捕捉下降沿{cValue = TIM_GetCapture1(TIM2);TIM_Cmd(TIM2,DISABLE); //停止定时器flag |= 0x80; //最高位设1TIM_OC1PolarityConfig(TIM2,TIM_OCPolarity_High); //捕捉上升沿}//清空中断标志位TIM_ClearITPendingBit(TIM2,TIM_IT_CC1);}
}
main.c
#include "stm32f10x.h"
#include "delay.h"
#include "led.h"
#include "timer.h"
#include "usart.h"int main()
{extern u8 flag;extern u16 cValue;u16 time = 0; //以ms计数u16 value = 8999;u16 preScaler = 8000;//一个计数周期为1sdelay_init();uart_init(115200);Timer_Cap_Init(preScaler,value);while(1){//需要检测 完成位if((flag & 0x80) == 0x80){time = (flag & 0x3F) * 1000 + cValue / 9;flag = 0;//不会重复检测//通过串口发送时间printf("%d\r\n",time);}}
}

3、实验总结

①:要注意多个中断共用一个中断函数,所以在中断函数中要进行判断。

②:extern修饰的变量,定义一次,多次声明。

③:printf中/r/n表示换行。

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

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

相关文章

多线程问题,子线程同时操作全局变量,使用后需要清空吗 ?

背景:目前有一个全局变量 ,某个方法中通过多线程,都操作这个变量,向这个全局变量中去添加元素,然后等所有子线程执行完了之后,对这个全局变量进行批量保存,然后这个全局变量还需要手动去清空吗&…

Netty知识储备:BIO、NIO、Reactor模型

学习Netty之前,首先先掌握这些基础知识:阻塞(Block)与非阻塞(Non-Block),同步(Synchronous)与异步(Asynchronous),Java BIO与NIO对比。…

用生成器守住架构,用 AI 放大效率:一套可落地的 AI 编程方法论

背景与问题 现实困境: 直接让 AI 产出整块业务代码,常常与现有架构风格、分层边界、依赖策略不一致,后续改造成本高;AI 对现实业务语境、领域规则难以精准把握;在既定模板成熟的场景下,代码生成器往往更快、更整齐。目…

码头岸电系统如何保障供电安全?安科瑞绝缘监测及故障定位方案解析

当岸电电网是TN-S系统时,船体未接专用接地线且船舶电网未与岸电零线接通,船舶电网发生单相接地故障时,人站在岸上触及船体会有触电危险,零线上可能出现高电压,单相接地电流大。当船体接专用接地线且船舶电网接入岸电零…

ESP32_u8g2移植

前言 U8g2 是一个用于嵌入式设备的单色图形库。U8g2支持单色OLED和LCD,并支持如SSD1306 SSD1315等多种类型的OLED驱动,几乎市面上常见都支持。 U8g2源码 download:https://github.com/olikraus/u8g21:环境 ESP32 S3(ESP32-S3-Dev…

MCP实现:.Net实现MCP服务端 + Ollama ,MCP服务端工具调用

本文使用.Net编写MCP服务端 Ollama ,实现简单MCP调用,代码仅实现基本演示功能。 文章目录一、Ollama如何安装使用二、创建.Net8项目,开发MCP服务端三、开发MCP客户端,并对接Ollama一、Ollama如何安装使用 请移步:htt…

Docker的安装使用以及常见的网络问题

一、什么是DockerDocker是一种容器化技术,用于快速打包、分发和运行程序。他的核心思想是"一次构建,到处运行",通过将应用及其依赖的环境打包到一个轻量级、可移植的容器中,实现跨平台一致运行。二、Docker的安装1.Cent…

C++入门学习

1.命名空间的介绍首先我们看到如下的代码&#xff0c;在C语言中&#xff1a;#include <stdio.h> #include <stdlib.h> int rand 10; // C语言没办法解决类似这样的命名冲突问题&#xff0c;所以C提出了namespace来解决 int main() {printf("%d\n", rand…

解决python错误:playwright._impl._errors.TimeoutError: Timeout 30000ms exceeded.

from playwright.sync_api import sync_playwrightwith sync_playwright() as p:browser = p.chromium.launch(headless=False)page = browser.new_page() page.goto(url)page.wait_for_load_state(networkidle) 在Python环境中运行以上代码后报错: page.wait_for_load_…

爬虫逆向之雷池waf

本文章中所有内容仅供学习交流使用&#xff0c;不用于其他任何目的。否则由此产生的一切后果均与作者无关&#xff01; 雷池waf概念 雷池 WAF&#xff08;SafeLine&#xff09;是长亭科技开源的一款 Web 应用防火墙&#xff0c;部署在网站前面&#xff0c;把所有进来的 HTTP/…

23种设计模式解析--行为型

行为型模式&#xff08;协作的艺术&#xff09; 观察者模式 观察者模式详解 模式定义 观察者模式&#xff08;Observer Pattern&#xff09;是一种行为设计模式&#xff0c;用于建立对象间一对多的依赖关系。当一个对象&#xff08;Subject&#xff09;状态变化时&#xff0c;所…

Linux系统之lua 详解

命令简介 lua 是 Lua 语言的解释器&#xff0c;用于加载和执行 Lua 程序&#xff08;包括文本源码和预编译的二进制文件&#xff09;。它支持两种运行模式&#xff1a;批处理模式&#xff08;执行指定脚本文件&#xff09;和交互式模式&#xff08;逐行读取并执行输入的命令&am…

visual studio 无明显错误,但是无法编译成功解决—仙盟创梦IDE

往后面查看rror CS0246: 未能找到类型或命名空间名“SimpleClass”(是否缺少 using 指令或程序集引用?)修复阿雪技术观在科技发展浪潮中&#xff0c;我们不妨积极投身技术共享。不满足于做受益者&#xff0c;更要主动担当贡献者。无论是分享代码、撰写技术博客&#xff0c;还是…

《论文阅读》传统CoT方法和提出的CoT Prompting的区分

论文&#xff1a;Chain-of-Thought Prompting Elicits Reasoning in Large Language Models作者对传统CoT方法和本文提出的CoT Prompting的区分。1. 传统方法的局限性 (1) 基于微调的CoT&#xff08;Rationale-Augmented Training&#xff09; 实现方式&#xff1a;需人工标注大…

Minio 高性能分布式对象存储

1、什么是对象存储? 描述: 对象存储&#xff08;Object Storage&#xff09;是一种存储数据的计算机体系结构&#xff0c;它以对象的形式存储和管理数据。与传统的文件系统和块存储不同&#xff0c;对象存储将数据作为对象存储在分布式的存储集群中&#xff0c;每个对象都有一…

[深度学习] 大模型学习4-RAG技术全景解析

在大语言模型基础知识一文中&#xff0c;检索增强生成&#xff08;Retrieval-Augmented Generation&#xff0c;简称 RAG&#xff09;技术作为构建大语言模型&#xff08;Large Language Model&#xff0c;简称 LLM&#xff09;应用的一种方式已被简要提及&#xff0c;本文将详…

4G/5G无线电单元系统

4G/5G无线电单元系统 ADI公司的核心技术和领域专业知识帮助客户在全球范围内规划、设计、打造更出色的高性能通信系统。 我们的无线电单元(RU)设计平台利用新一代技术来提供高性能解决方案&#xff0c;帮助客户消除设计障碍、缩短产品开发周期&#xff0c;加快产品上市时间。 价…

HarvardX TinyML小笔记1(番外2:神经网络)

1 介绍 图片来自&#xff1a;https://zh.wikipedia.org/zh-cn/%E4%BA%BA%E5%B7%A5%E7%A5%9E%E7%BB%8F%E7%BD%91%E7%BB%9C 神经网络一直感觉挺神奇的&#xff0c;江湖也说可解释性很差&#xff0c;无论如何还是学学吧。借这次学习哈佛的TinyML&#xff0c;也就顺带弄了。 这里…

计算机网络 第2章通信基础(竟成)

第 2 章 物理层【考纲内容】1.通信基础 (1) 信道、信号、带宽、码元、波特、速率、信源与信宿等基本概念 (2) 奈奎斯特定理与香农定理 (3) 编码与调制 (4) 电路交换、报文交换与分组交换 (5) 数据报与虚电路2.传输介质 (1) 双绞线、同轴电缆、光纤与无线传输介质&#xff1b;(2…

2025-08-09通过授权码的方式给exe程序充值

2025-08-09通过授权码的方式给exe程序充值主要点&#xff1a; 一次性授权机制&#xff1a; 新增 .used_licenses 文件记录所有已使用的授权码 每次激活前检查授权码是否在已使用列表中 激活成功后立即将授权码标记为已使用 时效性验证&#xff1a; 授权码包含过期时间戳&#x…