使用 Modbus RTU 将 int 转换为要通过 usart 发送的高字节和低字节

Convert int to High byte and low byte to be sent via usart using Modbus RTU

我正在开发一个在 STM32 微控制器上 运行 的程序。重点是我需要发送Modbus RTU报文来控制一个设备

这将是电报的结构:

uint8_t pBuffer [8] = { Address, Function, 
                        Register High byte, Register Low byte, 
                        Value High byte, Value Low byte, 
                        CRC High byte, CRC Low Byte};

示例:

uint8_t pBuffer [8] = {0x02,0x06,0x0C, 0x21,0x01,0xC7,0x9A, 0xA1};

然后我使用 uart 发送它:

HAL_UART_Transmit(&huart2, pBuffer, 8, 0xFFFF);

我现在需要转换一个int变量:

int freq = 455;

至高字节和低字节:

high_byte = 0x01;
low_byte = 0xC7;

对应报文中的Value High byte和Value Low byte

我尝试使用 sprintf:

int freq = 455;
char freq_hex[4];
sprintf(freq_hex, "%x", freq);

sprintf 生成字符串输出,这不是你需要的。

简单地说:

uint8_t high_byte = (freq >> 8) & 0xff ;
uint8_t low_byte = freq & 0xff ;