当前位置: 首页 > article >正文

LED灯、蜂鸣器、继电器的控制

LED灯的控制

  • 该专栏所有文章都默认使用STM32F103ZET6开发板

目录

LED灯的控制

一、简单的LED灯控制

1、初始化函数

led灯

2、应用函数

2、蜂鸣器

3、继电器


一、简单的LED灯控制

编程框架:初始化函数和应用函数

1、初始化函数

  • 初始化函数一般包括:时钟 IO 外设 中断 其他(用哪个写哪个)

!!时钟的作用:
时钟是由电路产生的具有周期性的脉冲信号,相当于单片机的心脏,要想使用单片机的外设必须开启相应的时钟,驱动外设的本质是操作寄存器,而寄存器是由D触发器构成,而触发器需要时钟才能改写值,所以要想操作寄存器必须开启对应外设的时钟。

为什么要有时钟树?
STM32时钟系统主要的目的就是给相对独立的外设模块提供时钟,主要也是为了降低整个芯片的功耗,所有外设时钟默认都是关闭状态当我们使用某个外设就要开启这个外设的时钟,不同外设需要的时钟频率不同,没必要所有外设都用高速时钟造成浪费,而且有些外设也接受不了这么高的频率,这也是为什么STM32有四个时钟源的原因,就是兼容不同速度的外设,STM32的四个时钟源分别为:HSE、 LSE、HSI、LSI

其中HSE时钟,即高速的外部时钟 

alt text

HSI时钟,即高速的内部时钟 

alt text

led灯
  • 先在API文件夹中添加led.c和led.h文件

.h文件需要配置 

alt text

 

alt text

 

alt text


alt text

  • 配置时钟

-- 先看原理图看控制的对应引脚 

alt text

使能:打开 // 复位:清0/关闭

-- 1.找时钟(数据手册看在哪个线上) 

alt text

-- 2.打开时钟(然后去参考手册中找对应寄存器看怎么打开)

alt text

-- 3、配置IO的模式,这里led用推挽输出

alt text

 //先将端口配置低寄存器8,9,10,11位清0(P113)

GPIOE->CRL &= ~(0xf<<8);

//将端口配置低寄存器8,9,10,11位配置为输出,推挽输出

GPIOE->CRL |= (0x3<<8);

四种输出模式: 推挽输出:直接把逻辑值输出成高低电平;
开漏输出:只能输出低电平,输出为1时是高阻态(未知状态,电路上电压由电路来决定);经常应用在总线,需要增加上拉电阻配合使用;具有读取的功能;
复用推挽:
复用开漏:

--

2、应用函数

//端口输出数据寄存器 

alt text

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);
}


http://www.kler.cn/a/309529.html

相关文章:

  • 稀疏视角CBCT重建的几何感知衰减学习|文献速递-基于深度学习的病灶分割与数据超分辨率
  • AI赋能电商:创新应用提升销售与用户体验
  • Java API类与接口:类的转换方法与正则表达式
  • 数据安全、信息安全、网络安全区别与联系
  • Linux下useradd 和 adduser的区别
  • 前端代码分析题(选择题、分析题)——this指向、原型链分析
  • 【店雷达全网图搜比价盘点】1688、淘宝、阿里国际、亚马逊、速卖通5大平台
  • 一次渲染十万条数据:前端技术优化(上)
  • Java 入门指南:JVM(Java虚拟机)垃圾回收机制 —— 新一代垃圾回收器 ZGC 收集器
  • 分布式中间件-redis相关概念介绍
  • B3636 文字工作
  • LabVIEW编程快速提升的关键技术
  • 【VScode】配置多账户连接远程服务器
  • PWN College 关于sql盲注
  • 【Hot100】LeetCode—72. 编辑距离
  • vue2制作高复用页面
  • 系统架构师考试学习笔记第五篇——架构设计补充知识(25)专业英语
  • Spring部分常见面试题
  • 关于Spring Cloud Gateway中 Filters的理解
  • 健身房预约小程序定制搭建,数字化运营管理
  • Python+Pytest框架,“api_key.py文件怎么编写“?
  • 【乐企-业务篇】生成发票左上角二维码
  • Linux和C语言(Day 12)
  • 华南医电科技集团受邀出席中马建交50周年高级别经贸合作交流活动
  • [Redis] Redis中的set和zset类型
  • 云轴科技ZStack 获鲲鹏应用创新大赛2024上海赛区决赛一等奖