4821|9

78

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

STM32串口收数后回发时出现问题 [复制链接]

while (1)
    {
    if(USART_GetITStatus(USART3, USART_IT_RXNE) != RESET)
    {
  GPIO_ResetBits(GPIOB, GPIO_Pin_9);
      j = USART_ReceiveData(USART3);      
      
      while(USART_GetFlagStatus(USART3, USART_FLAG_TXE) == RESET);
      {
      }
  GPIO_SetBits(GPIOB, GPIO_Pin_9);

  USART_SendData(USART3,j);
    }
}
上面程序我是接收上位机发过来的一个字节,之后把这个字节发回到上位机,运行时我用串口大师发数,但是数不能正常发回,会周期性的每过大约3秒时自动向上位机发一个0,不知道是何原因。处理器是STM32VBT6.接口芯片是ADUM5401和SN75LBC184,ADUM5401是隔离用的,SN75LBC184是半又工的收发器。(GPIOB, GPIO_Pin_9)是控制收发方向的。
此帖出自stm32/stm8论坛

最新回复

                                 不用中断,只在主程序中用查询方式接收后再发回到上位机,也不行,现象和用中断是一样的。只能收发一次,之后就不能收发了。请高手帮忙指点一下。先谢谢各位了。  详情 回复 发表于 2009-12-21 16:54
点赞 关注
 

回复
举报

77

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
发数是没有问题的,应该是数据没有收到,什么原因呢?
  /* Configure USART3 Tx (PB10) as alternate function push-pull */
  //注意此引脚对应原理图中的网络"TXD2"
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_Init(GPIOB, &GPIO_InitStructure);
   
  /* Configure USART3 Rx (PB11) as input floating */
   //注意此引脚对应原理图中的网络"RXD2"
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
  GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
  GPIO_Init(GPIOB, &GPIO_InitStructure);

  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_ClockInitStructure.USART_Clock = USART_Clock_Disable;
  USART_ClockInitStructure.USART_CPOL = USART_CPOL_Low;
  USART_ClockInitStructure.USART_CPHA = USART_CPHA_2Edge;
  USART_ClockInitStructure.USART_LastBit = USART_LastBit_Disable;
  USART_Init(USART3, &USART_InitStructure);
  USART_ClockInit(USART3, &USART_ClockInitStructure);
   
  //Enable the USART Receive interrupt: this interrupt is generated when the
  //USART1 receive data register is not empty
  USART_ITConfig(USART3, USART_IT_RXNE, ENABLE);
//USART_ITConfig(USART3, USART_IT_TXE, ENABLE);
//USART_ITConfig(USART3, USART_IT_TXE, DISABLE);
  /* Enable USART3 */
  USART_Cmd(USART3, ENABLE);
此帖出自stm32/stm8论坛
 
 

回复

86

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
                                 硬件上作了些改动。现在用COMMET能收能发。用串口大师只能收发一次,之后就不行了。要再复位才能再收发一次。不知道是怎么回事。请高手指点一下。
此帖出自stm32/stm8论坛
 
 

回复

83

帖子

0

TA的资源

一粒金砂(初级)

4
 
                                 就是说只能跑一遍,肯定是程序死在哪了,我碰到过,你仿真查查
此帖出自stm32/stm8论坛
 
 
 

回复

84

帖子

0

TA的资源

一粒金砂(初级)

5
 
                                 仿真不了。我是用ISP下载的。
此帖出自stm32/stm8论坛
 
 
 

回复

77

帖子

0

TA的资源

一粒金砂(初级)

6
 
                                 哦,那就不好查了,只能认真看程序
此帖出自stm32/stm8论坛
 
 
 

回复

59

帖子

0

TA的资源

一粒金砂(初级)

7
 
                                 仿真不了,对于调试程序是很不方便
此帖出自stm32/stm8论坛
 
 
 

回复

80

帖子

0

TA的资源

一粒金砂(初级)

8
 
                                 是啊。是不方便,现在不知道程序死在哪儿了,感觉好像没死似的,因为我复位后第一次点发送能正确的返回正确的值,之后就不行了。但是之后每过大约2秒会自动向上位机发个0.
此帖出自stm32/stm8论坛
 
 
 

回复

79

帖子

0

TA的资源

一粒金砂(初级)

9
 
                                 是不是USART3的接收中断我只进了一次呢?好像网上也有人遇到过这样的问题,但不知道咋整好的。
此帖出自stm32/stm8论坛
 
 
 

回复

54

帖子

0

TA的资源

一粒金砂(初级)

10
 
                                 不用中断,只在主程序中用查询方式接收后再发回到上位机,也不行,现象和用中断是一样的。只能收发一次,之后就不能收发了。请高手帮忙指点一下。先谢谢各位了。
此帖出自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
快速回复 返回顶部 返回列表