|
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)函数代码描述
- /**
- * @brief 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端串口助手
|
|