当前位置:   article > 正文

openmv串口打包发送数据_openmv数据打包串口发送

openmv数据打包串口发送

 openmv端

  1. import time
  2. from pyb import UART
  3. import ustruct
  4. uart = UART(3, 19200)
  5. uart.init(19200,8,None,1)
  6. def send_data(d):
  7. global uart;
  8. data = ustruct.pack("<bbhb", #b为1byte h为2byte
  9. 0x2C, #帧头1
  10. 0x12, #帧头2
  11. int(d),
  12. 0x5B)
  13. uart.write(data);
  14. while(True):
  15. send_data(5)
  16. time.sleep_ms(1000)

stm32端

  1. uint8_t pData[20];
  2. void HAL_UARTEx_RxEventCallback(UART_HandleTypeDef *huart, uint16_t Size)
  3. {
  4. HAL_UART_Transmit_IT(&huart1, pData, strlen(pData));
  5. HAL_UARTEx_ReceiveToIdle_IT(&huart3, pData, sizeof(pData));
  6. }

使用3号串口接收openmv的数据,1号串口打印

通过串口助手得到的数据是 2C 12 05 00 5b 而不是 2c 12 00 05 5b顺序是反的,需要在32端进行处理才可以得到真实数据,处理过程如下,

  1. If(pData[0] == 0x2C && pData[1] == 0x12&&pData[4] == 0x5b){//验证帧头帧尾
  2. int16_t num = 0//使用2byte的int类型接收不能用32位,因为你发送的本来就是16位的
  3. num = pData[3] << 8;
  4. num = pData[2];
  5. //这样就可以接收16位(short类型)有符号数
  6. }

这样num就是所发送的数据了

完整代码

  1. int16_t derta_x = 0;
  2. uint8_t pData[20];
  3. void HAL_UARTEx_RxEventCallback(UART_HandleTypeDef *huart, uint16_t Size)
  4. {
  5. HAL_UART_Transmit_IT(&huart1, pData, strlen(pData));
  6. if(pData[0] == 0x2C && pData[1] == 0x12)
  7. {
  8. derta_x = pData[3] << 8;
  9. derta_x += pData[2];
  10. uint8_t s[6] = {0};
  11. memset(s,0,sizeof(s));
  12. sprintf(s,"%d",derta_x);
  13. //HAL_UART_Transmit_IT(&huart1, s, sizeof(s));
  14. }
  15. HAL_UARTEx_ReceiveToIdle_IT(&huart3, pData, sizeof(pData));
  16. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/707632
推荐阅读
相关标签
  

闽ICP备14008679号