打印

stm32的Usart收发数据,485

[复制链接]
8003|33
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
759612761|  楼主 | 2011-7-25 10:47 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
759612761|  楼主 | 2011-7-25 11:04 | 只看该作者
上位机向stm32发送一串数据时只能接收第一个数据,不知道为什么

使用特权

评论回复
板凳
lixiaoxu2meng| | 2011-7-25 11:10 | 只看该作者
485 与串口不同
有个使能引脚
控制是接受还是发送

使用特权

评论回复
地板
759612761|  楼主 | 2011-7-25 11:13 | 只看该作者
这个引脚已经操作了,发送是正常的

使用特权

评论回复
5
759612761|  楼主 | 2011-7-25 11:14 | 只看该作者
是不是和AB引脚上的上拉电阻有关系

使用特权

评论回复
6
lixiaoxu2meng| | 2011-7-25 11:15 | 只看该作者
如果  单片机要向上位机发送数据 那么 将使能引脚设置为高电平
      上位机要向单片机发送数据 那么 将使能引脚设置为低电平

使用特权

评论回复
7
lixiaoxu2meng| | 2011-7-25 11:22 | 只看该作者
4# 759612761
这个引脚 你怎么炒作的

使用特权

评论回复
8
lixiaoxu2meng| | 2011-7-25 11:23 | 只看该作者
发送正常这能代表使能引脚为高电平
发送完数据后应该马上将该引脚置为低电平

使用特权

评论回复
9
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);//置低
     }
  }
}

使用特权

评论回复
10
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);//置低
     }
  }
}

使用特权

评论回复
11
lixiaoxu2meng| | 2011-7-25 11:33 | 只看该作者
你这个函数 有点乱你应该 在中段函数stm32f10x_it.c 里的USART2_IRQHandler(void) 进行操作
你也可以在USART2_IRQHandler(void) 中设置个标志位 然后主函数查询

使用特权

评论回复
12
lixiaoxu2meng| | 2011-7-25 11:34 | 只看该作者
另外 你清标志位了吗  USART_ClearITPendingBit(USART2, USART_IT_RXNE);

使用特权

评论回复
13
759612761|  楼主 | 2011-7-26 15:17 | 只看该作者
12# lixiaoxu2meng
纠结了,单步调试可以接受一个字节的数据,并正常发送,其他的时候读不到数据,但可以检测出接受寄存器非空

使用特权

评论回复
14
lixiaoxu2meng| | 2011-7-26 15:56 | 只看该作者
工程发给 我看看

使用特权

评论回复
15
lixiaoxu2meng| | 2011-7-26 15:57 | 只看该作者
13# 759612761 你的意思 是说次每次开始 只能收到一个字节的数据

使用特权

评论回复
16
759612761|  楼主 | 2011-7-26 16:36 | 只看该作者
现在用示波器测试STM32接受和发送引脚的波形都是正常的,通过485是干扰挺大的

使用特权

评论回复
17
759612761|  楼主 | 2011-7-26 16:44 | 只看该作者
现在可以确定了,单独的用单片机发送数据到上位机是可以的,上位机发送数据到单片机也是可以的,但是单片机接受到数据在发送给上位机时就不可以了,其实程序很简单,就是把接收到的数据原样反发给上位机,不知道是什么原因会这样

使用特权

评论回复
18
xm042041| | 2011-7-26 16:47 | 只看该作者
不发送时,接收使能

使用特权

评论回复
19
lixiaoxu2meng| | 2011-7-26 16:49 | 只看该作者
17# 759612761


建议 你在切换收发模式后 延时 一下 再发送数据

使用特权

评论回复
20
lixiaoxu2meng| | 2011-7-26 16:50 | 只看该作者
这应该和硬件没有关系了  应该是软件的问题

使用特权

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

本版积分规则

1

主题

35

帖子

1

粉丝