STM32CubeMX配置GY-25角度传感器串口读取和解析

最近用CubeMX配置串口直接接收GY-25/pu6050角度传感器的数值,分享一下。

此次硬件采用STM32F103ZET6。其他类型芯片配置类似,都可以通用。

1、查看传感器手册。

        (1)其串口通信。115200bps;无校验位;8位数据位;1的停止位。

        (2)串口发送的数据格式:

 

        (3)发送的命令

 2、配置CubeMX

        基础的配置这里就不赘述,主要截图了串口的配置,和普通串口通信配置相同。我这里配置了UART5。

 开启中断

 3、软件上

        (1)定义串口接收的缓冲、数据接收和三个角度等。

#define USART_REC_LEN 200

uint8_t		Res;
uint8_t 	UART5_RX_BUF[USART_REC_LEN];    //接收缓冲,最大USART_REC_LEN个字节.(一般给200,接收数据量大就增加)
uint16_t    UART5_RX_STA;       			 	//接收状态标记,可根据不同的串口改名字
float       YAW=0,PITCH=0,ROLL=0;                 
int16_t     Data[3];                            //数据暂时存储

        (2)在main函数或任务中开启串口接收,向传感器发送命令,这里以自动模式举例。

HAL_UART_Receive_IT(&huart5, &Res, 1);              //开启接收

uint8_t    command[2]={0xa5,0x52};                     //定义命令 根据手册,这里是自动模式
HAL_UART_Transmit_IT(&huart5,(uint8_t *)command,2); //发送命令 2是两个数据位的意思

         (3)命令发送过后,传感器就会开始发送数据。

        我们定义串口中断回调函数,并在里面编写中断处理函数。因为数据量不大,我直接将数据处理写在这里了。

        注意:因为时间比较急,这里的接收处理函数肯定有bug,不过能用,如果有大佬改一下就更好了,同时我也并未启用DMA。现在这个程序就是两个字:能用。

void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
    /* 判断是哪个串口触发的中断 */
    if(huart ->Instance == UART5)
    {
				if((UART5_RX_STA&0x8000)==0)//接收未完成
				{
					//读取接收到的数据
					if(Res==0x0D)
					{
						UART5_RX_STA|=0x8000;
						HAL_UART_Receive_IT(&huart5, &Res, 1);
					}
					else
					{
						UART5_RX_BUF[UART5_RX_STA&0X3FFF]=Res ;
						UART5_RX_STA++;
						if(UART5_RX_STA>(USART_REC_LEN-1))
							UART5_RX_STA=0;
					}		 
				}
                if(!(UART5_RX_BUF[0]==0xaa))
                {
                    UART5_RX_STA=0;
                }
                if(UART5_RX_STA>=8)
                {
                    if(UART5_RX_BUF[7]==0x55&&UART5_RX_BUF[0]==0xaa)
                    {
                        Data[0]=(UART5_RX_BUF[1]<<8|UART5_RX_BUF[2]);//数据暂存
                        Data[1]=(UART5_RX_BUF[3]<<8|UART5_RX_BUF[4]);
                        Data[2]=(UART5_RX_BUF[5]<<8|UART5_RX_BUF[6]);
                        YAW=(float)Data[0]/100;                      //数据除100
                        PITCH=(float)Data[1]/100;
                        ROLL=(float)Data[2]/100;
                    }
           
                    UART5_RX_STA=0;
                    UART5_RX_BUF[0]=0;
                }
				HAL_UART_Receive_IT(huart,&Res,1);
    }
    
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值