問題描述:
最近項(xiàng)目里使用了兩路串口透傳數(shù)據(jù),串口3中斷接收數(shù)據(jù),組包后通過串口1阻塞發(fā)送出去。組完包的數(shù)據(jù)近800個(gè)字符,哼唧狗使用HAL_UART_Transmit()函數(shù)進(jìn)行發(fā)送,理論和實(shí)際驗(yàn)證發(fā)送完一包數(shù)據(jù)115200波特率下需要耗時(shí)近70ms。
哼唧狗一直有個(gè)疑問,在串口1發(fā)送的70ms內(nèi),串口3的中斷接收會(huì)不會(huì)受影響呢?
這個(gè)疑問困擾了自己好幾天了,由于自己對(duì)串口理解不深,今晚實(shí)在忍不住就去芯片之家群里問大牛們?nèi)チ恕?/p>
得到的一個(gè)大神回復(fù)是這樣的:
** 下面是測試過程分享。**
串口1阻塞發(fā)送800個(gè)字符,然后串口3中斷接收,每次接收到一個(gè)字符變量加1,并在串口中斷回調(diào)函數(shù)內(nèi)打印該變量值。通過串口助手給串口3發(fā)送數(shù)據(jù),每次發(fā)送一個(gè)字符。看發(fā)送過程中是否會(huì)受影響。
main函數(shù)中:
while (1)
{
//800個(gè)字符 理論串口發(fā)送70ms
sprintf(buf,"%s","AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAn");
while(1)
{
HAL_UART_Transmit(&huart1, (uint8_t *)buf, strlen(buf),1000);
//加一個(gè)指示燈翻轉(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ā)送:
測試結(jié)果:
不受影響。
-
接收機(jī)
+關(guān)注
關(guān)注
8文章
1186瀏覽量
53674 -
回調(diào)函數(shù)
+關(guān)注
關(guān)注
0文章
87瀏覽量
11626 -
串口中斷
+關(guān)注
關(guān)注
0文章
67瀏覽量
14019 -
Uart串口
+關(guān)注
關(guān)注
0文章
29瀏覽量
6862 -
HAL庫
+關(guān)注
關(guān)注
1文章
121瀏覽量
6385
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
HAL_UART_Receive_IT,HAL_UART_Transmit不能正常接收數(shù)據(jù)的原因?
STM32G030F6用串口中斷函數(shù)接收數(shù)據(jù),發(fā)送數(shù)據(jù)就死機(jī)怎么解決?
z2:采用STM32cubeMX來配置串口接收中斷
cubemx配置的串口中斷發(fā)送HAL_UART_Transmit_IT不行
請(qǐng)問怎么用HAL_UART_Transmit發(fā)送數(shù)值型數(shù)據(jù)?
HAL_UART_Receive_IT和HAL_UART_Transmit一起用進(jìn)不到中斷里
STM32的串口接收機(jī)制的主要流程有哪些
HAL_UART_Transmit函數(shù)底層實(shí)現(xiàn)過程
如果TX未完成時(shí)RX,HAL_UART_Transmit() 和 HAL_UART_Receive_IT() 失敗怎么處理?
如何在使用HAL_UART_Transmit_IT時(shí)僅處理UART RX中斷事件?
HAL_UART_Transmit_IT阻塞如何立即返回?
STM32使用CubeMAX配置的串口中斷接收方法
![STM32使用CubeMAX配置的<b class='flag-5'>串口中斷</b><b class='flag-5'>接收</b>方法](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
【STM32 HAL】UART串口通訊
![【STM32 <b class='flag-5'>HAL</b>】<b class='flag-5'>UART</b><b class='flag-5'>串口</b>通訊](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
STM32 HAL庫 UART 串口讀寫功能筆記
![STM32 <b class='flag-5'>HAL</b>庫 <b class='flag-5'>UART</b> <b class='flag-5'>串口</b>讀寫功能筆記](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
HAL_UART_Transmit函數(shù)底層實(shí)現(xiàn)
![<b class='flag-5'>HAL_UART_Transmit</b>函數(shù)底層實(shí)現(xiàn)](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
評(píng)論