![](https://img-blog.csdnimg.cn/2020110511080876.jpg?x-oss-process=image/resize,m_fixed,h_224,w_224)
MiniFly开源四轴代码分析
文章平均质量分 77
正点原子的minifly1.1版本,飞控系统采用的是FreeRTOS实时操作系统,代码里比较庞大,尤其是stablizerTask,为理清各任务间的关系,有代码注释还通过Microsoft Visio将各任务之间通信使用到的一些消息队列,和各任务自身使用的结构体,联合体等来实现,全部画出关系流程图
一剃解千愁
已关闭CSDN消息,有需求请联系:2920338753@qq.com
展开
-
MiniFly V1.1开源四轴驱动代码分析一:uart_syslink.c
看硬件连接可知:NFR51822 STM32411Cp0.00 NRF_RX——————>USART2_TX PA2p0.02 NRF_Flow_CTRL——> EXTI_Line0 PA0p0.03 NRF_TX——————>USART2_RX PA3串口初始化:初始化的一般步骤都是1,使能时钟使能GPIO时钟,这里用到的GPIO 为 PA2, PA3外设(复用功能)时钟,复用TX原创 2020-11-25 12:19:08 · 878 阅读 · 0 评论 -
MiniFly Firmware V1.1开源四轴代码分析六:stabilizer.c
stabilizerTask任务循环while(1)里有以下几个函数while(1) { vTaskDelayUntil(&lastWakeTime, MAIN_LOOP_DT); /*1ms周期延时*/ sensorsAcquire(&sensorData, tick); /*获取9轴和气压数据*///将数据存在结构体sensorData stateEstimator(&state, &sensorData, tick); /*四元数 欧拉原创 2020-10-23 14:13:10 · 1002 阅读 · 6 评论 -
MiniFly V1.1开源四轴驱动代码分析八:旋转矩阵、控制分配矩阵等分析介绍
正点原子minifly的旋转矩阵,旋转方向,控制分配矩阵等介绍原创 2022-10-02 17:26:46 · 918 阅读 · 1 评论 -
MiniFly Firmware V1.1开源四轴代码分析七:系统时钟
整个系统时钟是怎么样的?答案:怎么来的?查阅了一下手册,感觉整个时钟配置过程还是挺复杂的,要想配置好,然后能直观的显示各外设使用的时钟就好了,stm32CubeMX就是一个很好的工具。如何根据代码在stm32CubeMX配置时钟?1,打开USER文件夹下的systen_stm32f4xx.c,都是通过预编译来实现代码通用的,需要哪就定义哪所以会编译出一套代码,用不上的代码处于灰色,不用理会,关注的是高亮的代码找到:PLL_M 8PLL_Q 4PLL_N原创 2021-05-27 16:55:51 · 313 阅读 · 0 评论 -
正点原子MiniFly遥控器V1.1—通信链路
如果遥控器连接了上位机, 遥控器会将接收到的应答数据包先解析, 解析完成后转发给上位机。同样, 上位机发下来的数据遥控器也会先解析再转发给四轴。Radiolink 链路中:遥控器定周期发送控制命令, 四轴定周期返回姿态和其他数据。Usblink 链路中:如果四轴连接了上位机, 四轴会定周期返回姿态和其他数据给上位机;如果遥控器连接了上位机, 遥控器将四轴返回的数据转发给上位机。...原创 2020-11-04 12:05:10 · 1419 阅读 · 2 评论 -
正点原子Minifly遥控器V1.1—代码分析四:radiolink.c、usblink.c、atpk.c三个文件之间的关系
先看radiolink.c函数和队列之间的数据流向:radiolinkTask:主要功能是发送 ATKP 数据包给四轴, 并接收四轴返回的应答包。实现过程:在radiolink.c定义两个消息队列,每个消息就是一个ATKP包,实际就是atkp_t结构体,分别为txQueue队列和rxQueue队列,发送和接收都是针对四轴来说**txQueue队列:**存放要发送给四轴的信息,也就是如果想通过遥控器把数据发送给四轴,只需通过radiolinkSendPacket函数,将ATKP包发送到这个队列。比如原创 2020-11-06 21:21:36 · 1117 阅读 · 0 评论 -
正点原子Minifly遥控器V1.1—代码分析五:adc.c,joystick.c,joystick.h
adc.c相关内容看这篇的后面部分:stm32f103多路ADC检测电压看完后,发现ADC均值滤波函数,ADC_Filter(u16* adc_val)未被调用过,getAdcValue(u8 axis)用的都是这个函数,向这个函数传入枚举类型的参数,得到对于通道的ADC。全局查找,发现其被此函数调用,传入的是结构体/*获取摇杆ADC值*/void getFlyDataADCValue(joystickFlyui16_t *adcValue){ adcValue->thrust = g原创 2020-12-06 22:04:19 · 1107 阅读 · 0 评论 -
NRF51822学习参考资料
NRF51822芯片简介和软硬件开发简介NRF51822——串口学习笔记nRF51822 UART学习原创 2020-12-01 11:45:34 · 360 阅读 · 0 评论 -
MiniFly Firmware V1.1开源四轴代码分析五:pm.c
电源管理任务:通过pmUpdateState()更新电源管理的状态,如果状态有更新则点亮对应的LED,表明已充满电,正在充电,电量不足等信息void pmTask(void *param) /* 电源管理任务 */{ PMStates pmStateOld = battery; u32 tickCount; tickCount = getSysTickCnt(); batteryLowTimeStamp = tickCount; vTaskDelay(500); while(1) {原创 2020-10-23 10:40:05 · 420 阅读 · 0 评论 -
MiniFly Firmware V1.1开源四轴代码分析四:sensors.c
传感器任务void sensorsTask(void *param){ sensorsInit(); /*传感器初始化*/ vTaskDelay(100); sensorsSetupSlaveRead();/*设置传感器从模式读取*/ while (1) { if (pdTRUE == xSemaphoreTake(sensorsDataReady, portMAX_DELAY)) { /*确定数据长度*/ u8 dataLen = (u8) (SENSORS_MPU65原创 2020-10-22 20:50:53 · 572 阅读 · 0 评论 -
MiniFly Firmware V1.1开源四轴代码:F411代码框架
主要任务关系:任务之间通信实现过程:原创 2020-10-21 09:32:40 · 1120 阅读 · 15 评论 -
MiniFly Firmware_F411 通信数据帧ATPK分析
参考资料:3.2 通信协议ATKP通信协议部分主要在 atkp.h 中,ATKP 数据包格式及 msgID 功能字定义代码如下:ATKP帧结构:帧头+MsgID+数据长度(len)+数据(data[0]+data[len-1])+校验和**帧头:**分为上行帧头和下行帧头,**MsgID:**有上行指令和下行指令之分上行指令:下行指令:**数据长度:**最大30个数据,即数组长度最多30,为data[0]+data[1-29],其中data[0]用作区别是控制命令还是控制数据。dat原创 2020-10-19 12:58:40 · 952 阅读 · 0 评论 -
MiniFly Firmware V1.1开源四轴代码分析三:usblink.c
/******************************************************************************** usblinkRxTask: USB 通信接收任务。 该任务主要负责接收上位机发下来(USB 虚拟串口方式) 的数据,然后对数据进行打包和校验, 打包成 ATKP 格式并校验无误后发送到atkpRxAnlTask 的接收队列里。usblinkTxTask: USB 通信发送任务。 该任务主要负责发送 atkpTxTask 发送过来的数据原创 2020-10-18 11:16:55 · 479 阅读 · 0 评论 -
MiniFly Firmware V1.1开源四轴代码分析二:atpk.c
指令格式:帧头(AA+AF)+功能ID+数据长度+数据+校验校验帧头:AA+AF功能ID: 表示该数据的意义,msgID分为 上行指令ID :upmsgID_e ;下行指令ID :downmsgID_e,这是两个枚举变量数据长度:dataLen数据数组:data 最大为30atkpTxTask: ATKP 数据包发送任务。 该任务主要是获取 stabilizerTask 中的传感器数据、姿态数据、电机 PWM 输出数据等数据以定周期发送给 radiolinkTask 和 usblinkTxTask原创 2020-10-17 12:13:54 · 650 阅读 · 0 评论 -
MiniFly Firmware V1.1开源四轴代码分析一:radiolink.c
1,void radiolinkTask(void *param)作用:radiolinkTask接收ATKPPacket包,把包存到rxPacket结构体中2,void radiolinkInit(void)作用:初始化串口,并创建“发送消息队列”,用作发消息给XXX3,static void uartSendPacket(atkp_t *p)作用:把结构体atkp_t,打包ATKPPacket数据,并通过串口DMA发送->uartslkSendDataDmaBlocking(dataSi原创 2020-10-15 22:53:06 · 985 阅读 · 3 评论