久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索

STM32F407單片機串口丟數據問題

查看數: 3091 | 評論數: 8 | 收藏 0
關燈 | 提示:支持鍵盤翻頁<-左 右->
    組圖打開中,請稍候......
發布時間: 2022-5-4 16:47

正文摘要:

不知道有沒有人遇到過,最近學習系統之類的自己熟悉的單片機RAM不夠,用STM的但是之前都是用標準庫的,HAL庫非常不習慣,這個調了一天也不知道是哪里出現問題了,發送過快的壞還會出現卡死的情況,這個程序就是接受 ...

回復

ID:404263 發表于 2022-5-6 11:50
這個問題解決了,就是因為hal庫這個回調函數處理時間太長了HAL_UART_IRQHandler(&huart5);我波特率為115200,兩個數據間隔的時間有可能處理不完這個函數,導致會丟失一個數據,解決方法就是自己寫一個中斷函數,這樣就不會漏數據或者觸發ORE中斷了
void UART5_IRQHandler(void)
{
  /* USER CODE BEGIN UART5_IRQn 0 */
        if(((UART5->SR) & USART_SR_RXNE) != RESET)                     //判斷讀取不為空標志
        {
                Rxd[Count] = (unsigned char)(UART5->DR & 0x000000ff);        //讀取對應數據
                UART5->DR = (unsigned long)Rxd[Count];                       //發送數據
                __HAL_UART_ENABLE_IT(&huart5, UART_IT_TXE);                  //打開發送空中斷
                Count++;
                if(Count >= 35)
                {
                        Count = 0;
                }
                UART5->SR &= ~UART_FLAG_RXNE;                                //清除讀取不為空標志
        }
       
        if(((UART5->SR) & USART_SR_TXE) != RESET)                      //判斷發送空標志
        {
                UART5->SR &= ~USART_SR_TXE;                                  //清除標志
                __HAL_UART_DISABLE_IT(&huart5, UART_IT_TXE);                 //關閉發送中斷
        }
  /* USER CODE END UART5_IRQn 0 */
//  HAL_UART_IRQHandler(&huart5);
  /* USER CODE BEGIN UART5_IRQn 1 */

  /* USER CODE END UART5_IRQn 1 */
}
ID:404263 發表于 2022-5-6 11:48
問題解決了,HAL_UART_IRQHandler(&huart5);hal庫這個函數處理的時間太長了,我波特率115200一次性發多個數據后可能會在兩個數據間隔時間內處理不完,導致丟失一個數據,解決方法,自己寫一個中斷函數不要使用回調了,void UART5_IRQHandler(void)
{
  /* USER CODE BEGIN UART5_IRQn 0 */
        if(((UART5->SR) & USART_SR_RXNE) != RESET)                     //判斷讀取不為空標志
        {
                Rxd[Count] = (unsigned char)(UART5->DR & 0x000000ff);        //讀取對應數據
                UART5->DR = (unsigned long)Rxd[Count];                       //發送數據
                __HAL_UART_ENABLE_IT(&huart5, UART_IT_TXE);                  //打開發送空中斷
                Count++;
                if(Count >= 35)
                {
                        Count = 0;
                }
                UART5->SR &= ~UART_FLAG_RXNE;                                //清除讀取不為空標志
        }
       
        if(((UART5->SR) & USART_SR_TXE) != RESET)                      //判斷發送空標志
        {
                UART5->SR &= ~USART_SR_TXE;                                  //清除標志
                __HAL_UART_DISABLE_IT(&huart5, UART_IT_TXE);                 //關閉發送中斷
        }
  /* USER CODE END UART5_IRQn 0 */
//  HAL_UART_IRQHandler(&huart5);
  /* USER CODE BEGIN UART5_IRQn 1 */

  /* USER CODE END UART5_IRQn 1 */
}
ID:404263 發表于 2022-5-6 11:46
munuc_w 發表于 2022-5-5 08:33
HAL的接收函數太繁瑣,可以自己寫一個接收函數,中斷調用,回調函數是在中斷中調用的,中斷中不易處理數據 ...

大哥你這個說對了,自己單獨寫一個就沒問題,HAL_UART_IRQHandler(&huart5);hal庫這個函數處理的太繁瑣了,我168M主頻的都有幾率在下一個數據來前處理不完
ID:404263 發表于 2022-5-5 08:55
好像找打原因了,HAL_UART_Transmit(&huart5,&RxData,1,2);HAL_UART_Receive_IT(&huart5,&RxData,1);這兩個不能都&RxData,因為發送那邊沒有把發送的值先讀出來,而是*p直接賦值到DR寄存器,如果這時候還沒賦給DR前就觸發了下一個讀取中斷的話就會導致調過了一個數據,但是新的問題又出現了,改好后確實不漏了,但是如果發送的間隔比較短會出現串口卡死的情況
ID:752974 發表于 2022-5-5 08:33
HAL的接收函數太繁瑣,可以自己寫一個接收函數,中斷調用,回調函數是在中斷中調用的,中斷中不易處理數據,中斷函數月精簡越好。
ID:404263 發表于 2022-5-5 08:31
 發表于 2022-5-5 08:08
使用CubeMX配置  用DMA試試

我這個就是用CubeMx的DMA沒怎么用過,主要是也沒理由說串口中斷就不行啊
ID:405850 發表于 2022-5-5 08:08
使用CubeMX配置  用DMA試試
ID:301191 發表于 2022-5-5 03:12
頂一下

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 久久免费视频1 | 欧美一级三级 | 国产综合精品一区二区三区 | 97精品国产手机 | 爱爱爱av | 日本超碰在线 | www.夜夜骑.com | 中文字幕不卡在线观看 | 久久久人| 国内久久 | 日韩在线精品强乱中文字幕 | 日韩精品久久久久 | 久久婷婷国产麻豆91 | 日韩精品专区在线影院重磅 | 天天操天天操 | 久久精品国产亚洲一区二区 | 国产精品久久二区 | 免费视频久久久久 | 天天色天天射天天干 | 99精品亚洲国产精品久久不卡 | 天天操天天干天天爽 | 韩国av一区二区 | 国产乱码精品1区2区3区 | 99re热精品视频国产免费 | 欧美videosex性极品hd | 亚洲不卡在线视频 | 欧美成人h版在线观看 | 国产1区2区在线观看 | 欧美精品久久久久 | 亚洲精品一区久久久久久 | 日韩欧美一区二区三区四区 | 欧美狠狠操 | 亚洲一区二区三区在线免费 | 国产精品一区二区三 | 亚洲精品一二区 | 国产高清av免费观看 | 国产精品一区二区av | 日韩国产免费观看 | 久久99精品国产 | 一级黄色av电影 | 国产一区 在线视频 |