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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3072|回復: 8
打印 上一主題 下一主題
收起左側

STM32F407單片機串口丟數據問題

[復制鏈接]
跳轉到指定樓層
樓主
不知道有沒有人遇到過,最近學習系統之類的自己熟悉的單片機RAM不夠,用STM的但是之前都是用標準庫的,HAL庫非常不習慣,這個調了一天也不知道是哪里出現問題了,發送過快的壞還會出現卡死的情況,這個程序就是接受一個字符然后馬上發送回去一個同樣的字符實在沒想到為什么會漏數據,找了很多資料都是說數據沒及時處理,但是我在回調函數里面處理了應該沒有更快的方法了吧。

B~PDZY$V$){LR2])CHDF.png (14.09 KB, 下載次數: 38)

B~PDZY$V$){LR2])CHDF.png

download.png (20.49 KB, 下載次數: 61)

download.png
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:301191 發表于 2022-5-5 03:12 | 只看該作者
頂一下
回復

使用道具 舉報

板凳
ID:405850 發表于 2022-5-5 08:08 | 只看該作者
使用CubeMX配置  用DMA試試
回復

使用道具 舉報

地板
ID:404263 發表于 2022-5-5 08:31 | 只看該作者
 發表于 2022-5-5 08:08
使用CubeMX配置  用DMA試試

我這個就是用CubeMx的DMA沒怎么用過,主要是也沒理由說串口中斷就不行啊
回復

使用道具 舉報

5#
ID:752974 發表于 2022-5-5 08:33 | 只看該作者
HAL的接收函數太繁瑣,可以自己寫一個接收函數,中斷調用,回調函數是在中斷中調用的,中斷中不易處理數據,中斷函數月精簡越好。
回復

使用道具 舉報

6#
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前就觸發了下一個讀取中斷的話就會導致調過了一個數據,但是新的問題又出現了,改好后確實不漏了,但是如果發送的間隔比較短會出現串口卡死的情況
回復

使用道具 舉報

7#
ID:404263 發表于 2022-5-6 11:46 | 只看該作者
munuc_w 發表于 2022-5-5 08:33
HAL的接收函數太繁瑣,可以自己寫一個接收函數,中斷調用,回調函數是在中斷中調用的,中斷中不易處理數據 ...

大哥你這個說對了,自己單獨寫一個就沒問題,HAL_UART_IRQHandler(&huart5);hal庫這個函數處理的太繁瑣了,我168M主頻的都有幾率在下一個數據來前處理不完
回復

使用道具 舉報

8#
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 */
}
回復

使用道具 舉報

9#
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 */
}
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 精品一区二区av | 免费看爱爱视频 | 一区二区三区精品视频 | 日韩中文字幕网 | 日韩精品久久久 | 日韩成人免费视频 | 日韩精品亚洲专区在线观看 | 亚洲天堂精品一区 | 亚洲一一在线 | 国产乱码久久久久久 | 久久久久久亚洲精品 | 国产黄色在线观看 | 91在线一区 | 日韩成人国产 | 国产成人短视频在线观看 | 精品在线观看入口 | 手机三级电影 | 亚洲有码转帖 | 中文字幕在线观看一区 | 国产精品久久久久久久久久免费看 | 亚洲精品电影网在线观看 | 国产精品我不卡 | 在线婷婷| 成人免费观看男女羞羞视频 | 日本三级在线 | 精品国产乱码久久久久久图片 | 欧美日韩精品久久久免费观看 | 欧美一级艳情片免费观看 | 国产成人精品一区二区三区在线 | 亚洲最大的黄色网址 | 成人免费看片又大又黄 | 久草视频在线播放 | 久久久青草婷婷精品综合日韩 | 欧美国产在线一区 | 久久www免费视频 | 欧美福利 | 激情 婷婷 | 九色视频网站 | 精久久久 | 久久久这里只有17精品 | 免费亚洲视频 |