Mikrokopter MK 代码分析2-main分析

来源:互联网 发布:百度网盘登陆网络异常 编辑:程序博客网 时间:2024/05/08 09:45

下面分析Main()主函数过程,分析按照执行顺序依次进行。

{

cli(); 关闭总中断

检测飞控板版本

设置LED相应管脚

关闭看门狗

四通道杆量置零

TIMER0初始化,用于产生控制气压高度计偏置电压的pwm信号,控制蜂鸣器鸣叫以 及电机更新频率。

TIMER2初始化,用于向4017芯片输出pwm信号,从而将1pwm转换成多路舵机控 制信号。

UART0初始化MK主串口,负责与上位机的信息交互。

RC_INIT();设置ppm信号输入引脚,设置TIMER1的输入捕获功能以解码ppm信号。

ADC_INIT();初始化AD采样,采样信息包括三轴加速度,三轴角速度,气压高度,电 池电量。

I2C_INIT();I2C总线初始化,配置I2C以控制电机。

sei()使能全局中断。

PARAMSET_INIT();设置参数,将参数读入内存中的ParamSet

检查加速度计是否校准。

检查是否开启高度控制,若开启则校准高度计偏置。

SetNeutral();  //Neutral Reading

While(1)

{

UpdateMotor标志是否更新电机状态

{ MotorControl();

SendMotorData(); }

PcAccess标志是否有上位机请求信息

I2cTimeout标志I2C是否超时需报错

SIO_DEBUG标志是否在串口调试

{ TransmitTxData();

ProcessRxData(); }

检测电池电量。

}

}

主函数中的关键过程:

void MotorControl(void) 通过控制率确定电机控制量

void SendMotorData(void) 发送控制量给电机

void TransmitTxData(void) 负责根据串口接收的指令要求发送相应数据

void ProcessRxData(void) 处理串口接收到的数据,给各种事件标志置位。