国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

關(guān)于STM32使用HAL_UART_Receive()無法接收數(shù)據(jù)的問題

這篇具有很好參考價值的文章主要介紹了關(guān)于STM32使用HAL_UART_Receive()無法接收數(shù)據(jù)的問題。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

一、問題發(fā)現(xiàn)

? ? ? ? 在項目中我想通過阻塞的方式接收一段來自串口的數(shù)據(jù),于是使用了HAL_UART_Receive函數(shù),但跑起來發(fā)現(xiàn)一直超時接收不到。網(wǎng)上使勁搜但沒搜到啥有用的結(jié)果,那只能自己搗鼓了。一開始懷疑是硬件的問題,于是用示波器直接連到對應(yīng)的rx腳上,發(fā)現(xiàn)數(shù)據(jù)正常;于是我又嘗試使用中斷接收的方式,發(fā)現(xiàn)也能接收。那么,基本可以確定是HAL_UART_Receive這個函數(shù)本身有問題了。

關(guān)于STM32使用HAL_UART_Receive()無法接收數(shù)據(jù)的問題


?

二、問題追蹤

? ? ? ? 進入debug,并打開使用的USART的寄存器監(jiān)視(我使用的USART1),發(fā)現(xiàn)RXEN一直都是0,ORE一直都是1(這兩個都是ISR寄存器中的標(biāo)志,關(guān)于USART的寄存器介紹,可看看這篇文章STM32單片機,UART的寄存器配置以及工作原理),也就是說,這個函數(shù)中沒有清除ORE標(biāo)志的動作,導(dǎo)致串口在收到第一個數(shù)據(jù)后,再沒機會去接收第二個數(shù)據(jù);這時候再看HAL_UART_Receive,不論在接受前,還是在接收循環(huán)體內(nèi),都沒看到OREF的清除代碼

關(guān)于STM32使用HAL_UART_Receive()無法接收數(shù)據(jù)的問題

循環(huán)接受中未看到OREF的清除


三、問題解決

? ? ? ? 把USART的ISR(鏈接文章中為SR)寄存器看一下,再通過上面的解釋,問題就可以解決了,只要在HAL_UART_Receive的循環(huán)體內(nèi)添這么一句話

關(guān)于STM32使用HAL_UART_Receive()無法接收數(shù)據(jù)的問題

? ? ? ? ?現(xiàn)在終于可以正常阻塞接收了!

關(guān)于STM32使用HAL_UART_Receive()無法接收數(shù)據(jù)的問題

?

? ? ? ? 最后,本著不動庫函數(shù)的原則(防止cube重新生成后忘了修改),建議在某個地方重寫這個函數(shù)并引用?。如果文章中有什么不對的地方,歡迎指正!文章來源地址http://www.zghlxwxcb.cn/news/detail-510163.html

