使用定时器消除抖动

问题:定时器中断和按键中断属于什么操作模式,轮询吗?

具体怎么实现

定时器中断  (判断)        时间参数           按键中断(修改)

中断 向量表.s文件

        DCD     SysTick_Handler            ; SysTick Handler

中断文件中定时器相关的
stm32f1xx_it.c

void SysTick_Handler(void)
{HAL_IncTick();//增加计数值,extern void check_timer(void);check_timer();}

stm32f1xxx_hal.c 

__weak void HAL_IncTick(void)
{uwTick += uwTickFreq;
}__weak uint32_t HAL_GetTick(void)
{return uwTick;
}

main.c

指针的时间和时钟的时间

pTimer结构体包含时间和处理计数值的函数

在系统的时钟处理函数处加上时钟检查函数,check_timer中的if语句限制  指针时间小于等于时钟时间

如果中断,通过中断回调函数让自己指针的时间加10ms,期间若又发生中断,指针时间再加10,

当未发生中断或者中断(n*10)ms内,都不满足进入check_timer中的if函数体的条件;

直至没有抖动时候进入if函数体中,通过定时器函数和check_timer函数调用结构体中的函数,使计数值增加

struct soft_timer {uint32_t timeout;void * args;void (*func)(void *);
};int g_key_cnt = 0;void key_timeout_func(void *args);
struct soft_timer key_timer = {~0, NULL, key_timeout_func};
void key_timeout_func(void *args)
{g_key_cnt++;key_timer.timeout = ~0;
}void mod_timer(struct soft_timer *pTimer, uint32_t timeout)
{pTimer->timeout = HAL_GetTick() + timeout;
}void check_timer(void)
{if (key_timer.timeout <= HAL_GetTick()){key_timer.func(key_timer.args);}
}、、数据处理的源头,发生中断
void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin)
{if (GPIO_Pin == GPIO_PIN_14){		mod_timer(&key_timer, 10);}
}
int main(){OLED_Init();	 OLED_Clear();   OLED_PrintString(0, 4, "Key ISR cnt = ");while (1){OLED_PrintSignedVal(0, 6, g_key_cnt);}}

stm32f1xx_it.c

          DCD     EXTI15_10_IRQHandler       ; EXTI Line 15..10

void EXTI15_10_IRQHandler(void)
{/* USER CODE BEGIN EXTI15_10_IRQn 0 *//* USER CODE END EXTI15_10_IRQn 0 */HAL_GPIO_EXTI_IRQHandler(GPIO_PIN_14);/* USER CODE BEGIN EXTI15_10_IRQn 1 *//* USER CODE END EXTI15_10_IRQn 1 */
}

 stm32f1xxx_hal_gpio.c  

数据处理的源头,发生中断

void HAL_GPIO_EXTI_IRQHandler(uint16_t GPIO_Pin)
{/* EXTI line interrupt detected */if (__HAL_GPIO_EXTI_GET_IT(GPIO_Pin) != 0x00u){__HAL_GPIO_EXTI_CLEAR_IT(GPIO_Pin);HAL_GPIO_EXTI_Callback(GPIO_Pin);}
}

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

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

相关文章

如何理解跨界营销?详解跨界营销的主要类型和方法!

跨界营销是一种创新的营销策略&#xff0c;它巧妙地捕捉不同行业、产品和消费者偏好之间的共通点和潜在联系。这种策略将看似不相关的元素相互融合&#xff0c;相互影响&#xff0c;创造出一种全新的生活方式和审美观念&#xff0c;以此吸引目标消费者群体的注意和青睐。 通过…

Oracle左连接过滤条件注意事项

1、left join 结果集行数与主表查询结果集行数一致 2、主表与辅表多关联条件要括起来 3、对于辅表的过滤条件写在on后面是先对辅表过滤后再与主表关联&#xff0c;写在where后面是对主表与辅表关联后的结果集再进行过滤 4、对于主表的过滤条件写在on后面不生效&#xff0c;只能…

