tubujia

  • 2018-12-25
  • 回复了主题帖: LPS22HB代码移植

    已解决,目前最新的官方代码有问题,用老版本ok,结帖。

  • 2018-12-24
  • 回复了主题帖: 求LPS22HB压力传感器驱动

    明白了,未配置默认是4线。

  • 回复了主题帖: LPS22HB代码移植

    littleshrimp 发表于 2018-12-24 13:23 这个是我之前的测试代码,接口是I2C,你通过SPI如果能读取正确的温度值说明通信应该没有问题 安全起见你可 ...
    非常感谢,是不是由于没有等待P_DA位为1,我回去试下。另外如果读P_DA还需要看DRDY信号吗?

  • 回复了主题帖: LPS22HB代码移植

    先自顶一发了:loveliness:

  • 发表了主题帖: LPS22HB代码移植

    大家好,我最近在使用lps22hb这颗芯片,发现读到的压力值不对,只有0.7kPa,温度值正确。 官方提供了read_data_simple.c的例程,使用的是cube平台,我想使用smt32的库函数。我修改了原文中的platform_write和platform_read两个函数,如下: /********************************************************************* * SPI1_Init : LPS22HB *********************************************************************/ void SPI1_Init(void) {         GPIO_InitTypeDef GPIO_InitStructure;           SPI_InitTypeDef SPI_InitStructure;         RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_SPI1, ENABLE);                 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7; // SCK/MISO/MOSI                                                                                  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;                     // 复用推挽输出         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;         GPIO_Init(GPIOA, &GPIO_InitStructure);                 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4;                        // CS         GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;                 // 推挽输出         GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;         GPIO_Init(GPIOA, &GPIO_InitStructure);                GPIO_SetBits(GPIOA, GPIO_Pin_4);                                 // CS拉高                SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex; // 全双工                                                                                  SPI_InitStructure.SPI_Mode = SPI_Mode_Master;                         // 主机模式         SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;                // 8位帧结构         SPI_InitStructure.SPI_CPOL = SPI_CPOL_High;                                 // 串行同步时钟的空闲状态为高电平         SPI_InitStructure.SPI_CPHA = SPI_CPHA_2Edge;                         // 串行同步时钟的第2个跳变沿(上升或下降)数据被采样         SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;                                 // NSS信号由软件(SSI位)控制, 片选         SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_256; // 波特率预分频值为256, 72M/256=281.25K                                                                                  SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;                     // 数据传输从MSB位开始         SPI_InitStructure.SPI_CRCPolynomial = 7;                             // CRC值计算的多项式         SPI_Init(SPI1, &SPI_InitStructure);                              // 根据SPI_InitStruct中指定的参数初始化外设SPIx寄存器         SPI_Cmd(SPI1, ENABLE);                                           // 使能SPI外设          } /********************************************************************* * SPI1 speed setting * SPI_BaudRatePrescaler_2   2分频    * SPI_BaudRatePrescaler_8   8分频    * SPI_BaudRatePrescaler_16  16分频   * SPI_BaudRatePrescaler_256 256分频 *********************************************************************/ /*void SPI1_SetSpeed(u8 SPI_BaudRatePrescaler) {           assert_param(IS_SPI_BAUDRATE_PRESCALER(SPI_BaudRatePrescaler));         SPI1->CR1 &= 0XFFC7;         SPI1->CR1 |= SPI_BaudRatePrescaler;                                     // 设置SPI1速度         SPI_Cmd(SPI1,ENABLE); }*/ u8 SPIx_Send_Byte(SPI_TypeDef* SPIx, u8 dat) {         u8 retry = 0;                                                                                  // 超时处理, 避免程序死在这里         while(SPI_I2S_GetFlagStatus(SPIx, SPI_I2S_FLAG_TXE) == RESET)    // 检查指定的SPI标志位设置与否: 发送缓存空标志位, 为1表示空         {                 retry++;                 if(retry > 200)                         return 0;         }                SPI_I2S_SendData(SPIx, dat);                                     // 通过外设SPIx发送1字节         retry = 0;         while(SPI_I2S_GetFlagStatus(SPIx, SPI_I2S_FLAG_RXNE) == RESET)   // 检查指定的SPI标志位设置与否: 接收缓存非空标志位, 为1表示包含有效数据         {                 retry++;                 if(retry > 200)                         return 0;         }                return SPI_I2S_ReceiveData(SPIx);                                // 返回SPIx最近接收的数据                                             } void SPIx_Send_nByte(SPI_TypeDef* SPIx, u8 *buf, u16 len) {         u16 i;         for (i=0; i

  • 回复了主题帖: 求LPS22HB压力传感器驱动

    楼主你好,请问使用spi需不需要配置3线或者4线啊?我见官方提供的例程代码没有进行配置。我改写了这个代码,读出来的压力值不对,只有0.7kPa,温度值好像是对的。请指教,谢谢。 https://github.com/STMicroelectr ... /read_data_simple.c

最近访客

< 1/1 >

统计信息

已有1人来访过

  • 芯币:27
  • 好友:--
  • 主题:1
  • 回复:6
  • 课时:--
  • 资源:--

留言

你需要登录后才可以留言 登录 | 注册


现在还没有留言