#ifndef BQ_COM #define BQ_COM #include "BQ_Register_Definitions.h" #include "stm32f4xx_hal.h" #define FRM_WRT_NR 0x90 #define FRM_WRT_R 0x81 #define DEFAULTNUMOFCELLS 10 #define DEFAULTNUMOFDIETEMPS 0 #define BQUARTTIMEOUT 200 typedef enum { BQ_COMM_OK, BQ_COMM_ERR_HAL, BQ_COMM_ERR_CRC } BQ_Comm_Status; /** * @brief Defines UART and DMA Handle * * Always call the init routine before using any other function of the libary. */ void init_BQCom(UART_HandleTypeDef* uarthandle); /** * @brief Calculate CRC according to BQ spec. * * @param message_buffer Message buffer, including two bytes for the CRC. The * CRC will be written to the last two bytes. * @param bufferlength The length of message_buffer, including the two bytes for * the CRC. * * @return 0 if the buffer is to small * @return 1 if the function was successful */ uint16_t Calculate_CRC(uint8_t* message_buffer, uint16_t bufferlength); /** * @brief Checks if the CRC is correct * * @return 0 if the Buffer is too small or the CRC is incorrect * @return 1 if the CRC is correct */ uint16_t Check_CRC(uint8_t* message_buffer, uint16_t bufferlength); /** * @brief Writes data to a register of the BQ76. * * @param registeraddress specifies the register. Address definitions are * available in BQ_Register_Definitions.h * @param registersize defines the register size in bytes. * @param data defines the data written to the BQ */ uint32_t BQ_Write_Register(uint8_t registeraddress, uint8_t registersize, uint32_t data); /** * @brief Read the data of a register specified by its address * * @param registeraddress specifies the register. Address definitions are * available in BQ_Register_Definitions.h * @param registersize defines the register size in bytes. */ uint8_t BQ_Read_Register(uint8_t registeraddress, uint8_t registersize, uint32_t* data); /** * @brief Reads Voltage Measurements from the BQ76 * * Result are Written into the Buffer * Buffer size should be 2xMeasured Voltages */ BQ_Comm_Status BQ_ReadMeasurements(uint8_t* buffer, uint8_t bufferlength); /** * @brief Hardware layer implementation of the UART transmit */ uint8_t BQ_UART_Transmit(uint8_t* message_buffer, uint16_t bufferlength); /** * @brief Hardware layer implementation of the UART receive */ uint8_t BQ_UART_Receive(uint8_t* message_buffer, uint16_t bufferlength); #endif