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

QQ登錄

只需一步,快速開(kāi)始

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

單片機(jī)串口接收中斷只進(jìn)入一次?

[復(fù)制鏈接]
ID:500189 發(fā)表于 2021-4-27 17:32 | 顯示全部樓層 |閱讀模式
串口接收中斷只進(jìn)入一次,做的是攝像頭循跡小車(chē)  串口sbuf長(zhǎng)度只留了一個(gè)字節(jié)    接受完之后  傳遞到其他數(shù)組   并及時(shí)清0
回復(fù)

使用道具 舉報(bào)

ID:752974 發(fā)表于 2021-4-28 08:36 | 顯示全部樓層
讀接收數(shù)據(jù)后要記著清中斷標(biāo)志位。
回復(fù)

使用道具 舉報(bào)

ID:500189 發(fā)表于 2021-4-28 10:51 | 顯示全部樓層
清除中斷標(biāo)志位試了,  也不行,   串口中斷只進(jìn)入一次,以0x0d 0x0a 結(jié)尾,

  1. void USART1_IRQHandler(void)                        //串口1中斷服務(wù)程序
  2. {
  3.         u8 Res=0;
  4.         static u8 Rxbuf[10];
  5.         //u8 theta_err=0;

  6.         if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)  //接收中斷(接收到的數(shù)據(jù)必須是0x0d 0x0a結(jié)尾)
  7.         {
  8.                 Res = USART_ReceiveData(USART1);//(USART1->DR);        //讀取接收到的數(shù)據(jù)
  9.                
  10.                 if((USART_RX_STA&0x8000)==0)//接收未完成
  11.                 {
  12.                         if(USART_RX_STA&0x4000)//接收到了0x0d
  13.                         {
  14.                                 if(Res!=0x0A)
  15.                                         USART_RX_STA=0;//接收錯(cuò)誤,重新開(kāi)始
  16.                                 else
  17.                                         USART_RX_STA|=0x8000;        //接收完成了
  18.                                
  19.                                
  20.                                        
  21.                         }
  22.                         else //還沒(méi)收到0X0D
  23.                         {       
  24.                                 if(Res==0x0d)USART_RX_STA|=0x4000;
  25.                                 else
  26.                                 {                               
  27.                                         USART_RX_BUF[USART_RX_STA&0X3FFF]=Res ;
  28.                                         USART_RX_STA++;
  29.                                        
  30.                                         if(USART_RX_STA>(USART_REC_LEN-1))
  31.                                                 USART_RX_STA=0;//接收數(shù)據(jù)錯(cuò)誤,重新開(kāi)始接收          
  32.                                 }                 
  33.                         }
  34.                 }                    
  35.   }

  36. }
復(fù)制代碼
回復(fù)

使用道具 舉報(bào)

ID:332214 發(fā)表于 2021-4-28 17:08 | 顯示全部樓層
1844952977 發(fā)表于 2021-4-28 10:51
清除中斷標(biāo)志位試了,  也不行,   串口中斷只進(jìn)入一次,以0x0d 0x0a 結(jié)尾,

沒(méi)看出來(lái)你這有清中斷的語(yǔ)法  加上下面的語(yǔ)句。試試
if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)  //接收中斷(接收到的數(shù)據(jù)必須是0x0d 0x0a結(jié)尾)
{
       USART_ClearITPendingBit(USART1, USART_IT_RXNE);  //這是清中斷標(biāo)準(zhǔn)函數(shù)接口
回復(fù)

使用道具 舉報(bào)

ID:889094 發(fā)表于 2021-4-28 23:56 | 顯示全部樓層
中斷服務(wù)程序后面的interrupt ?在哪里????
回復(fù)

使用道具 舉報(bào)

ID:984836 發(fā)表于 2021-11-25 21:43 | 顯示全部樓層
遇到了同樣的問(wèn)題不知道樓主怎么解決的
回復(fù)

使用道具 舉報(bào)

ID:637144 發(fā)表于 2021-11-26 11:11 來(lái)自手機(jī) | 顯示全部樓層
清標(biāo)志位
回復(fù)

使用道具 舉報(bào)

ID:139866 發(fā)表于 2021-11-29 16:53 | 顯示全部樓層
birdzhyli 發(fā)表于 2021-4-28 23:56
中斷服務(wù)程序后面的interrupt ?在哪里????

這是32的程序,不用寫(xiě)
回復(fù)

使用道具 舉報(bào)

ID:211994 發(fā)表于 2021-11-29 19:14 | 顯示全部樓層
接收到數(shù)據(jù)進(jìn)入中斷,在中斷程序中清除標(biāo)志位,等下次接收到數(shù)據(jù)后再進(jìn)入中斷
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表