669|6

726

帖子

0

资源

纯净的硅(初级)

【ST MEMS防水气压传感器LPS27HHW测评】+例程存在的问题 [复制链接]

本帖最后由 jinglixixi 于 2021-2-1 00:02 编辑

在前面的介绍中,对例程进行了相应的分析并介绍了在STM32F411开发板的基础上进行程序移入的处理方法。

在程序移入后,借助串口已能把模拟值按原程序的输出出来,且为其配置了OLED屏来辅助检测值的输出。

原指望在短时间内解决驱动的问题,从而能将例程顺利地放到STM32F411开发板上来进行功能检测。但是,这里有关键的问题没有解决,就是原程序缺少一个关键的定义,即语句dev_ctx.handle = &hi2c1;

会因为找不到hi2c1而无法完成编译。

后来添加了下面的语句就可以通过编译了:

static I2C_HandleTypeDef    hi2c1;

修改后程序如下:

void tx_com( uint8_t *tx_buffer, uint16_t len )

{

     HAL_UART_Transmit( &UartHandle, tx_buffer, len, 1000 );

}

 

int main(void)

{

  HAL_Init();

  SystemClock_Config();

  //  #define USARTx                USART2

  UartHandle.Instance          = USARTx;

  UartHandle.Init.BaudRate     = 9600;

  UartHandle.Init.WordLength   = UART_WORDLENGTH_9B;  //8B

  UartHandle.Init.StopBits     = UART_STOPBITS_1;

  UartHandle.Init.Parity       = UART_PARITY_ODD;

  UartHandle.Init.HwFlowCtl    = UART_HWCONTROL_NONE;

  UartHandle.Init.Mode         = UART_MODE_TX_RX;

  UartHandle.Init.OverSampling = UART_OVERSAMPLING_16;

 

  if(HAL_UART_Init(&UartHandle) != HAL_OK)

  {

    Error_Handler();

  }

  printf("LPS27HHW & STM32F411 TEST \r\n");

 

  stmdev_ctx_t dev_ctx;

  dev_ctx.write_reg = platform_write;

  dev_ctx.read_reg = platform_read;

 dev_ctx.handle = &hi2c1;      // ***

  whoamI = 0;

  lps27hhw_device_id_get(&dev_ctx, &whoamI);

  if ( whoamI != LPS27HHW_ID )

    while(1);

  lps27hhw_reset_set(&dev_ctx, PROPERTY_ENABLE);

  do {

    lps27hhw_reset_get(&dev_ctx, &rst);

  } while (rst);

 

  lps27hhw_block_data_update_set(&dev_ctx, PROPERTY_ENABLE);

  lps27hhw_data_rate_set(&dev_ctx, LPS27HHW_10_Hz_LOW_NOISE);

 

  while(1)

  {

    lps27hhw_reg_t reg;

    lps27hhw_read_reg(&dev_ctx, LPS27HHW_STATUS, (uint8_t *)&reg, 1);

    if (reg.status.p_da)

    {

      memset(data_raw_pressure.u8bit, 0x00, sizeof(int32_t));

      lps27hhw_pressure_raw_get(&dev_ctx, data_raw_pressure.u8bit);

      pressure_hPa = lps27hhw_from_lsb_to_hpa( data_raw_pressure.i32bit);

      sprintf((char*)tx_buffer, "pressure [hPa]:%6.2f\r\n", pressure_hPa);

      tx_com( tx_buffer, strlen( (char const*)tx_buffer ) );

    }

    if (reg.status.t_da)

    {

      memset(data_raw_temperature.u8bit, 0x00, sizeof(int16_t));

      lps27hhw_temperature_raw_get(&dev_ctx, data_raw_temperature.u8bit);

      temperature_degC = lps27hhw_from_lsb_to_celsius( data_raw_temperature.i16bit );

      sprintf((char*)tx_buffer, "temperature [degC]:%6.2f\r\n", temperature_degC );

      tx_com( tx_buffer, strlen( (char const*)tx_buffer ) );

    }

  }

}

 


回复

13

帖子

0

资源

一粒金砂(中级)

66666666666666

回复

7959

帖子

20

资源

版主

STM32和传感器通信需要配置I2C接口,例程里是默认配置,针对它原来的测试环境,在你的板子上运行需要根据你的配置来设置handle


回复

7959

帖子

20

资源

版主

本帖最后由 littleshrimp 于 2021-2-1 16:29 编辑

你帖子里的代码“UartHandle”实际上就和“hi2c1”类似,你可以参照UartHandle来实现STM32的I2C配置,然后把这个handle传递给dev_ctx.handle。

或者你如果你觉得这个handle不好理解,用着不习惯,你还可以看一下read_data_simple.c里的platform_write和platform_read它实际上还是调用了STM32的I2C或者SPI接口,如果你正确的配置了STM32对应的接口,比如I2C,那么你可以改成下图这样,让传感器调用platform_read函数时能够调用对应的接口把数据读出来。

image.png

个人签名虾扯蛋,蛋扯虾,虾扯蛋扯虾

回复

726

帖子

0

资源

纯净的硅(初级)

littleshrimp 发表于 2021-2-1 16:28 你帖子里的代码“UartHandle”实际上就和“hi2c1”类似,你可以参照UartHandle来实现S ...

是这样,当时我也是将UartHandle的tx_com赋给dev_ctx.handle来通过编译的。但构建一个像它那样的函数就比较困难了,因为无法知道该函数的功能要求及结构。其实例程中应该给出相应的函数,至于用户想怎样用,仿照改造就是。这实在是种缺陷!

点评

如何构建一个i2c的handle这个属于单片机的部分,一个传感器驱动它要适合不同的平台,官方提供了STM32的主要代码,如果你对STM32了解的话,怎么配置I2C接口应该是一件非常容易的事,就像你之前配置UART一样,它和传感  详情 回复 发表于 2021-2-2 10:22

回复

7959

帖子

20

资源

版主

jinglixixi 发表于 2021-2-1 20:16 是这样,当时我也是将UartHandle的tx_com赋给dev_ctx.handle来通过编译的。但构建一个像它那样的函数就比 ...

如何构建一个i2c的handle这个属于单片机的部分,一个传感器驱动它要适合不同的平台,官方提供了STM32的主要代码,如果你对STM32了解的话,怎么配置I2C接口应该是一件非常容易的事,就像你之前配置UART一样,它和传感器无关。

对于STM32你可以参考官方的I2C例程,或者最简单的方法就是通过STM32CubeMX配置I2C接口,点几下鼠标再点生成代码一个带有I2C配置的工程就创建好了,你要做的就是将生成的工程里的i2c的handle传递给传感器驱动。

个人签名虾扯蛋,蛋扯虾,虾扯蛋扯虾

回复

726

帖子

0

资源

纯净的硅(初级)

好的服务比说啥都重要!!!


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

最新文章 更多>>
    关闭
    站长推荐上一条 1/6 下一条

    About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

    站点相关: 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

    北京市海淀区知春路23号集成电路设计园量子银座1305 电话:(010)82350740 邮编:100191

    电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2021 EEWORLD.com.cn, Inc. All rights reserved
    快速回复 返回顶部 返回列表