LED灯的控制
- 该专栏所有文章都默认使用STM32F103ZET6开发板
目录
LED灯的控制
一、简单的LED灯控制
1、初始化函数
led灯
2、应用函数
2、蜂鸣器
3、继电器
一、简单的LED灯控制
编程框架:初始化函数和应用函数
1、初始化函数
- 初始化函数一般包括:时钟 IO 外设 中断 其他(用哪个写哪个)
!!时钟的作用:
时钟是由电路产生的具有周期性的脉冲信号,相当于单片机的心脏,要想使用单片机的外设必须开启相应的时钟,驱动外设的本质是操作寄存器,而寄存器是由D触发器构成,而触发器需要时钟才能改写值,所以要想操作寄存器必须开启对应外设的时钟。
为什么要有时钟树?
STM32时钟系统主要的目的就是给相对独立的外设模块提供时钟,主要也是为了降低整个芯片的功耗,所有外设时钟默认都是关闭状态当我们使用某个外设就要开启这个外设的时钟,不同外设需要的时钟频率不同,没必要所有外设都用高速时钟造成浪费,而且有些外设也接受不了这么高的频率,这也是为什么STM32有四个时钟源的原因,就是兼容不同速度的外设,STM32的四个时钟源分别为:HSE、 LSE、HSI、LSI
其中HSE时钟,即高速的外部时钟
HSI时钟,即高速的内部时钟
led灯
- 先在API文件夹中添加led.c和led.h文件
.h文件需要配置
- 配置时钟
-- 先看原理图看控制的对应引脚
使能:打开 // 复位:清0/关闭
-- 1.找时钟(数据手册看在哪个线上)
-- 2.打开时钟(然后去参考手册中找对应寄存器看怎么打开)
-- 3、配置IO的模式,这里led用推挽输出
//先将端口配置低寄存器8,9,10,11位清0(P113)
GPIOE->CRL &= ~(0xf<<8);
//将端口配置低寄存器8,9,10,11位配置为输出,推挽输出
GPIOE->CRL |= (0x3<<8);
四种输出模式: 推挽输出:直接把逻辑值输出成高低电平;
开漏输出:只能输出低电平,输出为1时是高阻态(未知状态,电路上电压由电路来决定);经常应用在总线,需要增加上拉电阻配合使用;具有读取的功能;
复用推挽:
复用开漏:
--
2、应用函数
//端口输出数据寄存器
void led1_on(void)
{
//端口输出数据寄存器
GPIOE->ODR &= ~(0x1<<2);
}
void led1_off(void)
{
GPIOE->ODR |= (0x1<<2);
}
2、蜂鸣器
#include "buzzer.h"
void buzzer_init(void)
{
//时钟:1.找时钟(数据手册看在哪个线上)
//2.打开时钟 (然后去参考手册中找对应寄存器看怎么打开)
RCC->APB2ENR |= (0x1<<4);
//IO:配置模式 推挽
GPIOC->CRL &= ~(0xf<<0);//将端口配置低寄存器8,9,10,11位清0(P113)
GPIOC->CRL |= (0x3<<0);//将端口配置低寄存器8,9,10,11位配置为输出,推挽输出
}
void buzzer_on(void)
{
//端口输出数据寄存器
GPIOC->ODR |= (0x1<<0);
}
void buzzer_off(void)
{
//端口输出数据寄存器
GPIOC->ODR &= ~(0x1<<0);
}
3、继电器
#include "relay.h"
void relay_init(void)
{
//时钟:1.找时钟(数据手册看在哪个线上)
//2.打开时钟 (然后去参考手册中找对应寄存器看怎么打开)
RCC->APB2ENR |= (0x1<<2);
//IO:配置模式 推挽
GPIOA->CRH &= ~(0xf<<12);//将端口配置低寄存器8,9,10,11位清0(P113)
GPIOA->CRH |= (0x3<<12);//将端口配置低寄存器8,9,10,11位配置为输出,推挽输出
}
void relay_on(void)
{
//端口输出数据寄存器
GPIOA->ODR &= ~(0x1<<11);
}
void relay_off(void)
{
//端口输出数据寄存器
GPIOA->ODR |= (0x1<<11);
}