OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4253|回复: 6

HAL实现485全双工通信问题

[复制链接]

12

主题

72

帖子

0

精华

高级会员

Rank: 4

积分
539
金钱
539
注册时间
2019-7-3
在线时间
167 小时
发表于 2021-12-14 17:44:20 | 显示全部楼层 |阅读模式
1金钱
附上标准库实现485全双工通信代码,这个是使用了很久测试过的代码。
  1. void ReceiveMode_485(USART_TypeDef* USARTx)
  2. {
  3.         while (USART_GetFlagStatus(USARTx, USART_FLAG_TC) == RESET){};

  4.         GPIO_ResetBits(GPIOA,GPIO_Pin_0);

  5.         delayus(3);
  6. }

  7. void USARTSendString(USART_TypeDef* USARTx, u8 *data, u8 len)
  8. {       
  9.         u8 i;

  10.         GPIO_SetBits(GPIOA,GPIO_Pin_0);
  11.         delayus(3);

  12.         for(i = 0; i < len; i++)
  13.         {
  14.                 /* Loop until the end of transmission */
  15.                   while (USART_GetFlagStatus(USARTx, USART_FLAG_TC) == RESET)
  16.                   {
  17.                   }
  18.                 //Send out one byte
  19.                 USART_SendData(USARTx, data[i]);
  20.         }
  21.         ReceiveMode_485(USARTx);
  22. }
复制代码
下面是附上HAL库新写的代码,
  1. void RS485_Send_data(uint8_t *pdata,uint8_t data_size)
  2. {


  3.        
  4.        
  5.                 uint8_t i;

  6.         SendMode_485();
  7.         for(i = 0; i < data_size; i++)
  8.         {
  9.                 /* Loop until the end of transmission */
  10.                   while(__HAL_UART_GET_FLAG(&huart1, UART_FLAG_TC) == RESET);
  11.                   {
  12.                   }
  13.                 //Send out one byte
  14.                 HAL_UART_Transmit(&huart1,pdata,data_size,1000);
  15.         }
  16.         RS485_Receivedata();
  17.        
  18. }

  19. void RS485_Receivedata()
  20. {
  21.         while(__HAL_UART_GET_FLAG(&huart1, UART_FLAG_TC) == RESET);
  22.         ReceiveMode_485();

  23. }
复制代码
我的HAL库里面的串口配置就不用重复上传了。在TTL模式和232通信的情况下,是可以实现全双工通信,按理来说就是配置485接受和发送的问题了。
但是依旧没有实现效果。有空的大佬可以看一下




最佳答案

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2021-12-14 17:44:21 | 显示全部楼层
回复

使用道具 举报

1

主题

385

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1023
金钱
1023
注册时间
2019-9-21
在线时间
269 小时
发表于 2021-12-14 17:47:31 | 显示全部楼层
感谢分享!
回复

使用道具 举报

8

主题

163

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
5561
金钱
5561
注册时间
2013-3-16
在线时间
655 小时
发表于 2021-12-15 09:10:09 | 显示全部楼层
485可以全双工?第一次听说
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2021-12-16 02:02:09 | 显示全部楼层
是哦,485只能半双工。。。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

0

主题

48

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2988
金钱
2988
注册时间
2015-8-30
在线时间
342 小时
发表于 2021-12-16 08:10:26 | 显示全部楼层
RS485有全双工的,要4线ABZY那个芯片。但是没有意义了,其本只能点到点
学无止境
回复

使用道具 举报

12

主题

72

帖子

0

精华

高级会员

Rank: 4

积分
539
金钱
539
注册时间
2019-7-3
在线时间
167 小时
 楼主| 发表于 2021-12-17 18:31:14 | 显示全部楼层
不好意思,是我的表述有点问题,其实我想实现的功能就是自动切换发送和接受功能,HAL库和标准库串口接受的配置有点差异。在485自动发送模式下。需要加延时5ms,不然会导致系统卡死在串口接收标志位。我已经解决我的bug了。实现485全双工通信的因该叫做422通信了吧。
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-22 18:40

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表