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

第十九天-输入捕获实验

一、输入捕获概述

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.dtcms.com/a/323322.html

相关文章:

  • 第十四届蓝桥杯青少年组省赛 编程题真题题解
  • 内存+磁盘混合存储数据库——平衡设备的“快”与“稳”
  • drippingblues靶机教程
  • 掌握长尾关键词SEO优化技巧
  • 202506 电子学会青少年等级考试机器人三级器人理论真题
  • 【Datawhale AI夏令营第三期】多模态RAG
  • JavaScript中使用变量作为JSON对象的键名
  • Java 集合框架深层原理:不止于 “增删改查”
  • Intel i5-14600KF + RTX 5060Ti 16G 台式机剖析
  • Docker多阶段构建及适用镜像推荐
  • 在Word和WPS文字中快速拆分、合并表格
  • 物联网之常见网络配置
  • 智能机票助手-接入Ollama本地模型-Spring-AI-Alibaba
  • 【Python 语法糖小火锅 · 第 2 涮】
  • 医院信息系统(HIS)的功能与应用详解
  • MySQL 元数据详细说明
  • RNN——LSTM(deep-learning)学习
  • Python自动化测试断言详细实战代码
  • BroadcastChannel:轻松实现前端跨页面通信
  • JavaWeb03——javascript基础语法
  • 嵌入式 Linux Mender OTA 实战全指南
  • 国家药品监督管理局医疗器械唯一标识管理信息批量导入mysql工具
  • 算法篇----模拟
  • 企业级高性能web服务器
  • 沿街晾晒识别误检率↓76%:陌讯多模态融合算法实战解析
  • VisionPro常用标定方式
  • 本科毕业论文怎么引用github里面数据集
  • Vue3从入门到精通: 2.2 Vue3组件通信与数据传递深度解析
  • AI热点周报(8.3~8.9):OpenAI重返开源,Anthropic放大招,Claude4.1、GPT5相继发布
  • 心灵笔记:正念冥想