STM32驱动继电器 STM32F103RCT6基于寄存器和库函数驱动IO口

STM32驱动继电器 STM32F103RCT6基于寄存器和库函数驱动IO口

  • 继电器的描述
    • 继电器的参数测试
  • STM32F103寄存器版本控制IO口
    • STM32控制继电器-寄存器版本
    • STM32控制继电器-库函数版本
  • 总结

继电器的描述


继电器是一种小电压控制大电压器件,输入端是一个开关,不会有输出电压,具体的接线方式是要看自己如何利用这个开关;
继电器具体的工作原理可以参考之前的文章“51单片机驱动继电器模块点灯”

继电器的参数测试

以我们自己店铺的继电器模块为例,继电器触发电压高于某个值时,继电器就会被触发,触发灯亮起
这里实测时1.3V左右,实际触发电压最好2V以上,5.5V以下;

当触发信号低于某个值的时候,继电器就会复原,不会被触发,触发灯熄灭,这里实测时1V,不过实际触发信号建议低于0.5V;

STM32F103寄存器版本控制IO口

1:程序现象

信号控制引脚是STM32F103RCT6的PA11引脚;

STM32控制继电器-寄存器版本

1.由STM32F10系列参考手册可知,GPIO的时钟使能是由APB2外设所控制的;
STM32驱动继电器 STM32F103RCT6基于寄存器和库函数驱动IO口_第1张图片
从上面的图可以看出,只需要把IOPA置为1,其他置为零,就可以打开GPIOA的使能,

2.然后是配置端口这里选为通用推挽输出,速度50MHZ;
STM32驱动继电器 STM32F103RCT6基于寄存器和库函数驱动IO口_第2张图片
由图可以看出CNF11配置为00,MODE11配置为11,其他置为0即可;

3.控制GPIOA11口输出;
STM32驱动继电器 STM32F103RCT6基于寄存器和库函数驱动IO口_第3张图片
ODR11置为1就是输出高电平;

4.代码演示,

#include "stm32f10x.h"                  // Device header
#include "Delay.h"

int main(void)
{
	RCC->APB2ENR = 0x00000004;     //打开GPIOA使能
	GPIOA->CRH = 0x00003000;       //配置PA11引脚为通用推挽输出模式
	while(1)
	{
	GPIOA->ODR = 0x00000800;       //PA11输出高电平
	Delay_ms(1000);
	GPIOA->ODR = 0x00000000;       //PA11输出低电平
	Delay_ms(1000);
	}
}
 

STM32控制继电器-库函数版本

库函数是已经把寄存器都包装好了,我们直接使用即可;
主要代码:

#include "stm32f10x.h"                  // Device header
#include "Delay.h"

int main(void)
{
	GPIO_InitTypeDef GPIO_InitStructure;                        //定义结构体
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);		//配置GPIOA外设时钟
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;			//配置GPIOA为通用推挽输出
	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;					//配置对应的端口
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;			//配置好速度
	GPIO_Init(GPIOA,&GPIO_InitStructure);						//传递结构体的位置
	while(1)
	{
	GPIO_SetBits(GPIOA,GPIO_Pin_11);		//端口设置为高电平
	Delay_ms(1000);			//延时1s
	GPIO_ResetBits(GPIOA,GPIO_Pin_11);		//端口设置为低电平
	Delay_ms(1000);			//延时1s
	}
}

总结

1.寄存器版本和库函数版本代码现象是一样的;
2.IO口模式要配置为推挽输出模式,开漏输出模式无法驱动继电器;
3.本次使用的是5V继电器版本,供电需要用到5V,如果开发板没有5V 输入引脚,可以接额外电源供电,但是要把供电电源的地和单片机的地连起来;

你可能感兴趣的:(电子模块测试,STM32专栏,stm32,单片机,arm)