STM32使用串口中断接收HWT101的数据

因研究生阶段项目需求,需要采用HWT101给单片机提供角度信息。

HWT101是维特智能公司下的一款角度传感器,它可以通过计算角速度测量绕Z轴旋转的水平方向的偏航角,具有高精度、几乎无漂移、不受磁场干扰的特点。外观展示如下,可以通过IIC或者USART接收角度信息。其外观如下L:

本文通过串口中断的方式来接收角度信息。首先,HWT101不需要外部提供激励,只要给提供3.3V到5V的电压就能一直发送数据,其发送角度信息格式如下:

而我们这里只用到了它的角度信息,故通过串口中断接收信息,并按照其数据格式将角度解析出来即可。首先,对串口2的中断进行配置的代码如下:

void USART2_IRQHandler(void)
{
 if(USART_GetITStatus(USART2, USART_IT_RXNE) != RESET)
  {
		CopeSerial2Data((unsigned char)USART2->DR);//接收数据
		USART_ClearITPendingBit(USART2, USART_IT_RXNE);
  }
	USART_ClearITPendingBit(USART2,USART_IT_ORE);
}	

然后按照数据格式对数据进行处理:

void CopeSerial2Data(unsigned char ucData)
{
	static unsigned char ucRxBuffer[250];
	static unsigned char ucRxCnt = 0;	

	ucRxBuffer[ucRxCnt++]=ucData;	
	if (ucRxBuffer[0]!=0x55) //校验数据头
	{
		ucRxCnt=0;
		return;
	}
	if (ucRxCnt<11) {return;}//判断一帧数据是否接收完成
	else
	{
		switch(ucRxBuffer[1])
		{

			case 0x53:	memcpy(&stcAngle,&ucRxBuffer[2],8);break;//判断是否为角度的数据

		}
		ucRxCnt=0;
	}
}

然后在主函数中将其通过串口1输出即可。

printf("Angle:%.3f %.3f %.3f\r\n",(float)stcAngle.Angle[0]/32768*180,(float)stcAngle.Angle[1]/32768*180,(float)stcAngle.Angle[2]/32768*180);
//按照说明将其转化为角度输出

下面是完成的代码链接,有需要的可以自取。

(56条消息) HWT101-STM32F407角度接收-嵌入式文档类资源-CSDN文库icon-default.png?t=M1L8https://download.csdn.net/download/weixin_45304085/82931590

  • 3
    点赞
  • 50
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

有个苏

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值