22382|31

85

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

STM32串口通信只能接受第一个字节的数 [复制链接]



用EM-STM3210E开发板,写了一个简单的串口通信代码,STM32不能正常接收数据,只能接收到第一个字节的数,就是说我上位机发“fa010203”,单片机收到数返回给PC机的数是“fafafa”
代码如下:

  while (1)
  {   

     if (USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)
     {
       static int k = 0;   
       RxBuf1[k]=USART_ReceiveData(USART1);  //USART1->DR;
       TxBuf1[k]=RxBuf1[k];
       USART_SendData(USART1,TxBuf1[k]);
       k++;
        k = k%8;
     }
   }
此帖出自stm32/stm8论坛

最新回复

这个问题解决了嘛???秋分享,我也遇到同样的问题,串口3没有问题,串口出问题  详情 回复 发表于 2016-5-10 16:02
点赞 关注
 

回复
举报

73

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
可以看到RXNE始终为0

untitled.JPG (64.46 KB)

untitled.JPG

此帖出自stm32/stm8论坛
 
 

回复

85

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
                                 前面代码一堆,就是没贴串口初始化代码,没法判断
此帖出自stm32/stm8论坛
 
 

回复

80

帖子

0

TA的资源

一粒金砂(初级)

4
 
void USART_Configuration(void)
{
  USART_InitTypeDef USART_InitStructure;

/* USART1 configuration ------------------------------------------------------*/
  /* USART1 configured as follow:
        - BaudRate = 115200 baud  
        - Word Length = 8 Bits
        - One Stop Bit
        - No parity
        - Hardware flow control disabled (RTS and CTS signals)
        - Receive and transmit enabled
        - USART Clock disabled
        - USART CPOL: Clock is active low
        - USART CPHA: Data is captured on the middle
        - USART LastBit: The clock pulse of the last data bit is not output to
                         the SCLK pin
  */
  USART_InitStructure.USART_BaudRate = 115200;
  USART_InitStructure.USART_WordLength = USART_WordLength_8b;
  USART_InitStructure.USART_StopBits = USART_StopBits_1;
  USART_InitStructure.USART_Parity = USART_Parity_No;
  USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
  USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
  //USART_InitStructure.USART_Clock = USART_Clock_Disable;
  //USART_InitStructure.USART_CPOL = USART_CPOL_Low;
  //USART_InitStructure.USART_CPHA = USART_CPHA_2Edge;
  //USART_InitStructure.USART_LastBit = USART_LastBit_Disable;

  USART_Init(USART1, &USART_InitStructure);
   
  /* Enable USART1 */
  USART_Cmd(USART1, ENABLE);
}

多谢sjnh兄弟,上面是串口初始化代码
此帖出自stm32/stm8论坛
 
 
 

回复

60

帖子

0

TA的资源

一粒金砂(初级)

5
 
                                 各位高手帮忙看看哈,实在搞不定了
此帖出自stm32/stm8论坛
 
 
 

回复

87

帖子

0

TA的资源

一粒金砂(初级)

6
 
                                 在线等,希望高手早点出现
此帖出自stm32/stm8论坛
 
 
 

回复

54

帖子

0

TA的资源

一粒金砂(初级)

7
 
                                 高手来了!
此帖出自stm32/stm8论坛
 
 
 

回复

70

帖子

0

TA的资源

一粒金砂(初级)

8
 
高手来了!
那就帮忙解答一下哈,谢了
此帖出自stm32/stm8论坛
 
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

9
 
/* Enable USART1 Receive and Transmit interrupt */
  USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);
  USART_ITConfig(USART1, USART_IT_TXE, DISABLE);
此帖出自stm32/stm8论坛
 
 
 

回复

84

帖子

0

TA的资源

一粒金砂(初级)

10
 
/* Enable USART1 Receive and Transmit interrupt */
  USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);
  USART_ITConfig(USART1, USART_IT_TXE, DISABLE);
非常感谢“zhangdinggang ”兄弟,按照你的设置后,现在能够进入If语句,但每次读到的数都是第一个字节,后面字节的数读不到。
串口助手发“aabbcc”,下位机收到然后返回来的是“aaaaaa”
此帖出自stm32/stm8论坛
 
 
 

