AnsweredAssumed Answered

how to display the ADXL345 data in stm32F103 or STM32f407

Question asked by karim.salim on Mar 5, 2016
Latest reply on Mar 7, 2016 by Amel N
Hello,
I fail to recover the data (x y z) my ADXL345 because i'm new in stm32,I generated the code for the stmcubemx and I use i2c for communicate and this is my main.c After modefication:
/* Includes ------------------------------------------------------------------*/
#include "stm32f4xx_hal.h"




/* USER CODE BEGIN Includes */




/* USER CODE END Includes */




/* Private variables ---------------------------------------------------------*/
I2C_HandleTypeDef hi2c2;




UART_HandleTypeDef huart1;




/* USER CODE BEGIN PV */
/* Private variables ---------------------------------------------------------*/




/* USER CODE END PV */




/* Private function prototypes -----------------------------------------------*/
void SystemClock_Config(void);
static void MX_GPIO_Init(void);
static void MX_I2C2_Init(void);
static void MX_USART1_UART_Init(void);




/* USER CODE BEGIN PFP */
/* Private function prototypes -----------------------------------------------*/




/* USER CODE END PFP */




/* USER CODE BEGIN 0 */
     void Accel_Init(void); // fonction lire du adxl
     void Accel_Read(void); // fonction initialiser adxl
     uint8_t ADXL345_Measure_Mode = 0x08;
     uint8_t ADXL345_Full_Resolution_8 = 0x0A;
     uint8_t ADXL345_DATARATE_400_HZ = 0x0C;
     uint8_t Buffer[6] = {0}; 
     uint8_t Accel_Raw[3] = {0};
/* USER CODE END 0 */




int main(void)
{




  /* USER CODE BEGIN 1 */




  /* USER CODE END 1 */




  /* MCU Configuration----------------------------------------------------------*/




  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */
  HAL_Init();




  /* Configure the system clock */
  SystemClock_Config();




  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_I2C2_Init();
  MX_USART1_UART_Init();




  /* USER CODE BEGIN 2 */




  /* USER CODE END 2 */




  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
  /* USER CODE END WHILE */
          Accel_Read();
          HAL_UART_Transmit(&huart1, &Accel_Raw[0], 2, 10000); //affiher sur l'uart l'axe x
          HAL_UART_Transmit(&huart1, &Accel_Raw[1], 2, 10000); //affiher sur l'uart l'axe y
          HAL_UART_Transmit(&huart1, &Accel_Raw[2], 2, 10000); //affiher sur l'uart l'axe z
  /* USER CODE BEGIN 3 */




  }
  /* USER CODE END 3 */




}




/** System Clock Configuration
*/
void SystemClock_Config(void)
{




  RCC_OscInitTypeDef RCC_OscInitStruct;
  RCC_ClkInitTypeDef RCC_ClkInitStruct;




  __PWR_CLK_ENABLE();




  __HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1);




  RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
  RCC_OscInitStruct.HSEState = RCC_HSE_ON;
  RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
  RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
  RCC_OscInitStruct.PLL.PLLM = 4;
  RCC_OscInitStruct.PLL.PLLN = 192;
  RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV4;
  RCC_OscInitStruct.PLL.PLLQ = 4;
  HAL_RCC_OscConfig(&RCC_OscInitStruct);




  RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_SYSCLK|RCC_CLOCKTYPE_PCLK1
                              |RCC_CLOCKTYPE_PCLK2;
  RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
  RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
  RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV4;
  RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV2;
  HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_3);




  HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq()/1000);




  HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK);




  /* SysTick_IRQn interrupt configuration */
  HAL_NVIC_SetPriority(SysTick_IRQn, 0, 0);
}




