0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
电子发烧友
开通电子发烧友VIP会员 尊享10大特权
海量资料免费下载
精品直播免费看
优质内容免费畅学
课程9折专享价
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

STM32 HAL庫串口同時收發(fā),接收卡死?

工程師鄧生 ? 來源:未知 ? 作者:劉芹 ? 2023-10-26 17:42 ? 次閱讀

STM32 HAL庫串口同時收發(fā),接收卡死?

為什么STM32 HAL庫串口會出現(xiàn)同時收發(fā)導(dǎo)致接收卡死的問題?如何解決這個問題?

首先,我們來了解一下STM32 HAL庫的串口通信機制。

STM32 HAL庫是針對STM32系列單片機的一套常用的高級抽象層庫。在HAL庫中,串口通信是通過針對USART外設(shè)的封裝實現(xiàn)的。HAL庫中提供了一些函數(shù),可以方便地配置USART外設(shè)的各種參數(shù),如波特率、數(shù)據(jù)位、停止位、奇偶校驗等,還提供了發(fā)送和接收數(shù)據(jù)的函數(shù)。

串口通信是一種異步通信方式,發(fā)送和接收是獨立的。在使用HAL庫編寫串口通信代碼時,如果在發(fā)送數(shù)據(jù)的同時也接收數(shù)據(jù),就可能會出現(xiàn)接收卡死的問題。這是由于串口通信中數(shù)據(jù)的傳輸需要遵循一定的協(xié)議,同時發(fā)送和接收可能會導(dǎo)致這種協(xié)議破壞,從而導(dǎo)致接收卡死的問題。

那么,如何解決這個問題呢?

解決方法一:使用DMA模式的串口通信

DMA模式的串口通信可以解決同時收發(fā)導(dǎo)致接收卡死的問題。DMA(Direct Memory Access)即直接存儲器訪問,是一種無CPU干預(yù)的數(shù)據(jù)傳輸方式,通過DMA可以實現(xiàn)高效、可靠的數(shù)據(jù)傳輸。

在HAL庫中,使用DMA模式的串口通信需要使用HAL_UART_Receive_DMA函數(shù)和HAL_UART_Transmit_DMA函數(shù)來發(fā)送和接收數(shù)據(jù)。使用DMA模式的串口通信可以將數(shù)據(jù)的傳輸和處理分開,避免同時發(fā)送和接收導(dǎo)致的協(xié)議破壞,從而避免接收卡死的問題。

解決方法二:使用中斷

如果不能使用DMA模式的串口通信,也可以使用中斷來解決同時收發(fā)導(dǎo)致接收卡死的問題。在HAL庫中,可以使用HAL_UART_Receive_IT函數(shù)和HAL_UART_Transmit_IT函數(shù)來發(fā)送和接收數(shù)據(jù)。

當接收到數(shù)據(jù)時,會觸發(fā)UART的中斷,從而在中斷函數(shù)中對數(shù)據(jù)進行處理。使用中斷可以將數(shù)據(jù)的傳輸和處理分開,避免同時發(fā)送和接收導(dǎo)致的協(xié)議破壞,從而避免接收卡死的問題。

綜上所述,STM32 HAL庫串口同時收發(fā)導(dǎo)致接收卡死的問題可以通過使用DMA模式的串口通信或使用中斷來解決。這樣可以將數(shù)據(jù)的傳輸和處理分開,從而避免同時發(fā)送和接收導(dǎo)致的協(xié)議破壞,從而避免接收卡死的問題。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • STM32
    +關(guān)注

    關(guān)注

    2282

    文章

    10986

    瀏覽量

    361085
  • 串口通信
    +關(guān)注

    關(guān)注

    34

    文章

    1633

    瀏覽量

    56338
  • HAL庫
    +關(guān)注

    關(guān)注

    1

    文章

    121

    瀏覽量

    6627
