HAL_UART_Transmit阻塞时会影响串口中断接收吗?

电子说

1.3w人已加入

描述

问题描述:

最近项目里使用了两路串口透传数据,串口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);
    }
}

串口助手模拟发送:

接收机

测试结果:

不受影响。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分