Day01 嵌入式 -----流水灯

一、简单介绍

嵌入式系统中的流水灯是一种常见的示例项目,通常用于演示嵌入式系统的基本功能和控制能力。流水灯由多个发光二极管(LED)组成,这些LED按照一定的顺序依次点亮和熄灭,形成一种像水流一样的流动效果。

二、查看功能手册

这里我们使用STM32F40xxx这个板子来实现流水灯这个小项目

2.1 查看硬件引脚号码

由上图可知,LED0这个灯所在引脚 PF9,LED1这个灯所在引脚 PF10

可知 PF9:"PF"表示端口F,"9"表示该端口上的第9号引脚

PF10:"PF"表示端口F,"10"表示该端口上的第10号引脚

2.2查看硬件引脚号码对应的时钟型号

根据硬件引脚号码,LED0和LED1都是PF,那么控制他俩的时钟型号都是GPIOF,而根据上图可知,GPIOF在AHB1总线上,根据这个逻辑就能找到GPIOF时钟型号,并打开时钟信号。

AHB1ENR 寄存器用于配置 AHB1 总线上各个模块的时钟使能位。通过将 0x00000020 写入 AHB1ENR 寄存器的相应位置,启用了 GPIOF 的时钟

所以打开控制LED0,LED1的时钟信号就是使用一下

cpp 复制代码
RCC->AHB1ENR=0x00000020;//时钟使能

2.3、确定输出模式

GPIOF->MODER=0x00040000;//配置引脚为输出模式

2.4、确定输出类型

GPIOF->OTYPER=0x00000000;//设置输出模式为推挽输出

2.5、确定输出速度

GPIOF->OSPEEDR=0x000C0000;//

2.6、确定端口输出数据

2.6.1 开灯

原理:开灯需要一个低电平,注意不是高电平

//GPIOF->ODR=0x00000000;

2.6.2 关灯

原理:关灯需要一个高电平,注意不是低电平

找到引脚9 然后将值改成1,后续通过非门输出就为0,即关灯

//GPIOF->ODR=0x0200;

三、使用现成函数来实现

注意这里我们的逻辑还是和二一样,首先重重之重的就是时钟信号,必须先打开时钟信号,然后创建一个结构体,这个结构体当中有输入输出模型,速度,引脚等,用于初始化灯。

3.1 Pin引脚

3.2 输入/输出模式

3.3输出类型

3.4 速度

3.5 设置引脚的上下拉电阻

3.6 开关灯

cpp 复制代码
void GPIO_SetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);//关灯
void GPIO_ResetBits(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin);//开灯

注意:开灯是低电平有效,关灯是高电平有效。

GPIO_SetBits函数用于将某位引脚置1,使其输出高电平。

GPIO_ResetBits函数用于将某位引脚置0,使其输出低电平。

四、代码实现

cpp 复制代码
#ifndef _LED_H_
#define _LED_H_
void LED_Init(void);

void LED1_ON(void);
void LED1_OFF(void);

void LED2_ON(void);
void LED2_OFF(void);

#endif // GPIO_CONFIG_H
#include "LED.h"
#include "stm32f4xx.h"  
void LED1_ON(void)//开灯
{
	GPIO_ResetBits(GPIOF,GPIO_Pin_9);
}
void LED1_OFF(void)//关灯
{
	GPIO_SetBits(GPIOF,GPIO_Pin_9);
}

void LED2_ON(void)
{
	GPIO_ResetBits(GPIOF,GPIO_Pin_10);
}
void LED2_OFF(void)
{
	GPIO_SetBits(GPIOF,GPIO_Pin_10);
}
void LED_Init(void)
{
	RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOF, ENABLE);//使能
	GPIO_InitTypeDef GPIO_InitTypeDefStruct1;
		GPIO_InitTypeDefStruct1.GPIO_Mode=GPIO_Mode_OUT;//输出
	GPIO_InitTypeDefStruct1.GPIO_OType=GPIO_OType_PP;//推挽输出
	GPIO_InitTypeDefStruct1.GPIO_Pin=GPIO_Pin_9|GPIO_Pin_10;//引脚
	GPIO_InitTypeDefStruct1.GPIO_Speed= GPIO_High_Speed ;//速度
	GPIO_Init(GPIOF,&GPIO_InitTypeDefStruct1);
}

int main()
{
	LED_Init();
	
	LED1_OFF();
	LED2_OFF();
	/*
	int n=500000;
	while(1)
	{
		 while(n--)
		 {
		 };
		 n=5000000;//延时
		 LED1_ON();
		 while(n--)
		 {
		 };
		 n=5000000;
		 LED1_OFF();
		 while(n--)
		 {
		 };
		 n=5000000;
		 LED2_ON();
		 while(n--)
		 {
		 };
		 n=5000000;
		 LED2_OFF();
	}
	*/
}
相关推荐
智购科技自动售卖机厂家9 小时前
双摄像头方案F1-score只有0.85,排查发现是上下视角的融合逻辑写反了~YH
python·单片机·嵌入式硬件·算法·eclipse
llilian_169 小时前
脉冲时间间隔及计数如何精准测试?
功能测试·嵌入式硬件·51单片机·软件工程
路上有只喵9 小时前
认识元器件 · 牛角型电解电容· 规格书解读
嵌入式硬件
weixin_452600699 小时前
高精密运放——D8629
单片机·嵌入式硬件·dc-dc 转换器·水/气表阀门·共享单车锁舌电机
硅基手札10 小时前
SPI技术系列 12 · SPI 设备驱动实战
linux·驱动开发·单片机·嵌入式硬件·mcu·性能优化·系统架构
深圳市青牛科技实业有限公司10 小时前
GC4928|8‑28V 带霍尔三相 BLDC 栅极,OA 设备专用驱动芯片
单片机·嵌入式硬件
国科安芯10 小时前
开放指令集的空间之路:RISC-V微控制器在商业航天中的生态价值与自主性评述
嵌入式硬件·mcu·risc-v·低轨卫星·商业航天·抗辐射
Yiran_G10 小时前
从模组接口到平台解析:ZigBee通信正常但数据异常的逐级排查指南
嵌入式硬件·物联网·智能家居
inrichtt10 小时前
第十一课时:串口中断接收与回调函数实战解析
c语言·数据结构·stm32·单片机·嵌入式硬件
不悔哥10 小时前
ESP32上跑 Linux: 乐鑫给 ESP32-S31开放了官方 BSP
linux·嵌入式硬件·开源