打印
[应用相关]

RS485通信--AT_SURF案例No.10

[复制链接]
496|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
vt2017|  楼主 | 2022-8-16 19:46 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

RS485通信--AT_SURF案例No.10

简介
RS485通常采用两线制总线,为半双工通讯,常用于工业控制,理论上最大传输距离可达到1200米。总线上可以连接多个设备,在使用时只需要将设备的A口和B口分别连接总线的A线和B线即可。由于RS485信号是差分信号,所以具有较强的抗干扰能力。总线上通常使用主从通讯方式即1个主机带多个从机。
AT32 SUFR板载了一颗485芯片,MCU通过串口连接到该芯片,在发送数据时,MCU将数据通过串口发送到485芯片,485芯片将数据转换成差分信号传输到总线上。在接收时,485芯片将总线上的差分信号数据发送到串口,MCU通过串口读取数据。
图22. 测试流程

资源准备
硬件环境:
对应产品型号的AT-SURF-F437 Board
软件环境:
AT32F435_437_Firmware_Library_V2.x.x\project\at_sufr_f437\examples\rs485
硬件设计
本案例使用的硬件资源有485芯片,对应的引脚如下:
表11. 硬件资源使用

对应的电路原理如下:
图23. 485电路原理图

软件设计
RS485测试
初始化RS485
进入接收模式,等待接收数据
PC端发送数据到SUFR板
当SUFR板接收到数据后,在LCD屏上显示接收到的数据
然后再发送一帧数据到总线,然后再进入接收模式,重复上述逻辑
代码介绍
main函数代码描述

int main(void)
{
  /* 初始化系统时钟 */
  system_clock_config();
  
  /* 初始化中断优先级分组 */   
  nvic_priority_group_config(NVIC_PRIORITY_GROUP_4);

  /* 初始化延时函数 */
  delay_init();
  
  /* 初始化LCD */
  lcd_init(LCD_DISPLAY_VERTICAL);
  
  /* 初始化RS485 */
  rs485_init();
      
  /* 显示信息 */  
  lcd_string_show(10, 20, 200, 24, 24, (uint8_t *)"RS485 Test");
  
  lcd_string_show(10, 60, 200, 24, 24, (uint8_t *)"RX data:");
  
  while(1)
  {
    /* 接收到数据 */
    if(rs485_rx_number)
    {
      /* 将末尾字节清零方便显示 */
      rx_buf[rs485_rx_number] = 0;
      
      /* 复制数据到 rx_buf */
      rs485_data_receive(rx_buf, rs485_rx_number);

      /* 清空显示区域 */
      lcd_fill(10, 100, 310, 124, WHITE);  
      
      /* 显示接收的数据 */
      lcd_string_show(10, 100, 200, 24, 24, rx_buf);
      
      /* 发送数据 */
      rs485_data_send(tx_buf, 17);
    }
  }
}
void rs485_init(void)函数代码描述
/**
  * [url=home.php?mod=space&uid=247401]@brief[/url]  initializes rs485.
  * @param  none
  * @retval none
  */
void rs485_init(void)
void rs485_data_send(uint8_t* pdata, uint16_t num)函数代码描述
/** 
  * @brief  send data.
  * @param  pdata: data buffer.
  * @param  num: data size.
  * @retval none.
  */
void rs485_data_send(uint8_t* pdata, uint16_t num)
void rs485_data_receive(uint8_t* pdata, uint16_t num)函数代码描述
/** 
  * @brief  receive data.
  * @param  pdata: data buffer.
  * @param  num: data size.
  * @retval none.
  */
void rs485_data_receive(uint8_t* pdata, uint16_t num)
下载验证
PC端通过串口助手发送“Artery 2022”到SUFR板。
当接收到数据后,在LCD屏上显示接收到的数据。
然后SUFR板再发送一帧数据“AT32-SUFR-BOARD”到PC。

图24. PC端串口助手


使用特权

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

本版积分规则

33

主题

69

帖子

3

粉丝