OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 6139|回复: 14

请教一下大家和原子哥,关于LSM6DS3陀螺仪HAL库驱动的问题

[复制链接]

209

主题

771

帖子

0

精华

初级会员

Rank: 2

积分
136
金钱
136
注册时间
2018-3-26
在线时间
287 小时
发表于 2022-9-15 13:22:54 | 显示全部楼层 |阅读模式
10金钱
请教一下大家和原子哥,关于LSM6DS3陀螺仪HAL库驱动的问题,我用库函数写的LSM6DS3的驱动可以使用,但是改写的HAL库,就不好用了,读不出来数,大家帮我分析分析
这是使用IIC通信的库函数驱动
  1. void Lsm_Init_iic(void)                                                                           
  2. {
  3. LSM_WriteOneByte(ACC_GYRO_ADDRESS,LSM6DSL_CTRL9_XL,0x38);                                      
  4. LSM_WriteOneByte(ACC_GYRO_ADDRESS,LSM6DSL_CTRL1_XL,0x60);//0X20

  5. LSM_WriteOneByte(ACC_GYRO_ADDRESS,LSM6DSL_CTRL10_C,0x38);                                      
  6. LSM_WriteOneByte(ACC_GYRO_ADDRESS,LSM6DSL_CTRL2_G,0x1C);//0x1C
  7. //»½DÑÖD¶Ï¼Ä′æÆ÷ÅäÖÃ
  8. //LSM_WriteOneByte(ACC_GYRO_ADDRESS,LSM6DSL_CTRL1_XL,0x60);

  9. LSM_WriteOneByte(ACC_GYRO_ADDRESS,LSM6DSL_CTRL3_C,0x04);
  10. LSM_WriteOneByte(ACC_GYRO_ADDRESS,FIFO_CTRL5,0x46);
  11. LSM_WriteOneByte(ACC_GYRO_ADDRESS,FIFO_CTRL3,0x2D);
  12. LSM_WriteOneByte(ACC_GYRO_ADDRESS,FIFO_CTRL4,0x2D);

  13. }
