基于stm32c8t6的加湿器代码,寄存器版
时间: 2023-08-16 17:06:57 浏览: 110
基于stm32的加湿器设计
以下是一个基于STM32C8T6的加湿器代码,使用了寄存器编程方式:
```c
#include "stm32c8t6.h"
#define PUMP_PIN GPIO_PIN_0
#define PUMP_PORT GPIOA
#define HUMIDIFIER_PIN GPIO_PIN_1
#define HUMIDIFIER_PORT GPIOA
#define SENSOR_PIN GPIO_PIN_2
#define SENSOR_PORT GPIOA
#define THRESHOLD 500 //传感器阈值
void delay(unsigned int count)
{
unsigned int i;
for(i=0;i<count;i++);
}
void GPIO_Init(void)
{
//使能GPIOA时钟
RCC->AHBENR |= RCC_AHBENR_GPIOAEN;
//设置PA0和PA1为输出
GPIOA->MODER |= GPIO_MODER_MODE0_0 | GPIO_MODER_MODE1_0;
//设置PA2为输入
GPIOA->MODER &= ~GPIO_MODER_MODE2;
}
void ADC_Init(void)
{
//使能ADC时钟
RCC->APB2ENR |= RCC_APB2ENR_ADCEN;
//设置ADC时钟分频
RCC->CFGR2 |= RCC_CFGR2_ADCPRE12_DIV4;
//设置ADC采样时间
ADC1->SMPR |= ADC_SMPR_SMP_1 | ADC_SMPR_SMP_0;
//设置ADC通道
ADC1->CHSELR |= ADC_CHSELR_CHSEL2;
//使能ADC
ADC1->CR |= ADC_CR_ADEN;
while(!(ADC1->ISR & ADC_ISR_ADRDY));
}
void startPump(void)
{
GPIOA->BSRR |= PUMP_PIN;
}
void stopPump(void)
{
GPIOA->BRR |= PUMP_PIN;
}
void startHumidifier(void)
{
GPIOA->BSRR |= HUMIDIFIER_PIN;
}
void stopHumidifier(void)
{
GPIOA->BRR |= HUMIDIFIER_PIN;
}
int readSensor(void)
{
ADC1->CR |= ADC_CR_ADSTART;
while(!(ADC1->ISR & ADC_ISR_EOC));
return ADC1->DR;
}
int main(void)
{
int value;
GPIO_Init();
ADC_Init();
while(1)
{
value = readSensor();
if(value > THRESHOLD)
{
stopPump();
stopHumidifier();
}
else
{
startPump();
startHumidifier();
}
delay(1000); //延时1秒
}
}
```
上面的代码实现了一个简单的加湿器控制,通过读取传感器的值判断是否需要启动水泵和加湿器。其中,GPIO_Init()函数用于初始化GPIO,ADC_Init()函数用于初始化ADC,startPump()和stopPump()函数用于启动和停止水泵,startHumidifier()和stopHumidifier()函数用于启动和停止加湿器,readSensor()函数用于读取传感器的值,delay()函数用于延时。在主函数中,通过循环不断读取传感器的值,并根据阈值判断是否需要启动水泵和加湿器。
阅读全文