到了這里,關(guān)于關(guān)于STM32使用HAL_UART_Receive()無法接收數(shù)據(jù)的問題的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • STM32學(xué)習(xí)筆記-SMT32使用HAL庫UART中斷方式使用

    目錄 1、引言 2、配置 3、流程 近來需要使用藍牙模塊,再了解到藍牙模塊等無線模塊許多使用串口透傳,便決定在研究一下串口UART 的使用方法。 由于用的板子種類每次都不一樣,有F103 有G0 有G4 還有公司的8位自研芯片,所以每次用起來都需要重頭開始復(fù)習(xí) 每次使用UART的目

    2023年04月12日
    瀏覽(22)
  • STM32 HAL庫的HAL_UART_Transmit_IT使用方法

    STM32 HAL庫的HAL_UART_Transmit_IT使用方法

    是STM32 HAL庫中非阻塞的串口發(fā)送函數(shù)。 用法:1. 調(diào)用HAL_UART_Transmit_IT()發(fā)送數(shù)據(jù) ? ? ? ? ? ?2. 在HAL_UART_TxCpltCallback()里寫上發(fā)送完成后的處理 注意:?HAL_UART_Transmit_IT()要等待上次發(fā)送完成后再發(fā)送,否則返回HAL_BUSY。用huart-gState == HAL_UART_STATE_READY判斷上次是否發(fā)送完成。 官方

    2024年02月16日
    瀏覽(24)
  • stm32 hal庫uart使用 DMA中斷只能發(fā)送一次的問題

    1.stm32 uart使用DMA,無論發(fā)送還是接收都各自有一個數(shù)據(jù)流中斷。這個數(shù)據(jù)流中斷是框架代碼不必過多關(guān)心。 2.使用了DMA后,uart的global中斷是否要使用?標(biāo)準(zhǔn)做法是在cubemx上要勾選的,不然,就會產(chǎn)生只能發(fā)送一次的問題。 問題的原因? 我相信這是hal庫的問題,理論上講有一

    2024年02月11日
    瀏覽(22)
  • 關(guān)于STM32用DMA傳輸UART空閑中斷中接收的數(shù)據(jù)時無法接收數(shù)據(jù)問題以及解決辦法

    關(guān)于STM32用DMA傳輸UART空閑中斷中接收的數(shù)據(jù)時無法接收數(shù)據(jù)問題以及解決辦法

    ???????? 串口1相關(guān)的設(shè)置及printf函數(shù)的使用,這里沒放,建議先實現(xiàn)串口打印功能 可以參考:使用STM32 CUBE IDE配置STM32F7 用DMA傳輸多通道ADC數(shù)據(jù)_stm32cubeide 配置adc_一只小白啊的博客-CSDN博客 ????????普通模式和循環(huán)模式的區(qū)別在于,普通模式下,DMA只會接收一次數(shù)據(jù),

    2024年02月05日
    瀏覽(19)
  • STM32 HAL庫函數(shù)——HAL_UART_RxCpltCallback()詳解

    HAL_UART_RxCpltCallback 是一個回調(diào)函數(shù),用于在使用 HAL 庫進行串口接收時處理接收完成事件。當(dāng)使用 HAL_UART_Receive_IT 函數(shù)啟動串口接收并且接收到指定數(shù)量的數(shù)據(jù)后,HAL 庫會自動調(diào)用 HAL_UART_RxCpltCallback 函數(shù)。 回調(diào)函數(shù)是一種特殊的函數(shù),它在特定事件發(fā)生時由系統(tǒng)或庫調(diào)用,

    2024年02月13日
    瀏覽(27)
  • stm32 筆記 UART讀取及HAL庫應(yīng)用

    stm32 筆記 UART讀取及HAL庫應(yīng)用

    ?由此圖可知: 采用HAL庫,中斷方式接收串口,只有當(dāng)RxXferCount == 0 時,也就是調(diào)用這個函數(shù),接收指定量的數(shù)據(jù)大小完成時,才會調(diào)用回調(diào)函數(shù)HAL_UART_RxCpltCallback()。 而且,RxXferCount == 0 后,也會使得中斷退出,此時需要從新設(shè)置 HAL_UART_Receive_IT() 開啟中斷。 這里還需要注意

    2024年02月15日
    瀏覽(18)
  • STM32 HAL庫函數(shù)——HAL_UART_Transmit_IT()詳解

    HAL_UART_Transmit_IT 函數(shù)的用法如下: 輸入?yún)?shù): huart :指向UART句柄結(jié)構(gòu)體的指針,用于指定要使用的UART外設(shè)。 pData :指向要發(fā)送數(shù)據(jù)緩沖區(qū)的指針,可以是 uint8_t 類型或 uint16_t 類型的數(shù)據(jù)。 Size :要發(fā)送的數(shù)據(jù)大小,以數(shù)據(jù)元素( uint8_t 或 uint16_t )的數(shù)量表示。 返回值:

    2024年02月08日
    瀏覽(22)
  • STM32-UART-DMA HAL庫緩沖收發(fā)

    STM32-UART-DMA HAL庫緩沖收發(fā)

    1.1、注意事項: HAL庫的DMA底層基本都會默認(rèn)開啟中斷使能,如果在STM32CubeMx禁用了中斷相關(guān)的功能,程序可能會進入空中斷回調(diào)出不來。 切記使用STM32-HAL庫的DMA發(fā)送時需要開啟USART中斷和DMA中斷。 在一般時間要求不是很高很高的場合,使用HAL庫自帶的函數(shù)就可以,并不會很頻

    2024年01月18日
    瀏覽(26)
  • STM32 HAL 庫 串口 函數(shù)HAL_UART_Transmit的BUG問題 及解決方法

    STM32 HAL 庫 串口 函數(shù)HAL_UART_Transmit的BUG問題 及解決方法

    近期在開發(fā)圖傳項目的時候,由于需要發(fā)送的數(shù)據(jù)量及其龐大,因此在處理的時候, 發(fā)現(xiàn)STM32HAL庫的串口函數(shù),在處理海量數(shù)據(jù)的時候, 存在bug, 導(dǎo)致不能將指定數(shù)量的數(shù)據(jù)全部發(fā)送出去。? 例如, 我以200個字節(jié)為一個數(shù)據(jù)包, 使用HAL_UART_Transmit函數(shù),通過串口發(fā)送。 那么

    2024年02月13日
    瀏覽(27)
  • STM32L0 ADC使用HAL庫關(guān)于校準(zhǔn)問題的說明

    STM32L0 ADC使用HAL庫關(guān)于校準(zhǔn)問題的說明

    最近是有一個產(chǎn)品用到了ADC,使用的是STM32L051 芯片,使用 STM32CubeMX 生成的代碼,本來以為簡簡單單,但是在調(diào)用 HAL ADC校準(zhǔn)函數(shù)的時候遇到一個問題有點疑問,度娘一下也沒有找到解答,還是經(jīng)過翻閱了一些資料才得到答案,特此來記錄一下。 我是矜辰所致,全網(wǎng)同名,盡

    2024年02月02日
    瀏覽(19)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包