娇小w搡bbbb搡bbb,《第一次の人妻》,中国成熟妇女毛茸茸,边啃奶头边躁狠狠躁视频免费观看

STM32串口中斷及DMA接收常見的幾個問題

發布者:Weasel最新更新時間:2024-08-27 來源: elecfans關鍵字:STM32  串口中斷  DMA接收 手機看文章 掃描二維碼
隨時隨地手機看文章

今天再給大家分享一些關于STM32串口中斷及DMA接收常見的幾個問題。

UART串口中斷接收

使能UART串口中斷之后,有接收到UART數據,進入中斷,此時要清除RXNE接收標志位:

1)通過軟件向該RXNE標志位寫入零來清零;

2)通過對 USART_DR 寄存器執行讀入操作將該位清零。

這里可以查看對應《參考手冊》,一般我們選擇第2種,通過讀取UART串口數據來清零。

1、中斷接收數據丟失

在UART串口中斷函數中,或者更高優先級中斷函數中長時間執行,導致接收丟失,所以,請勿在中斷函數中長時間執行。

特別有些人,還在中斷函數添加延時函數。實際應用中,只要不是特殊情況,比如測試某個功能可以添加延時函數,都不建議在中斷函數添加延時函數。

2、ORE上溢錯誤

ORE上溢錯誤是什么意思呢? 可能很多人不了解,簡單說就是:UART接收到有數據,沒有去取,但又來了數據,此時就會產生ORE上溢錯誤。(請看“參考手冊”)

其實,上面這種長時間在占用中斷,就會導致UART接收數據上溢。

很多人沒有在意這個,如果是使能了中斷接收,標志位沒有清除,又有ORE上溢錯誤的話,程序就會不停地進入UART中斷。(大家不妨試一下,看一下是不是你代碼一直在UART中斷里面不停運行)。

3、使能接收中斷前,先清除接收標志位

有時候,在程序初始化的時候,就會接收到數據,這個時候建議大家先清除接收標志位再使能接收中斷。類似如下:

wKgZomUD8ZyAcMFkAAOnWVM3tz4985.jpg

DMA接收串口數據

使用DMA接收串口數據,相信很多朋友都知道。這個可以理解為使用隊列,或者FIFO的形式,防止因高優先級中斷而打斷,導致接收數據丟失。

但很多人都遇到過,接收不到數據,或者數據異常的情況。所以,這里同樣有需要注意的地方。

1、使能UART之前,先使能DMA相關配置

這個和清除標志位一樣的道理,使能UART之前,先使能DMA相關配置,防止在配置過程中有接收數據。

wKgZomUD8Z2AQ7HXAAEwkQrKiT4053.jpg

2、ORE上溢錯誤導致不能使用DMA接收數據

導致不能DMA接收不到數據的根源,有一種可能就是有ORE上溢錯誤。

若在串口初始化并使能后到 DMA 使能之前有數據來,MCU是不能接收的。如果此時數據寄存器 USART_DR 存在一個數據,再來一個數據,就會導致ORE上溢錯誤。

一旦產生上溢錯誤后,就無法再觸發 DAM 請求,即使之后再啟動 DMA 也不行,無法觸發 DMA 請求就無法將數據寄存器內的數據及時轉移走,如此陷入死鎖。這就是串口無法正常接收的原因。

所以,最后提醒大家,配置時,請一定要注意這些細節。


關鍵字:STM32  串口中斷  DMA接收 引用地址:STM32串口中斷及DMA接收常見的幾個問題

上一篇:STM32G474 逐波限流保護的實現
下一篇:STM32串口通信簡明知識

推薦閱讀最新更新時間:2025-03-31 08:29

