STM32串口通信只能接受第一个字节的数

[复制链接]
9884|32
 楼主| gooout 发表于 2010-10-14 12:04 | 显示全部楼层
发bc,收到b
代码
    if (USART_GetFlagStatus(USART1, USART_FLAG_RXNE) != RESET)
     {
           static int k = 0;
           RxBuf1[k] = USART_ReceiveData(USART1);   
           USART_ClearFlag(USART1, USART_FLAG_RXNE);
           if (USART_GetFlagStatus(USART1, USART_FLAG_TXE) != RESET)
                USART_SendData(USART1, RxBuf1[k]);
            k++;
            k = k%8;
     }
123.JPG
 楼主| gooout 发表于 2010-10-14 13:05 | 显示全部楼层
继续等
 楼主| gooout 发表于 2010-10-14 13:06 | 显示全部楼层
ST_ARM 发表于 2010-10-14 14:04 | 显示全部楼层
你设置的是:USART_StopBits_1
但是你的PC端设置的是2个停止位
 楼主| gooout 发表于 2010-10-14 14:19 | 显示全部楼层
本帖最后由 gooout 于 2010-10-14 14:21 编辑

哦,是瞎式的时候改了,没有改回来,与这个也没有关系
22222.JPG
vigia 发表于 2010-10-14 15:01 | 显示全部楼层
我用的串口助手,数据位8
gooout 发表于 2010-10-14 11:58



8位数据,1位停止位,应该是USART_WordLength_9b吧。。。。
 楼主| gooout 发表于 2010-10-14 15:28 | 显示全部楼层
8位数据,1位停止位,应该是USART_WordLength_9b吧。。。。
vigia 发表于 2010-10-14 15:01


USART_WordLength_9b也不行
 楼主| gooout 发表于 2010-10-14 16:05 | 显示全部楼层
终于解决了,是主循环里面有其他的程序导致了接受第二个字节时已经有一个较长的延时,串口溢出了,很菜的问题,耽误大家时间了,谢谢大家
king_sunshine 发表于 2011-5-4 17:31 | 显示全部楼层
我也遇到同样问题,可是现在还没调试过来,希望楼主指点迷津,谢谢 28# gooout
king_sunshine 发表于 2011-5-4 17:34 | 显示全部楼层
我的程序进入中断服务程序不成功,我把程序放到main函数中调试的,况且老是进入HardFault_Handler()中断
king_sunshine 发表于 2011-5-4 17:35 | 显示全部楼层
中断程序如下:

void USART1_IRQHandler(void)
{
  //接受数据
  if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)
  {
    USART_ClearITPendingBit(USART1,USART_IT_RXNE);                              //清楚标记位
    //Read one byte from the receive data register
    RxBuffer[RxCounter++] = USART_ReceiveData(USART1);
    RxCounter = RxCounter % 8;
    while(USART_GetFlagStatus(USART1, USART_FLAG_RXNE) == RESET)
    {
      ;
    }   
   
  //溢出-如果发生溢出需要先读SR,再读DR寄存器则可清除不断入中断的问题
    if(USART_GetFlagStatus(USART1,USART_FLAG_ORE)==SET)
    {
      USART_ClearFlag(USART1,USART_FLAG_ORE);                                   //读SR其实就是清除标志
      USART_ReceiveData(USART1);                                                //读DR
    }

    if(USART_ReceiveData(USART1) == '\0')                                       //判断是否接受完成
    {
      RxBuffer[RxCounter] = '\0';
      // Disable the USART1 Receive interrupt
      USART_ITConfig(USART1, USART_IT_RXNE, DISABLE);
      USART_ITConfig(USART1, USART_IT_TXE, ENABLE);
      GPIO_SetBits(GPIOA,GPIO_Pin_11);                                          //切换到发送模式
      RxCounter = 0;
    }
  }
   
   //发送 数据
  // USART_ITConfig(USART1, USART_IT_TXE, ENABLE);                                        为什么 就 死了
  if(USART_GetITStatus(USART1, USART_IT_TXE) != RESET)
  {   
    USART_ClearITPendingBit(USART1,USART_IT_TXE);                              //清楚标记位
    // Write one byte to the transmit data register
   
    TxBuffer1[0] = 'A';
    TxBuffer1[1] = 'C';
    TxBuffer1[2] = 'K';
    TxBuffer1[3] = '\0';
   
    while(TxBuffer1[TxCounter] != '\0')
    {
      USART_SendData(USART1,TxBuffer1[TxCounter]);//发送ACK信息
      while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET)
      {
        ;
      }
      
      TxCounter ++;
      RxCounter = RxCounter % 8;
    }
    TxCounter = 0;
    Delay(6000000);
   
    TxBuffer[0] = Charg_Vin;
    TxBuffer[1] = Charg_Vin >> 8;
    TxBuffer[2] = Charg_Voltage;
    TxBuffer[3] = Charg_Voltage >> 8;
    TxBuffer[4] = Charg_Current;
    TxBuffer[5] = Charg_Current >> 8;
    TxBuffer[6] = Charg_Distance;
    TxBuffer[7] = Charg_AutoDoor;
    TxBuffer[8] = Charg_Connect;
    TxBuffer[9] = '\0';
   
    while(TxBuffer[TxCounter] != '\0')
    {
      USART_SendData(USART1, TxBuffer[TxCounter]);
      while(USART_GetFlagStatus(USART1, USART_FLAG_TXE) == RESET)
      {
        ;
      }
      TxCounter ++;
      RxCounter = RxCounter % 8;
    }

    if(TxBuffer[TxCounter] == '\0')                                             //判断是否发送完成
    {
      //Disable the USART1 Transmit interrupt
      USART_ITConfig(USART1, USART_IT_TXE, DISABLE);
      USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);
      GPIO_ResetBits(GPIOA,GPIO_Pin_11);                                        //切换到接受模式
      
      TxCounter = 0;
    }
  }
}


希望楼主以及其余大侠给点建议,谢谢
无风之树 发表于 2011-11-1 09:46 | 显示全部楼层
新手路过
wangshi 发表于 2011-11-23 21:01 | 显示全部楼层
你查一下RXNE,是怎么变化的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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