本帖最后由 电子烂人 于 2024-8-29 11:15 编辑
#申请原创# #申请开发板#这次试着驱动一下RS485
1.RS485介绍RS485是一种串行通信标准,主要用于工业领域的数据传输。它通过差分信号传输,具有较强的抗干扰能力和较远的传输距离(可达3000米),支持多达128个设备连接。与RS232相比,RS485在传输速率、距离和抗干扰性方面表现更优,适用于工业自动化和数据采集系统。本项目直接运用RS485来传输传感器输出的数据。
2.资料查找
按照官方的原理图,在usart2上链接了一片STR485作为收发芯片,所有数据只需要通过串口传输即可;
另外DE/RE负责控制收发,需要接收/发送完成之后翻转IO电平,来改变接收/发送状态。
3.初始化设置:
在配置完USART之后需要在Hardware Flow Control里使能RTS,以控制收发
其他配置不变,115200,8+1,无校验
4.代码修改
对比前一篇文章,只需要将传感器的数据传输部分由虚拟VCOM改为USART2即可:
while (1) {
uint8_t reg;
/* Read output only if new xl value is available */
iis3dwb_xl_flag_data_ready_get(&dev_ctx, ®);
if (reg) {
/* Read acceleration field data */
memset(data_raw_acceleration, 0x00, 3 * sizeof(int16_t));
iis3dwb_acceleration_raw_get(&dev_ctx, data_raw_acceleration);
acceleration_mg[0] =
iis3dwb_from_fs2g_to_mg(data_raw_acceleration[0]);
acceleration_mg[1] =
iis3dwb_from_fs2g_to_mg(data_raw_acceleration[1]);
acceleration_mg[2] =
iis3dwb_from_fs2g_to_mg(data_raw_acceleration[2]);
//sprintf((char *)tx_buffer,"Acceleration [mg]:%4.2f\t%4.2f\t%4.2f\r\n",acceleration_mg[0], acceleration_mg[1], acceleration_mg[2]);
//tx_com(tx_buffer, strlen((char const *)tx_buffer));
//HAL_Delay (100);
HAL_UART_Transmit(&huart2, (uint8_t*)data_raw_acceleration,5,100 );
}
}
5.结果展示:链接485工具到电脑
能够正常收发数据,但是还有些小BUG
|