站内搜索
发作品签到
lis2dw12
专业版

lis2dw12

工程标签

32位单片机

690
0
0
1

简介

使用立创地阔星驱动lis2dw12

简介:使用立创地阔星驱动lis2dw12

开源协议

GPL 3.0

创建时间:2025-02-25 09:45:40更新时间:2025-03-10 10:08:06

描述

硬件准备

  • 立创地阔星
  • lis2dw12 模块(本项目硬件)
  • usb转ttl
  • 杜邦线若干
  • jlink 或stlink

软件准备

  • cube ide 1.8
  • xshell 或者其他串口调试助手

接线

image.png]

注意

  • 需要使用图形化工具实现IIC0 和串口0

代码实现

  • 首先从官方github 下载lis2dw12_pid驱动程序,从中拿出lis2dw12_reg.c 和.h
  • 参考官方驱动中

1741571753863.png

1741571778955.png

  • 首先在主函数头文件中添加驱动程序

/* Private includes ----------------------------------------------------------*/
/* USER CODE BEGIN Includes */
#include 
#include 
#include "lis2dw12_reg.h"

#define    BOOT_TIME            20 //ms
static int16_t data_raw_acceleration[3];
static float_t acceleration_mg[3];
static uint8_t whoamI, rst;
static uint8_t tx_buffer[1000];

static int32_t platform_write(void *handle, uint8_t reg, const uint8_t *bufp,uint16_t len)
{
	  HAL_I2C_Mem_Write(handle, LIS2DW12_I2C_ADD_H, reg, I2C_MEMADD_SIZE_8BIT, (uint8_t*) bufp, len, 1000);
}
static int32_t platform_read(void *handle, uint8_t reg, uint8_t *bufp,uint16_t len)
{
	HAL_I2C_Mem_Read(handle, LIS2DW12_I2C_ADD_H, reg, I2C_MEMADD_SIZE_8BIT, bufp, len, 1000);
}
static void tx_com( uint8_t *tx_buffer, uint16_t len )
{
	HAL_UART_Transmit(&huart1, tx_buffer, len, 1000);
}
static void platform_delay(uint32_t ms)
{
	 HAL_Delay(ms);
}
static void platform_init(void)
{
}
/* USER CODE END Includes */

  • 再将主函数替换掉
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();

  /* USER CODE BEGIN Init */

  /* USER CODE END Init */

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

  /* USER CODE BEGIN SysInit */
  /* Initialize mems driver interface */

  /* USER CODE END SysInit */

  /* Initialize all configured peripherals */
  MX_GPIO_Init();
  MX_I2C1_Init();
  MX_USART1_UART_Init();
  /* USER CODE BEGIN 2 */
  /* Initialize mems driver interface */
   stmdev_ctx_t dev_ctx;
   dev_ctx.write_reg = platform_write;
   dev_ctx.read_reg = platform_read;
   dev_ctx.mdelay = platform_delay;
   dev_ctx.handle = &hi2c1;
   /* Initialize platform specific hardware */
   platform_init();
   /* Wait sensor boot time */
   platform_delay(BOOT_TIME);
   /* Check device ID */
   lis2dw12_device_id_get(&dev_ctx, &whoamI);

   if (whoamI != LIS2DW12_ID)
     while (1) {
       /* manage here device not found */
     }

   /* Restore default configuration */
   lis2dw12_reset_set(&dev_ctx, PROPERTY_ENABLE);

   do {
     lis2dw12_reset_get(&dev_ctx, &rst);
   } while (rst);

   /* Enable Block Data Update */
   lis2dw12_block_data_update_set(&dev_ctx, PROPERTY_ENABLE);
   /* Set full scale */
   //lis2dw12_full_scale_set(&dev_ctx, LIS2DW12_8g);
   lis2dw12_full_scale_set(&dev_ctx, LIS2DW12_2g);
   /* Configure filtering chain
    * Accelerometer - filter path / bandwidth
    */
   lis2dw12_filter_path_set(&dev_ctx, LIS2DW12_LPF_ON_OUT);
   lis2dw12_filter_bandwidth_set(&dev_ctx, LIS2DW12_ODR_DIV_4);
   /* Configure power mode */
   lis2dw12_power_mode_set(&dev_ctx, LIS2DW12_HIGH_PERFORMANCE);
   //lis2dw12_power_mode_set(&dev_ctx, LIS2DW12_CONT_LOW_PWR_LOW_NOISE_12bit);
   /* Set Output Data Rate */
   lis2dw12_data_rate_set(&dev_ctx, LIS2DW12_XL_ODR_25Hz);
  /* USER CODE END 2 */

  /* Infinite loop */
  /* USER CODE BEGIN WHILE */
  while (1)
  {
    /* USER CODE END WHILE */

    /* USER CODE BEGIN 3 */
	  uint8_t reg;
	  /* Read output only if new value is available */
	  lis2dw12_flag_data_ready_get(&dev_ctx, ®);
	  if (reg) {
		/* Read acceleration data */
		memset(data_raw_acceleration, 0x00, 3 * sizeof(int16_t));
		lis2dw12_acceleration_raw_get(&dev_ctx, data_raw_acceleration);
//		acceleration_mg[0] = lis2dw12_from_fs8_lp1_to_mg(data_raw_acceleration[0]);
//		acceleration_mg[1] = lis2dw12_from_fs8_lp1_to_mg(data_raw_acceleration[1]);
//		acceleration_mg[2] = lis2dw12_from_fs8_lp1_to_mg(data_raw_acceleration[2]);
		acceleration_mg[0] = lis2dw12_from_fs2_to_mg(data_raw_acceleration[0]);
		acceleration_mg[1] = lis2dw12_from_fs2_to_mg(data_raw_acceleration[1]);
		acceleration_mg[2] = lis2dw12_from_fs2_to_mg(data_raw_acceleration[2]);
		snprintf((char *)tx_buffer, sizeof(tx_buffer),
				"Acceleration [mg]:%6.2f  %6.2f  %6.2f\r\n",
				acceleration_mg[0], acceleration_mg[1], acceleration_mg[2]);
		tx_com(tx_buffer, strlen((char const *)tx_buffer));
	  }
  }
  /* USER CODE END 3 */
}

  • 最后下载程序完成调试

目前开源硬件,10个赞开源源代码。

设计图

未生成预览图,请在编辑器重新保存一次

BOM

暂无BOM

3D模型

序号文件名称下载次数
暂无数据

附件

序号文件名称下载次数
1
WeChat_20250310100345.mp4
0
克隆工程
添加到专辑
0
0
分享
侵权投诉
知识产权声明&复刻说明

本项目为开源硬件项目,其相关的知识产权归创作者所有。创作者在本平台上传该硬件项目仅供平台用户用于学习交流及研究,不包括任何商业性使用,请勿用于商业售卖或其他盈利性的用途;如您认为本项目涉嫌侵犯了您的相关权益,请点击上方“侵权投诉”按钮,我们将按照嘉立创《侵权投诉与申诉规则》进行处理。

请在进行项目复刻时自行验证电路的可行性,并自行辨别该项目是否对您适用。您对复刻项目的任何后果负责,无论何种情况,本平台将不对您在复刻项目时,遇到的任何因开源项目电路设计问题所导致的直接、间接等损害负责。

底部导航