复制代码
这是读取陀螺仪数据的程序[code]void Lsm_Get_Rawgryo(void)                                                                            //IICD-òé
{

最佳答案

查看完整内容[请看2#楼]

去找IDE生成的源代码把配置贴出来
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

11

主题

2131

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4728
金钱
4728
注册时间
2015-1-10
在线时间
590 小时
发表于 2022-9-15 13:22:55 | 显示全部楼层

去找IDE生成的源代码把配置贴出来
回复

使用道具 举报

209

主题

771

帖子

0

精华

初级会员

Rank: 2

积分
136
金钱
136
注册时间
2018-3-26
在线时间
287 小时
 楼主| 发表于 2022-9-15 13:23:37 | 显示全部楼层
读取陀螺仪的程序
  1. void Lsm_Get_Rawacc(void)                                                                             //IICD-òé
  2. {
  3.         short ax,ay,az;
  4.         uint8_t  buf[6];
  5.         if((LSM_ReadOneByte(ACC_GYRO_ADDRESS,LSM6DSL_STATUS_REG)&0x01)!=0)                              //óDêy¾Yéú3é
  6.         {

  7.                 buf[0]= LSM_ReadOneByte(ACC_GYRO_ADDRESSR,LSM6DSL_OUTX_H_XL);
  8.                 buf[1]= LSM_ReadOneByte(ACC_GYRO_ADDRESSR,LSM6DSL_OUTX_L_XL);
  9.                 buf[2]= LSM_ReadOneByte(ACC_GYRO_ADDRESSR,LSM6DSL_OUTY_H_XL);
  10.                 buf[3]= LSM_ReadOneByte(ACC_GYRO_ADDRESSR,LSM6DSL_OUTY_L_XL);
  11.                 buf[4]= LSM_ReadOneByte(ACC_GYRO_ADDRESSR,LSM6DSL_OUTZ_H_XL);
  12.                 buf[5]= LSM_ReadOneByte(ACC_GYRO_ADDRESSR,LSM6DSL_OUTZ_L_XL);
  13.                 ax=(buf[0]<<8)|buf[1];
  14.                 ay=(buf[2]<<8)|buf[3];
  15.                 az=(buf[4]<<8)|buf[5];
  16.                 printf(" acceleration£o%d, %d, %d\n",ax,ay,az);
  17.           printf("\r\n");
  18.                 //delay_ms(10);
  19.         }
  20. }
复制代码
回复

使用道具 举报

209

主题

771

帖子

0

精华

初级会员

Rank: 2

积分
136
金钱
136
注册时间
2018-3-26
在线时间
287 小时
 楼主| 发表于 2022-9-15 13:24:35 | 显示全部楼层

HAL版本的,就不好使了
  1. void LSM6DS3_init(void)
  2. {
  3.         uint8_t pBuffer=0;
  4. //       
  5.         HAL_GPIO_WritePin(GPIOB, GPIO_PIN_5, GPIO_PIN_SET);
  6.         //High-performance model default(Controlled by CTRL6_C register)
  7.         pBuffer=0x1C;//Accelerometer ODR=104Hz,+/-16g,Anti-aliasing filter bandwidth:400Hz
  8.         HAL_I2C_Mem_Write(&hi2c1,LSM6DS3_ACC_GYRO_I2C_ADDRESS_LOW,LSM6DS3_CTRL2_G_REG,1,&pBuffer, 1, 0x2000);HAL_Delay(2);
  9.         pBuffer=0x38;//enable Accelerometer X,Y,Z
  10.         HAL_I2C_Mem_Write(&hi2c1,LSM6DS3_ACC_GYRO_I2C_ADDRESS_LOW,LSM6DS3_CTRL10_C_REG,1,&pBuffer, 1, 0x2000);HAL_Delay(2);
  11.         pBuffer=0x40;//enable accelerometer int1
  12.         HAL_I2C_Mem_Write(&hi2c1,LSM6DS3_ACC_GYRO_I2C_ADDRESS_LOW,LSM6DS3_CTRL1_XL_REG,1,&pBuffer, 1, 0x2000);HAL_Delay(2);
  13.        
  14.         pBuffer=0x90;//Angular:104hz(Lowpass filter)  500dps(full-scale,degree/s)
  15.         HAL_I2C_Mem_Write(&hi2c1,LSM6DS3_ACC_GYRO_I2C_ADDRESS_LOW,LSM6DS3_TAP_CFG_REG,1,&pBuffer, 1, 0x2000);HAL_Delay(2);
  16.        
  17.         pBuffer=0x00;//Gyroscope pitch axis (X.Y.Z) output enable.
  18.         HAL_I2C_Mem_Write(&hi2c1,LSM6DS3_ACC_GYRO_I2C_ADDRESS_LOW,LSM6DS3_WAKE_UP_DUR,1,&pBuffer, 1, 0x2000);HAL_Delay(2);
  19.         pBuffer=0x02;//enable Gyroscope int2
  20.         HAL_I2C_Mem_Write(&hi2c1,LSM6DS3_ACC_GYRO_I2C_ADDRESS_LOW,LSM6DS3_WAKE_UP_THS,1,&pBuffer, 1, 0x2000);HAL_Delay(2);
  21.        
  22.         //WAKE_UP INTERRUPT Configuration
  23.         pBuffer=0x20;//Latched Interrupt.
  24.         HAL_I2C_Mem_Write(&hi2c1,LSM6DS3_ACC_GYRO_I2C_ADDRESS_LOW,LSM6DS3_MD1_CFG,1,&pBuffer, 1, 0x2000);HAL_Delay(2);
  25.        
  26.         pBuffer=0x40;//Block Data Update,Register address automatically incremented
  27.         HAL_I2C_Mem_Write(&hi2c1,LSM6DS3_ACC_GYRO_I2C_ADDRESS_LOW,LSM6DS3_TAP_THS_6D,1,&pBuffer, 1, 0x2000);HAL_Delay(2);
  28.        
  29.                 pBuffer=0x01;//Block Data Update,Register address automatically incremented
  30.         HAL_I2C_Mem_Write(&hi2c1,LSM6DS3_ACC_GYRO_I2C_ADDRESS_LOW,LSM6DS3_CTRL8_XL,1,&pBuffer, 1, 0x2000);HAL_Delay(2);
  31. }
复制代码
回复

使用道具 举报

209

主题

771

帖子

0

精华

初级会员

Rank: 2

积分
136
金钱
136
注册时间
2018-3-26
在线时间
287 小时
 楼主| 发表于 2022-9-15 13:25:13 | 显示全部楼层
支持者2400 发表于 2022-9-15 13:24
HAL版本的,就不好使了

HAL读取陀螺仪的程序
  1. void Read_Accelerometer(uint16_t Accelerometer[3])
  2. {
  3.        
  4.                 uint8_t pBuffer1[1],pBuffer2[1],pBuffer3[1],pBuffer4[1],pBuffer5[1],pBuffer6[1];
  5.        
  6.         HAL_I2C_Mem_Read(&hi2c1, LSM6DS3_ACC_GYRO_I2C_ADDRESS_LOW, LSM6DS3_OUTX_H_XL, 1, pBuffer1, 1, 0x2000);HAL_Delay(10);
  7.         HAL_I2C_Mem_Read(&hi2c1, LSM6DS3_ACC_GYRO_I2C_ADDRESS_LOW, LSM6DS3_OUTX_L_XL, 1, pBuffer2, 1, 0x2000);HAL_Delay(10);
  8.         HAL_I2C_Mem_Read(&hi2c1, LSM6DS3_ACC_GYRO_I2C_ADDRESS_LOW, LSM6DS3_OUTY_H_XL, 1, pBuffer3, 1, 0x2000);HAL_Delay(10);
  9.         HAL_I2C_Mem_Read(&hi2c1, LSM6DS3_ACC_GYRO_I2C_ADDRESS_LOW, LSM6DS3_OUTY_L_XL, 1, pBuffer4, 1, 0x2000);HAL_Delay(10);
  10.         HAL_I2C_Mem_Read(&hi2c1, LSM6DS3_ACC_GYRO_I2C_ADDRESS_LOW, LSM6DS3_OUTZ_H_XL, 1, pBuffer5, 1, 0x2000);HAL_Delay(10);
  11.         HAL_I2C_Mem_Read(&hi2c1, LSM6DS3_ACC_GYRO_I2C_ADDRESS_LOW, LSM6DS3_OUTZ_L_XL, 1, pBuffer6, 1, 0x2000);HAL_Delay(10);
  12.         Accelerometer[0]=(pBuffer1[0]<<8)|pBuffer2[0];
  13.         Accelerometer[1]=(pBuffer1[0]<<8)|pBuffer4[0];
  14.         Accelerometer[2]=(pBuffer5[0]<<8)|pBuffer6[0];
  15.        

  16.         printf("acceleration£o%d, %d, %d\r\n",Accelerometer[0],Accelerometer[1],Accelerometer[2]);
  17.         printf("\r\n");
  18. }
复制代码
回复

使用道具 举报

11

主题

2131

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4728
金钱
4728
注册时间
2015-1-10
在线时间
590 小时
发表于 2022-9-15 16:00:45 | 显示全部楼层
你说的不好使是什么意思?读不出来写不进去这种?
回复

使用道具 举报

209

主题

771

帖子

0

精华

初级会员

Rank: 2

积分
136
金钱
136
注册时间
2018-3-26
在线时间
287 小时
 楼主| 发表于 2022-9-15 17:02:55 | 显示全部楼层
阿侑kevin 发表于 2022-9-15 16:00
你说的不好使是什么意思?读不出来写不进去这种?

对,就是没有输出,库函数可以,HAL不行
回复

使用道具 举报

11

主题

2131

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4728
金钱
4728
注册时间
2015-1-10
在线时间
590 小时
发表于 2022-9-16 09:11:23 | 显示全部楼层
支持者2400 发表于 2022-9-15 17:02
对,就是没有输出,库函数可以,HAL不行

GPIO配置和IIC配置发一下
回复

使用道具 举报

209

主题

771

帖子

0

精华

初级会员

Rank: 2

积分
136
金钱
136
注册时间
2018-3-26
在线时间
287 小时
 楼主| 发表于 2022-9-16 10:19:13 | 显示全部楼层
阿侑kevin 发表于 2022-9-16 09:11
GPIO配置和IIC配置发一下

722fed08af6ab6f84bd904821135b30.png 937eea96695c648f8396d104734a6cd.png
这个是IIC的配置,用的IIC1 125c8b6c518bfc55857bff3000318de.png
回复

使用道具 举报

11

主题

2131

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4728
金钱
4728
注册时间
2015-1-10
在线时间
590 小时
发表于 2022-9-16 10:51:04 | 显示全部楼层
支持者2400 发表于 2022-9-16 10:19
这个是IIC的配置,用的IIC1

你发配置的源码,我不用ST的IDE,自动生成的代码构架感觉不好用
回复

使用道具 举报

209

主题

771

帖子

0

精华

初级会员

Rank: 2

积分
136
金钱
136
注册时间
2018-3-26
在线时间
287 小时
 楼主| 发表于 2022-9-20 10:37:36 | 显示全部楼层
阿侑kevin 发表于 2022-9-16 10:51
你发配置的源码,我不用ST的IDE,自动生成的代码构架感觉不好用

没办法啊
回复

使用道具 举报

209

主题

771

帖子

0

精华

初级会员

Rank: 2

积分
136
金钱
136
注册时间
2018-3-26
在线时间
287 小时
 楼主| 发表于 2022-9-23 13:33:29 | 显示全部楼层
阿侑kevin 发表于 2022-9-20 13:10
去找IDE生成的源代码把配置贴出来

好的,您看,我把库函数转HAL函数的程序,写的对吗?
回复

使用道具 举报

209

主题

771

帖子

0

精华

初级会员

Rank: 2

积分
136
金钱
136
注册时间
2018-3-26
在线时间
287 小时
 楼主| 发表于 2022-9-23 13:35:05 | 显示全部楼层
阿侑kevin 发表于 2022-9-20 13:10
去找IDE生成的源代码把配置贴出来

主要用IIC1,UART1,PB5作为使能引脚
  1. void SystemClock_Config(void)
  2. {

  3.   RCC_OscInitTypeDef RCC_OscInitStruct;
  4.   RCC_ClkInitTypeDef RCC_ClkInitStruct;

  5.     /**Initializes the CPU, AHB and APB busses clocks
  6.     */
  7.   RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
  8.   RCC_OscInitStruct.HSEState = RCC_HSE_ON;
  9.   RCC_OscInitStruct.HSEPredivValue = RCC_HSE_PREDIV_DIV1;
  10.   RCC_OscInitStruct.HSIState = RCC_HSI_ON;
  11.   RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
  12.   RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
  13.   RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL9;
  14.   if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK)
  15.   {
  16.     _Error_Handler(__FILE__, __LINE__);
  17.   }

  18.     /**Initializes the CPU, AHB and APB busses clocks
  19.     */
  20.   RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
  21.                               |RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
  22.   RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
  23.   RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
  24.   RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2;
  25.   RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;

  26.   if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK)
  27.   {
  28.     _Error_Handler(__FILE__, __LINE__);
  29.   }

  30.     /**Configure the Systick interrupt time
  31.     */
  32.   HAL_SYSTICK_Config(HAL_RCC_GetHCLKFreq()/1000);

  33.     /**Configure the Systick
  34.     */
  35.   HAL_SYSTICK_CLKSourceConfig(SYSTICK_CLKSOURCE_HCLK);

  36.   /* SysTick_IRQn interrupt configuration */
  37.   HAL_NVIC_SetPriority(SysTick_IRQn, 0, 0);
  38. }

  39. /* I2C1 init function */
  40. static void MX_I2C1_Init(void)
  41. {

  42.   hi2c1.Instance = I2C1;
  43.   hi2c1.Init.ClockSpeed = 100000;
  44.   hi2c1.Init.DutyCycle = I2C_DUTYCYCLE_2;
  45.   hi2c1.Init.OwnAddress1 = 0;
  46.   hi2c1.Init.AddressingMode = I2C_ADDRESSINGMODE_7BIT;
  47.   hi2c1.Init.DualAddressMode = I2C_DUALADDRESS_DISABLE;
  48.   hi2c1.Init.OwnAddress2 = 0;
  49.   hi2c1.Init.GeneralCallMode = I2C_GENERALCALL_DISABLE;
  50.   hi2c1.Init.NoStretchMode = I2C_NOSTRETCH_DISABLE;
  51.   if (HAL_I2C_Init(&hi2c1) != HAL_OK)
  52.   {
  53.     _Error_Handler(__FILE__, __LINE__);
  54.   }

  55. }

  56. /* USART1 init function */
  57. static void MX_USART1_UART_Init(void)
  58. {

  59.   huart1.Instance = USART1;
  60.   huart1.Init.BaudRate = 115200;
  61.   huart1.Init.WordLength = UART_WORDLENGTH_8B;
  62.   huart1.Init.StopBits = UART_STOPBITS_1;
  63.   huart1.Init.Parity = UART_PARITY_NONE;
  64.   huart1.Init.Mode = UART_MODE_TX_RX;
  65.   huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE;
  66.   huart1.Init.OverSampling = UART_OVERSAMPLING_16;
  67.   if (HAL_UART_Init(&huart1) != HAL_OK)
  68.   {
  69.     _Error_Handler(__FILE__, __LINE__);
  70.   }

  71. }

  72. /** Configure pins as
  73.         * Analog
  74.         * Input
  75.         * Output
  76.         * EVENT_OUT
  77.         * EXTI
  78. */
  79. static void MX_GPIO_Init(void)
  80. {

  81.   GPIO_InitTypeDef GPIO_InitStruct;

  82.   /* GPIO Ports Clock Enable */
  83.   __HAL_RCC_GPIOA_CLK_ENABLE();
  84.   __HAL_RCC_GPIOB_CLK_ENABLE();

  85.   /*Configure GPIO pin Output Level */
  86.   HAL_GPIO_WritePin(GPIOB, GPIO_PIN_5, GPIO_PIN_SET);

  87.   /*Configure GPIO pin : PB5 */
  88.   GPIO_InitStruct.Pin = GPIO_PIN_5;
  89.   GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
  90.   GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
  91.   HAL_GPIO_Init(GPIOB, &GPIO_InitStruct);

  92. }
复制代码
回复

使用道具 举报

11

主题

2131

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4728
金钱
4728
注册时间
2015-1-10
在线时间
590 小时
发表于 2022-9-26 11:24:40 | 显示全部楼层
支持者2400 发表于 2022-9-23 13:35
主要用IIC1,UART1,PB5作为使能引脚

没看到IIC引脚的配置呢
回复

使用道具 举报

209

主题

771

帖子

0

精华

初级会员

Rank: 2

积分
136
金钱
136
注册时间
2018-3-26
在线时间
287 小时
 楼主| 发表于 2022-9-27 13:38:02 | 显示全部楼层
阿侑kevin 发表于 2022-9-26 11:24
没看到IIC引脚的配置呢

已经解决了,多谢
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-2-26 03:43

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表