Get BQ communication to work
This commit is contained in:
		@ -149,6 +149,7 @@ uint8_t BQ_Read_Register(uint8_t registeraddress, uint8_t registersize,
 | 
			
		||||
  message[0] = FRM_WRT_R;
 | 
			
		||||
  message[1] = 0;
 | 
			
		||||
  message[2] = registeraddress;
 | 
			
		||||
  // See BQ datasheet 7.5.3.1.2
 | 
			
		||||
  message[3] = registersize - 1;
 | 
			
		||||
  Calculate_CRC(message, 6);
 | 
			
		||||
 | 
			
		||||
@ -162,14 +163,21 @@ uint8_t BQ_Read_Register(uint8_t registeraddress, uint8_t registersize,
 | 
			
		||||
  if (crccheck == 0) {
 | 
			
		||||
    return 0;
 | 
			
		||||
  }
 | 
			
		||||
  // See Response Frame Init in BQ datasheet 7.5.1.1
 | 
			
		||||
  uint8_t response_size = (recv_message[0] & 0x7F) + 1;
 | 
			
		||||
  if (response_size != registersize) {
 | 
			
		||||
    return 0;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  data[0] = 0;
 | 
			
		||||
 | 
			
		||||
  if (registersize > 4)
 | 
			
		||||
    registersize = 4;
 | 
			
		||||
 | 
			
		||||
  // Data is returned big-endian as per 7.5.3.1.2.1
 | 
			
		||||
  for (int n = 0; n < registersize; n++) {
 | 
			
		||||
    data[0] |= recv_message[1 + n] >> (8 * n);
 | 
			
		||||
    int shift_amount = 8 * (registersize - n - 1);
 | 
			
		||||
    data[0] |= recv_message[1 + n] << shift_amount;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  return 1;
 | 
			
		||||
@ -195,7 +203,7 @@ uint32_t BQ_ReadMeasurements(uint8_t* buffer, uint8_t bufferlength) {
 | 
			
		||||
  uint8_t recv_buf[recv_len];
 | 
			
		||||
  uint8_t uartstat = BQ_UART_Receive(recv_buf, recv_len);
 | 
			
		||||
 | 
			
		||||
  if (Check_CRC(recv_buf, recv_len) == 0) {
 | 
			
		||||
  if (uartstat != HAL_OK || Check_CRC(recv_buf, recv_len) == 0) {
 | 
			
		||||
    return 0;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -21,7 +21,9 @@
 | 
			
		||||
 | 
			
		||||
/* Private includes ----------------------------------------------------------*/
 | 
			
		||||
/* USER CODE BEGIN Includes */
 | 
			
		||||
#include "BQ_Abstraction_Layer.h"
 | 
			
		||||
 | 
			
		||||
#include "stm32f4xx_hal.h"
 | 
			
		||||
/* USER CODE END Includes */
 | 
			
		||||
 | 
			
		||||
/* Private typedef -----------------------------------------------------------*/
 | 
			
		||||
@ -108,7 +110,9 @@ int main(void) {
 | 
			
		||||
  MX_USART3_UART_Init();
 | 
			
		||||
  MX_USART6_UART_Init();
 | 
			
		||||
  /* USER CODE BEGIN 2 */
 | 
			
		||||
 | 
			
		||||
  HAL_GPIO_WritePin(DCDC_CTRL_GPIO_Port, DCDC_CTRL_Pin, GPIO_PIN_SET);
 | 
			
		||||
  HAL_Delay(100);
 | 
			
		||||
  afe_init(&huart2);
 | 
			
		||||
  /* USER CODE END 2 */
 | 
			
		||||
 | 
			
		||||
  /* Infinite loop */
 | 
			
		||||
@ -117,6 +121,7 @@ int main(void) {
 | 
			
		||||
    /* USER CODE END WHILE */
 | 
			
		||||
 | 
			
		||||
    /* USER CODE BEGIN 3 */
 | 
			
		||||
    afe_measure();
 | 
			
		||||
  }
 | 
			
		||||
  /* USER CODE END 3 */
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
		Reference in New Issue
	
	Block a user