打印

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

[复制链接]
1669|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是干嘛的  

使用特权

评论回复
5
NE5532| | 2013-9-17 16:12 | 只看该作者
遇到串口丢数据,先检查波特率。

使用特权

评论回复
6
sedatefire| | 2013-10-1 19:49 | 只看该作者
chuchudongdong 发表于 2013-9-17 15:18
这是改正后的程序 i前面的static是干嘛的

全局变量,使得i不是每次从0开始。能够保留上次退出这个函数的值
可是这个i没有传递出来,就没什么意义了。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

7

主题

40

帖子

0

粉丝