#include "imu948.h" extern _GPSData gps_data; extern TX_QUEUE ble_tx_queue; extern uint8_t rx_byte; extern TX_EVENT_FLAGS_GROUP sensor_events; void imu600_init(void) { HAL_UART_Receive_IT(&huart3,&rx_byte,1); HAL_Delay(6000); //------- 唤醒传感器,并配置好传感器工作参数,然后开启主动上报----- Cmd_03(); //唤醒传感器 HAL_Delay(500); /** * 设置设备参数 * @param accStill 惯导-静止状态加速度阀值 单位dm/s? * @param stillToZero 惯导-静止归零速度(单位cm/s) 0:不归零 255:立即归零 * @param moveToZero 惯导-动态归零速度(单位cm/s) 0:不归零 * @param isCompassOn 1=需开启磁场 0=需关闭磁场 * @param barometerFilter 气压计的滤波等级[取值0-3],数值越大越平稳但实时性越差 * @param reportHz 数据主动上报的传输帧率[取值0-250HZ], 0表示0.5HZ * @param gyroFilter 陀螺仪滤波系数[取值0-2],数值越大越平稳但实时性越差 * @param accFilter 加速计滤波系数[取值0-4],数值越大越平稳但实时性越差 * @param compassFilter 磁力计滤波系数[取值0-9],数值越大越平稳但实时性越差 * @param Cmd_ReportTag 功能订阅标识 */ Cmd_12(5, 255, 0, 0, 3, 2, 2, 4, 9, 0xFFF);// 2 设置设备参数(内容1) 只订阅欧拉角 HAL_Delay(500); Cmd_19();// 3 开启数据主动上报 这里我就不进行更改了 } //void IM948_Init(void) //{ // HAL_UART_Receive_IT(&huart3, &rx_byte, 1); // // 等模块上电 // tx_thread_sleep( TX_TIMER_TICKS_PER_SECOND * 5 ); // Cmd_03(); // 唤醒 // tx_thread_sleep( TX_TIMER_TICKS_PER_SECOND / 10 ); // // 只订阅欧拉角 // Cmd_12( // 5, 255, 0, // 0, 3, 5, // 2, 2, 4, // 0x0040 // 只要欧拉角 // ); // tx_thread_sleep( TX_TIMER_TICKS_PER_SECOND / 10 ); // Cmd_19(); // 开启主动上报 //} extern TX_QUEUE im948_uart_rx_queue; /*** 此文件 以IMU.c作为底层代码 Base 现在编写应用层程序 ***/ void imu_angle_ble_task_entry(ULONG thread_input) { ULONG rx_data; // 初始化模块 // IM948_Init(); // HCBle_SendData("halo"); while(1) { // 阻塞等队列里有串口接收 if (tx_queue_receive(&im948_uart_rx_queue, &rx_data, TX_WAIT_FOREVER) == TX_SUCCESS) { Cmd_GetPkt( (uint8_t)rx_data ); } // 看是否有新包 if (isNewData) { isNewData = 0; float angle = AngleZ; HCBle_SendData("Z:%.2f\r\n",AngleZ); // 这里用angle做盲杖朝向判断 // 例如: if(angle > 30.0f) { // 提醒用户 } } } } // 先设置好接收函数 void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart) { if(huart->Instance == USART3) { // HCBle_SendData("RX USART3: 0x%02X (%c)\r\n", rx_byte, rx_byte); // Fifo_in(rx_byte); ULONG rx_data = rx_byte; tx_queue_send(&im948_uart_rx_queue, &rx_data, TX_NO_WAIT); // tx_event_flags_set(&sensor_events, EVENT_IMU_DATA_READY, TX_OR); //重新启动接收中断,以便继续接收数据 HAL_UART_Receive_IT(huart,&rx_byte,1); } }