STM32串口DMA 空閑中斷使用筆記

這里只記錄注意要點:

1,要開啟串口 全局中斷 和對應的接收DMA 中斷,兩個中斷必須同時開

2,裸機程序需要在主循環外調用一次 這個函數

 HAL_UARTEx_ReceiveToIdle_DMA(&huart2, rx_buff, BUFF_SIZE);

3,要在串口中斷處理函數中 添加這個函數?

HAL_UARTEx_ReceiveToIdle_DMA(&huart2, rx_buff, BUFF_SIZE);

4,重寫空閑中斷回調函數 ,它是個弱函數,需要程序員自己實現

void HAL_UARTEx_RxEventCallback(UART_HandleTypeDef * huart, uint16_t Size)

在這個函數中,可以做一些事情,比如記錄收到了多少個字節數據,或者對接收數據處理。

5,HAL_UARTEx_ReceiveToIdle_DMA 函數的作用:

?? ??? ?1,把接收類型設置成HAL_UART_RECEPTION_TOIDLE,
?? ??? ?2,調用開啟DMA接收函數;
?? ??? ?3,調用完再清除一次IDLEF標志位
?? ??? ?4,然后再設置IDLEIE標志位

6,上面第5點可以看出,這個函數需要反復調用,一般放在串口中斷函數里面就可以了,不能放在回調函數里,因為一旦出現異常沒有進中斷,那么在沒有其它地方調用HAL_UARTEx_ReceiveToIdle_DMA的話 ,就再也不進空閑中斷了,DMA 也不接收了

7,如果是了 OS , 那么可以用這種辦法:在任務中反復調用這個函數:HAL_UARTEx_ReceiveToIdle_DMA?,而無需在中斷函數里調用 ,不過本質上還是一樣的 :

