使用 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 ;
我正在开发一个在 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 ;