智能垃圾桶
项目下载请参见
stm32cubemx建立新project
选择芯片stm32f103c8
配置RCC
配置PA2为ADC输入引脚
配置ADC如图
红线标的位置使能,其余默认
注意
想要使能scane conversion mode需要先配置number ofconversion
作者:primerchange
-------------------------------------------
个性签名:有趣的灵魂万里挑一,好看的皮囊也万里挑一
如果觉得这篇文章对你有小小的帮助的话,记得在右下角点个“推荐”哦,博主在此感谢!
万水千山总是情,打赏一分行不行,所以如果你心情还比较高兴,也是可以扫码打赏博主,哈哈哈(っ•̀ω•́)っ✎⁾⁾!
pwm引脚定义
配置时钟树
注意标注的地方
tim4配置
注意勾选 internal clock
注意channel4通道选择PWM gerneration模式
-
输出频率方法
- Fpwm = 72M / ((arr+1)*(psc+1))
-
占空比
- duty circle = CCR / arr
- duty circle = CCR / arr
DH-11data引脚(PC13)
初始状态设置输出
生成MDK project
- 注意彩色笔标注
- 点击生成project
代码撰写
main.c中加入如下代码
- 引入头文件(原子库delay)
/* USER CODE BEGIN Includes */
#include "./dht11/bsp_dht11.h"
#include "delay.h"
/* USER CODE END Includes */
- 主函数中加入
- 初始化变量
/* USER CODE BEGIN 1 */
uint32_t ADC_Value[100];
uint8_t i;
uint32_t ad;
float advalue;
DHT11_Data_TypeDef DHT11_Data;
/* USER CODE END 1 */
- 初始化接口
/* USER CODE BEGIN 2 */
HAL_TIM_PWM_Start(&htim4,TIM_CHANNEL_4);
HAL_ADC_Start_DMA(&hadc1, (uint32_t*)&ADC_Value, 100);
DH_11_init(); //DHT11初始化
- 初始状态
__HAL_TIM_SET_COMPARE(&htim4, TIM_CHANNEL_4, 2500);
HAL_Delay(500);
__HAL_TIM_SET_COMPARE(&htim4, TIM_CHANNEL_4, 500);
HAL_Delay(500);
- while(1)中加入
DHT11_Data=DHT_ShowData();
for(i = 0,ad =0; i < 100;)
{
ad+= ADC_Value[i++];
}
ad /= 100;
advalue = ((float)ad*3.3)/4096;
printf(" AD1 value = %fV \r\n", advalue);
if(advalue>1.2)
{
__HAL_TIM_SET_COMPARE(&htim4, TIM_CHANNEL_4, 500);
HAL_Delay(500);
}
else if(DHT11_Data.temp>500)
{
__HAL_TIM_SET_COMPARE(&htim4, TIM_CHANNEL_4, 1500);
HAL_Delay(500);
}
else
{
__HAL_TIM_SET_COMPARE(&htim4, TIM_CHANNEL_4, 2500);
HAL_Delay(500);
}
- 工程中加入bsp_dht11.c和delay.c
编译运行即可