STM32串口中断为何总接收最后一个字节

weixin_40046637 2017-12-12 11:11:39
char * recpointer;
static u8 flag=0;
void USART1_IRQHandler()
{

if (flag==0)
{
flag =1;
recpointer =Rec_Buffer;
Rec_BufferClear (0,1024);
}
if(flag ==1)
{
if(USART_GetFlagStatus(USART1,USART_FLAG_RXNE)==RESET)
{
*recpointer= USART_ReceiveData(USART1);
//while(USART_GetFlagStatus(USART1,USART_FLAG_RXNE)==RESET )
recpointer ++;
}

else if(USART_GetFlagStatus(USART1,USART_FLAG_IDLE)==RESET)
{
recpointer =Rec_Buffer;
USART1->SR;//
USART1->DR;//
}
}
}
...全文
1128 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
q1572456308 2018-02-24
  • 打赏
  • 举报
回复
/´®¿Ú1ÖжϷþÎñ³ÌÐò //×¢Òâ,¶ÁÈ¡USARTx->SRÄܱÜÃâĪÃûÆäÃîµÄ´íÎó u8 USART_RX_BUF[USART_REC_LEN]; //½ÓÊÕ»º³å,×î´óUSART_REC_LEN¸ö×Ö½Ú. //½ÓÊÕ״̬ //bit15£¬ ½ÓÊÕÍê³É±êÖ¾ //bit14£¬ ½ÓÊÕµ½0x0d //bit13~0£¬ ½ÓÊÕµ½µÄÓÐЧ×Ö½ÚÊýÄ¿ u16 USART_RX_STA=0; //½ÓÊÕ״̬±ê¼Ç void USART1_IRQHandler(void) { u8 res; #if SYSTEM_SUPPORT_OS //Èç¹ûSYSTEM_SUPPORT_OSΪÕ棬ÔòÐèÒªÖ§³ÖOS. OSIntEnter(); #endif if(USART1->SR&(1<<5)) //½ÓÊÕµ½Êý¾Ý { res=USART1->DR; if((USART_RX_STA&0x8000)==0)//½ÓÊÕδÍê³É { if(USART_RX_STA&0x4000)//½ÓÊÕµ½ÁË0x0d { if(res!=0x0a)USART_RX_STA=0;//½ÓÊÕ´íÎó,ÖØпªÊ¼ else USART_RX_STA|=0x8000; //½ÓÊÕÍê³ÉÁË }else //»¹Ã»ÊÕµ½0X0D { if(res==0x0d)USART_RX_STA|=0x4000; else { USART_RX_BUF[USART_RX_STA&0X3FFF]=res; USART_RX_STA++; if(USART_RX_STA>(USART_REC_LEN-1))USART_RX_STA=0;//½ÓÊÕÊý¾Ý´íÎó,ÖØпªÊ¼½ÓÊÕ } } } } #if SYSTEM_SUPPORT_OS //Èç¹ûSYSTEM_SUPPORT_OSΪÕ棬ÔòÐèÒªÖ§³ÖOS. OSIntExit(); #endif } #endif
打赤脚的娃 2018-01-14
  • 打赏
  • 举报
回复
recpointer =Rec_Buffer; 每接收一次又跳回去从buf【0】开始保存??????
qq_27910929 2017-12-16
  • 打赏
  • 举报
回复
buff指针有问题吧,不累加
qq_29480247 2017-12-14
  • 打赏
  • 举报
回复
是不是你每次中断收到的覆盖了前面一个字节

27,375

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
  • 单片机/工控社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