版本协议

Public Domain

专业版
#第九届立创电赛##第九届立创电赛#温湿度测试

创建时间:9个月前

349 0

描述

<h3>1、项目功能介绍</h3> <p>温湿度测量仪项目使用STM32G030K6T6芯片作为主控芯片,Arm Cortex-M0+内核,最大主频64Mhz,具有32KB的Flash、8K的SRAM,供电电压在2.0V~3.6V。 使用IIC通信,采集来自sht40传感器的温湿度数据,通过74HC595让数码管显示温湿度数据。 空闲时间进入低功耗睡眠模式,按键进入正常运行模式,运行结束自动进入低功耗睡眠模式,等待按键唤醒。 利用IP5306给锂电池充电,锂电池(3.0-4.2V),Type-c接口用于充电锂电池及供电运行电路。 并加入了LED灯珠备用照明。</p> <h3>2、项目属性</h3> <p>首次公开</p> <h3>3、开源协议</h3> <p>Public Domain</p> <p>权利/权益不为个人或团体所有,这些知识发明属于公有文化遗产。</p> <h3>4、硬件部分</h3> <p><img src="//image.lceda.cn/oshwhub/aeeab69f377f48c38a785e6e0e41d61b.png" alt="image.png"></p> <h3>5、软件部分</h3> <h1>include "main.h"</h1> <h1>include "adc.h"</h1> <h1>include "i2c.h"</h1> <h1>include "tim.h"</h1> <h1>include "gpio.h"</h1> <p>void SystemClock_Config(void); struct DEVICE_PARAMTER device_paramter = {0}; int main(void) { /<em> USER CODE BEGIN 1 </em>/ float temperature = 0;<br> float humidity = 0; /<em> USER CODE END 1 </em>/ HAL_Init(); SystemClock_Config(); HAL_DeInit(); MX_GPIO_Init();<br> MX_ADC1_Init(); MX_I2C1_Init(); MX_TIM14_Init(); /<em> USER CODE BEGIN 2 </em>/ HAL_Delay(100); SN74HC595_Send_Data(SN_DIG,0xFF); //关闭数码管显示 SN74HC595_Send_Data(SN_LED1,0x00); SN74HC595_Send_Data(SN_LED2,0x00);</p> <p>/<em> USER CODE END 2 </em>/ HAL_SuspendTick(); //暂停滴答定时器,防止通过滴答定时器中断唤醒 HAL_PWR_EnterSLEEPMode(PWR_MAINREGULATOR_ON, PWR_SLEEPENTRY_WFI); /<em> 执行WFI指令, 进入睡眠模式 </em>/ /<em> Infinite loop </em>/ /<em> USER CODE BEGIN WHILE </em>/ while (1) { /<em> USER CODE END WHILE </em>/</p> <pre><code>/* USER CODE BEGIN 3 */ if(device_paramter.KeyStatus == KEY_SHAKE_STATE) { HAL_Delay(10); if(HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_5) == GPIO_PIN_RESET) { while(HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_5) == GPIO_PIN_RESET); SHT40_Read_RHData(&amp;temperature,&amp;humidity); //读温湿度 device_paramter.Temp = temperature * 10; //放大温湿度 device_paramter.Humi = humidity * 10; HAL_TIM_Base_Start_IT(&amp;htim14); //开始定时器,显示数据 device_paramter.sleepStatus = 0; //清除休眠标志 device_paramter.KeyStatus = KEY_NO_PRESS; //清除按下标志 } } else if(device_paramter.sleepStatus == 1) //显示结束,进入休眠 { HAL_SuspendTick(); //暂停滴答定时器 HAL_PWR_EnterSLEEPMode(PWR_MAINREGULATOR_ON, PWR_SLEEPENTRY_WFI); // 执行WFI指令, 进入睡眠模式 }</code></pre> <p>} /<em> USER CODE END 3 </em>/ }</p> <p>/**</p> <ul> <li>@brief System Clock Configuration</li> <li> <p>@retval None */ void SystemClock_Config(void) { RCC_OscInitTypeDef RCC_OscInitStruct = {0}; RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};</p> <p>/*<em> Configure the main internal regulator output voltage </em>/ HAL_PWREx_ControlVoltageScaling(PWR_REGULATOR_VOLTAGE_SCALE1);</p> <p>/** Initializes the RCC Oscillators according to the specified parameters</p> </li> <li> <p>in the RCC_OscInitTypeDef structure. */ RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI; RCC_OscInitStruct.HSIState = RCC_HSI_ON; RCC_OscInitStruct.HSIDiv = RCC_HSI_DIV1; RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT; RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSI; RCC_OscInitStruct.PLL.PLLM = RCC_PLLM_DIV1; RCC_OscInitStruct.PLL.PLLN = 8; RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2; RCC_OscInitStruct.PLL.PLLR = RCC_PLLR_DIV2; if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) { Error_Handler(); }</p> <p>/*<em> Initializes the CPU, AHB and APB buses clocks </em>/ RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK |RCC_CLOCKTYPE_PCLK1; RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV1;</p> <p>if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2) != HAL_OK) { Error_Handler(); } }</p> </li> </ul> <p>/<em> USER CODE BEGIN 4 </em>/</p> <p>/<em> USER CODE END 4 </em>/</p> <p>/**</p> <ul> <li>@brief This function is executed in case of error occurrence.</li> <li>@retval None <em>/ void Error_Handler(void) { /</em> USER CODE BEGIN Error_Handler_Debug <em>/ /</em> User can add his own implementation to report the HAL error return state <em>/ __disable_irq(); while (1) { } /</em> USER CODE END Error_Handler_Debug */ }</li> </ul> <h1>ifdef USE_FULL_ASSERT</h1> <p>/**</p> <ul> <li>@brief Reports the name of the source file and the source line number</li> <li>where the assert_param error has occurred.</li> <li>@param file: pointer to the source file name</li> <li>@param line: assert_param error line source number</li> <li>@retval None <em>/ void assert_failed(uint8_t </em>file, uint32_t line) { /<em> USER CODE BEGIN 6 </em>/ /<em> User can add his own implementation to report the file name and line number, ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) </em>/ /<em> USER CODE END 6 </em>/ } <h1>endif /<em> USE_FULL_ASSERT </em>/</h1></li> </ul> <h3>7、大赛LOGO验证</h3> <p><img src="//image.lceda.cn/oshwhub/70368304f1cb401c9987786e6318fe09.png" alt="image.png"></p>
  • 演示视频2.mp4

  • 演示视频1.mp4

文档

BOM

暂无

附件

附件名 下载
演示视频2.mp4
演示视频1.mp4

成员

评论(0)

  • 表情
    emoji
    小嘉工作篇
    小嘉日常篇
  • 图片
成功
工程所有者当前已关闭评论
goToTop
svg-battery svg-battery-wifi svg-books svg-more svg-paste svg-pencil svg-plant svg-ruler svg-share svg-user svg-logo-cn svg-double-arrow