485设备的波特率固定为 9600bps,数据位为 8 位,偶校验,停止位为 1 位
stm32对应串口的配置为:
huart4.Instance = UART4;
huart4.Init.BaudRate = 9600;
huart4.Init.WordLength = UART_WORDLENGTH_8B;
huart4.Init.StopBits = UART_STOPBITS_1;
huart4.Init.Parity = UART_PARITY_EVEN;
huart4.Init.Mode = UART_MODE_TX_RX;
huart4.Init.HwFlowCtl = UART_HWCONTROL_NONE;
huart4.Init.OverSampling = UART_OVERSAMPLING_16;
发送的数据为:
USART4_Send:01 06 00 40 01 f4 88 09
串口工具接收:
Recv:3F 3F 3F 3F 81 06 80 E0 60 17 2C F8
根据发送接收的数据对比,发现接收的数据是把最高位变成校验位了。查看数据手册发现stm32的设置数据长度是把校验位算在一起的,所以上图设置的数据长度8位,其实是7位y有效数据位,1位停止位。而接收端设置的是8位有效数据位,1位停止位。所以在发送的时候把校验位覆盖掉了最高位。
所以STM32串口的配置修改为下面就行了:
huart4.Instance = UART4;
huart4.Init.BaudRate = 9600;
huart4.Init.WordLength = UART_WORDLENGTH_9B;
huart4.Init.StopBits = UART_STOPBITS_1;
huart4.Init.Parity = UART_PARITY_EVEN;
huart4.Init.Mode = UART_MODE_TX_RX;
huart4.Init.HwFlowCtl = UART_HWCONTROL_NONE;
huart4.Init.OverSampling = UART_OVERSAMPLING_16;
Recv:01 06 00 40 01 F4 88 09
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)