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
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
STM32F103是一款高性能的单片机,具有丰富的外设接口,适用于各种应用场景。要利用STM32F103读取GY-906红外传感器的数据,可以按照以下步骤进行: 1. 连接硬件:将GY-906红外传感器STM32F103单片机相连。GY-906传感器的SCL引脚连接到STM32F103单片机的I2C SCL引脚,SDA引脚连接到STM32F103的I2C SDA引脚。还需要连接GY-906的电源引脚和地引脚到STM32F103的相应引脚。 2. 配置I2C接口:在STM32F103的代码中,需要初始化I2C接口。首先,设置I2C的时钟频率、工作模式和地址模式。然后,使能I2C接口。 3. 通过I2C读取数据:使用STM32F103的I2C库函数,可以读取GY-906传感器的数据。首先,发送启动信号至GY-906传感器,然后发送读取命令,并等待传感器的响应。之后,接收传感器的数据,并进行处理。可以根据GY-906传感器的数据手册,了解数据的解析和处理方法。 4. 处理数据:读取到的数据可以根据需要进行处理。例如,根据传感器测量的温度数据,可以进行温度补偿和校准。还可以将数据进行格式转换,以适应具体的应用场景。 5. 输出数据:将处理过的数据输出,可以通过串口将数据发送到PC端,或者进行显示和记录。 综上所述,通过STM32F103读取GY-906红外传感器的数据的步骤是:连接硬件、配置I2C接口、通过I2C读取数据、处理数据以及输出数据。在实际项目中,还需要根据具体需求进行更深入的开发和优化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值