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

    文章

    1122

    浏览量

    52635
  • 回调函数
    +关注

    关注

    0

    文章

    87

    浏览量

    11455
  • 串口中断
    +关注

    关注

    0

    文章

    63

    浏览量

    13607
  • Uart串口
    +关注

    关注

    0

    文章

    28

    浏览量

    6715
  • HAL库
    +关注

    关注

    1

    文章

    112

    浏览量

    5878
收藏 人收藏

    评论

    相关推荐

    HAL_UART_Receive_IT,HAL_UART_Transmit不能正常接收数据的原因?

    _Receive_IT 失败后不能再开中断。 stm32f103 HAL 库的串口中断方式接收数据的函数HAL_UART_Receive_
    发表于 04-03 07:22

    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

    HAL库函数串口中断接收只能收到第一个字节

    首先介绍一下实验环境:单片机为stm32f415调试器:st-link硬件初始化:*串口波特率为614400 *采用定时器每隔500us触发一次串口中断发送*发送完成后进入中断接收模式
    发表于 11-26 08:39

    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>函数底层实现