GY-25是一款傾斜角度傳感器,它通過串口輸出航向角、橫滾角和俯仰角數據。
20200606155149851.png (388.12 KB, 下載次數: 31)
下載附件
GY-25傳感器
2022-6-27 13:57 上傳
在使用GY-25之前,要向GY-25發(fā)送命令才能使能它開始傳輸數據。有以下5種命令可選,我用的是第2種命令,自動和連續(xù)返回數據:
①0xA5+0x51: 查詢模式,直接返回角度值,需每次讀取都發(fā)送 ;
②0xA5+0x52: 自動模式,直接返回角度值,只需要初始化時發(fā)一次 ;
③0xA5+0x53: 自動模式,ASCII 碼輸出,便于直接電腦串口助手查看 ;
④0xA5+0x54: 校正模式,校正俯仰橫滾角 0 度,需要保持水平時候發(fā)送 ;
⑤0xA5+0x55: 校正模式,校正航向 0 度,航向任意角度清零。
GY-25傳出來的一幀數據包含8個字節(jié)。其中,第一個字節(jié)固定為0xAA,表示一幀數據的開始。第2、3字節(jié)是航向角,第4、5字節(jié)是俯仰角,第6、7字節(jié)是橫滾角,第8個字節(jié)固定為0x55代表一幀的結束。
我希望使用STM32F411RE Nucleo開發(fā)板的串口1接收GY-25的數據,再通過串口2將數據輸出到電腦上的串口助手(STM32F411 Nucleo開發(fā)板的已經將串口2虛擬化到ST-LINK的USB接口,電腦上的串口助手可以直接讀取串口2發(fā)來的數據)。
理論上很簡單,就是先給串口1發(fā)送0xA5和0x52使GY-25開始傳出數據,再通過中斷方式接收GY-25從串口1發(fā)出來的數據。然后通過串口2將接收到的數據發(fā)送到電腦上。
我在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); //發(fā)送0xA5
HAL_UART_Transmit_IT(&huart1,&command2,1); //發(fā)送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將接收到的數據發(fā)送到電腦的串口助手
HAL_UART_Receive_IT(&huart1,recBuf,10); //開啟串口1的接收中斷
}
}
/* USER CODE END 4 */
|