HandsFree——OpenRE库学习(二)

HandsFree——OpenRE库学习(二)

Board类介绍

Board类对硬件进行抽象,封装了STM32F1和F4的底层配置函数,使得上层功能包的开发变得简洁。
Board类的定义如下:

class Board
{
public:
    float cpu_temperature;
    float cpu_usage;
    float battery_voltage;
    float system_time;   //system working time (unit:us), start after power-on
    uint8_t system_init; //state of system: 0-->not initialize  1-->initialized
    uint16_t cnt_1ms;
    uint16_t cnt_2ms;
    uint16_t cnt_5ms;
    uint16_t cnt_10ms;
    uint16_t cnt_20ms;
    uint16_t cnt_50ms;
    uint16_t cnt_500ms;
    uint32_t chipUniqueID[3];
    uint16_t flashSize;    //Unit: KB

public:
    Board();
    void boardBasicInit(void);
    void boardBasicCall(void);
    /**********************************************************************************************************************/
    void debugPutChar(uint8_t tx_byte_);  //system support functions
    void setLedState(uint8_t led_id, uint8_t operation);
    void setBeepState(uint8_t operation);
    uint8_t getKeyState(uint8_t key_id){return key_state[key_id] ;}
    /**********************************************************************************************************************/
    void motorInterfaceInit(uint8_t motor_id , float motor_pwm_T); //package "PAKG_MOTOR" support functions
    void motorEnable(uint8_t motor_id);
    void motorDisable(uint8_t motor_id);
    float getMotorEncoderCNT(uint8_t motor_id);
    float getMotorCurrent(uint8_t motor_id);
    void motorSetPWM(uint8_t motor_id , int pwm_value);
    /**********************************************************************************************************************/
    void axServoInterfaceInit(void); //package " PAKG_SERVO" support  functions
    void axServoTxModel(void);
    void axServoRxModel(void);
    void axServoSendTxByte(uint8_t tx_byte);
    uint8_t axServoGetRxByte(uint8_t *error);
    /**********************************************************************************************************************/
    void sbusInterfaceInit(void); //package " SBUS_PPM" support  functions
    void ppmInterfaceInit(void);
    /**********************************************************************************************************************/
    void imuI2CInit(void); //package "PAKG_IMU" support  functions
    void imuI2CWriteByte(uint8_t equipment_address , uint8_t reg_address ,
                         uint8_t reg_data , uint8_t fastmode);
    uint8_t imuI2CReadByte(uint8_t equipment_address , uint8_t reg_address , uint8_t fastmode);
    uint8_t imuI2CWriteBuf(uint8_t equipment_address,uint8_t reg_address,
                        uint8_t* pt_char , uint8_t size , uint8_t fastmode);
    uint8_t imuI2CReadBuf(uint8_t equipment_address,uint8_t reg_address,
                       uint8_t * pt_char , uint8_t size , uint8_t fastmode);

    void gpsInterfaceInit(void);
    void gpsSendTxByte(uint8_t tx_byte);
    /**********************************************************************************************************************/
    void eepromI2CInit(void); //package "AT24Cxx" support functions
    void eepromI2CWriteByte(uint8_t equipment_address , uint8_t reg_address ,
                            uint8_t reg_data , uint8_t fastmode);
    uint8_t eepromI2CReadByte(uint8_t equipment_address , uint8_t reg_address , uint8_t fastmode);
    uint8_t eepromI2CWriteBuf(uint8_t equipment_address,uint8_t reg_address,
                           uint8_t* pt_char , uint8_t size , uint8_t fastmode);
    uint8_t eepromI2CReadBuf(uint8_t equipment_address,uint8_t reg_address,
                          uint8_t * pt_char , uint8_t size , uint8_t fastmode);
    /**********************************************************************************************************************/
    //extend interface support functions
    void extendI2CInit(void);   // extend iic interface is using for extend other sensors
    void extendI2CWriteByte(uint8_t equipment_address , uint8_t reg_address ,
                            uint8_t reg_data , uint8_t fastmode);
    uint8_t extendI2CReadByte(uint8_t equipment_address , uint8_t reg_address , uint8_t fastmode);
    uint8_t extendI2CWriteBuf(uint8_t equipment_address,uint8_t reg_address,
                           uint8_t* pt_char , uint8_t size , uint8_t fastmode);
    uint8_t extendI2CReadBuf(uint8_t equipment_address,uint8_t reg_address,
                          uint8_t* pt_char , uint8_t size , uint8_t fastmode);

