GY-25是一款倾斜角度传感器,它通过串口输出航向角、横滚角和俯仰角数据。
GY-25传感器
在使用GY-25之前,要向GY-25发送命令才能使能它开始传输数据。有以下5种命令可选,我用的是第2种命令,自动和连续返回数据:
①0xA5+0x51: 查询模式,直接返回角度值,需每次读取都发送 ;
②0xA5+0x52: 自动模式,直接返回角度值,只需要初始化时发一次 ;
③0xA5+0x53: 自动模式,ASCII 码输出,便于直接电脑串口助手查看 ;
④0xA5+0x54: 校正模式,校正俯仰横滚角 0 度,需要保持水平时候发送 ;
⑤0xA5+0x55: 校正模式,校正航向 0 度,航向任意角度清零。
GY-25传出来的一帧数据包含8个字节。其中,第一个字节固定为0xAA,表示一帧数据的开始。第2、3字节是航向角,第4、5字节是俯仰角,第6、7字节是横滚角,第8个字节固定为0x55代表一帧的结束。
我希望使用STM32F411RE Nucleo开发板的串口1接收GY-25的数据,再通过串口2将数据输出到电脑上的串口助手(STM32F411 Nucleo开发板的已经将串口2虚拟化到ST-LINK的USB接口,电脑上的串口助手可以直接读取串口2发来的数据)。
理论上很简单,就是先给串口1发送0xA5和0x52使GY-25开始传出数据,再通过中断方式接收GY-25从串口1发出来的数据。然后通过串口2将接收到的数据发送到电脑上。
我在STM32CubeMx上已经正确配置了串口参数,也开启了串口1和串口2的中断,实物连线也检查过了。
但是我写的程序从来不会进入中断接收回调函数,同样的,串口助手也没有收到任何数据。我找不出问题在哪里,请大佬帮我谋划一下解决思路。
单片机程序如下:
/* USER CODE BEGIN PV */
uint8_t recBuf[10]; //接收到的一帧数据
uint8_t command1=0xA5;
uint8_t command2=0x52;
/* USER CODE END PV */
/* USER CODE BEGIN 2 */
HAL_UART_Transmit_IT(&huart1,&command1,1); //发送0xA5
HAL_UART_Transmit_IT(&huart1,&command2,1); //发送0x52
HAL_UART_Receive_IT(&huart1,recBuf,10); //开启串口1的接收中断
/* USER CODE END 2 */
while (1)
{
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */
//main函数里什么都没写
}
/* USER CODE END 3 */
/* USER CODE BEGIN 4 */
void HAL_UART_RxCapltCallback(UART_HandleTypeDef *huart) //串口接收中断回调函数
{
if(huart ->Instance == USART1)
{
HAL_UART_Transmit_IT(&huart2,recBuf,10); //通过串口2将接收到的数据发送到电脑的串口助手
HAL_UART_Receive_IT(&huart1,recBuf,10); //开启串口1的接收中断
}
}
/* USER CODE END 4 */
|