STM32G431RBT6读取jy61p数据
本贴记录STM32G431RBT6读取jy61p数据的代码
一、jy61p介绍
以下内容来自手册:
1.产品概述
2.性能参数
3.引脚说明
4.串口接收数据格式
二.读取数据
1.通过上位机设置jy61p输出参数。
打开自带上位机->配置,我设置的参数如下:
2.写程序
笔者采用STM32TUBEMX+keil5 HAL库的开发方式来实现。
***usart1用于和上位机串口助手通信,usart2和jy61p串口通信。***
主要代码:
(1)定义串口结构体成员有:发送标志位,发送缓存区,接收缓存区。
struct USART
{
uint8_t Sign;
char TX[100];
char RX[100];
};
extern struct USART UART1,UART2;
(2)打开接收中断,空闲中断,usart2从jy61p处获取原始数据
__HAL_UART_ENABLE_IT(&huart2,UART_IT_RXNE);
__HAL_UART_ENABLE_IT(&huart2,UART_IT_IDLE);
void USART2_IRQHandler(void)
{
/* USER CODE BEGIN USART2_IRQn 0 */
static uint8_t rx_p=0;
uint8_t temp;
/* USER CODE END USART2_IRQn 0 */
HAL_UART_IRQHandler(&huart2);
/* USER CODE BEGIN USART2_IRQn 1 */
if(__HAL_UART_GET_FLAG(&huart2,UART_FLAG_RXNE))
{
HAL_UART_Receive(&huart2,&temp,1,255);
UART2.RX[rx_p++]=temp;
__HAL_UART_CLEAR_FLAG(&huart2,UART_FLAG_RXNE);
}
if(__HAL_UART_GET_FLAG(&huart2,UART_FLAG_IDLE))
{
UART2.RX[rx_p++]='\0';
rx_p=0;
UART2.Sign=1;
__HAL_UART_CLEAR_IDLEFLAG(&huart2);
}
/* USER CODE END USART2_IRQn 1 */
}
(3)在jy61p.h和jy61p.c文件里面解算原始数据,获取角速度和姿态角
jy61p.h
#ifndef _jy61p_h
#define _jy61p_h
#include "main.h"
#include <string.h>
#include <stdio.h>
extern double Ax,Ay,Az;
extern double Roll,Pitch,Yaw;
void Gy61p_GetValue(void);
#endif
jy61p.c
#include "jy61p.h"
double Ax,Ay,Az;
double Roll,Pitch,Yaw;
void Gy61p_GetValue(void)
{
if(UART2.Sign==1)
{
UART2.Sign=0;
if(UART2.RX[0]==0x55&&UART2.RX[1]==0x51&&UART2.RX[11]==0x55&&UART2.RX[12]==0x53)
{
Ax=((short)(UART2.RX[3]<<8)|UART2.RX[2])/32768.0*16;
Ay=((short)(UART2.RX[5]<<8)|UART2.RX[4])/32768.0*16;
Az=((short)(UART2.RX[7]<<8)|UART2.RX[6])/32768.0*16;
Roll=((short)(UART2.RX[14]<<8)|UART2.RX[13])/32768.0*180;
Pitch=((short)(UART2.RX[16]<<8)|UART2.RX[15])/32768.0*180;
Yaw=((short)(UART2.RX[18]<<8)|UART2.RX[17])/32768.0*180;
sprintf(UART1.TX,"Ax:%lf,Ay:%lf,Az:%lf\r\nRoll:%lf,Pitch:%lf,Yaw:%lf\r\n",Ax,Ay,Az,Roll,Pitch,Yaw);
UART1.Sign=1;
}
strcpy(UART2.RX,"");
}
}
(4)在主程序里面循坏打印
while (1)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
Gy61p_GetValue();
if(UART1.Sign==1)
{
UART1.Sign=0;
HAL_UART_Transmit(&huart1,(uint8_t*)UART1.TX,strlen(UART1.TX),255);
}
}
三、最终效果
作者:学不懂的李小米