LiveNVR监控流媒体Onvif/RTSP用户手册-用户管理:编辑、添加用户、关联通道、重置密码、删除、过滤搜索

LiveNVR监控流媒体Onvif/RTSP用户手册-用户管理:编辑、添加用户、关联通道、重置密码、删除、过滤搜索 1、用户管理1.1、添加用户1.2、关联通道1.3、重置密码1.4、编辑1.5、删除1.6、过滤搜索 2、RTSP/HLS/FLV/RTMP拉流Onvif流媒体服务 1、用户管理 1.1、添加用户 点击用户管理…

学习网络的第一步:全面解析OSI与TCP/IP模型

我是小米,一个喜欢分享技术的29岁程序员。如果你喜欢我的文章,欢迎关注我的微信公众号“软件求生”,获取更多技术干货! Hello,大家好!我是你们的好朋友小米。今天我们来聊一聊网络基础知识中的重量级选手——OSI模型和TCP/IP模型!网络的世界就像一个巨大的迷宫,而这两个…

Docker 镜像构建报 exec xxx.sh: no such file or directory

问题记录 场景&#xff1a; 处于对nacos docker 部署最新版本的探究&#xff0c;但是nacos/nacos-server镜像拉取不到最新版本&#xff0c;官网也是给出自己构建镜像的方案。 具体步骤很简单&#xff0c;先clone项目&#xff0c;然后签出你要的nacos版本&#xff0c;通过docke…

算法力扣刷题记录 四十二【101. 对称二叉树、100.相同的树、572.另一个树的子树】

前言 二叉树篇&#xff0c;开始对二叉树操作练习。 记录 四十二【101. 对称二叉树】。 继续。 一、题目阅读 给你一个二叉树的根节点 root &#xff0c; 检查它是否轴对称。 示例 1&#xff1a; 输入&#xff1a;root [1,2,2,3,4,4,3] 输出&#xff1a;true示例 2&#x…

S5730交换机上配置访问控制列表(ACL)、OSPF路由和PIM-SM组播

配置访问控制列表&#xff08;ACL&#xff09; 假设我们创建一个简单的ACL&#xff0c;允许或拒绝特定流量通过。 进入系统视图 sys 创建一个标准ACL&#xff0c;允许192.168.1.0/24网段的流量通过 acl number 2001 rule 5 permit source 192.168.1.0 0.0.0.255 其他流量默…

Pytest单元测试系列[v1.0.0][Pytest基础]

Pytest安装与配置 和Unittest一样&#xff0c;Pytest是另一个Python语言的单元测试框架&#xff0c;与Unittest相比它的测试用例更加容易编写、运行方式更加灵活、报错信息更加清晰、断言写法更简洁并且它可以运行有unittest和nose编写的测试用例。 Pytest 安装 启动命令行&…

【Pytorch】Conda环境下载慢换源/删源/恢复默认源

文章目录 背景临时换源永久换源打开conda配置condarc换源执行配置 命令行修改源添加源查看源 删源恢复默认源使用示范 背景 随着实验增多&#xff0c;需要分割创建环境的情况时有出现&#xff0c;在此情况下使用conda create --name xx python3.10 pytorch torchvision pytorc…

uni-app三部曲之二: 封装http请求

1.引言 前面一篇文章写了使用Pinia进行全局状态管理。 这篇文章主要介绍一下封装http请求&#xff0c;发送数据请求到服务端进行数据的获取。 感谢&#xff1a; 1.yudao-mall-uniapp: 芋道商城&#xff0c;基于 Vue Uniapp 实现&#xff0c;支持分销、拼团、砍价、秒杀、优…

电脑自动重启是什么原因呢?99%人都不知道的解决办法,直接打破循环

