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

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 2940|回復(fù): 8
收起左側(cè)

STM32F407單片機(jī)串口丟數(shù)據(jù)問題

[復(fù)制鏈接]
ID:404263 發(fā)表于 2022-5-4 16:47 | 顯示全部樓層 |閱讀模式
不知道有沒有人遇到過,最近學(xué)習(xí)系統(tǒng)之類的自己熟悉的單片機(jī)RAM不夠,用STM的但是之前都是用標(biāo)準(zhǔn)庫(kù)的,HAL庫(kù)非常不習(xí)慣,這個(gè)調(diào)了一天也不知道是哪里出現(xiàn)問題了,發(fā)送過快的壞還會(huì)出現(xiàn)卡死的情況,這個(gè)程序就是接受一個(gè)字符然后馬上發(fā)送回去一個(gè)同樣的字符實(shí)在沒想到為什么會(huì)漏數(shù)據(jù),找了很多資料都是說數(shù)據(jù)沒及時(shí)處理,但是我在回調(diào)函數(shù)里面處理了應(yīng)該沒有更快的方法了吧。
B~PDZY$V$){LR2])CHDF.png
download.png
回復(fù)

使用道具 舉報(bào)

ID:404263 發(fā)表于 2022-5-5 08:31 | 顯示全部樓層
 發(fā)表于 2022-5-5 08:08
使用CubeMX配置  用DMA試試

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

使用道具 舉報(bào)

ID:404263 發(fā)表于 2022-5-5 08:55 | 顯示全部樓層
好像找打原因了,HAL_UART_Transmit(&huart5,&RxData,1,2);HAL_UART_Receive_IT(&huart5,&RxData,1);這兩個(gè)不能都&RxData,因?yàn)榘l(fā)送那邊沒有把發(fā)送的值先讀出來,而是*p直接賦值到DR寄存器,如果這時(shí)候還沒賦給DR前就觸發(fā)了下一個(gè)讀取中斷的話就會(huì)導(dǎo)致調(diào)過了一個(gè)數(shù)據(jù),但是新的問題又出現(xiàn)了,改好后確實(shí)不漏了,但是如果發(fā)送的間隔比較短會(huì)出現(xiàn)串口卡死的情況
回復(fù)

使用道具 舉報(bào)

ID:404263 發(fā)表于 2022-5-6 11:46 | 顯示全部樓層
munuc_w 發(fā)表于 2022-5-5 08:33
HAL的接收函數(shù)太繁瑣,可以自己寫一個(gè)接收函數(shù),中斷調(diào)用,回調(diào)函數(shù)是在中斷中調(diào)用的,中斷中不易處理數(shù)據(jù) ...

大哥你這個(gè)說對(duì)了,自己?jiǎn)为?dú)寫一個(gè)就沒問題,HAL_UART_IRQHandler(&huart5);hal庫(kù)這個(gè)函數(shù)處理的太繁瑣了,我168M主頻的都有幾率在下一個(gè)數(shù)據(jù)來前處理不完
回復(fù)

使用道具 舉報(bào)

ID:404263 發(fā)表于 2022-5-6 11:48 | 顯示全部樓層
問題解決了,HAL_UART_IRQHandler(&huart5);hal庫(kù)這個(gè)函數(shù)處理的時(shí)間太長(zhǎng)了,我波特率115200一次性發(fā)多個(gè)數(shù)據(jù)后可能會(huì)在兩個(gè)數(shù)據(jù)間隔時(shí)間內(nèi)處理不完,導(dǎo)致丟失一個(gè)數(shù)據(jù),解決方法,自己寫一個(gè)中斷函數(shù)不要使用回調(diào)了,void UART5_IRQHandler(void)
{
  /* USER CODE BEGIN UART5_IRQn 0 */
        if(((UART5->SR) & USART_SR_RXNE) != RESET)                     //判斷讀取不為空標(biāo)志
        {
                Rxd[Count] = (unsigned char)(UART5->DR & 0x000000ff);        //讀取對(duì)應(yīng)數(shù)據(jù)
                UART5->DR = (unsigned long)Rxd[Count];                       //發(fā)送數(shù)據(jù)
                __HAL_UART_ENABLE_IT(&huart5, UART_IT_TXE);                  //打開發(fā)送空中斷
                Count++;
                if(Count >= 35)
                {
                        Count = 0;
                }
                UART5->SR &= ~UART_FLAG_RXNE;                                //清除讀取不為空標(biāo)志
        }
       
        if(((UART5->SR) & USART_SR_TXE) != RESET)                      //判斷發(fā)送空標(biāo)志
        {
                UART5->SR &= ~USART_SR_TXE;                                  //清除標(biāo)志
                __HAL_UART_DISABLE_IT(&huart5, UART_IT_TXE);                 //關(guān)閉發(fā)送中斷
        }
  /* USER CODE END UART5_IRQn 0 */
//  HAL_UART_IRQHandler(&huart5);
  /* USER CODE BEGIN UART5_IRQn 1 */

  /* USER CODE END UART5_IRQn 1 */
}
回復(fù)

