STM32驱动继电器 STM32F103RCT6基于寄存器和库函数驱动IO口
- 继电器描述
-
- 继电器参数测试
- STM32F控制103寄存器版本IO口
-
- STM32控制继电器-寄存器版本
- STM32控制继电器-库函数版本
- 总结
继电器描述
继电器是一种小电压控制大电压装置,输出端是一个没有输出电压的开关,具体的接线方式取决于如何使用开关; 继电器的具体工作原理可参考前一篇文章51单片机驱动继电器模块点灯
继电器参数测试
以我们自己商店的继电器模块为例。当继电器触发电压高于一定值时,继电器会被触发,触发灯亮起 这里实测时1.3V实际触发电压最好在2左右V以上,5.5V以下; 当触发信号低于一定值时,继电器将恢复,不会被触发,触发灯将熄灭,这里测量1V,但实际触发信号建议小于0.5V;
STM32F控制103寄存器版本IO口
1:程序现象 信号控制引脚是STM32F103RCT6的PA11引脚;
STM32控制继电器-寄存器版本
1.由STM32F10系列参考手册,GPIO时钟使能是由的APB2控制外设; 从上图可以看出,只需要把手IOPA1.其他零可以打开GPIOA的使能,
2.然后在这里选择配置端口作为通用推拉输出,速度为50MHZ; 从图中可以看出CNF11配置为00,MODE11配置为11,其他配置为0;
3.控制GPIOA11口输出; ODR11是输出高电平;
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 输入引脚,可以接额外电源供电,但是要把供电电源的地和单片机的地连起来;