STM32HAL庫,解決串口UART中斷接收到的第一個字節數據丟失

1.問題描述:

只有上電后第一次接收到的第一字節數據會丟失,往后再接收也不會存在問題了。

2.先貼出來重寫UART中斷回調函數

我在接收到第一字節數據后開啟定時器中斷的,做一個超時處理,每次接收到數據會對定時器計數值清零,如果超過6ms則認為一幀數據接收完畢。

void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{if(huart->Instance == USART1){if(uart1.rx_buf_cnt >= UART1_RXSIZE - 1)	//接收數據量超限,錯誤{uart1.rx_buf_cnt = 0;memset(uart1.rx_buf, 0x00, sizeof(uart1.rx_buf));		HAL_UART_Transmit(huart, (uint8_t *)"數據溢出", 10, 0xFFFF);}else									//接收正常{uart1.rx_buf[uart1.rx_buf_cnt] = RxBuffer;	//接收數據存儲到rx_bufuart1.rx_buf_cnt++;if(uart1.rx_buf_cnt == 1){			HAL_TIM_Base_Start_IT(&htim3);	//在接收到第一個數據后 開啟定時器6ms中斷	}			__HAL_TIM_SET_COUNTER(&htim3, 0);  //每次接收數據后清空計數器數值,防止超時}HAL_UART_Receive_IT(huart, (uint8_t *)&RxBuffer, 1); }
}

上電第一次接收數據總是會少第一個字節。
在這里插入圖片描述

3.解決過程

一開始以為是UART初始化后沒有清除接收中斷標志位,嘗試過清除標志位,也根據網上說得的開中斷要放在初始化后,但都沒有效果,仿真過程中在中斷回調函數中加入斷點后就可以接收到,懷疑有什么影響到回調函數了,然后把開啟定時器中斷函數注釋掉之后就可以了,就猜測是定時器初始化后中斷標志位沒有清零,開啟后定時器中斷后就直接進入中斷函數把接收數據個數直接清零了,然后就從第二個數據重新開始接收。
在這里插入圖片描述

3.解決最后

正如我的猜測,果然加入清除定時器中斷標志位后數據就接收正常了。
原因:在定時器初始化的時候,為了更新預裝載值,會置中斷標志位,所以需要在NVIC開啟前先清除一下標志位。
在這里插入圖片描述

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

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

相關文章

解決 vxe-table 固定列對不齊,滾動后錯位、展開行遮擋的問題,解決渲染空白、邊框丟失問題

解決 vxe-table 固定列對不齊,滾動后錯位、展開行遮擋的問題,解決渲染空白、邊框丟失問題。 解決方法,更新到最新版本就完美解決了;v4 版本更新到 v4.12,v3版本更新到 v3.14 查看官網:https://vxetable.cn…

React相關面試題

以下是150道React面試題及其詳細回答,涵蓋了React的基礎知識、組件、狀態管理、路由、性能優化等多個方面,每道題目都盡量詳細且簡單易懂: React基礎概念類 1. 什么是React? React是一個用于構建用戶界面的JavaScript庫&#xff…

設備健康管理系統是什么,設備健康管理系統多少錢?

想象一下,你的汽車在儀表盤報警前 3 天,手機就收到 “發動機軸承剩余壽命 1500 公里” 的提醒 —— 這就是 ** 設備健康管理系統(EHM)** 的日常。在制造業,設備故障每年造成全球 3.4 萬億美元損失,而 80% 的…

Redis項目:秒殺業務

/*** 搶購秒殺券** param voucherId* return*/TransactionalOverridepublic Result seckillVoucher(Long voucherId) {// 1、查詢秒殺券SeckillVoucher voucher seckillVoucherService.getById(voucherId);// 2、判斷秒殺券是否合法if (voucher.getBeginTime().isAfter(LocalD…

區塊鏈(Blockchain)

區塊鏈(Blockchain)是一種去中心化、分布式的賬本技術,它通過密碼學保證數據的安全性和不可篡改性。它的核心特點包括去中心化、不可篡改性、可追溯性、智能合約等。 區塊鏈的關鍵概念 區塊(Block):每個區…

和鯨科技受邀赴中國氣象局氣象干部培訓學院湖南分院開展 DeepSeek 趨勢下的人工智能技術應用專題培訓

為深入貫徹落實國家關于人工智能與氣象業務深度融合的戰略部署,提升在實際業務中應用人工智能技術解決問題的能力,推動氣象現代化高質量發展,中國氣象局氣象干部培訓學院湖南分院于 2025 年 3 月 14 日組織開展 “DeepSeek 等人工智能技術在氣…

Ubuntu 24 常用命令方法

文章目錄 環境說明1、賬號管理1.1、啟用 root 2、包管理工具 apt & dpkg2.1、apt 簡介 & 阿里源配置2.2、dpkg 簡介2.3、apt 和 dpkg 兩者之間的關系2.4、常用命令 3、啟用 ssh 服務4、防火墻5、開啟遠程登錄6、關閉交換分區7、build-essential(編譯和開發軟…

OpenCV計算攝影學(22)將輸入的彩色圖像轉換為兩種風格的鉛筆素描效果函數pencilSketch()

操作系統:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 編程語言:C11 算法描述 鉛筆風格非寫實線描圖。 該函數通過圖像處理技術將輸入的彩色圖像轉換為兩種風格的鉛筆素描效果: dst1:炭筆效果的灰度圖…

hackmyvm-Smol

信息收集 ┌──(root?kali)-[/home/kali] └─# arp-scan -I eth1 192.168.56.0/24 Interface: eth1, type: EN10MB, MAC: 00:0c:29:34:da:f5, IPv4: 192.168.56.103 WARNING: Cannot open MAC/Vendor file ieee-oui.txt: Permission denied WARNING: Cannot open MAC/Vendo…

使用DeepSeek和墨刀AI,寫PRD文檔、畫原型圖的思路、過程及方法

使用DeepSeek和墨刀AI,寫PRD文檔、畫原型圖的思路、過程及方法 現在PRD文檔要如何寫更高效、更清晰、更完整? 還是按以前的思路寫PRD,就還是以前的樣子。 現在AI這么強大,產品經理如何使用DeepSeek寫PRD文檔,產品經…

SpringData Redis緩存:自定義序列化與過期策略

文章目錄 引言一、Spring Cache與Redis集成基礎二、Redis緩存配置基礎三、自定義序列化策略四、實現自定義序列化器五、多級緩存配置六、自定義過期策略七、緩存注解的高級應用八、實現緩存預熱與更新策略九、緩存監控與統計總結 引言 在現代高并發分布式系統中,緩…

HOVER:人形機器人的多功能神經網絡全身控制器

編輯:陳萍萍的公主一點人工一點智能 HOVER:人形機器人的多功能神經網絡全身控制器HOVER通過策略蒸餾和統一命令空間設計,為人形機器人提供了通用、高效的全身控制框架。https://mp.weixin.qq.com/s/R1cw47I4BOi2UfF_m-KzWg 01 介紹 1.1 摘…

C++ :頂層const與底層const的區別

頂層const與底層const的區別 定義與核心區別 頂層 const (Top-level const)底層 const (Low-level const)?作用對象變量本身是常量(不可修改)變量指向或引用的對象是常量(不可修改)?典型場景指針本身不可變、普通變量為常量指…

Chainlit 自定義元素開發指南:使用 JSX 和受限導入實現交互式界面

自定義元素 Custom Element 類允許你渲染一個自定義的 .jsx 代碼片段。.jsx 文件應當放置在 public/elements/ELEMEN_NAME.jsx 目錄下。 屬性 name 字符串 自定義元素的名稱。它應該與你的JSX文件名相匹配(不包括 .jsx擴展名)。 props 字典 傳遞給 JSX 的屬性。 display El…

Opencv之計算機視覺一

一、環境準備 使用opencv庫來實現簡單的計算機視覺。 需要安裝兩個庫:opencv-python和opencv-contrib-python,版本可以自行選擇,注意不同版本的opencv中的某些函數名和用法可能不同 pip install opencv-python3.4.18.65 -i https://pypi.t…

k8s中PAUSE容器與init容器比較 local卷與hostpath卷比較

目錄 一、PAUSE容器與INIT容器比較 1. Pause 容器 作用 特點 示例 2. Init 容器 作用 特點 示例 3. Pause 容器 vs Init 容器 4. 總結 這兩個哪個先啟動呢? 詳細啟動順序 為什么 Pause 容器最先啟動? 示例 總結 二、local卷與hostpath卷…

Vue3 + TS組件封裝指南

在 Vue 3 TypeScript 中封裝組件時,需要注意以下幾點: 1. Props 定義 使用 defineProps 或 PropType 定義組件的 props,并為其添加類型。 示例: import { defineComponent, PropType } from vue;export default defineComponen…

mybatis_plus的樂觀鎖

樂觀鎖:總是假設最好的情況,每次讀取數據時認為數據不會被修改(即不加鎖),當進行更新操作時,會判斷這條數據是否被修改,未被修改,則進行更新操作。若被修改,則數據更新失…

Redis系列:深入理解緩存穿透、緩存擊穿、緩存雪崩及其解決方案

在使用Redis作為緩存系統時,我們經常會遇到“緩存穿透”、“緩存擊穿”和“緩存雪崩”等問題,這些問題一旦出現,會嚴重影響應用性能甚至造成服務不可用。因此,理解這些問題的產生原因和解決方案非常重要。 本文將全面講解緩存穿透…

AT指令集-NBIOT

是什么? 窄帶物聯網(Narrow Band Internet of Things, NB-IoT)成為萬物互聯網絡的一個重要分支支持低功耗設備在廣域網的蜂窩數據連接,也被叫作低功耗廣域網(LPWAN)NB-IoT支持待機時間長、對網絡連接要求較高設備的高效連接NB-Io…