stm32的Usart收发数据,485

[复制链接]
 楼主| 759612761 发表于 2011-7-25 10:47 | 显示全部楼层 |阅读模式
用的是485为什么收不到数据,发送是正常的,数据收发使用232没有问题
 楼主| 759612761 发表于 2011-7-25 11:04 | 显示全部楼层
上位机向stm32发送一串数据时只能接收第一个数据,不知道为什么
lixiaoxu2meng 发表于 2011-7-25 11:10 | 显示全部楼层
485 与串口不同
有个使能引脚
控制是接受还是发送
 楼主| 759612761 发表于 2011-7-25 11:13 | 显示全部楼层
这个引脚已经操作了,发送是正常的
 楼主| 759612761 发表于 2011-7-25 11:14 | 显示全部楼层
是不是和AB引脚上的上拉电阻有关系
lixiaoxu2meng 发表于 2011-7-25 11:15 | 显示全部楼层
如果  单片机要向上位机发送数据 那么 将使能引脚设置为高电平
      上位机要向单片机发送数据 那么 将使能引脚设置为低电平
lixiaoxu2meng 发表于 2011-7-25 11:22 | 显示全部楼层
4# 759612761
这个引脚 你怎么炒作的
lixiaoxu2meng 发表于 2011-7-25 11:23 | 显示全部楼层
发送正常这能代表使能引脚为高电平
发送完数据后应该马上将该引脚置为低电平
 楼主| 759612761 发表于 2011-7-25 11:24 | 显示全部楼层
while(1)
  {
    RX_status = USART_GetFlagStatus(USART2, USART_FLAG_RXNE); //判断接收缓冲状态
    if(RX_status != RESET)
    {
      j = USART_ReceiveData(USART2);
      GPIO_SetBits(GPIOA, GPIO_Pin_11);  //发送置高
      USART_SendData(USART2, j);
      while(USART_GetFlagStatus(USART2, USART_FLAG_TXE) == RESET);
      GPIO_ResetBits(GPIOA, GPIO_Pin_11);//置低
     }
  }
}
lixiaoxu2meng 发表于 2011-7-25 11:28 | 显示全部楼层
GPIO_ResetBits(GPIOA, GPIO_Pin_11);//置低
while(1)
  {
    RX_status = USART_GetFlagStatus(USART2, USART_FLAG_RXNE); //判断接收缓冲状态
    if(RX_status != RESET)
    {
      j = USART_ReceiveData(USART2);
      GPIO_SetBits(GPIOA, GPIO_Pin_11);  //发送置高
      USART_SendData(USART2, j);
      while(USART_GetFlagStatus(USART2, USART_FLAG_TXE) == RESET);
      GPIO_ResetBits(GPIOA, GPIO_Pin_11);//置低
     }
  }
}
lixiaoxu2meng 发表于 2011-7-25 11:33 | 显示全部楼层
你这个函数 有点乱你应该 在中段函数stm32f10x_it.c 里的USART2_IRQHandler(void) 进行操作
你也可以在USART2_IRQHandler(void) 中设置个标志位 然后主函数查询
lixiaoxu2meng 发表于 2011-7-25 11:34 | 显示全部楼层
另外 你清标志位了吗  USART_ClearITPendingBit(USART2, USART_IT_RXNE);
 楼主| 759612761 发表于 2011-7-26 15:17 | 显示全部楼层
12# lixiaoxu2meng
纠结了,单步调试可以接受一个字节的数据,并正常发送,其他的时候读不到数据,但可以检测出接受寄存器非空
lixiaoxu2meng 发表于 2011-7-26 15:56 | 显示全部楼层
工程发给 我看看
lixiaoxu2meng 发表于 2011-7-26 15:57 | 显示全部楼层
13# 759612761 你的意思 是说次每次开始 只能收到一个字节的数据
 楼主| 759612761 发表于 2011-7-26 16:36 | 显示全部楼层
现在用示波器测试STM32接受和发送引脚的波形都是正常的,通过485是干扰挺大的
 楼主| 759612761 发表于 2011-7-26 16:44 | 显示全部楼层
现在可以确定了,单独的用单片机发送数据到上位机是可以的,上位机发送数据到单片机也是可以的,但是单片机接受到数据在发送给上位机时就不可以了,其实程序很简单,就是把接收到的数据原样反发给上位机,不知道是什么原因会这样
xm042041 发表于 2011-7-26 16:47 | 显示全部楼层
不发送时,接收使能
lixiaoxu2meng 发表于 2011-7-26 16:49 | 显示全部楼层
17# 759612761


建议 你在切换收发模式后 延时 一下 再发送数据
lixiaoxu2meng 发表于 2011-7-26 16:50 | 显示全部楼层
这应该和硬件没有关系了  应该是软件的问题
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

35

帖子

1

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