我有一个可以通过 UART 通信的传感器,我发送一个命令,传感器用十六进制帧回答我。
我可以有距离、角度、速度值。
我知道如何将帧存储在缓冲区中,但我不知道如何将它存储在 hexa 中以保持 0xFF6F 形式并确定该值是负数还是正数。
我已经为缓冲区内的标识符和读取值编写了代码
- extern uint8_t flag;
- extern UART_HandleTypeDef huart1;
- //Initialisation des commandes capteur.
- uint8_t INIT[12] = {0x49, 0x4E, 0x49, 0x54, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; // Init commande for the first communication and fix the Bauderate
- uint8_t TDAT[12] = {0x47, 0x4E, 0x46, 0x44, 0x04, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00}; // TDAT to detect target and get the rang and the angle
- uint8_t GBYE[8] = {0x49, 0x4E, 0x49, 0x54, 0x00, 0x00, 0x00, 0x00}; // commande to disconnect the sensor
- void sensor_init(void){
- HAL_UART_Transmit(&huart1, INIT, sizeof(INIT), 13);
- HAL_Delay(75);
- }
- void sensor_data(void){
- if (flag == 1) {
- HAL_UART_Transmit(&huart1, TDAT, sizeof(TDAT), 13);
- HAL_Delay(100);
- flag = 0;
- }
- distance = k_ld7_resp[8] + k_ld7_resp[9]*0x100;
- angle = (k_ld7_resp[12] + k_ld7_resp[13]*0x100) / 100;
串口回调代码
- /*K_LD7 private variable*/
- uint8_t flag = 0;
- uint8_t rxByte;
- char k_ld7_resp[RxBuff_SIZE];
- char MainBuf_K_LD7[Main_buf_SIZE];
- void Ringbuf_Reset(void){
- memset(MainBuf_K_LD7, '
|