STM32驱动继电器 STM32F103RCT6基于寄存器和库函数驱动IO口
STM32驱动继电器 STM32F103RCT6基于寄存器和库函数驱动IO口
继电器的描述
继电器是一种小电压控制大电压器件,输入端是一个开关,不会有输出电压,具体的接线方式是要看自己如何利用这个开关;
继电器具体的工作原理可以参考之前的文章“51单片机驱动继电器模块点灯”
继电器的参数测试
以我们自己店铺的继电器模块为例,继电器触发电压高于某个值时,继电器就会被触发,触发灯亮起
这里实测时1.3V左右,实际触发电压最好2V以上,5.5V以下;
当触发信号低于某个值的时候,继电器就会复原,不会被触发,触发灯熄灭,这里实测时1V,不过实际触发信号建议低于0.5V;
STM32F103寄存器版本控制IO口
1:程序现象
信号控制引脚是STM32F103RCT6的PA11引脚;
STM32控制继电器-寄存器版本
1.由STM32F10系列参考手册可知,GPIO的时钟使能是由APB2外设所控制的;
从上面的图可以看出,只需要把IOPA置为1,其他置为零,就可以打开GPIOA的使能,
2.然后是配置端口这里选为通用推挽输出,速度50MHZ;
由图可以看出CNF11配置为00,MODE11配置为11,其他置为0即可;
3.控制GPIOA11口输出;
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 输入引脚,可以接额外电源供电,但是要把供电电源的地和单片机的地连起来;
넶0
2022-06-10 19:28