STM32——继电器控制灯的开关

文章目录

  • STM32——继电器控制灯的开关
    • 继电器控制灯的开关
    • 项目概述:
      • 环境概述:
    • 项目的开始:
      • 第一步:
      • 第二步:
    • 1、配置GPIOA时钟
    • 2、GPIOA3的结构体配置
    • 3、初始化
    • 项目代码:
    • 总结:

继电器原理就不介绍了

继电器控制灯的开关

项目概述:

环境概述:

Windows10 专业版

MDK—Lite 5.25

项目的开始:

在固件库 USER 中文件夹

添加XXX文件夹 在该文件夹中添加xx.c文件以及xx.h文件

再导入进去

第一步:

第二步:

在led.c文件中导入led.h文件,先写入包含头文件,再编译,就自动导入进去了

1、配置GPIOA时钟

配置GPIOA时钟 要去RCC去寻找APB2的配置的时钟

如何去寻找呢???

打开FWLB文件

找到该图中的文件

再继续查找rcc.h文件

//APB2的外设时钟,有两个参数,第一个参数是IO口 GPIOA,第二个参数 打开
RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOA,ENABLE);

第一个参数怎么找呢?

继续在rcc.h文件中寻找该参数

第二个参数怎么找呢?

2、GPIOA3的结构体配置

我们去找GPIOA的配置文件

去找到gpio.h文件

如图:

代码:

typedef struct
{uint16_t GPIO_Pin;             /*!< Specifies the GPIO pins to be configured.This parameter can be any value of @ref GPIO_pins_define */GPIOSpeed_TypeDef GPIO_Speed;  /*!< Specifies the speed for the selected pins.This parameter can be a value of @ref GPIOSpeed_TypeDef */GPIOMode_TypeDef GPIO_Mode;    /*!< Specifies the operating mode for the selected pins.This parameter can be a value of @ref GPIOMode_TypeDef */
}GPIO_InitTypeDef;

代码:

typedef enum
{ GPIO_Speed_10MHz = 1,GPIO_Speed_2MHz, GPIO_Speed_50MHz
}GPIOSpeed_TypeDef;

代码:

typedef enum
{ GPIO_Mode_AIN = 0x0,//模拟输入GPIO_Mode_IN_FLOATING = 0x04,//浮空输入GPIO_Mode_IPD = 0x28,//下拉输入GPIO_Mode_IPU = 0x48,//上拉输入GPIO_Mode_Out_OD = 0x14,//开漏输出GPIO_Mode_Out_PP = 0x10,//推挽输出GPIO_Mode_AF_OD = 0x1C,//推挽复用GPIO_Mode_AF_PP = 0x18//开漏复用
}GPIOMode_TypeDef;

GPIO端口各种模式的区别

(1)GPIO_Mode_AIN 模拟输入

(2)GPIO_Mode_IN_FLOATING 浮空输入

(3)GPIO_Mode_IPD 下拉输入

(4)GPIO_Mode_IPU 上拉输入

(5)GPIO_Mode_Out_OD 开漏输出

(6)GPIO_Mode_Out_PP 推挽输出

(7)GPIO_Mode_AF_OD 复用开漏输出

(8)GPIO_Mode_AF_PP 复用推挽输出


引脚的相关配置

代码:

#define GPIO_Pin_0                 ((uint16_t)0x0001)  /*!< Pin 0 selected */
#define GPIO_Pin_1                 ((uint16_t)0x0002)  /*!< Pin 1 selected */
#define GPIO_Pin_2                 ((uint16_t)0x0004)  /*!< Pin 2 selected */
#define GPIO_Pin_3                 ((uint16_t)0x0008)  /*!< Pin 3 selected */
#define GPIO_Pin_4                 ((uint16_t)0x0010)  /*!< Pin 4 selected */
#define GPIO_Pin_5                 ((uint16_t)0x0020)  /*!< Pin 5 selected */
#define GPIO_Pin_6                 ((uint16_t)0x0040)  /*!< Pin 6 selected */
#define GPIO_Pin_7                 ((uint16_t)0x0080)  /*!< Pin 7 selected */
#define GPIO_Pin_8                 ((uint16_t)0x0100)  /*!< Pin 8 selected */
#define GPIO_Pin_9                 ((uint16_t)0x0200)  /*!< Pin 9 selected */
#define GPIO_Pin_10                ((uint16_t)0x0400)  /*!< Pin 10 selected */
#define GPIO_Pin_11                ((uint16_t)0x0800)  /*!< Pin 11 selected */
#define GPIO_Pin_12                ((uint16_t)0x1000)  /*!< Pin 12 selected */
#define GPIO_Pin_13                ((uint16_t)0x2000)  /*!< Pin 13 selected */
#define GPIO_Pin_14                ((uint16_t)0x4000)  /*!< Pin 14 selected */
#define GPIO_Pin_15                ((uint16_t)0x8000)  /*!< Pin 15 selected */
#define GPIO_Pin_All               ((uint16_t)0xFFFF)  /*!< All pins selected */
//2、GPIOA3的结构体配置Relay_GPIOInit.GPIO_Mode = GPIO_Mode_Out_PP;Relay_GPIOInit.GPIO_Pin  = GPIO_Pin_3;Relay_GPIOInit.GPIO_Speed = GPIO_Speed_10MHz;