    //extend spi interface
    //extend can interface
    //extend PWM interface
    //mode=1 high frequency control   ; mode = 2 for  electric modulation
    void pwmInterfaceInit(uint8_t mode , float pwm_t);
    void setPWMValue(uint8_t channel_x , float pwm_value);  //channel_x 1~6
    /**********************************************************************************************************************/\

private:
    float battery_voltage_;
    float battery_voltage_alarm_ ;
    float battery_proportion_ ;
    float temperature_;
    uint16_t beep_alarm_cnt_ ;
    uint16_t board_call_i , board_call_j , board_call_k;
    uint8_t key_state[5];

    void systemMonitoring(void);
    void ledInit(void);
    void keyInit(void);
    void keyStateRenew(void);
    void beepInit(void);

    void debugInterfaceInit(void);
    float getBatteryVoltage(void);
    float getCPUUsage(void);
    float getCPUTemperature(void);
    void getCPUInfo(void);
};

board类的实现文件存放在OpenRE/1_Processor/BoardAbstract文件夹中,有两种板子对应的实现文件分别是control_unit_v1.cpp和control_unit_v2.cpp。

Board类解析

基础功能

void boardBasicInit(void)函数
功能:初始化系统定时器、用于Debug的USART1口、LED、KEY、蜂鸣器的GPIO口、定时器6、ADC。
void boardBasicCall(void)函数
功能:获取当前系统时间,检查CPU温度、电池电压,报警。

系统函数(用于Debug)

void debugPutChar(uint8_t tx_byte_)函数
void setLedState(uint8_t led_id, uint8_t operation)函数
void setBeepState(uint8_t operation)函数
uint8_t getKeyState(uint8_t key_id)函数

电机控制相关函数

void motorInterfaceInit(uint8_t motor_id , float motor_pwm_T)函数
功能:初始化电机输出PWM信号的GPIO口、编码器、PWM输出。
void motorEnable(uint8_t motor_id)函数
void motorDisable(uint8_t motor_id)函数
功能:使能、失能
float getMotorEncoderCNT(uint8_t motor_id)函数
功能:返回对应ID电机的编码器计数值
float getMotorCurrent(uint8_t motor_id)函数
功能:返回对应ID电机的AD采样得到的当前电机的转速值
void motorSetPWM(uint8_t motor_id , int pwm_value)函数
功能:对应电机输出传入的PWM信号

舵机函数

void axServoInterfaceInit(void)函数
void axServoTxModel(void)函数
void axServoRxModel(void)函数
void axServoSendTxByte(uint8_t tx_byte)函数
uint8_t axServoGetRxByte(uint8_t *error)函数
功能:使用的是USART3串口

遥控函数

void sbusInterfaceInit(void)函数
void ppmInterfaceInit(void)函数
功能:使用的是USART2串口,可用于接收PPM和SBUS信号

IMU相关函数

void imuI2CInit(void)函数
功能:初始化I2C设备,用于接收IMU的数据,I2C1

GPS相关函数

void gpsInterfaceInit(void)函数
功能:初始化USART3

EEPROM相关函数

void eepromI2CInit(void)函数
功能:也是I2C设备与IMU函数类似,看名字就能知道意思,I2C1

扩展I2C接口函数

void extendI2CInit(void)函数
功能:I2C设备,与IMU、EEPROM的函数都类似,I2C2

PWM函数

void pwmInterfaceInit(uint8_t mode , float pwm_t)函数
功能:支持两种模式的PWM输出,对输出管脚初始化,mode=1 or 2

私有成员

看名字就可以知道他们的作用。。。主要都是用来检验系统状态以及Debug用的。

    void systemMonitoring(void);
    void ledInit(void);
    void keyInit(void);
    void keyStateRenew(void);
    void beepInit(void);

    void debugInterfaceInit(void);
    float getBatteryVoltage(void);
    float getCPUUsage(void);
    float getCPUTemperature(void);
    void getCPUInfo(void);

结语

研究了这个类以后,发现想要使用一些设备变得异常容易,但是如果要使用SPI通信或者使用其他一些没有定义到的设备,还需要自己增加一些代码。这就等将来再说啦!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值