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通信或者使用其他一些没有定义到的设备,还需要自己增加一些代码。这就等将来再说啦!