stm串口中断接收字符串丢字

[复制链接]
2080|5
 楼主| chuchudongdong 发表于 2013-9-17 14:02 | 显示全部楼层 |阅读模式
unsigned char UDR[3];
unsigned char RXB8;

void  Uart_Init()
{
  UART1_DeInit();
  UART1_Init((u32)115200,UART1_WORDLENGTH_8D, UART1_STOPBITS_1, \
  UART1_PARITY_NO,UART1_SYNCMODE_CLOCK_DISABLE,UART1_MODE_RX_ENABLE);

UART1_ITConfig(UART1_IT_RXNE_OR, ENABLE); //开启接收中断
  UART1_Cmd(ENABLE);
}


#pragma vector=20
  __interrupt void UART1_RX_IRQHandler(void)
{
  u8 i=0;

  GPIO_WriteLow(GPIOA,GPIO_PIN_3);
  GPIO_WriteHigh(GPIOC,GPIO_PIN_4);
  
if(UART1_GetITStatus(UART1_IT_RXNE)==SET)
  {
   UDR[i]=UART1_ReceiveData8();
    i++;
   RXB8=(UDR[i]&0x0008);
  }
   GPIO_WriteHigh(GPIOC,GPIO_PIN_3);
}
这是我的串口初始化和中断接收函数 用串口助手发ABC为什么只能接收到A ??
 楼主| chuchudongdong 发表于 2013-9-17 14:49 | 显示全部楼层
 楼主| chuchudongdong 发表于 2013-9-17 15:17 | 显示全部楼层
#pragma vector=20
  __interrupt void UART1_RX_IRQHandler(void)
{
static u8 i=0;

  GPIO_WriteLow(GPIOA,GPIO_PIN_3);
  GPIO_WriteHigh(GPIOC,GPIO_PIN_4);
  
if(UART1_GetITStatus(UART1_IT_RXNE)!=RESET)
  {
   UDR[i]=UART1_ReceiveData8();
    i++;
   RXB8=(UDR[i]&0x0008);
   UART1_ClearITPendingBit(UART1_IT_RXNE);
  }
   
GPIO_WriteHigh(GPIOC,GPIO_PIN_3);
}
 楼主| chuchudongdong 发表于 2013-9-17 15:18 | 显示全部楼层
这是改正后的程序 i前面的static是干嘛的  
NE5532 发表于 2013-9-17 16:12 | 显示全部楼层
遇到串口丢数据,先检查波特率。
sedatefire 发表于 2013-10-1 19:49 | 显示全部楼层
chuchudongdong 发表于 2013-9-17 15:18
这是改正后的程序 i前面的static是干嘛的

全局变量,使得i不是每次从0开始。能够保留上次退出这个函数的值
可是这个i没有传递出来,就没什么意义了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

7

主题

40

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部