使用道具 舉報(bào)

ID:404263 發(fā)表于 2022-5-6 11:50 | 顯示全部樓層
這個(gè)問題解決了,就是因?yàn)閔al庫(kù)這個(gè)回調(diào)函數(shù)處理時(shí)間太長(zhǎng)了HAL_UART_IRQHandler(&huart5);我波特率為115200,兩個(gè)數(shù)據(jù)間隔的時(shí)間有可能處理不完這個(gè)函數(shù),導(dǎo)致會(huì)丟失一個(gè)數(shù)據(jù),解決方法就是自己寫一個(gè)中斷函數(shù),這樣就不會(huì)漏數(shù)據(jù)或者觸發(fā)ORE中斷了
void UART5_IRQHandler(void)
{
  /* USER CODE BEGIN UART5_IRQn 0 */
        if(((UART5->SR) & USART_SR_RXNE) != RESET)                     //判斷讀取不為空標(biāo)志
        {
                Rxd[Count] = (unsigned char)(UART5->DR & 0x000000ff);        //讀取對(duì)應(yīng)數(shù)據(jù)
                UART5->DR = (unsigned long)Rxd[Count];                       //發(fā)送數(shù)據(jù)
                __HAL_UART_ENABLE_IT(&huart5, UART_IT_TXE);                  //打開發(fā)送空中斷
                Count++;
                if(Count >= 35)
                {
                        Count = 0;
                }
                UART5->SR &= ~UART_FLAG_RXNE;                                //清除讀取不為空標(biāo)志
        }
       
        if(((UART5->SR) & USART_SR_TXE) != RESET)                      //判斷發(fā)送空標(biāo)志
        {
                UART5->SR &= ~USART_SR_TXE;                                  //清除標(biāo)志
                __HAL_UART_DISABLE_IT(&huart5, UART_IT_TXE);                 //關(guān)閉發(fā)送中斷
        }
  /* USER CODE END UART5_IRQn 0 */
//  HAL_UART_IRQHandler(&huart5);
  /* USER CODE BEGIN UART5_IRQn 1 */

  /* USER CODE END UART5_IRQn 1 */
}
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 午夜视频一区二区 | 男人天堂久久 | 午夜精品久久 | 国产精品久久久久婷婷二区次 | 精品一二区| 久久久久久久久久久福利观看 | 国产毛片av | 日本特黄a级高清免费大片 成年人黄色小视频 | 在线视频一区二区 | 一区二区三区四区电影 | 精品国产欧美一区二区三区不卡 | 天天综合天天 | 九九热在线免费视频 | 久久综合狠狠综合久久综合88 | 国产精品成av人在线视午夜片 | av成人在线观看 | 久久成人国产精品 | 精品久久电影 | 亚洲欧美日韩中文字幕一区二区三区 | 国产一区 在线视频 | 成人av免费看 | 日韩精品在线视频 | 久久亚洲经典 | 亚洲国产精品va在线看黑人 | 在线国产一区 | 色香婷婷 | 国产丝袜一区二区三区免费视频 | 亚洲精品在线播放 | 国产乱人伦 | 亚洲欧美一区二区三区国产精品 | 免费xxxx大片国产在线 | 国产欧美一区二区三区久久手机版 | 久久99蜜桃综合影院免费观看 | 国产精品不卡一区二区三区 | 国产精品 亚洲一区 | 欧美精品一区二区三区四区 在线 | 精品成人69xx.xyz| www.狠狠干| 国产精品夜夜春夜夜爽久久电影 | 国产精品色一区二区三区 | 日韩成人免费av |