STM32 串口固件庫中定義的幾個中斷標志什么意思?
#define USART_IT_PE ((uint16_t)0x0028) #define USART_IT_TXE ((uint16_t)0x0727) #define USART_IT_TC ((uint16_t)0x0626) #define USART_IT_RXNE ((uint16_t)0x0525) #define USART_IT_IDLE ((uint16_t)0x0424) #define USART_IT_LBD ((uint16_t)0x0846) #define USART_IT_
[單片機]
STM32CubeMX串口接收數據(DMA方式,HAL庫)
使用DMA方式可以減輕CPU負擔,此例子相關配置可以參考 STM32CubeMX串口接收數據(中斷方式,HAL庫) (1)設置USART1中斷,NVIC配置如下圖 (2)設置USART1的DMA,如下圖 注意:要將RX的模式設置為circular ,否則只能接收一次,如果這里不作設置,網上也有 其他方法 介紹代碼實現多次接收的,但既然用到了STM32CubeMX就盡量發揮最大作用吧! (3)生成項目工程 (4)在main.c里設置變量以及啟動DMA接收 /* USER CODE BEGIN PV */ /* Private variables ------------------------------------
[單片機]
STM32CubeMX<font color='red'>串口</font><font color='red'>接收</font>數據(<font color='red'>DMA</font>方式,HAL庫)
STM32cube HAL庫 UART串口中斷方式收發任意長度 調試筆記
STM32Cube對于新項目的開發能節省不少時間,從繁瑣芯片初始化中解脫出來 1.STM32 UART初始化部分,配置好工程,采用STM32cube生成代碼,初始化即已經完成。 2.串口中斷方式的發動作:HAL_UART_Transmit_IT 沒做任何處理的情況下,我們在程序中使用printf會把信息打印到顯示屏中去,這時我們需要將printf重定向就能將printf的消息打印到串口中 去。在主函數中添加如下函數: int fputc(int ch, FILE *f) { HAL_UART_Transmit_IT(&huart1, (uint8_t *)&ch, 1); osDelay(1);
[單片機]
STM32學習(二)GPIO推挽輸出實驗
以 LED 和 BEEP 模塊為例,講解 GPIO 推挽輸出模式的使用。 硬件平臺 STM32學習 系列文章,如未特殊說明,默認是使用 STM32F407 主芯片,后續文章不再單獨說明。 GPIO初始化 主要代碼 這里以 LED0 為例,LED1 和 BEEP 代碼同理,都是用推挽輸出模式 開啟 GPIO 時鐘 使用 GPIO 之前,必須先開啟對應的時鐘; RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF, ENABLE); GPIO 結構體初始化 GPIO_InitTypeDef GPIO_InitStructure; GPIO_InitStructure.GPIO_Pin
[單片機]
STM32 LL庫編程】端口復用與重映射
0x01 什么是端口復用 STM32有很多的內置外設,這些外設的外部引腳都是與GPIO復用的。 一個GPIO如果可以復用為內置外設的功能引腳,那么當這個GPIO作為內置外設使用的時候,就叫做復用。 端口復用 通過上圖我們可以將 PA9、PA10 復用為 USART1_TX UASRT1_RX 或 定時器 TIM1的通道2和通道3 0x02 端口復用 端口復用步驟包括 使能端口時鐘 使能復用的端口時鐘 對應的端口模式設置 在配置復用端口時如何選擇端口模式 ? 在 IO 復用位內置 外設功能引腳的時候,必須設置GPIO 端口的模式,至于在復用功能下 GPIO 的模式是怎么對應,這個可以查看手冊《 STM32 STM
[單片機]
STM32調試(一)】串口發送像素,上位機解析顯示
一、思路 STM32采集OV數據,數據尺寸是QVGA(320*240),RGB565數據格式。采集的FIFO數據是一個像素,占兩個字節。每采集一個像素就向串口發送一個像素。上位機是一個串口助手,接收串口數據,將一個RGB565格式像素解析為RGB55格式并顯示在上位機。 二、STM32采集數據發送 2.1、OV7725模組 我們使用正點原子的例程進行修改,在接線時注意將數據線綁在一起,其它線綁在一起,以防發生數據干擾。 我們使用正點原子的例程進行修改,在接線時注意將數據線綁在一起,其它線綁在一起,以防發生數據干擾。 我買的OV7725攝像頭是帶FIFO的,因為 OV7725 的像素時鐘(PCLK)最高可達 24Mhz,我們用S
[單片機]
STM32燒錄方法
STM32的學習 1:STM32F103的最小系統板的燒錄程序。 需要 USB TO TTL 模塊 stm32f103的最小系統板 以及杜邦線若干 USB TO TTL 模塊,與stm32f103最小系統板的連接 3.3v接3.3v gnd接gnd RX接stm32f103的A9引腳 TX接stm32f103的A10引腳 并且stm32f103的最小系統板的BOOT0置0,BOOT1置1,用燒錄工具把程序燒進去 程序燒錄完畢后,需要把T0和T1都置1才能正常執行程序
[單片機]
STM32串口多級緩沖接收
本文是基于STM32G431的LL庫做的,針對裸機的串口接收和發送庫。其中UART接收采用DMA+idle中斷+多級緩沖模式。 1. 結構體 先創建幾個必要的結構體 typedef struct uart_rx { uint8_t mode; uint8_t *buf; /* poniter to receive buf */ uint16_t size; uint32_t wr_index; uint32_t rd_index; FlagStatus cplt_flag; #ifdef UART_RX_MODE_DMA DMA_TypeDef *dma; uint32_t dma_c
[單片機]
小廣播
設計資源 培訓 開發板 精華推薦

最新單片機文章
何立民專欄 單片機及嵌入式寶典

北京航空航天大學教授,20余年來致力于單片機與嵌入式系統推廣工作。

更多精選電路圖

 
EEWorld訂閱號

 
EEWorld服務號

 
汽車開發圈

 
機器人開發圈

電子工程世界版權所有 京ICP證060456號 京ICP備10001474號-1 電信業務審批[2006]字第258號函 京公網安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
主站蜘蛛池模板: 永平县| 德令哈市| 阿荣旗| 河北区| 启东市| 大安市| 衡东县| 台东县| 彭阳县| 兴业县| 华安县| 甘南县| 望江县| 南平市| 驻马店市| 佳木斯市| 滦南县| 合川市| 澄江县| 赣州市| 金塔县| 增城市| 卓资县| 新安县| 股票| 渑池县| 裕民县| 盐边县| 卓资县| 邢台市| 河源市| 和政县| 循化| 乌苏市| 广德县| 自贡市| 眉山市| 昌江| 江都市| 汨罗市| 临夏县|