使用定時器消除抖動

問題:定時器中斷和按鍵中斷屬于什么操作模式,輪詢嗎?

具體怎么實現

定時器中斷? (判斷)? ? ? ? 時間參數? ? ? ? ? ?按鍵中斷(修改)

中斷 向量表.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.pswp.cn/web/44189.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/44189.shtml
英文地址,請注明出處:http://en.pswp.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;然后…