赞
踩
openmv端
- import time
- from pyb import UART
- import ustruct
-
- uart = UART(3, 19200)
- uart.init(19200,8,None,1)
-
- def send_data(d):
- global uart;
- data = ustruct.pack("<bbhb", #b为1byte h为2byte
- 0x2C, #帧头1
- 0x12, #帧头2
- int(d),
- 0x5B)
- uart.write(data);
-
-
-
-
- while(True):
- send_data(5)
- time.sleep_ms(1000)
stm32端
- uint8_t pData[20];
- void HAL_UARTEx_RxEventCallback(UART_HandleTypeDef *huart, uint16_t Size)
- {
- HAL_UART_Transmit_IT(&huart1, pData, strlen(pData));
-
- HAL_UARTEx_ReceiveToIdle_IT(&huart3, pData, sizeof(pData));
- }
使用3号串口接收openmv的数据,1号串口打印
通过串口助手得到的数据是 2C 12 05 00 5b 而不是 2c 12 00 05 5b顺序是反的,需要在32端进行处理才可以得到真实数据,处理过程如下,
- If(pData[0] == 0x2C && pData[1] == 0x12&&pData[4] == 0x5b){//验证帧头帧尾
- int16_t num = 0;//使用2byte的int类型接收不能用32位,因为你发送的本来就是16位的
- num = pData[3] << 8;
- num = pData[2];
- //这样就可以接收16位(short类型)有符号数
- }
这样num就是所发送的数据了
完整代码
- int16_t derta_x = 0;
- uint8_t pData[20];
- void HAL_UARTEx_RxEventCallback(UART_HandleTypeDef *huart, uint16_t Size)
- {
- HAL_UART_Transmit_IT(&huart1, pData, strlen(pData));
- if(pData[0] == 0x2C && pData[1] == 0x12)
- {
- derta_x = pData[3] << 8;
- derta_x += pData[2];
- uint8_t s[6] = {0};
- memset(s,0,sizeof(s));
- sprintf(s,"%d",derta_x);
- //HAL_UART_Transmit_IT(&huart1, s, sizeof(s));
- }
-
- HAL_UARTEx_ReceiveToIdle_IT(&huart3, pData, sizeof(pData));
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。