衡阳派盒市场营销有限公司

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

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

3天內不再提示

HAL_UART_Transmit阻塞時會影響串口中斷接收嗎?

冬至子 ? 來源:一起學習軟硬件設計 ? 作者:哼唧狗 ? 2023-10-26 14:24 ? 次閱讀

問題描述:

最近項目里使用了兩路串口透傳數據,串口3中斷接收數據,組包后通過串口1阻塞發送出去。組完包的數據近800個字符,哼唧狗使用HAL_UART_Transmit()函數進行發送,理論和實際驗證發送完一包數據115200波特率下需要耗時近70ms。

哼唧狗一直有個疑問,在串口1發送的70ms內,串口3的中斷接收會不會受影響呢?

這個疑問困擾了自己好幾天了,由于自己對串口理解不深,今晚實在忍不住就去芯片之家群里問大牛們去了。

得到的一個大神回復是這樣的:

圖片

** 下面是測試過程分享。**

串口1阻塞發送800個字符,然后串口3中斷接收,每次接收到一個字符變量加1,并在串口中斷回調函數內打印該變量值。通過串口助手給串口3發送數據,每次發送一個字符。看發送過程中是否會受影響。

main函數中:

while (1)
    {
        //800個字符 理論串口發送70ms
        sprintf(buf,"%s","AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAn");      
        while(1)
        {
            HAL_UART_Transmit(&huart1, (uint8_t *)buf, strlen(buf),1000);
            //加一個指示燈翻轉
            HAL_GPIO_TogglePin(LED0_GPIO_Port,LED0_Pin);
        }
    }

串口1中斷回調函數:

int conut = 0;
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
    if(huart == &huart3)
    {
        conut = conut + 1;
        printf("conut = %d n ",conut);
        HAL_UART_Receive_IT(&huart3, (uint8_t *)Rx2478Tmp, RxDataTmp);
    }
}

串口助手模擬發送:

圖片

測試結果:

不受影響。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 接收機
    +關注

    關注

    8

    文章

    1184

    瀏覽量

    53631
  • 回調函數
    +關注

    關注

    0

    文章

    87

    瀏覽量

    11622
  • 串口中斷
    +關注

    關注

    0

    文章

    67

    瀏覽量

    14007
  • Uart串口
    +關注

    關注

    0

    文章

    29

    瀏覽量

    6859
  • HAL庫
    +關注

    關注

    1

    文章

    121

    瀏覽量

    6382