收藏 人收藏

    評論

    相關(guān)推薦

    STM32開發(fā)入門進階必備!《STM32嵌入式系統(tǒng)開發(fā)—基于STM32CubeMX和HAL》新書發(fā)布!

    近日,由華清遠見教育科技集團精心編撰的教育部高等學(xué)校電子信息類專業(yè)教學(xué)指導(dǎo)委員會規(guī)劃教材、普通高等教育電子信息類專業(yè)系列教材——《STM32嵌入式系統(tǒng)開發(fā)—基于STM32CubeMX和HAL
    的頭像 發(fā)表于 04-03 14:54 ?353次閱讀
    <b class='flag-5'>STM32</b>開發(fā)入門進階必備!《<b class='flag-5'>STM32</b>嵌入式系統(tǒng)開發(fā)—基于<b class='flag-5'>STM32</b>CubeMX和<b class='flag-5'>HAL</b><b class='flag-5'>庫</b>》新書發(fā)布!

    使用Hal的SPI讀取磁邊傳感器導(dǎo)致STM32G4無法運行怎么解決?

    使用 HAL STM32G431 + SPI ,讀取磁邊傳感器系統(tǒng)運行一會直接卡死,使用調(diào)試功能最后發(fā)現(xiàn)卡死在if ((__
    發(fā)表于 03-14 08:24

    HAL在Arduino平臺上的使用

    HAL在Arduino平臺上的使用 Arduino平臺是一個開源的電子原型平臺,它包括硬件(基于微控制器的電路板)和軟件(Arduino IDE)。Arduino平臺因其簡單易用而受到廣泛歡迎
    的頭像 發(fā)表于 12-02 14:04 ?1152次閱讀

    HAL的函數(shù)調(diào)用示例

    HAL(Hardware Abstraction Layer,硬件抽象層)STM32等微控制器中常用的,它為開發(fā)者提供了訪問和控制硬件設(shè)備的接口。以下是一些常用的
    的頭像 發(fā)表于 12-02 14:01 ?1187次閱讀

    HALSTM32開發(fā)中的重要性

    HAL(Hardware Abstraction Layer Library,硬件抽象層)在STM32開發(fā)中扮演著至關(guān)重要的角色。以下是HAL
    的頭像 發(fā)表于 12-02 13:35 ?1015次閱讀

    如何快速入門HAL編程 HAL與裸機編程的比較

    。 選擇開發(fā)環(huán)境和工具 : 下載并安裝適用于目標微控制器的IDE(如STM32CubeIDE)。 配置開發(fā)環(huán)境,包括編譯器、調(diào)試器等。 學(xué)習(xí)HAL文檔和教程 : 閱讀官方HAL
    的頭像 發(fā)表于 12-02 11:39 ?868次閱讀

    第12章-ADC采集電壓和顯示 基于STM32的ADC—電壓采集(詳細講解+HAL

    第12章-ADC采集電壓和顯示 基于STM32的ADC—電壓采集(詳細講解+HAL
    的頭像 發(fā)表于 08-21 16:31 ?4325次閱讀
    第12章-ADC采集電壓和顯示 基于<b class='flag-5'>STM32</b>的ADC—電壓采集(詳細講解+<b class='flag-5'>HAL</b><b class='flag-5'>庫</b>)

    STM32G030F6串口空閑中斷配置卡死怎么解決?

    本人在用STM32G030F6 串口空閑中斷+DMA接受的時候,CubeMX配置完成,在mian函數(shù)while(1)前初始化,使能空閑中斷__HAL_UART_ENABLE_IT( huart1
    發(fā)表于 07-22 06:51

    STM32G030F6用串口中斷函數(shù)接收數(shù)據(jù),發(fā)送數(shù)據(jù)就死機怎么解決?

    平臺介紹: 芯片是使用的STM32G030F6,系統(tǒng)是rt-thread nano-v3.1.5, 使用rtthread studio + cubemx生成工程項目 問題描述:想使用串口中斷方式去
    發(fā)表于 07-11 06:44

    STM32HAL如何開啟FPU?

    求:STM32HAL如何開啟FPU?
    發(fā)表于 05-16 07:26

    STM32F0xx_HAL_Driver串口接收數(shù)據(jù)個數(shù),是不是只能寫成1,一個一個數(shù)據(jù)接收

    在使用STM32F0xx_HAL_Driver進行串口接收數(shù)據(jù) HAL_StatusTypeDef
    發(fā)表于 05-14 06:39

    HAL串口收發(fā)函數(shù),HAL串口DMA方式下不能實現(xiàn)獨立的全雙工通信嗎?

    昨天看HAL串口收發(fā)函數(shù),DMA方式,發(fā)現(xiàn)函數(shù)里竟然有收發(fā)同步的操作,但不太確定,莫非HAL
    發(fā)表于 05-14 06:17

    請問hal串口接收完成回調(diào)函數(shù)中如何區(qū)分是不是DMA接收完成?

    HAL_UART_RxCpltCallback 這個回調(diào)函數(shù)在串口中斷接收完成后會被調(diào)用,在DMA接收完成后也會被調(diào)用 那么能否在這個回調(diào)函數(shù)中直接以參數(shù)huart中的信息來區(qū)分上述
    發(fā)表于 05-07 07:39

    STM32 HAL printf所占用串口不能做中斷接收如何解決?

    目前在使用STM32L053系列MCU,基于HAL的程序,硬件串口資源有3個,都已經(jīng)被使用;其中USART2通過Switch芯片來實現(xiàn)printf打印和讀取傳感器數(shù)據(jù);因為USART
    發(fā)表于 04-29 09:01

    STM32 hal無法接收串口數(shù)據(jù)是怎么回事?

    型號:STM32L432KC官方開發(fā)板 串口使用的是板載的USB下載口以及串口 用法: 在串口初始化后,while(1)之前調(diào)用 接收中斷
    發(fā)表于 04-29 06:11

    電子發(fā)燒友

    中國電子工程師最喜歡的網(wǎng)站

    • 2931785位工程師會員交流學(xué)習(xí)
    • 獲取您個性化的科技前沿技術(shù)信息
    • 參加活動獲取豐厚的禮品