如何免费建立一个网站免费自助建站系统下载
1. PH47框架逻辑层全局引用对象
|   全局引用  |   功能简介  |   快速访问  | 
|   bus  |   数据总线系统功能实现,如对总线数据项读写操作等  |   数据总线bus  | 
|   drv  |   驱动层功能实现,如飞控板相关的各种硬件传感器设备进行操作等  |   驱动层drv  | 
|   mcu  |   对mcu的片内接口及设备进行操作  |   驱动层mcu  | 
|   frm  |   框架层基本功能实现  |   框架层frm  | 
|   frm.led  |   对飞控板状态指示led进行操作  | |
|   frm.mutipilot  |   多飞控板协作功能实现  | |
|   core  |   框架层高级功能实现  | |
|   core.mavlink  |   mavlink 协议对地遥测通讯功能实现  |   mavlink  | 
|   core.airlink  |   mavlink协议空对空遥测通讯功能实现  | |
|   core.para  |   对机载参数进行读写及存储等操作  |   机载参数系统  | 
|   core.wp  |   对导航航点进行读写及修改操作  | |
|   algo  |   算法层功能实现  | |
|   app  |   应用层功能实现  |   应用层开发  | 
2. PH47框架全局函数及变量
全局状态变量操作相关函数
|   功能描述  |   对应函数  |   快速访问  | 
|   全局状态变量状态操作  |   gSetStatus() gGetStatus()  |   全局状态变量  | 
|   设置全局错误、警告  |   gSetGlobalState()  | |
|   设置飞控板状态GPIO 测试Pin  |   gTrigleTestPin()  | 
全局时间相关功能函数
|   功能描述  |   对应函数  |   快速访问  | 
|   获取当前ms时间  |   gGetMills()  |   时间相关  | 
|   获取当前ms时间,精确到us  |   gGetMills_f()  | |
|   获取前一时刻到当前的ms时间间隔  |   gGetTmUsage_ms()  |   获取时间间隔  | 
|   获取前一时刻到当前的us时间间隔  |   gGetTmUsage_us()  | |
|   ms 级别延时,非阻塞,但依赖于FreeRtos启动  |   osDelay()  | |
|   ms 级别延时,阻塞,不依赖FreeRtos  |   HAL_Delay()  | |
|   us 级别延时,阻塞  |   gDelay_us()  | 
全局调试及信息显示相关函数
|   功能描述  |   对应函数  |   快速访问  | 
|   调试信息输出宏(队列方式,依赖于框架启动完成)  |   TRACE()  |   调试输出  | 
|   真值确认宏  |   ASSERT()  | |
|   调试串口字符串输出(中断方式)  |   gPrintf()  | |
|   调试串口以及CSS状态窗口信息输出  |   gShowInfo()  | |
|   格式化字符串生成  |   gFormat()  | 
3. 数据总线操作(通过bus引用)
驱动层常用功能函数(通过drv或mcu引用)
|   功能描述  |   对应函数  |   快速访问  | 
|   设置总线数据项的数值  |   Set()  |   数据总线  | 
|   设置当前总线数据为安全总线  |   SetSafe()  | |
|   获取总线数据项数值  |   Get()  | |
|   获取总线数值的引用  |   GetRef()  | |
|   获取总线数据项最近一次被 设置时刻的时间戳(ms)  |   GetTimeStamp_ms() GetTmStampDec_us()  | |
|   获取总线数据项最近两次被设置时刻间的时间间隔  |   GetDt2Prev_us() GetDt2Prev_ms()  | 
驱动层功能函数大多数为MCU接口驱动,一般用于飞控板硬件层面驱动程序的开发。目前代码框架已支持的传感器硬件输出数据均已纳入到数据总线体系,用户可直接使用。初级开发者无需过多关心。
但是驱动层也提供了少量功能函数供各层级的开发者使用,最常用的是Pwm输入输出相关函数。
Pwm操作函数(通过drv._pPwm引用)
|   功能描述  |   对应函数  |   快速访问  | 
|   获取当前输入通道的Pwm脉冲宽度(us)  |   GetPwmIn()  | |
|   设置当前Pwm输出通道的 Pmw脉冲宽度(us)  |   SetPwmWidth();  | |
|   使能当前Pwm输出控制  |   EnablePwmOut()  | 
Stm32 ADC 电压测量函数(全局函数)
|   功能描述  |   对应函数  |   快速访问  | 
|   获取当前控制板电压测量通道的电压数值 (测量范围0-3.3v, 单位:0.01v。测量电压必须在控制板外进行分压处理,否则会烧毁控制板!)  |   gGetBoardVol()  | |
|   获取当前电池电压测量通道的电压数值 (测量范围0-3.3v, 单位:0.01v。测量电压必须在控制板外进行分压处理,否则会烧毁控制板!)  |   gGetBatteryVol()  | 
驱动层串口常用操作(通过指针drv._pUsartXxx引用)
|   功能描述  |   对应函数  |   快速访问  | 
|   发送数据环形缓冲区对象,FIFO  |   CPhSerial._RingBuf_Snd  | |
|   接收数据环形缓冲区对象,FIFO  |   CPhSerial._RingBuf_Rev  | |
|   设置串口波特率  |   SetBaudRate()  | |
|   以中断方式将字符串写入串口发送环形缓冲区并立即发送。  |   WriteData_INT()  | |
|   以DMA方式将直接发送字符串(不写入发送环形缓冲区)。  |   WriteData_DMA()  | |
|   将一个字符加入串口发送环形缓冲区(但不发送)  |   Add2SndBuf()  | |
|   将字符串加入串口发送环形缓冲区(但不发送)  |   Add2SndBuf_DMA()  | |
|   以中断方式发送当前环形发送缓冲区中的数据  |   StartSend_IT()  | |
|   以DMA方式发送当前环形发送缓冲区中的数据  |   StartSend_DMA()  | |
|   获取当前接收环形缓冲区当中的数据字节数  |   GetRevCount()  | |
|   读取当前接收环形缓冲区当中的一个字节数据,读取成功后将该直接数据移出环形缓冲区  |   GetRevByte()  | |
|   判断当前串口DMA是否忙碌  |   IsDmaBusy()  | 
驱动层SPI接口常用操作(通过指针mcu. _pSpiXxx引用)
|   功能描述  |   对应函数  |   快速访问  | 
|   设置当前spi接口速率  |   SetSpeed()  | |
|   写入1字节数据到spi  |   WriteByte()  | |
|   从spi接口读取1字节数据  |   ReadByte()  | |
|   写入多个字节数据到spi  |   SpiTran()  | |
|   从spi接口读取多个字节数据  |   SpiReceive()  | |
|   同时向spi接口中写入并读取多个字节数据  |   SpiTranRev()  | 
驱动层I2C接口常用操作(通过指针mcu._pI2C_Xxx引用)
|   功能描述  |   对应函数  |   快速访问  | 
|   ST, 产生 IIC 起始信号  |   IIC_Start()  | |
|   SP, 产生 IIC 停止信号  |   IIC_Stop()  | |
|   等待应答信号到来, 返回值:应答等待时间(us)  |   IIC_Wait_Ack()  | |
|   产生ACK应答  |   IIC_Ack(void)  | |
|   不产生ACK应答  |   IIC_Nack()  | |
|   向I2C写入一个字节, 并返回从机有无应答  |   IIC_Send_Byte()  | |
|   从I2C读取一个字节  |   IIC_Read_Byte()  | |
|   读取指定ID的I2C设备上指定地址的1字节数据  |   ReadOneByte()  | |
|   向指定ID的I2C设备上指定地址写入1字节数据  |   WriteOneByte()  | |
|   读取指定ID的I2C设备上从指定地址开始的多个字节数据  |   ReadBytes()  | |
|   向指定ID的I2C设备上从指定地址写入多个字节数据  |   WriteBytes()  | 
4. 框架层常用功能函数(通过frm引用)
框架层基本功能函数(通过frm引用)
|   功能描述  |   对应函数  |   快速访问  | 
|   读取全局状态变量数值  |   SetStatus()  |   框架层函数  | 
|   置全局状态变量数值  |   GetStatus()  | |
|   初始化Post 消息  |   InitPostMsg()  | |
|   以Post方式发出一个消息  |   PostMsg()  | |
|   检查是否有特定消息翼Post方式发出  |   CheckPostMsg()  | |
|   对以Send方式发出的消息进行处理(回调函数)  |   HandleMessage()  | |
|   当前是否工作于HIL模式  |   IsHilSimulateMode()  | |
|   当前是否工作于真实传感器模式  |   IsSensorMode()  | |
|   设置当前飞行模式  |   SetFlightMode()  | |
|   对当前飞控实施指令控制  |   FlightControl_Ins()  | |
|   处理来自GCS的上行mavlink控制命令 (回调函数)  |   CommonMsgProc_Gcs()  | |
|   处理来自其他飞控板的mavlink控制命令 (回调函数)  |   CommonMsgProc_Air()  | |
|   向GCS下行发送mavlink数据帧(回调函数)  |   MavMsgSnd2GCS_Slow()  | |
|   所有参数上传完毕事件响应函数(回调函数)  |   Event_ParaUpComplete()  | |
|   设置对GCS下行mavlink数据帧的发送速率  |   SetMsgRate_Gcs()  | 
框架层基本子引用:状态指示LED控制(通过frm.led引用)
|   功能描述  |   对应函数  |   快速访问  | 
|   翻转闪烁指示 LED  |   Led_Toggle()  | |
|   以闪烁编码方式进行状态显示(非阻塞)  |   Led_ShowStatus()  | 
框架层基本子引用:多飞控板协作(通过frm. mutipilot引用)
|   功能描述  |   对应函数  |   快速访问  | 
|   改变当前调试串口(多功能串口)的用途  |   ChangeConsoleMode()  | |
|   ChangeFlightCtrlRights()  | ||
|   MavMsgSnd2Airlink()  | ||
|   DP_MasterSnd2Slaver()  | ||
|   DP_SlaverSnd2Master()  | ||
|   DP S_ParseMasterMsg()  | ||
|   DPM_ParseSlaverMsg()  | 
5. 框架层扩展功能及函数(通过core引用)
框架层重要成员变量(通过core引用)
|   功能描述  |   变 量  |   快速访问  | 
|   PH47框架初始化全部完成标志  |   blSysInitCompleted  | 
框架层扩展功能函数(通过core引用)
|   功能描述  |   对应函数  |   快速访问  | 
|   读取全局状态变量数值  |   SetStatus()  | |
|   置全局状态变量数值  |   GetStatus()  | |
|   检查是否有特定消息翼Post方式发出  |   CheckPostMsg()  | |
|   当前是否工作于真实传感器模式  |   IsSensorMode()  | |
|   获取当前GPS精度状态  |   GetGpsStatus()  | |
|   设置当前GPS精度状态  |   SetGpsStatus()  | |
|   设置全局错误状态代码  |   SetGlobalState()  | |
|   设置全局警告状态代码  |   SetGlobalError()  | |
|   发送用户自定义mavlink数据帧  |   SendUserDefData()  | 
框架层扩展子应用:对地遥测通讯(通过core.mavlink引用)
由于整个mavlink通讯系统已经进行了完善的封装,故初中级用户在二次开发过程中涉及到遥测通讯功能函数很少,主要集中在下行指令或状态发送方面。在其它方面,用户只需要专注于数据总线操作,从总线中读取或写入数据即可。
对于高级开发二次用户,关于遥测系统功能函数具体可参见代码实现文件\DevStudio\Frame\Core\MavlinkWrap.h。
|   功能描述  |   对应函数  |   快速访问  | 
|   向GCS下行发送字符串信息  |   AddMsg_StatusText()  |   Mavlink  | 
|   向GCS下行发送带7个参数的长控制命令  |   AddMsg_Command()  | |
|   向GCS下行发送带2个参数的短控制命令  |   AddMsg_UserDefData()  | 
框架层扩展子应用:机载参数系统(通过core.para引用)
与遥测系统类似,机载参数系统的读取、存储、更新及传送机制也进行了完善的封装,用户只需在需要时调用下述函数读取或写入参数即可,剩下所有工作由框架负责完成。
|   功能描述  |   对应函数  |   快速访问  | 
|   获取机载参数数值  |   Get()  |   机载参数  | 
|   设置机载参数数值  |   Set()  | 
框架层扩展子应用:航点存储系统(通过core.wp引用)
|   功能描述  |   对应函数  |   快速访问  | 
|   读取航点数据  |   ReadWP()  | |
|   写入航点数据  |   WriteWP()  | |
|   获取航点数量  |   GetWpCounts()  | |
|   读取航点的位置信息  |   ReadWpLoc()  | 
6. 算法层功能(通过algo引用)
PH47代码框架层提供给二次开发用户的功能函数很少。在算法层当中集成了飞行及导航控制的大量功能实现,这些功能通过框架的架构组成了飞行及导航控制功能的具体实现。二次开发用户可使用算法层各模块的现有功能函数,但并不推荐。
算法层更重要的意义在于为用户进行二次开发,尤其是算法逻辑的二次开发搭建起了逻辑清晰,功能完善的设计及运行框架。用户在此框架下,可集中注意力在算法逻辑自身的开发上,而无需过多分心于运行逻辑的设计实现。
传感器数据处理模块指针(通过algo引用)
|   功能描述  |   功能模块指针  |   对应抽象类  | 
|   主IMU类对象指针  |   _pSensor_IMU  |   CSensor_Imu_Port  | 
|   扩展IMU类对象指针  |   _pSensor_IMU_Ext  |   CSensor_Imu_Port  | 
|   磁强传感器类对象指针  |   _pSensor_Mag  |   CSensor_Mag_Port  | 
|   气压传感器类对象指针  |   _pSensor_Baro  |   CSensor_Baro_Port  | 
|   空速传感器类对象指针  |   _pSensor_Airspeed  |   CSensor_Airspeed_Port  | 
|   Pwm输入处理类对象指针  |   _pSensor_RcCtrl  |   CSensor_RC_Port  | 
|   Tof及光流处理类对象指针  |   _pSensor_Tof  |   CSensor_UsartParse_Port  | 
控制功能模块指针(通过algo引用)
|   功能描述  |   功能模块指针  |   对应抽象类  | 
|   输入数据控制器模块  |   _pCtrlDataProc  |   CCtrlDateProcess_Port  | 
|   姿态解算模块  |   _pAttitudeCore  |   CAttitudeCore_Port  | 
|   姿态控制器模块  |   _pController_Atti  |   CController_Attitude_Port  | 
|   高度/速度控制器模块  |   _pController_HgtSpd  |   CController_HeightSpeed_Port  | 
|   位置/速度估算器模块  |   _pPosVelCore  |   CPosVelCore_Port  | 
|   位置控制器模块  |   _pController_Position  |   CController_Position_Port  | 
|   Pwm输出控制器模块  |   _pServoOutCtrl  |   CServoOutCtrl_Port  | 
7. 应用层功能函数(通过app引用)
与算法层类似,应用层也为用户进行二次开发搭建了完善的框架。同时,应用层提供了多个回调函数(空函数)供用户加入自己的代码实现。
|   功能描述  |   回调函数  | |
|   PH47框架启动完成后调用,完成用户功能代码初始化工作  |   Init()  | |
|   快速线程回调函数,被调用频率在400-500hz之间 (基于Stm32F411的BBP飞控板)  |   FastThread()  | |
|   正常线程回调函数,被调用频率固定为250hz  |   NormalThread_250Hz()  | |
|   慢速线程回调函数,被调用频率固定为50hz  |   SlowThread_50Hz()  | |
|   对用户自定义调试串口控制命令的处理函数  |   HandleConsoleCmd()  | |
|   对来自于GCS的用户自定义上行控制命令处理函数  |   HandleRevMavlinkMsg()  | |
|   飞行及导航控制实现函数。250hz速率调用,调用优先级高于NormalThread_250Hz()函数  |   FlightControl_FixWing()  | |
|   起飞前检查回调函数  |   PreTakeOffCheck_FixWing()  | |
|   飞行模式切换前回调函数  |   PreSwitchFlightMode()  | 
更多内容见CSDN博客专栏:无人机飞控
https://blog.csdn.net/ss15/category_9690939.html?spm=1001.2014.3001.5482相关资源:PH47: PH47运动控制代码框架.
https://gitee.com/ss15/ph47