当你的电脑突然毫无预警地自动重启&#xff0c;不仅打断了工作流程&#xff0c;还可能导致未保存的数据丢失&#xff0c;这无疑是一件令人沮丧的事情。那么&#xff0c;电脑自动重启是什么原因呢&#xff1f;有什么方法可以解决呢&#xff1f;别担心&#xff0c;在大多数情况下…

Android Retrofit post请求,@Body传递的参数转义问题

文章目录 问题解决原因解决方案一&#xff1a;自己拼接json字符串&#xff0c;Body使用RequestBody类型&#xff0c;比如解决方案二&#xff1a;修改Retrofit的Gson 问题 因为传递的参数字符串中有等号 &#xff0c;结果传递的时候&#xff0c;打印出来 原始字符串&#xff…

【AIGC】GPT-4深度解析:自然语言处理的新纪元

目录 第一部分&#xff1a;GPT-4技术概览 1.1 GPT-4模型架构 多模态输入处理 专家混合&#xff08;MoE&#xff09;技术详解 参数规模和模型复杂性 1.2 GPT-4的关键技术创新 上下文窗口的扩展 模型性能预测技术 1.3 GPT-4与其他模型的比较 性能对比 架构差异 第二部…

docker-2

27.构建python应用镜像-dockerfile实践项目 1.基于官方的镜像&#xff0c;构建python代码运行环境 dockerfile 2.运行镜像&#xff0c;开启一个读写的容器空间&#xff08;定制操作&#xff0c;将代码丢进去&#xff0c;运行调试&#xff09; 3.提交这个变化的容器层数据&#…

cal命令

1、命令详解&#xff1a; cal&#xff08;全称&#xff1a;Calendar&#xff09;该命令用来显示当前日历或者指定日期的公历。 2、官方参数&#xff1a; -1, --one 仅显示当前月份&#xff08;默认&#xff09;-3, --three 显示上个月、当前月和下个月-s, --sunday…

谷粒商城P85发布商品时规格参数不显示问题

P85讲&#xff0c;发布商品&#xff0c;点击下一步之后&#xff0c;发现规格参数不显示 打开控制台发现报错forEach...错误 查了问题原因&#xff0c;发现返回的分组中个别组的关联属性(attrs)可能为null 所以这个时候&#xff0c;需要确保后端返回的attrs不能为null 方式1…

数据结构之顺序存储线性表实现详解与示例(C,C#,C++)

文章目录 一、顺序存储线性表的基本概念二、顺序存储线性表的实现1、数据结构定义2、初始化3、添加元素4、访问元素5、修改元素6、删除元素7、销毁 三、示例C语言示例C#语言示例C语言示例 顺序存储线性表是一种基本的数据结构&#xff0c;它将线性表的元素按照一定的顺序存放在…

Mysql中存储过程、存储函数、自定义函数、变量、流程控制语句、光标/游标、定义条件和处理程序的使用示例

场景 存储过程 存储过程是一组为了完成特定功能的SQL语句集合。使用存储过程的目的是将常用或复杂的工作预先用SQL语句写好并用一个指定名称存储起来&#xff0c; 这个过程经编译和优化后存储在数据库服务器中&#xff0c;因此称为存储过程。 当以后需要数据库提供与己定义…

分享WPF的UI开源库

文章目录 前言一、HandyControl二、AduSkin三、Adonis UI四、Panuon.WPF.UI五、LayUI-WPF六、MahApps.Metro七、MaterialDesignInXamlToolkit八、FluentWPF九、DMSkin总结 前言 分享WPF的UI开源库。 一、HandyControl HandyControl是一套WPF控件库&#xff0c;它几乎重写了所…

uni-app 扫描二维码获取信息功能

首先是扫描二维码的功能&#xff0c;可以参考这篇博文 uni-app-H5页面调用设备摄像头扫描二维码_uni-app app端调用摄像头显示至指定元素上显示-CSDN博客 然后现在是可以扫描二维码的状态&#xff0c;扫描之后&#xff0c;可以看到首先是出发上一个页面的事件&#xff0c;然后…