回复

66

帖子

0

TA的资源

一粒金砂(初级)

11
 
主程循环中试一下以下代码:
  while (1)
  {   
     if (USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)
     {
       RxBuf1[0] = USART_ReceiveData(USART1);  //USART1->DR;
       USART_ClearITPendingBit(USART1, USART_IT_RXNE);
       USART_SendData(USART1, RxBuf1[0]);
     }
   }
此帖出自stm32/stm8论坛
 
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

12
 
主程循环中试一下以下代码:
  while (1)
  {   
     if (USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)
     {
       RxBuf1[0] = USART_ReceiveData(USART1);  //USART1->DR;
       USART_ClearITPendi ...
试过了,还是不行,发“bc”,只能收到“b”
此帖出自stm32/stm8论坛
 
 
 

回复

82

帖子

0

TA的资源

一粒金砂(初级)

13
 
if (USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)
        {
                static int k = 0;                       
                RxBuf1[k]=USART_ReceiveData(USART1);
                Delay(100);
                RxBuf1[k]=USART_ReceiveData(USART1);        
                TxBuf1[k]=RxBuf1[k];
                USART_ClearITPendingBit(USART1, USART_IT_RXNE);
                USART_SendData(USART1,TxBuf1[k]);
                k++;
                k = k%8;
        }

我改了一下程序,读一次DR寄存器后,延时1S,然后再读,读到的还是第一个字节的,不是DR寄存器被读走以后,应该自动清除,放下一个字节么?
此帖出自stm32/stm8论坛
 
 
 

回复

68

帖子

0

TA的资源

一粒金砂(初级)

14
 
                                 在线等哦
此帖出自stm32/stm8论坛
 
 
 

回复

75

帖子

0

TA的资源

一粒金砂(初级)

15
 
试一下下面的代码:(另外,注意你的PC机的串口配置与STM32的配置是否一致)
while (1)
  {   
     if (USART_GetFlagStatus(USART1, USART_FLAG_RXNE) != RESET)
     {
           static int k = 0;
           RxBuf1[0] = USART_ReceiveData(USART1);  //USART1->DR;
           USART_ClearFlag(USART1, USART_FLAG_RXNE);
           if (USART_GetFlagStatus(USART1, USART_FLAG_TXE) != RESET)
                 USART_SendData(USART1, RxBuf1[0]);

            k++;
            k = k%8;
     }
}
此帖出自stm32/stm8论坛
 
 
 

回复

80

帖子

0

TA的资源

一粒金砂(初级)

16
 
不要 Delay(100); 这样就溢出了。
你可能是每次发aabbcc 下位只收到a 剩下的溢出了。
此帖出自stm32/stm8论坛
 
 
 

回复

71

帖子

0

TA的资源

一粒金砂(初级)

17
 
试一下下面的代码:(另外,注意你的PC机的串口配置与STM32的配置是否一致)
while (1)
  {   
     if (USART_GetFlagStatus(USART1, USART_FLAG_RXNE) != RESET)
     {
           static int k = 0;
           ...
pc跟stm32的配置是一样的,而且能够收发一个字节,也能说明配置没有问题了吧?
上面这段代码试过了,还是只能收一个字节,发“bc”收到“b”
此帖出自stm32/stm8论坛
 
 
 

回复

65

帖子

0

TA的资源

一粒金砂(初级)

18
 
不要 Delay(100); 这样就溢出了。
你可能是每次发aabbcc 下位只收到a 剩下的溢出了。
没有延时也不行的
此帖出自stm32/stm8论坛
 
 
 

回复

64

帖子

0

TA的资源

一粒金砂(初级)

19
 
                                 USART_WordLength_8b;---对应的PC,你使用的是什么?
此帖出自stm32/stm8论坛
 
 
 

回复

87

帖子

0

TA的资源

一粒金砂(初级)

20
 
USART_WordLength_8b;---对应的PC,你使用的是什么?
我用的串口助手,数据位8
此帖出自stm32/stm8论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/6 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表