問題描述:
最近項目里使用了兩路串口透傳數據,串口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文章
1182瀏覽量
53525 -
回調函數
+關注
關注
0文章
87瀏覽量
11582 -
串口中斷
+關注
關注
0文章
67瀏覽量
13935 -
Uart串口
+關注
關注
0文章
29瀏覽量
6830 -
HAL庫
+關注
關注
1文章
121瀏覽量
6322
發布評論請先 登錄
相關推薦
HAL_UART_Receive_IT,HAL_UART_Transmit不能正常接收數據的原因?
_Receive_IT 失敗后不能再開中斷。
stm32f103 HAL 庫的串口中斷方式接收數據的函數HAL_UART_Receive_
發表于 04-03 07:22
STM32G030F6用串口中斷函數接收數據,發送數據就死機怎么解決?
調用HAL_UART_Transmit_IT往外發也回導致死機。在網上看了很多的串口案例,都是這么實現的,不清楚為啥我的平臺會一觸發串口中斷就死機,希望有大俠可以幫忙解答!!
下面是用
發表于 07-11 06:44
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
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次下載
評論