【STM32单片机_(HAL库)】3-2-1【中断EXTI】【电动车报警器项目】继电器定时开闭

devtools/2024/9/24 10:49:20/

1.硬件

2.软件

  • 继电器模块alarm驱动文件添加
  • GPIO常用函数
  • 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);}
}
  • alarm.c程序
#include "alarm.h"
#include "sys.h"//初始化GPIO函数
void alarm_init(void)
{GPIO_InitTypeDef gpio_initstruct;//打开时钟__HAL_RCC_GPIOB_CLK_ENABLE();                           // 使能GPIOB时钟//调用GPIO初始化函数gpio_initstruct.Pin = GPIO_PIN_7;                       // 继电器I/O接对应的引脚PB7gpio_initstruct.Mode = GPIO_MODE_OUTPUT_PP;             // 推挽输出gpio_initstruct.Pull = GPIO_PULLUP;                     // 上拉gpio_initstruct.Speed = GPIO_SPEED_FREQ_HIGH;           // 高速HAL_GPIO_Init(GPIOB, &gpio_initstruct);//关闭LEDalarm_off();
}//闭合继电器的函数
void alarm_on(void)
{HAL_GPIO_WritePin(GPIOB, GPIO_PIN_7, GPIO_PIN_RESET);// 此继电器为低电平触发,拉低PB7引脚,闭合继电器
}//松开继电器的函数
void alarm_off(void)
{HAL_GPIO_WritePin(GPIOB, GPIO_PIN_7, GPIO_PIN_SET);// 此继电器为低电平触发,拉高PB7引脚,松开继电器
}//获取继电器状态的函数
uint8_t alarm_status_get(void)
{return (uint8_t)HAL_GPIO_ReadPin(GPIOB, GPIO_PIN_7);
}
  • alarm.h程序
#ifndef __ALARM_H__
#define __ALARM_H__#include "stdint.h"//包含uint8_t的头文件#define ALARM_STATUS_ON     0
#define ALARM_STATUS_OFF    1void alarm_init(void);
void alarm_on(void);
void alarm_off(void);
uint8_t alarm_status_get(void);#endif

3.实物效果

  • 硬件模块接线
    继电器I/O—>PB7
    继电器VCC—>3.3V
    继电器GND—>GND
    ST-Link下载方式
  • 实验现象
    继电器循环500ms断开,500ms闭合。
    在这里插入图片描述
    在这里插入图片描述

keil源文件


http://www.ppmy.cn/devtools/96405.html

相关文章

如何创建一个SpringBoot项目呢?SpringBoot有什么优点呢?

目录 一、SpringBoot的优点 二、SpringBoot项目的创建 (一)通过Idea创建 (二)通过网页来创建Spring Boot项目 三、SpringBoot的目录 拓展知识 Spring的诞生是为了简化Java代码的开发,而Spring Boot的诞生是为了简…

Labelme的安装与使用教程

文章目录 一、Labelme是什么?二、安装步骤1.新建虚拟环境2.安装Labelme3.Labelme的使用 三、json2yolo 一、Labelme是什么? Labelme是一个用于图像标注的开源工具,可以实现图像标注、语义分割、实例分割等。 本文记录一下labelme的安装与使…

Element UI详解

目录 Element UIElement UI 简介开发使用开发指南概述总结 设计原则组件使用特性使用场景优势不足 Element UI Element UI 简介 Element UI 是由饿了么前端团队开发的一套基于 Vue.js 的桌面端组件库。它提供了一系列丰富的 UI 组件,用于快速搭建企业级的 Web 应用…

在Moodle中集成ONLYOFFICE:学习管理+文档功能全面指南

一、引言 随着在线教育的发展,Moodle作为领先的开源学习管理系统,其灵活性和可扩展性为教育工作者提供了丰富的功能。而ONLYOFFICE文档服务器的加入,更是为Moodle用户带来了无缝的文档处理与协作体验。本文将详细指导您如何在Moodle中深度集成…

计算机毕业设计 健身房管理系统 Java+SpringBoot+Vue 前后端分离 文档报告 代码讲解 安装调试

🍊作者:计算机编程-吉哥 🍊简介:专业从事JavaWeb程序开发,微信小程序开发,定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事,生活就是快乐的。 🍊心愿:点…

docker save和docker export的区别

总结一下docker save和docker export的区别: docker save保存的是镜像(image),docker export保存的是容器(container);docker load用来载入镜像包,docker import用来载入容器包&…

EGL函数翻译--eglSwapBuffers

EGL函数翻译–eglSwapBuffers 函数名 EGLBoolean eglSwapBuffers(EGLDisplay display,EGLSurface surface);参数描述 display 指定 EGL 显示连接。 surface 指定要交换缓冲区的 EGL 绘图表面。 详细描述 如果 surface 是具有后备缓冲的窗口表面,则颜色缓冲区会…

【数据结构篇】~单链表(附源码)

【数据结构篇】~链表 链表前言链表的实现1.头文件2.源文件 链表前言 链表是一种物理存储结构上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。 1、链式机构在逻辑上是连续的,在物理结构上不一定连续​ 2、结点一般是从…