资讯详情

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

STM32-继电器控制灯开关

文章目录

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

开关继电器控制灯

项目概述:

环境概述:

Windows10 专业版

MDK—Lite 5.25

项目开始:

在固件库 USER 中文件夹

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

再导入进去

第一步:

image-20220210120327323

第二步:

在led.c文件中导入led.h文件,先写入包含头文件,再编译,然后自动导入

1、配置GPIOA时钟

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

怎样找?

打开FWLB文件

找到图中的文件

再继续查找rcc.h文件

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

如何找到第一个参数?

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

如何找到第二个参数?

2、GPIOA结构体配置3

我们去找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_Mde_AF_OD = 0x1C,//推挽复用
  GPIO_Mode_AF_PP = 0x18//开漏复用
}GPIOMode_TypeDef;

(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的时钟GPIOC
	RCC_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


总结:

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

以及自己的心得体会

标签: 路继电器开关32h连接器继电器led18pin线对线连接器18pin脚插pin的连接器0be4继电器

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台