原理图温度传感器原理图其中芯片可以通过SCL和SDA引脚通过I2C通信向温度传感器指定地址获取温度的模拟量再利用公式将模拟量转换成相应温度即可实验板接口原理图模拟量转相应温度公式CubMx配置Keil配置Function:#includeFunction.h#includeoled.h#includei2c.hvoidOLED_Write(unsignedchartype,unsignedchardata){unsignedcharWrite_Data[2];Write_Data[0]type;Write_Data[1]data;HAL_I2C_Master_Transmit(hi2c3,0x78,Write_Data,2,0xff);}voidFunction_OledEnable(unsignedcharms){HAL_GPIO_WritePin(OLED_POWER_GPIO_Port,OLED_POWER_Pin,GPIO_PIN_RESET);HAL_Delay(ms);OLED_Init();}floatFunction_GetTemp(void){unsignedchardata[3];data[0]0x24;data[1]0x0B;// 地址HAL_I2C_Master_Transmit(hi2c1,0x94,data,2,10);// 通过I2C传输向特定地址获取温度HAL_Delay(5);HAL_I2C_Master_Receive(hi2c1,0x95,data,3,10);// 获取到数值return(float)(data[0]8|data[1])*175.0/65535-45;// 获取的数值是16位 8 等效于 * 2 ^ 8}#ifndef__Function__#define__FUNCTION__voidOLED_Write(unsignedchartype,unsignedchardata);voidFunction_OledEnable(unsignedcharms);floatFunction_GetTemp(void);#endifmain:#includemain.h#includei2c.h#includegpio.h#includeoled.h#includeFunction.hvoidSystemClock_Config(void);intmain(void){HAL_Init();SystemClock_Config();MX_GPIO_Init();MX_I2C1_Init();MX_I2C3_Init();Function_OledEnable(50);while(1){OLED_ShowNumber(0,0,12345,5,16);OLED_ShowNumber(0,2,(uint32_t)Function_GetTemp(),3,16);}}voidSystemClock_Config(void){RCC_OscInitTypeDef RCC_OscInitStruct{0};RCC_ClkInitTypeDef RCC_ClkInitStruct{0};RCC_PeriphCLKInitTypeDef PeriphClkInit{0};__HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1);RCC_OscInitStruct.OscillatorTypeRCC_OSCILLATORTYPE_HSI;RCC_OscInitStruct.HSIStateRCC_HSI_ON;RCC_OscInitStruct.HSICalibrationValueRCC_HSICALIBRATION_DEFAULT;RCC_OscInitStruct.PLL.PLLStateRCC_PLL_ON;RCC_OscInitStruct.PLL.PLLSourceRCC_PLLSOURCE_HSI;RCC_OscInitStruct.PLL.PLLMULRCC_PLLMUL_4;RCC_OscInitStruct.PLL.PLLDIVRCC_PLLDIV_2;if(HAL_RCC_OscConfig(RCC_OscInitStruct)!HAL_OK){Error_Handler();}RCC_ClkInitStruct.ClockTypeRCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK|RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;RCC_ClkInitStruct.SYSCLKSourceRCC_SYSCLKSOURCE_PLLCLK;RCC_ClkInitStruct.AHBCLKDividerRCC_SYSCLK_DIV1;RCC_ClkInitStruct.APB1CLKDividerRCC_HCLK_DIV1;RCC_ClkInitStruct.APB2CLKDividerRCC_HCLK_DIV1;if(HAL_RCC_ClockConfig(RCC_ClkInitStruct,FLASH_LATENCY_1)!HAL_OK){Error_Handler();}PeriphClkInit.PeriphClockSelectionRCC_PERIPHCLK_I2C1|RCC_PERIPHCLK_I2C3;PeriphClkInit.I2c1ClockSelectionRCC_I2C1CLKSOURCE_PCLK1;PeriphClkInit.I2c3ClockSelectionRCC_I2C3CLKSOURCE_PCLK1;if(HAL_RCCEx_PeriphCLKConfig(PeriphClkInit)!HAL_OK){Error_Handler();}}voidError_Handler(void){__disable_irq();while(1){}}效果
蓝桥杯物联网竞赛_STM32L071_10_温度传感器扩展模块
原理图温度传感器原理图其中芯片可以通过SCL和SDA引脚通过I2C通信向温度传感器指定地址获取温度的模拟量再利用公式将模拟量转换成相应温度即可实验板接口原理图模拟量转相应温度公式CubMx配置Keil配置Function:#includeFunction.h#includeoled.h#includei2c.hvoidOLED_Write(unsignedchartype,unsignedchardata){unsignedcharWrite_Data[2];Write_Data[0]type;Write_Data[1]data;HAL_I2C_Master_Transmit(hi2c3,0x78,Write_Data,2,0xff);}voidFunction_OledEnable(unsignedcharms){HAL_GPIO_WritePin(OLED_POWER_GPIO_Port,OLED_POWER_Pin,GPIO_PIN_RESET);HAL_Delay(ms);OLED_Init();}floatFunction_GetTemp(void){unsignedchardata[3];data[0]0x24;data[1]0x0B;// 地址HAL_I2C_Master_Transmit(hi2c1,0x94,data,2,10);// 通过I2C传输向特定地址获取温度HAL_Delay(5);HAL_I2C_Master_Receive(hi2c1,0x95,data,3,10);// 获取到数值return(float)(data[0]8|data[1])*175.0/65535-45;// 获取的数值是16位 8 等效于 * 2 ^ 8}#ifndef__Function__#define__FUNCTION__voidOLED_Write(unsignedchartype,unsignedchardata);voidFunction_OledEnable(unsignedcharms);floatFunction_GetTemp(void);#endifmain:#includemain.h#includei2c.h#includegpio.h#includeoled.h#includeFunction.hvoidSystemClock_Config(void);intmain(void){HAL_Init();SystemClock_Config();MX_GPIO_Init();MX_I2C1_Init();MX_I2C3_Init();Function_OledEnable(50);while(1){OLED_ShowNumber(0,0,12345,5,16);OLED_ShowNumber(0,2,(uint32_t)Function_GetTemp(),3,16);}}voidSystemClock_Config(void){RCC_OscInitTypeDef RCC_OscInitStruct{0};RCC_ClkInitTypeDef RCC_ClkInitStruct{0};RCC_PeriphCLKInitTypeDef PeriphClkInit{0};__HAL_PWR_VOLTAGESCALING_CONFIG(PWR_REGULATOR_VOLTAGE_SCALE1);RCC_OscInitStruct.OscillatorTypeRCC_OSCILLATORTYPE_HSI;RCC_OscInitStruct.HSIStateRCC_HSI_ON;RCC_OscInitStruct.HSICalibrationValueRCC_HSICALIBRATION_DEFAULT;RCC_OscInitStruct.PLL.PLLStateRCC_PLL_ON;RCC_OscInitStruct.PLL.PLLSourceRCC_PLLSOURCE_HSI;RCC_OscInitStruct.PLL.PLLMULRCC_PLLMUL_4;RCC_OscInitStruct.PLL.PLLDIVRCC_PLLDIV_2;if(HAL_RCC_OscConfig(RCC_OscInitStruct)!HAL_OK){Error_Handler();}RCC_ClkInitStruct.ClockTypeRCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK|RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;RCC_ClkInitStruct.SYSCLKSourceRCC_SYSCLKSOURCE_PLLCLK;RCC_ClkInitStruct.AHBCLKDividerRCC_SYSCLK_DIV1;RCC_ClkInitStruct.APB1CLKDividerRCC_HCLK_DIV1;RCC_ClkInitStruct.APB2CLKDividerRCC_HCLK_DIV1;if(HAL_RCC_ClockConfig(RCC_ClkInitStruct,FLASH_LATENCY_1)!HAL_OK){Error_Handler();}PeriphClkInit.PeriphClockSelectionRCC_PERIPHCLK_I2C1|RCC_PERIPHCLK_I2C3;PeriphClkInit.I2c1ClockSelectionRCC_I2C1CLKSOURCE_PCLK1;PeriphClkInit.I2c3ClockSelectionRCC_I2C3CLKSOURCE_PCLK1;if(HAL_RCCEx_PeriphCLKConfig(PeriphClkInit)!HAL_OK){Error_Handler();}}voidError_Handler(void){__disable_irq();while(1){}}效果