收藏 人收藏

    評論

    相關推薦

    HAL_UART_Receive_IT,HAL_UART_Transmit不能正常接收數據的原因?

    _Receive_IT 失敗后不能再開中斷。 stm32f103 HAL 庫的串口中斷方式接收數據的函數HAL_UART_Receive_
    發表于 04-03 07:22

    STM32G030F6用串口中斷函數接收數據,發送數據就死機怎么解決?

    調用HAL_UART_Transmit_IT往外發也回導致死機。在網上看了很多的串口案例,都是這么實現的,不清楚為啥我的平臺會一觸發串口中斷就死機,希望有大俠可以幫忙解答!! 下面是用
    發表于 07-11 06:44

    z2:采用STM32cubeMX來配置串口接收中斷

    ,0x65,0x01,0x02,0x03,0x04,0x05,0x06};uint8_t RxData[8];2、如果是輪詢方式發送數據,采用HAL_UART_Transmit(&huart1, TxData,8,10);如果是中斷方式
    發表于 07-24 10:27

    cubemx配置的串口中斷發送HAL_UART_Transmit_IT不行

    為何HAL_UART_Transmit可發送,改成HAL_UART_Transmit_IT就不行了cube配置的stm32f407系統其他代碼均一樣while(HAL
    發表于 12-10 08:39

    請問怎么用HAL_UART_Transmit發送數值型數據?

    如何用HAL_UART_Transmit 發送數值型數據?我看例程,都是發送字符型數據的uint8_t TxData[10]= "01234abcde"
    發表于 02-19 07:40

    HAL_UART_Receive_IT和HAL_UART_Transmit一起用進不到中斷

    不到中斷里。這是為什么呢?最開始我以為是因為波特率低,我設置的最大發送時間太短導致的。后來改長時間后,發現依然有幾率出現這樣的問題。請問HAL_UART_Transmit是否會造成了串口被鎖,或者處于繁忙狀態,是否能夠恢復?或者
    發表于 03-14 08:38

    STM32的串口接收機制的主要流程有哪些

    STM32的串口接收機制??與阻塞式發送函數HAL_UART_Transmit配套,有個阻塞式的接收
    發表于 01-06 07:45

    HAL_UART_Transmit函數底層實現過程

    目錄底層代碼代碼實現講解代碼細節底層代碼HAL_StatusTypeDef HAL_UART_Transmit(UART_HandleTypeDef *huart, uint8_t *pData
    發表于 02-22 07:53

    如果TX未完成時RX,HAL_UART_Transmit() 和 HAL_UART_Receive_IT() 失敗怎么處理?

    我曾經使用 HAL_UART_Transmit() 將 AT 命令發送到模塊:void send_uart(char * buffer){uint16_t buffer_size = strlen
    發表于 12-02 07:36

    如何在使用HAL_UART_Transmit_IT時僅處理UART RX中斷事件?

    使用 HAL_UART_Transmit 傳輸數據時,我可以在 IRQHandler 中很好地處理接收到的字符。但是當我使用 HAL_UART_Transmit_IT 時,我的 IRQHandler 會為我傳輸的每個
    發表于 12-28 07:40

    HAL_UART_Transmit_IT阻塞如何立即返回?

    _StatusTypeDef HAL_UART_Transmit_IT(UART_HandleTypeDef * huart, uint8_t * pData, uint16_t Size)該函數由 CubeIDE 生成。事實證明,此調用會
    發表于 01-10 08:35

    STM32使用CubeMAX配置的串口中斷接收方法

    STM32使用CubeMAX配置的串口中斷接收方法目錄1.定位串口中斷發生的地方2.處理串口中斷接收的流程是:(1)初始化
    發表于 12-14 18:45 ?28次下載
    STM32使用CubeMAX配置的<b class='flag-5'>串口中斷</b><b class='flag-5'>接收</b>方法

    【STM32 HALUART串口通訊

    完成,則不再接收數據到指定緩沖區,返回超時標志(HAL_TIMEOUT)發送函數:HAL_UART_Transmit()接收函數:HAL_UART
    發表于 12-24 18:44 ?5次下載
    【STM32 <b class='flag-5'>HAL</b>】<b class='flag-5'>UART</b><b class='flag-5'>串口</b>通訊

    STM32 HALUART 串口讀寫功能筆記

    STM32L0 HALUART 串口讀寫功能串口發送功能:uint8_t TxData[10]= “01234abcde”;HAL_UART_T
    發表于 12-27 19:11 ?13次下載
    STM32 <b class='flag-5'>HAL</b>庫 <b class='flag-5'>UART</b> <b class='flag-5'>串口</b>讀寫功能筆記

    HAL_UART_Transmit函數底層實現

    目錄底層代碼代碼實現講解代碼細節底層代碼HAL_StatusTypeDef HAL_UART_Transmit(UART_HandleTypeDef *huart, uint8_t *pData
    發表于 12-27 19:24 ?8次下載
    <b class='flag-5'>HAL_UART_Transmit</b>函數底層實現
    桐城太阳城招聘| 做生意门口禁忌| 六合彩预测| 百家乐视频台球下载| 优博娱乐在线| 百家乐庄闲和的概率| 百家乐官网路技巧| 宝胜网| 稳赢百家乐的玩法技巧| 百家乐官网赌博技巧网| 新奥博娱乐城体育投注| 百家乐赌博现金网平台排名| 青鹏百家乐官网游戏币| 博彩公司排名| 百家乐排名| 下载百家乐官网的玩法技巧和规则 | 喜力百家乐官网的玩法技巧和规则 | 百家乐官网玩法最多的娱乐城| 德州扑克游戏大厅| 澳门百家乐娱乐城开户| 百家乐官网赌场大赢家| 葡京娱乐| 百家乐的必胜方法| 澳门百家乐官网娱乐城网址| 大发888国际游戏平台| 钱隆百家乐软件| 乐天堂百家乐官网赌场娱乐网规则 | 太阳城百家乐官网分析解码| bet365 网址| 百家乐赌场论坛| 百家乐官网真人博彩的玩法技巧和规则 | 有钱人百家乐的玩法技巧和规则 | 波克棋牌官方下载| 模拟百家乐的玩法技巧和规则| 百家乐官网专用桌子| 实战百家乐官网博彩正网| 大发888总结经验| 百家乐系列抢庄龙| 百家百家乐官网视频游戏世界| 百家乐官网赌具哪里最好| 蒙特卡罗线上娱乐|