
实验演示:
- 工作电压5V
- 模块I/O接STM32的PG6引脚,泄漏输出
relay.h
#ifndef __RELAY_H #define __RELAY_H /************************************************************ **> File Name: relay.h **> Description: RELAY GPIO - hardware driver **> Author: xinso **> blog: xinso.blog.csdn.net **> Created Time: 2021.04.06 **-------------------------------------------------------- **> 本程序仅供学习,未经作者许可,不得用于任何其他用途 *************************************************************/ #ifdef __cplusplus extern "c"{ #endif #include "sys.h" /* 控制寄存器直接操作的方法IO */ #define digitalHi(p,i) {p->BSRR=i;} //输出高电平 #define digitalLo(p,i) {p->BRR=i;} //输出低电平 #define digitalToggle(p,i) {p->ODR ^=i;} //输出反转状态 /* 继电器控制引脚定义*/ #define RELAY1_GPIO_PORT GPIOG #define RELAY1_GPIO_CLK RCC_APB2Periph_GPIOG #define RELAY1_GPIO_PIN GPIO_Pin_6 /* 我买的继电器模块低电平有效*/ #define RELAY1_ON digitalLo(RELAY1_GPIO_PORT,RELAY1_GPIO_PIN) #define RELAY1_OFF digitalHi(RELAY1_GPIO_PORT,RELAY1_GPIO_PIN) void RELAY_GPIO_Init(void); //初始化 #ifdef __cplusplus } #endif #endif /* __RELAY_H */
relay.c
#include "relay.h" /************************************************************ **> File Name: relay.c **> Description: RELAY GPIO - hardware driver **> Author: xinso **> blog: xinso.blog.csdn.net **> Created Time: 2021.04.06 **-------------------------------------------------------- **> 本程序仅供学习,未经作者许可,不得用于任何其他用途 *************************************************************/ void RELAY_GPIO_Init(void) { GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd( RELAY1_GPIO_CLK , ENABLE); //使能GPIO端口时钟 GPIO_InitStructure.GPIO_Pin = RELAY1_GPIO_PIN ; //RELAY1 GPIO GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD; ///不行,改为推挽输出: GPIO_Mode_Out_PP GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //速度为50MHz GPIO_Init(RELAY1_GPIO_PORT, &GPIO_InitStructure); RELAY1_OFF; //关闭继电器控制 }
有问题加入QQ群号643807576STM32学习交流分享
附件:继电器模块工作电压5V,吸合电流约70mA带继电器状态指示灯的每示灯;I/O直接输入信号和单片机IO连接口或数字电路,吸入高电平继电器,释放低电平继电器;全贴片元件,最合理的驱动电路设计,采用8050三极管驱动继电器动作。
我用过正点原子精英板(STM32F控制5103v在继电器模块中,继电器的工作状态可以通过泄漏输出正常控制,而通用推拉输出模式继电器不工作,不反应(通常,继电器由推拉输出驱动)I/O是的,我想问一下为什么精英板有时不能用推拉输出模式驱动5V继电器模块?