while(1)
{status = HAL_UARTEx_ReceiveToIdle_DMA(&huart4, uart4_rx_buffer, UART_BUFFER_SIZE);while (status != HAL_OK) {osDelay(1);status =     HAL_UARTEx_ReceiveToIdle_DMA(&huart4,uart4_rx_buffer,UART_BUFFER_SIZE);}osSemaphoreAcquire(sem_uart4_rxHandle, osWaitForever); //這里是等待空閑中斷到來HAL_UART_AbortReceive(&huart4);//do sometings }...可以在 空閑中斷函數中添加 發送信號量if(huart->Instance == UART4) {uart4_rx_len = Size;osSemaphoreRelease(sem_uart4_rxHandle);}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/24423.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/24423.shtml
英文地址,請注明出處:http://en.pswp.cn/web/24423.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【動態規劃-BM71 最長上升子序列(一)】

題目 BM71 最長上升子序列(一) 分析 dp[i] 考慮到下標i&#xff0c;其組成的最長上升子序列長度 可以用動態規劃的原因&#xff1a; 到i的結果可以由到j &#xff08;j<i) 的結果推出&#xff0c;只需要判斷下標j對應的數字是否比下標i 對應的字母小即可 注意&#xf…

vs2013 - 打包

文章目錄 vs2013 - 打包概述installshield2013limitededitionMicrosoft Visual Studio 2013 Installer Projects選擇哪種來打包? 筆記VS2013打包和VS2019打包的區別打包工程選擇view打包工程中單擊工程名稱節點&#xff0c;就可以在屬性框中看到要改的屬性(e.g. 默認是x86, 要…

「動態規劃」當小偷改行去當按摩師,會發生什么?

一個有名的按摩師會收到源源不斷的預約請求&#xff0c;每個預約都可以選擇接或不接。在每次預約服務之間要有休息時間&#xff0c;因此她不能接受相鄰的預約。給定一個預約請求序列&#xff0c;替按摩師找到最優的預約集合&#xff08;總預約時間最長&#xff09;&#xff0c;…

滲透測試之內核安全系列課程:Rootkit技術初探(三)

今天&#xff0c;我們來講一下內核安全&#xff01; 本文章僅提供學習&#xff0c;切勿將其用于不法手段&#xff01; 目前&#xff0c;在滲透測試領域&#xff0c;主要分為了兩個發展方向&#xff0c;分別為Web攻防領域和PWN&#xff08;二進制安全&#xff09;攻防領域。在…

Linux安裝RocketMQ教程【帶圖文命令巨詳細】

巨詳細Linux安裝Nacos教程RocketMQ教程 1、檢查殘留版本2、上傳壓縮包至服務器2.1壓縮包獲取2.2創建相關目錄 3、安裝RocketMQ4、配置RocketMQ4.1修改runserver.sh和runbroker.sh啟動腳本4.2新增broker.conf配置信息4.3啟動關閉rocketmq4.4配置開機自啟動&#xff08;擴展項&am…

AI Agentic Design Patterns with AutoGen(下):工具使用、代碼編寫、多代理群聊

文章目錄 四、工具使用: 國際象棋游戲4.1 準備工具4.2 創建兩個棋手代理和棋盤代理4.3 注冊工具到代理4.4 創建對話流程&#xff0c;開始對話4.5 增加趣味性&#xff1a;加入閑聊 五、代碼編寫&#xff1a;財務分析5.1導入和配置代碼執行器5.2 創建 代碼執行/編寫 代理5.3 定義…

win10重裝系統?電腦系統重裝一鍵清晰,干貨分享!

在電腦的使用過程中&#xff0c;由于各種原因&#xff0c;我們可能會遇到系統崩潰、運行緩慢或者出現各種難以解決的問題。這時&#xff0c;重裝系統往往是一個有效的解決方案。今天&#xff0c;我們就來詳細介紹一下如何在Win10環境下進行系統的重裝&#xff0c;幫助大家輕松解…

【三十三】springboot+序列化實現返回值脫敏和返回值字符串時間格式化問題

互相交流入口地址 整體目錄&#xff1a; 【一】springboot整合swagger 【二】springboot整合自定義swagger 【三】springboot整合token 【四】springboot整合mybatis-plus 【五】springboot整合mybatis-plus 【六】springboot整合redis 【七】springboot整合AOP實現日志操作 【…

【Java每日一題】2.和數最大操作II-動態規劃

題目難度&#xff1a;中等 主要提升&#xff1a;for循環思想、動態規劃思想、數組操作 一、題目描述&#xff1a; 給你一個整數數組 nums &#xff0c;如果 nums 至少包含 2 個元素&#xff0c;你可以執行以下操作中的任意一個&#xff1a; &#xff08;1&#xff09;選擇 n…

Java學習-JDBC(一)

JDBC 概念 JDBC(Java Database Connectivity)Java數據庫連接JDBC提供了一組獨立于任何數據庫管理系統的APIJava提供接口規范&#xff0c;由各個數據庫廠商提供接口的實現&#xff0c;廠商提供的實現類封裝成jar文件&#xff0c;也就是我們俗稱的數據庫驅動jar包JDBC充分體現了…

什么是虛擬局域網?快解析有哪些的虛擬化應用功能?

什么是虛擬局域網&#xff1f;從字面上理解就是不是真實存在的局域網。虛擬局域網是將網絡用戶和設備集中在一起&#xff0c;從而可以對不同地域和商業的需要有一定的支持性。虛擬局域網有它的優點&#xff0c;在使用過程中可以為企業提供更安全、更穩定、更靈活的服務保障體系…

記錄jenkins pipeline ,git+maven+sonarqube+打包鏡像上傳到阿里云鏡像倉庫

1、階段視圖&#xff1a; 2、準備工作 所需工具與插件 jdk&#xff1a;可以存在多版本 maven&#xff1a;可以存在多版本 sonar-scanner 憑證令牌 gitlab&#xff1a;credentialsId sonarqube:配置在sonarqube208服務中 3、jenkinsfile pipeline {agent anystages {stage(從…

ugpowermill編程入門:從基礎到進階的全面解析

ugpowermill編程入門&#xff1a;從基礎到進階的全面解析 在制造行業中&#xff0c;UG PowerMill編程是一款廣泛應用的數控編程軟件&#xff0c;它以其高效、精確的加工能力深受工程師們的喜愛。對于初學者來說&#xff0c;如何快速入門并熟練掌握UG PowerMill編程技能是一項重…

Mac怎么讀取內存卡 Mac如何格式化內存卡

在今天的數字化時代&#xff0c;內存卡已經成為了我們生活中不可或缺的一部分。對于Mac電腦用戶而言&#xff0c;正確地讀取和管理內存卡中的數據至關重要。下面我們來看看Mac怎么讀取內存卡&#xff0c;Mac如何格式化內存卡的相關內容。 一、Mac怎么讀取內存卡 蘋果電腦在讀…

Base64 編碼表 參考

Base64的編碼是由下面的64個字符加上一個墊字符"" 一共65個字符集來完成的&#xff0c;他用 4 個 base64 字符去表示 3 個 ASCII 碼字符。 Base64字符串判斷可參考 golang判斷字符串是否base64編碼的字符串算法&#xff0c; 可準確判斷是或否 附帶單元測試用例和模糊…

Python中__面向對象__學習 (上)

目錄 一、類和對象 1.類的定義 2.根據對象創建類 二、構造和析構 1.構造方法 &#xff08;1&#xff09;不帶參數的構造方法 &#xff08;2&#xff09;帶參數的構造方法 2.析構方法 三、重載 1.定制對象的字符串形式 &#xff08;1&#xff09;只重載__str__方法 …

QT Udp廣播實現設備發現

測試環境 本文選用pc1作為客戶端&#xff0c;pc2&#xff0c;以及一臺虛擬機作為服務端。 pc1,pc2(客戶端&#xff09;: 虛擬機&#xff08;服務端)&#xff1a; 客戶端 原理&#xff1a;客戶端通過發送廣播消息信息到ip:255.255.255.255(QHostAddress::Broadcast),局域網…

了解Java內存模型(Java Memory Model, JMM)

了解Java內存模型&#xff08;Java Memory Model, JMM&#xff09; Java內存模型&#xff08;Java Memory Model, JMM&#xff09;是Java語言規范中規定的一組規則&#xff0c;定義了多線程程序中變量&#xff08;包括實例字段、靜態字段和數組元素&#xff09;的訪問方式。JM…

git 大文件上傳失敗 Please remove the file from history and try again.

根據提示執行命令 --- 查找到當前文件 git rev-list --objects --all | grep b24e74b34e7d482e2bc687e017c8ab28cd1d24b6git filter-branch --tree-filter rm -f 文件名 --tag-name-filter cat -- --all git push origin --tags --force git push origin --all --force

Fort Firewall防火墻工具v3.12.13

軟件介紹 Fort Firewall是一款開源系統的免費防火墻&#xff0c;體積小巧、占用空間不大&#xff0c;可以為用戶的電腦起到保護作用&#xff0c;該軟件可以控制程序訪問網絡&#xff0c;控制用戶的電腦網速&#xff0c;用戶可以更輕松便捷的進行網絡安全防護&#xff0c;保護系…