本资源提供了一个针对STM32F103微控制器与MPU6500六轴传感器组合的驱动程序,基于RTOS操作系统设计并已完成调试,方便用户直接集成至项目中。
```c
#include sys.h
#include delay.h
#include usart.h
#include led.h
#include timer.h
#include FreeRTOS.h
#include task.h
#include debug_cmdshell.h
#include stabilizer.h
//任务优先级
#define START_TASK_PRIO 1
//任务堆栈大小
#define START_STK_SIZE 128
//任务句柄
TaskHandle_t StartTask_Handler;
//任务函数
void start_task(void *pvParameters);
//任务优先级
#define TASK2_TASK_PRIO 3
//任务堆栈大小
#define TASK2_STK_SIZE 512
//任务句柄
TaskHandle_t Task2Task_Handler;
//任务函数
void task2_task(void *pvParameters);
int main(void)
{
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4); //设置系统中断优先级分组4
delay_init(); //延时函数初始化
uart_init(115200); //初始化串口
LED_Init(); //初始化LED
stabilizerInit(); //创建开始任务
xTaskCreate((TaskFunction_t )start_task, //任务函数
(const char* )start_task, //任务名称
(uint16_t )START_STK_SIZE, //任务堆栈大小
(void* )NULL, //传递给任务函数的参数
(UBaseType_t )START_TASK_PRIO, //任务优先级
(TaskHandle_t* )&StartTask_Handler); //任务句柄
vTaskStartScheduler(); //开启任务调度
}
//开始任务任务函数
void start_task(void *pvParameters)
{
taskENTER_CRITICAL(); //进入临界区
xTaskCreate((TaskFunction_t )task2_task,
(const char* )task2_task,
(uint16_t )TASK2_STK_SIZE,
(void* )NULL,
(UBaseType_t )TASK2_TASK_PRIO,
(TaskHandle_t* )&Task2Task_Handler);
xTaskCreate(stabilizerTask, STABILIZER, 450, NULL, 5, NULL); /*创建姿态任务*/
vTaskDelete(StartTask_Handler); //删除开始任务
taskEXIT_CRITICAL(); //退出临界区
}
//task2任务函数
void task2_task(void *pvParameters)
{
u16 len;
while(1) {
if(USART_RX_STA&0x8000) {
len=USART_RX_STA&0x3fff;
debugcmd_process(len);
}
}
}
```