本专栏所有源资料都免费获取,没有任何隐形消费。
注意事项:STM32仿真会存在各种各样BUG,且尽量按照同样仿真版本使用。本专栏所有的仿真都采用PROTEUS8.15。
本文已经配置好STM32F103C8T6系列,在PROTUES仿真里,32单片机一般只用一种型号,如需其他型号,可改名。
本次功能实现基于STM32的按键控制继电器驱动电机转动,此为Proteus仿真演示:
基于STM32的按键控制继电器
LED灯与单片机相连:
如图所示,首先点击图左的led.c文件,然后可以看到图右的LED引脚配置。由图可知,可以配置单片机的PD2引脚为继电器引脚,如需更改引脚,可自行修改。
接着,点LED.h文件,可以看出给PD2引脚定义名称为fs,表示为风扇的意思,在仿真图中代表继电器的名称。
然后,点击key.c文件,可以看出按键引脚配置分别由PC5、PC6、PC7,本文采用PC5引脚连接一个按键。
点击key.h文件,可以看出本文给PC5引脚定义为KEY1,即可以调用KEY1为PC5按键。
在本次仿真中,选择PC5引脚连接按键,PD2引脚连接继电器驱动电机。
主函数代码配置:
#include "stm32f10x.h"
#include "usart.h"
#include "delay.h"
#include "sys.h"
#include "led.h"
#include "key.h"
u16 key;
u8 motor_flag=0;
void Check_serial_KEY(void);
void motor_switch(void);
int main(void)
{
LED_Init(); //初始化与LED连接的硬件接口 包括电机
KEY_Init(); //初始化与按键连接的硬件接口
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);// 设置中断优先级分组2
RCC_SYSCLKConfig(RCC_SYSCLKSource_HSI);
while(1)
{
Check_serial_KEY(); //按键控制函数
motor_switch(); //电机控制函数
}
}
void Check_serial_KEY(void) //按键
{
key=KEY_Scan(0); //0,不支持连续按;1,支持连续按;
if(key)
{
switch(key)
{
case KEY1_PRES:
motor_flag++;
if(motor_flag>1)
{
motor_flag = 0;
}
break;
default:
break;
}
}
else delay_ms(10);
}
void motor_switch(void) //电机控制函数
{
if(motor_flag == 0)
{
fs = 1;
}
else{
fs = 0;
}
}
仿真示例资源、程序源码和软件安装包
基于PROTEUS8.15平台,KEIL5编写
链接:https://pan.baidu.com/s/17FmzUjtkCgGWSuB8Cef6Bw?pwd=795d
提取码:795d