3、初始化

在GPIO.h文件中查找该函数

配置完后代码:

#include "stm32f10x.h"
#include "Relay.h"void Relay_Init(void)
{/* 连接那个IO口就去找对应的时钟打开它,我们在外部连接PA3,所以要打开GPIOA时钟*///1、使能GPIOA时钟GPIO_InitTypeDef  Relay_GPIOInit;//APB2的外设时钟,有两个参数,第一个参数是IO口 GPIOA,第二个参数 打开RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOA,ENABLE);
//2、GPIOA3的结构体配置Relay_GPIOInit.GPIO_Mode = GPIO_Mode_Out_PP;Relay_GPIOInit.GPIO_Pin  = GPIO_Pin_3;Relay_GPIOInit.GPIO_Speed = GPIO_Speed_10MHz;//3、初始化GPIO_Init(GPIOA,&Relay_GPIOInit );}

写完后文件后,在main.c文件中添加 头文件 以及路径

在main函数中设置低电平

GPIO_ResetBits(GPIOA, GPIO_3);

代码:

void GPIO_DeInit(GPIO_TypeDef* GPIOx);
void GPIO_AFIODeInit(void);
void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct);
void GPIO_StructInit(GPIO_InitTypeDef* GPIO_InitStruct);
uint8_t GPIO_ReadInputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
uint16_t GPIO_ReadInputData(GPIO_TypeDef* GPIOx);
uint8_t GPIO_ReadOutputDataBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
uint16_t GPIO_ReadOutputData(GPIO_TypeDef* GPIOx);
void GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);//拉高电平
void GPIO_ResetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);//拉低电平
void GPIO_WriteBit(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, BitAction BitVal);
void GPIO_Write(GPIO_TypeDef* GPIOx, uint16_t PortVal);
void GPIO_PinLockConfig(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);
void GPIO_EventOutputConfig(uint8_t GPIO_PortSource, uint8_t GPIO_PinSource);
void GPIO_EventOutputCmd(FunctionalState NewState);
void GPIO_PinRemapConfig(uint32_t GPIO_Remap, FunctionalState NewState);
void GPIO_EXTILineConfig(uint8_t GPIO_PortSource, uint8_t GPIO_PinSource);
void GPIO_ETH_MediaInterfaceConfig(uint32_t GPIO_ETH_MediaInterface);

项目代码:

main.c文件代码:

#include "stm32f10x.h"
#include "led.h"
#include "Relay.h"int main(void)
{ LED_Init();Relay_Init();while(1){GPIO_ResetBits(GPIOA, GPIO_Pin_3);}}

led.c代码:

#include "led.h"
#include "stm32f10x.h"void LED_Init(void)
{ GPIO_InitTypeDef init_led;//1、使能APB2的时钟GPIOCRCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);//2、GPIO_OUT 设置输出引脚init_led.GPIO_Mode=GPIO_Mode_Out_PP;init_led.GPIO_Pin=GPIO_Pin_13;init_led.GPIO_Speed=GPIO_Speed_10MHz;//3、GPIO_LOW 设置低电平引脚GPIO_Init(GPIOC, &init_led);
}void delayTime(uint16_t time)
{uint16_t i=0;while(time--){i=12000;while(i--);}
}
/*
void main_led()
{LED_Init();while(1){GPIO_ResetBits(GPIOC, GPIO_Pin_13);delayTime(1000);GPIO_SetBits(GPIOC, GPIO_Pin_13);delayTime(1000);for(int i=0;i<=5;i++){GPIO_ResetBits(GPIOC, GPIO_Pin_13);delayTime(100);GPIO_SetBits(GPIOC, GPIO_Pin_13);delayTime(100);}GPIO_ResetBits(GPIOC, GPIO_Pin_13);delayTime(1000);GPIO_SetBits(GPIOC, GPIO_Pin_13);delayTime(1000);}}
*/

led.h代码:

#include "stm32f10x.h"
void LED_Init(void);
void delayTime(uint16_t time);

Relay.c代码:

