99精品伊人亚洲|最近国产中文炮友|九草在线视频支援|AV网站大全最新|美女黄片免费观看|国产精品资源视频|精彩无码视频一区|91大神在线后入|伊人终合在线播放|久草综合久久中文

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

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

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

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

冬至子 ? 來源:一起學習軟硬件設計 ? 作者:哼唧狗 ? 2023-10-26 14:24 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

問題描述:

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

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

這個疑問困擾了自己好幾天了,由于自己對串口理解不深,今晚實在忍不住就去芯片之家群里問大牛們?nèi)チ恕?/p>

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

圖片

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

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

main函數(shù)中:

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

串口1中斷回調(diào)函數(shù):

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);
    }
}

串口助手模擬發(fā)送:

圖片

測試結果:

不受影響。

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

    關注

    9

    文章

    1224

    瀏覽量

    54605
  • 回調(diào)函數(shù)

    關注

    0

    文章

    88

    瀏覽量

    11902
  • 串口中斷
    +關注

    關注

    0

    文章

    67

    瀏覽量

    14345
  • Uart串口
    +關注

    關注

    0

    文章

    29

    瀏覽量

    7152
  • HAL庫
    +關注

    關注

    1

    文章

    121

    瀏覽量

    6954
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    HAL_UART_Receive_IT,HAL_UART_Transmit不能正常接收數(shù)據(jù)的原因?

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

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

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

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

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

    cubemx配置的串口中斷發(fā)送HAL_UART_Transmit_IT不行

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

    請問怎么用HAL_UART_Transmit發(fā)送數(shù)值型數(shù)據(jù)?

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

    HAL_UART_Receive_IT和HAL_UART_Transmit一起用進不到中斷

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

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

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

    HAL_UART_Transmit函數(shù)底層實現(xiàn)過程

    目錄底層代碼代碼實現(xiàn)講解代碼細節(jié)底層代碼HAL_StatusTypeDef HAL_UART_Transmit(UART_HandleTypeDef *huart, uint8_t *pData
    發(fā)表于 02-22 07:53

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

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

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

    使用 HAL_UART_Transmit 傳輸數(shù)據(jù)時,我可以在 IRQHandler 中很好地處理接收到的字符。但是當我使用 HAL_UART_Transmit_IT 時,我的 IRQHandler 會為我傳輸?shù)拿總€
    發(fā)表于 12-28 07:40

    HAL_UART_Transmit_IT阻塞如何立即返回?

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

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

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

    【STM32 HALUART串口通訊

    完成,則不再接收數(shù)據(jù)到指定緩沖區(qū),返回超時標志(HAL_TIMEOUT)發(fā)送函數(shù):HAL_UART_Transmit()接收函數(shù):HAL_UART
    發(fā)表于 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 串口讀寫功能串口發(fā)送功能:uint8_t TxData[10]= “01234abcde”;HAL_UART_T
    發(fā)表于 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函數(shù)底層實現(xiàn)

    目錄底層代碼代碼實現(xiàn)講解代碼細節(jié)底層代碼HAL_StatusTypeDef HAL_UART_Transmit(UART_HandleTypeDef *huart, uint8_t *pData
    發(fā)表于 12-27 19:24 ?8次下載
    <b class='flag-5'>HAL_UART_Transmit</b>函數(shù)底層實現(xiàn)