/* I2C2 init function */
void MX_I2C2_Init(void)
{




  hi2c2.Instance = I2C2;
  hi2c2.Init.ClockSpeed = 100000;
  hi2c2.Init.DutyCycle = I2C_DUTYCYCLE_2;
  hi2c2.Init.OwnAddress1 = 110;
  hi2c2.Init.AddressingMode = I2C_ADDRESSINGMODE_7BIT;
  hi2c2.Init.DualAddressMode = I2C_DUALADDRESS_DISABLED;
  hi2c2.Init.OwnAddress2 = 0;
  hi2c2.Init.GeneralCallMode = I2C_GENERALCALL_DISABLED;
  hi2c2.Init.NoStretchMode = I2C_NOSTRETCH_DISABLED;
  HAL_I2C_Init(&hi2c2);




}




/* USART1 init function */
void MX_USART1_UART_Init(void)
{




  huart1.Instance = USART1;
  huart1.Init.BaudRate = 115200;
  huart1.Init.WordLength = UART_WORDLENGTH_8B;
  huart1.Init.StopBits = UART_STOPBITS_1;
  huart1.Init.Parity = UART_PARITY_NONE;
  huart1.Init.Mode = UART_MODE_TX_RX;
  huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE;
  huart1.Init.OverSampling = UART_OVERSAMPLING_16;
  HAL_UART_Init(&huart1);




}




/** Configure pins as 
        * Analog 
        * Input 
        * Output
        * EVENT_OUT
        * EXTI
*/
void MX_GPIO_Init(void)
{




  /* GPIO Ports Clock Enable */
  __GPIOH_CLK_ENABLE();
  __GPIOB_CLK_ENABLE();
  __GPIOA_CLK_ENABLE();




}




/* USER CODE BEGIN 4 */
void Accel_Init(void)
{     
     //HAL_I2C_Mem_Write(&hi2c2,0xA6,0x31,1,&ADXL345_Full_Resolution_8,1,1000);
     HAL_I2C_Master_Transmit(&hi2c2,0x31,&ADXL345_Full_Resolution_8,1,1000);
     HAL_I2C_Master_Transmit(&hi2c2,0x2C,&ADXL345_DATARATE_400_HZ,1,1000);
     HAL_I2C_Master_Transmit(&hi2c2,0x2D,&ADXL345_Measure_Mode,1,1000);
     
     
}








void Accel_Read(void)
{
     //0x32,0x33 ........... les adresse des registre x0,x1,.......z1
     //I2C_Read(I2C1, 0xA7, 0x32, &Buffer[0], 1);
     //HAL_I2C_Mem_Read(&hi2c2, 0xA7, 0x32,1,&Buffer[0],1, 10000);
     HAL_I2C_Master_Receive(&hi2c2, 0x32,&Buffer[0],1,1000); // donnée x0 
     HAL_I2C_Master_Receive(&hi2c2, 0x33,&Buffer[1],1,1000); // donnée x1
     HAL_I2C_Master_Receive(&hi2c2, 0x34,&Buffer[2],1,1000); // donnée y0
     HAL_I2C_Master_Receive(&hi2c2, 0x35,&Buffer[3],1,1000); // donnée y1
     HAL_I2C_Master_Receive(&hi2c2, 0x36,&Buffer[4],1,1000); // donnée z0
     HAL_I2C_Master_Receive(&hi2c2, 0x37,&Buffer[5],1,1000); // donnée z1
     
     
  Accel_Raw[0] = (((int) Buffer[3]) << 8) | Buffer[2];  // X axis (internal sensor y axis)
  Accel_Raw[1] = (((int) Buffer[1]) << 8) | Buffer[0];  // Y axis (internal sensor x axis)
  Accel_Raw[2] = (((int) Buffer[5]) << 8) | Buffer[4];  // Z axis (internal sensor z axis)
     
     
     
}
/* USER CODE END 4 */




#ifdef USE_FULL_ASSERT




/**
   * @brief Reports the name of the source file and the source line number
   * where the assert_param error has occurred.
   * @param file: pointer to the source file name
   * @param line: assert_param error line source number
   * @retval None
   */
void assert_failed(uint8_t* file, uint32_t line)
{
  /* USER CODE BEGIN 6 */
  /* User can add his own implementation to report the file name and line number,
    ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */
  /* USER CODE END 6 */

}


#endif

Outcomes