#include "stm32f10x.h"
#include "Relay.h"void Relay_Init(void)
{/* 连接那个IO口就去找对应的时钟打开它,我们在外部连接PA3,所以要打开GPIOA时钟*///1、使能GPIOA时钟GPIO_InitTypeDef  Relay_GPIOInit;//APB2的外设时钟,有两个参数,第一个参数是IO口 GPIOA,第二个参数 打开RCC_APB2PeriphClockCmd( RCC_APB2Periph_GPIOA,ENABLE);
//2、GPIOA3的结构体配置Relay_GPIOInit.GPIO_Mode = GPIO_Mode_Out_PP;Relay_GPIOInit.GPIO_Pin  = GPIO_Pin_3;Relay_GPIOInit.GPIO_Speed = GPIO_Speed_10MHz;//3、初始化GPIO_Init(GPIOA,&Relay_GPIOInit );}

Relay.h代码:

#ifndef _RELAY_H_
#define _RELAY_H_
#include "stm32f10x.h"
void Relay_Init(void);#endif

总结:

学习的路上,不要学太快,看视频很过瘾,但要注意实战和记录任何视频中的内容

以及自己的心得体会

STM32——继电器控制灯的开关相关推荐

  1. 智能家居 (3) ——智能家居工厂模式介绍实现继电器控制灯

    目录 智能家居工厂模式整体设计框架 继电器控制灯代码 contrlEquipments.h 文件(设备类) mainPro.c 文件(主函数) bathroomLight.c 文件(浴室灯) seco ...

  2. 一个按钮控制灯的开关

    一个按钮控制灯的开关 可以通过Simulator进行模拟展示

  3. 智能家居-基于香橙派zreo2——手把手搭建、继电器控制灯(一)

    一.什么是设计模式 设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用.设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案.这些解决方案是 ...

  4. 【项目实战】——USB双路继电器电脑控制灯的开关(Python)

    环境:window10.Python3.7.9 依赖库:pyserial 硬件:220V灯带.220V吊灯.USB双路继电器.电笔 1.安装Python第三方库pyserial 2.清楚插座的零火线( ...

  5. android控制手机强制手机横竖方向,使用android IOIO和安卓手机制作视频遥控小车(控制灯的开关、实时视频传输、方向控制)...

    android IOIO是通过安卓手机的USB接口控制的电路板,通过android IOIO可以不需要太多的硬件知识,通过安卓手机转接的IOIO板控制外围设备,配件有纸盒.L298N电机驱动模块.旧手 ...

  6. STM32——继电器控制

    低电平触发继电器 relay.c文件 #include "relay.h" #include "stm32f10x.h" void Relay_Init(voi ...

  7. python控制灯_Python 控制树莓派 GPIO 输出:控制 LED 灯

    树莓派 GPIO 控制输出的入门应该都是从控制 LED 灯开始的吧. 树莓派版本:Model 3B+ 树莓派系统:Raspbian Stretch with desktop and recommend ...

  8. STM32按钮控制LED灯的开关

    Hi, I'm Shendi 在之前已经可以控制 PC13 LED灯了,这次加上按钮来控制 首先上效果 STM32按钮控制LED 我使用的是四脚按钮,默认引脚弯折相同的相通,不同不同,按下后四脚都通 ...

  9. 智能灯控制页面用HTML编写,一种基于STM32的智能灯控制系统的制作方法

    本发明涉及电子系统控制领域,具体是一种基于STM32的智能灯控制系统. 背景技术: 随着我国教育业的发展,学校照明用电量急速增加,电能损失也呈现出增大的趋势.目前,国内外照明自动控制装置基本都采用被动 ...

最新文章

  1. 从Netflix的Hystrix框架理解服务熔断和服务降级
  2. 暴力探测蓝牙设备工具redfang
  3. python中*args 与 **kwargs形式的参数的用法详解
  4. C语言用数组(顺序表)实现大小固定的队列的方法
  5. c++享元模式flyweight
  6. HDU 1540 Tunnel Warfare 线段树区间合并
  7. gitlab 2.7版本升级到2.8
  8. @loadbalanced在哪个包里面_ABB机器人-选项包
  9. 软考系统架构师笔记-最后知识点总结(二)
  10. 现在的计算机电源都要经过,电脑待机后必须关闭电源才能开启
  11. [转载]项目风险管理七种武器-离别钩
  12. 使用postman模拟上传文件到springMVC的坑:the request was rejected because no multipart boundary was found...
  13. 一只激光雷达独角兽的倒掉,可能进入倒计时了
  14. 世界杯座位选择顺序总数
  15. linux 文件同步脚本,Linux rsync同步文件脚本
  16. xmlns:app=http://schemas.android.com/apk/res-auto
  17. Vue3中导入项目Eslint和TS语法检测问题解决方案
  18. 产业变革新机遇,与5G同行,驰骋在浪潮之巅
  19. c语言程序流程图模板word,《流程图模板》word版.doc
  20. linux设备驱动归纳总结(十):1.udevmisc

热门文章

  1. 《Grid R-CNN》论文笔记
  2. STM32 CAN笔记(一)
  3. python忽略警告
  4. 用java实现一个汽车租赁系统
  5. 视觉惯性里程计 VIO
  6. python字典函数大全_python字典介绍
  7. 图形学课设 塔防游戏
  8. Ubuntu配置Hadoop——(七)安装配置Spark
  9. 层次分析法的简单应用
  10. 【原创】面向企业应用的平台框架的思考