【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 *)®, 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 ) );
}
}
}
|