问题描述:
最近项目里使用了两路串口透传数据,串口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
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 HAL】UART串口通讯
完成,则不再接收数据到指定缓冲区,返回超时标志(HAL_TIMEOUT)发送函数:HAL_UART_Transmit()接收函数:HAL_UART
发表于 12-24 18:44
•5次下载
STM32 HAL库 UART 串口读写功能笔记
STM32L0 HAL库 UART 串口读写功能串口发送功能:uint8_t TxData[10]= “01234abcde”;HAL_UART_T
发表于 12-27 19:11
•13次下载
HAL_UART_Transmit函数底层实现
目录底层代码代码实现讲解代码细节底层代码HAL_StatusTypeDef HAL_UART_Transmit(UART_HandleTypeDef *huart, uint8_t *pData
发表于 12-27 19:24
•8次下载
评论