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

第十九天-输入捕获实验

一、输入捕获概述

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.xdnf.cn/news/17380.html

相关文章:

  • Redis面试题及详细答案100道(01-15) --- 基础认知篇
  • synchronized和RentrantLock用哪个?
  • LangChain-Unstructured 基础使用:PDF 与 Markdown 处理解析
  • 深入解析进程创建与终止机制
  • RAG-大模型课程《李宏毅 2025》作业1笔记
  • 算法篇----分治(快排)
  • 赛灵思ZYNQ官方文档UG585自学翻译笔记:General Purpose I/O (GPIO)通用输入 / 输出,LED控制亮灭,按键控制,中断控制
  • 【Mac】MLX:Lora微调工作流
  • 疯狂星期四文案网第34天运营日记
  • 第15届蓝桥杯Scratch图形化省赛中级组2024年8月24日真题
  • C++四种类型转换
  • 决策树技术详解:从理论到Python实战
  • 数据标准化与归一化的区别与应用场景
  • UE蓝图节点Add Impulse和Add Torque in Radians
  • Solana上Launchpad混战:新颖性应被重视
  • [激光原理与应用-201]:光学器件 - 增益晶体 - 概述
  • 大语言模型提示工程与应用:LLMs文本生成与数据标注实践
  • Java基础-TCP通信(多发多收和一发一收)
  • PHP-单引号和双引号(通俗易懂讲解版)
  • MySQL 元数据详细说明
  • AI基础与实践专题:神经网络基础
  • 探索Trae:使用Trae CN爬取 Gitbook 电子书
  • Java 8 特性
  • 网络管理实战
  • 【QT】常⽤控件详解(六)多元素控件 QListWidget Table Widget Tree Widget
  • QT第三讲- 机制、宏、类库模块
  • MBR分区nvme固态硬盘安装win7--非UEFI启动和GPT分区
  • ruoyi关闭shiro校验,任何接口可以直接访问
  • 可直接运行的 Playwright C# 自动化模板
  • 贪心----1.买卖股票的最佳时机