STM32-笔记7-继电器定时开闭
1、复制02项目,重命名08-继电器定时开闭
打开项目工程
在\Drivers\BSP\该路径下,新建alarm文件夹,该文件夹下里面包含alarm.c和alarm.h文件
加载进该项目中
为什么这里使用的是
这个单词,而不是继电器(relay)的单词?
因为:在很多项目中,继电器是要接其他固件的,比如在接下来的项目中,继电器是要接警报器的所以,不需要给与继电器本身的名字。
2、把alarm.c文件打开,把头文件更改为 #include alarm.h
编译程序
打开alarm.h文件
3、实现继电器定时开关闭(无返回值版)
alarm.c
#include "alarm.h"
#include "sys.h"//关于时钟的头文件
//初始化GPIO函数
void alarm_init(void)
{
GPIO_InitTypeDef gpio_initstruct;//定义一个结构体gpio_initstruct
//打开时钟
__HAL_RCC_GPIOB_CLK_ENABLE();
//调用GPIO初始化函数
gpio_initstruct.Mode = GPIO_MODE_OUTPUT_PP;//结构体函数的四种类型,引脚模式、引脚、引脚上拉下拉、引脚速度
gpio_initstruct.Pin = GPIO_PIN_7;
gpio_initstruct.Pull = GPIO_PULLUP;
gpio_initstruct.Speed = GPIO_SPEED_FREQ_HIGH;
HAL_GPIO_Init(GPIOB,&gpio_initstruct);
//关闭led
alarm_OFF();
}
//点亮LED1的函数
void alarm_ON(void)
{
//把GPIO口拉低,给一个低电平,点亮LED
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_7,GPIO_PIN_RESET);
}
//熄灭LED1的函数
void alarm_OFF(void)
{
//把GPIO口拉高,给一个高电平,点亮LED
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_7,GPIO_PIN_SET);
}
alarm.h
#ifndef __ALARM_H__
#define __ALARM_H__
void alarm_init(void);
void alarm_ON(void);
void alarm_OFF(void);
#endif
main.c
#include "sys.h"
#include "delay.h"
#include "led.h"
#include "alarm.h"
int main(void)
{
HAL_Init(); /* 初始化HAL库 */
stm32_clock_init(RCC_PLL_MUL9); /* 设置时钟, 72Mhz */
led_init();//初始化led灯
alarm_init();
while(1)
{
alarm_ON();
delay_ms(500);
alarm_OFF();
delay_ms(500);
}
}
4、实现继电器定时开关闭(有返回值版)
alarm.c
#include "alarm.h"
#include "sys.h"//关于时钟的头文件
//初始化GPIO函数
void alarm_init(void)
{
GPIO_InitTypeDef gpio_initstruct;//定义一个结构体gpio_initstruct
//打开时钟
__HAL_RCC_GPIOB_CLK_ENABLE();
//调用GPIO初始化函数
gpio_initstruct.Mode = GPIO_MODE_OUTPUT_PP;//结构体函数的四种类型,引脚模式、引脚、引脚上拉下拉、引脚速度
gpio_initstruct.Pin = GPIO_PIN_7;
gpio_initstruct.Pull = GPIO_PULLUP;
gpio_initstruct.Speed = GPIO_SPEED_FREQ_HIGH;
HAL_GPIO_Init(GPIOB,&gpio_initstruct);
//关闭led
alarm_OFF();
}
//点亮LED1的函数
void alarm_ON(void)
{
//把GPIO口拉低,给一个低电平,点亮LED
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_7,GPIO_PIN_RESET);
}
//熄灭LED1的函数
void alarm_OFF(void)
{
//把GPIO口拉高,给一个高电平,点亮LED
HAL_GPIO_WritePin(GPIOB,GPIO_PIN_7,GPIO_PIN_SET);
}
uint8_t alarm_status_get(void)
{
return (uint8_t)HAL_GPIO_ReadPin(GPIOB,GPIO_PIN_7);//返回这个引脚的状态//为什么使用强转
//因为:HAL_GPIO_ReadPin();函数使用的是GPIO_PinState;结构体类型,而这个函数使用的是uint8_t类型
}
alarm.h
#ifndef __ALARM_H__
#define __ALARM_H__
#include "stdint.h"
#define ALARM_STATUS_ON 0 //继电器低电平触发
#define ALARM_STATUS_OFF 1
void alarm_init(void);
void alarm_ON(void);
void alarm_OFF(void);
uint8_t alarm_status_get(void);
#endif