基于STM32F103入门1——点亮LED灯

2023-05-16

今天学习了STM32固件库点灯程序 点灯也可以玩过很多好玩的东西,在这里做一下总结。

STM32点灯程序合集

  • 1:新建固件库工程文件
    • 1.1找到一个固件库模板
    • 1.2:打开KEIL5新建工程
    • 1.3:添加相关文件
    • 1.4:手动添加其他文件路径进来
  • 2:STM32固件库点灯
    • 2.1: 方式1点灯
      • main.c
    • 2.2 :方式2点灯
      • main.c
    • 2.3 :方式3点灯
      • main.c
  • 点灯效果
  • 3:STM32闪烁灯
      • delay.c
      • main.c
    • 闪烁灯效果
  • 4:STM32呼吸灯
      • main.c
    • 呼吸灯效果
  • 5:STM32按键点灯
      • key.c
      • main.c
    • 按键点灯效果
  • 6:STM32震动感应灯
    • 需要材料:
      • 6.1:震动传感器
      • 2.继电器
    • 代码
      • shake.c
      • relay.c
      • main.c
    • 如何接线
    • 项目效果

1:新建固件库工程文件

1.1找到一个固件库模板

在这里插入图片描述

1.2:打开KEIL5新建工程

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
最终效果:
在这里插入图片描述

1.3:添加相关文件

然后我们针对不同文件夹 我们添加不同的文件进来。
双击STARTUP 添加我们固件库的启动文件

STARTUP:添加Libraries——>CMSIS——>startup中的启动文件
在这里插入图片描述

USER:添加固件库的User文件夹中的.c文件

CMSIS 添加Libraries——>CMSIS文件夹中的.c文件
DOC:添加固件库中Doc文件夹的readme.txt
FWLIB:添加Libraries——>STM32F10x_StdPeriph_Driver文件夹中的.c文件

添加完效果
在这里插入图片描述

1.4:手动添加其他文件路径进来

打开stm32f0x.h文件
在这里插入图片描述

按 Ctrl + F 查找 stm32f10x_conf

会调到一下的代码 我们得宏定义加载一下
在这里插入图片描述
在这里插入图片描述
添加其他文件夹.h路径
在这里插入图片描述
这样就是新建固件库工程文件完成了。。。。。
下面就开始点灯 点灯 点灯
下面就开始点灯 点灯 点灯
下面就开始点灯 点灯 点灯

2:STM32固件库点灯

首先你得有个固件库手册来参考 我这里直接上代码。
在这里插入图片描述
我这个用的STM32C8T6板子 PC13是LED灯 根据原理图 给个低电平则点亮

LED配置代码
led.c

#include "stm32f10x.h"
#include "led.h"

void LED_Init(void)
{	
	//1.打开控制GPIOC的时钟(APB2)
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
	
	//2.配置结构体	
	GPIO_InitTypeDef led_init;
	led_init.GPIO_Pin   = GPIO_Pin_13;      //GPIOC13引脚
	led_init.GPIO_Mode  = GPIO_Mode_Out_PP; //推挽输出	
	led_init.GPIO_Speed = GPIO_Speed_10MHz; //10MHz
	
	//3.对成员进行初始化
	GPIO_Init(GPIOC, &led_init);
}

led.h

#ifndef _LED_H_
#define _LED_H_

#include "stm32f10x.h"

void LED_Init(void); //LED初始化函数声明

#endif

2.1: 方式1点灯

main.c

#include "stm32f10x.h"
#include "led.h"

int  main()
{
	LED_Init(); //LED初始化
	
	while(1)
	{
		//方式1
		//GPIO_SetBits(GPIOC,GPIO_Pin_13);		//P13引脚输出高电平
		GPIO_ResetBits(GPIOC, GPIO_Pin_13); 	//P13引脚输出低电平	
	}   
}

2.2 :方式2点灯

main.c

#include "stm32f10x.h"
#include "led.h"

int  main()
{
	LED_Init(); //LED初始化
	
	while(1)
	{
		//方式2
		//GPIO_WriteBit(GPIOC,GPIO_Pin_13, Bit_SET);   //P13引脚输出高电平
		GPIO_WriteBit(GPIOC,GPIO_Pin_13, Bit_RESET); //P13引脚输出低电平
	}   
}

2.3 :方式3点灯

main.c

#include "stm32f10x.h"
#include "led.h"

int  main()
{
	LED_Init(); //LED初始化
	
	while(1)
	{
		//方式3
		//GPIO_Write(GPIOC, 0X2000); 	 	//P13引脚输出高电平
		GPIO_Write(GPIOC, 0X0000); 		//整组端口输出低电平
	}   
}

点灯效果

在这里插入图片描述

3:STM32闪烁灯

加一个延时函数 我们就可以做一个 LED闪烁效果了
这里的延时我们没有用到定时器 ,只是简单的通过循环来延时。

delay.c

#include "stm32f10x.h"
#include "delay.h"

void delay_ms(uint16_t time)
{
	uint16_t i = 0;
	while(time--)
	{
		i = 10000;
		while(i--);
	}
}


main.c

#include "stm32f10x.h"
#include "led.h"
#include "delay.h"

int  main()
{
	LED_Init(); //LED初始化
	
	while(1)
	{
		GPIO_ResetBits(GPIOC, GPIO_Pin_13); 	//LED点亮
		delay_ms(1000); //亮灯大约1秒
		GPIO_SetBits(GPIOC,GPIO_Pin_13);		//LED熄灭
		delay_ms(1000); //熄灭灯大约1秒
	}   
}

闪烁灯效果

在这里插入图片描述

4:STM32呼吸灯

呼吸灯就像我们人呼吸那样,我们可以让灯慢慢的亮 慢慢的暗,这个就是通过占空比来调节。(可以理解为LED高电平时间和LED低电平时间)
比如 LED 亮延时100us 然后 暗 100us 这时候他们占空比是百分之50.
那如果我们 LED 亮10us 然后暗 还是100us 这个时候 你会发现 LED灯变暗了很多。 这个其实是我们的视觉暂停 原因导致的。
所以我们可以通过调节 LED点亮的时间 和 LED 熄灭的时间的比例来调节,让LED 慢慢的亮 然后 慢慢的 暗。

慢慢的亮 意思就是 LED的低电平时间慢慢的增加。
比如从1us 慢慢 到500us 然后LED高电平时间则是 从500us 慢慢到1us。
如果是想着LED灯 亮慢慢 暗 则相反。

main.c

#include "stm32f10x.h"
#include "led.h"
#include "delay.h"

int  main()
{
	LED_Init(); //LED初始化
	unsigned char i = 0;
	unsigned int t = 1;
	unsigned char flag = 1;
	while(1)
	{
		if(flag == 1) //LED由暗到亮
		{
			for(i=0;i<10;i++)
			{
				GPIO_ResetBits(GPIOC, GPIO_Pin_13); 	//LED点亮
				delay_us(t);
				GPIO_SetBits(GPIOC,GPIO_Pin_13);		//LED熄灭
				delay_us(501-t);
			}
			t++;	
			if(t == 500)
			{
				flag = 0;
			}
		}
		if(flag == 0) //LED由亮到暗
		{
			for(i=0;i<10;i++)
			{	
				GPIO_ResetBits(GPIOC, GPIO_Pin_13); 	//LED点亮
				delay_us(t);
				GPIO_SetBits(GPIOC,GPIO_Pin_13);		//LED熄灭
				delay_us(501-t);
			}
			t--;
			if(t == 1)
			{
				flag = 1;
			}
		}
	} 
}

呼吸灯效果

在这里插入图片描述

5:STM32按键点灯

我们玩了呼吸灯 也可以玩玩按键点灯,按键其实也是挺简单的,我用的按键是只有两个引脚的,我们任意的一脚接单片机的GND ,另一个接单片机的GPIO 当按下按键 这个GPIO则会是低电平。 那我们就检测这个GPIO是否是低电平 如果是 我们则点亮LED灯。

key.c

#include "stm32f10x.h"
#include "key.h"

/*按键初始化函数*/
void KEY_Init(void)
{
	//1.打开控制GPIOA的时钟(APB2)
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
	
	//2.配置结构体	
	GPIO_InitTypeDef key_init;
	key_init.GPIO_Pin   = GPIO_Pin_5;      	//GPIOC13引脚
	key_init.GPIO_Mode  = GPIO_Mode_IPU; 	//上拉输入	
	//led_init.GPIO_Speed = GPIO_Speed_10MHz; //10MHz
	
	//3.对成员进行初始化
	GPIO_Init(GPIOA, &key_init);
}

main.c

#include "stm32f10x.h"
#include "led.h"
#include "key.h"
#include "delay.h"

int  main()
{
	LED_Init(); //LED初始化
	KEY_Init(); //按键初始化
	GPIO_SetBits(GPIOC,GPIO_Pin_13);	//LED设置高电平
	GPIO_SetBits(GPIOA,GPIO_Pin_5);		//按键设置高电平
	
	while(1)
	{
		//如果按键被按下
		if(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_5) == 0) 	
		{
				delay_ms(20); //消抖再次判断是否按下
				if(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_5) == 0)
				{
					GPIO_ResetBits(GPIOC, GPIO_Pin_13); 	//LED点亮
					delay_ms(1000); //延时大约1秒				
				}
		}
		else
		{
				GPIO_SetBits(GPIOC,GPIO_Pin_13);		//LED熄灭
		}
	} 
}

按键点灯效果

在这里插入图片描述

6:STM32震动感应灯

需要材料:

6.1:震动传感器

在这里插入图片描述

2.继电器

(我用的这个是高电平导通)
在这里插入图片描述

这种是震动传感器,我们可以也通过震动来点灯,我用的这个模块是当发生震动时,会变成低电平。那其实就是相当于我们的按键,我们去检测一下这个模块到底是不是低电平如果是低电平,那么我们让LED灯点亮1秒啥的都有可以。
直接上代码:
配置震动传感器模块代码

代码

shake.c

#include "stm32f10x.h"
#include "shake.h"

/*震动传感器初始化函数*/
void SHAKE_Init(void)
{
	//打开GPIOC时钟
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
	
	//配置结构体
	GPIO_InitTypeDef shake_init;
	shake_init.GPIO_Mode  = GPIO_Mode_IPU; 	//上拉输入
	shake_init.GPIO_Pin   = GPIO_Pin_3;		//A3引脚
	//shake_init.GPIO_Speed = GPIO_Speed_50MHz;
	
	//成员初始化
	GPIO_Init(GPIOA, &shake_init);		
}

继电器模块配置代码:

relay.c

#include "relay.h"

/*继电器模块初始化函数*/
void RELAY_Init(void)
{
	//打开时钟
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);

	//配置结构体
	GPIO_InitTypeDef relay_init;
	relay_init.GPIO_Mode  = GPIO_Mode_Out_PP; 	//推挽输出
	relay_init.GPIO_Pin   = GPIO_Pin_4;			//3引脚
	relay_init.GPIO_Speed = GPIO_Speed_50MHz;
	
	//成员初始化
	GPIO_Init(GPIOA, &relay_init);
}

main.c

#include "stm32f10x.h"
#include "led.h"
#include "relay.h"
#include "delay.h"
#include "shake.h"

/*主程序入口*/
int  main()
{
	LED_Init();  //LED模块初始化
	RELAY_Init();//继电器模块初始化
	SHAKE_Init();//震动传感器初始化
	
	GPIO_SetBits(GPIOC, GPIO_Pin_13); 	//LED高电平
   	GPIO_SetBits(GPIOA, GPIO_Pin_3); 	//震动传感器高电平
	GPIO_ResetBits(GPIOA, GPIO_Pin_4); 	//继电器低电平(关闭)
	while(1)
	{
		if(GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_3) == 0)
		{
			GPIO_ResetBits(GPIOC, GPIO_Pin_13); //LED点亮
			GPIO_SetBits(GPIOA, GPIO_Pin_4); 	//继电器导通 (高电平)
			delay_ms(1000);
		}
		else
		{
			GPIO_SetBits(GPIOC, GPIO_Pin_13); 	//LED不亮
			GPIO_ResetBits(GPIOA, GPIO_Pin_4); 	//继电器不导通 (低电平)
		}
			
	} 
}

如何接线

STM32震动传感器
3.3VVCC
GNDGND
A3DO
STM32继电器
5VVCC
GNDGND
A4IN
GND公共端
STM32LED灯
3.3V正极
继电器LED灯
常开端负极

项目效果

在这里插入图片描述

如果觉得这篇文章对你有用。欢迎大家点赞、评论哈哈

需要整个工程代码和 模块的相关资料,私信我 或者 +我扣扣:844797079 。或者评论区留下的你的联系方式。

继续加油!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

基于STM32F103入门1——点亮LED灯 的相关文章

  • LED数码管结构与工作原理

    一 xff0e 什么是数码管 LED数码管 xff08 LED Segment Displays xff09 是由8个发光二极管构成 xff0c 并按照一定的图形及排列封转在一起的显示器件 其中7个LED构成7笔字形 xff0c 1个LED
  • 三种常用的LED驱动电源电路图详解

    时间 xff1a 2017 07 10 15 30 43 关键字 xff1a LED电路 led驱动电源 led电源电路图 LED电源有很多种类 xff0c 各类电源的质量 价格差异非常大 xff0c 这也是影响产品质量及价格的重要因素之一
  • 花两天时间写的stm32f103串口BootLoader(有keil工程)

    因为在论坛和官网都没搜到完全合适的BootLoader xff0c 所以自己移植完成了一个BootLoader工程 另外附APP文件工程 xff0c 可做实验 用良心保证 xff0c 看完后可以做一个成功的实验 上位机选用SecureCrt
  • STM32F103 KEIL 标准库直接添加DSP库

    前言 近期由于比赛需要 xff0c 想要在STM32上移植DSP库进行FFT变换 xff0c 找了很多资料都是利用CUBEMX进行导入的方法 xff0c 本人使用的是标准库 xff0c 对HAL库并不熟悉 xff0c 所以考虑到移植的方便采
  • 点亮LED灯及IAR调试

    点亮LED灯 一开始想先通过简单的点亮一个灯的程序来试一下MCU xff0c 硬件上的原理图如下 xff1a 从这里看出PB4 PB5 PC3 PC4 PC5 PC7都能用 xff0c 还没接外设 xff0c 一开始我选择了 PB5 去外接
  • STM32F103最小系统板引脚定义

    STM32F103最小系统原理图 本人初学stm32 若有误解之处 还望大佬们指正改进 感谢 STM32F103各引脚定义 可前往 STM32F103xCDE 数据手册 英文 的第三章 Pinouts and pin description
  • 基于STM32F103的智能门禁系统

    0 前言 本人大二软工菜鸟一枚 xff0c 大神不喜勿喷 1 功能演示 点这里功能演示 2 硬件选型 序号名称备注1STM32F103C8T6开发板用于主控2AS608指纹模块指纹解锁3RFID RC522射频模块刷卡解锁40 96寸四针O
  • 四、stm32-USART串口通讯(重定向、接发通信、控制LED亮灭)

    目录 一 固件库模板二 准备资料三 STM32串口通讯1 STM32的USART 简介2 USART 功能框图2 1 数据寄存器2 2 控制器2 3 发送器2 4 接收器2 5 小数波特率生成 3 校验控制3 1 中断控制 4 USART
  • RT-Thread Stm32f103开启UART2(中断接收及轮询发送) 使用RT-Thread Studio

    RT Thread Stm32f103开启UART2 使用RT Thread Studio 1 使用RT Thread Studio新建RT Thread项目 2 修改dricer gt doard h 增加UART2的宏定义设置gpio接
  • LCD与LED液晶显示屏的区别

    什么是LCD LCD是液晶显示屏Liquid Crystal Display的全称 xff0c 主要有TFT UFB TFD STN等几种类型的液晶显示屏无法定位程序输入点于动态链接库上 笔记本液晶屏常用的是TFT TFT xff08 Th
  • STM32F103 PB3,PB4,PA15,IO不可控问题

    STM32默认启动时PB4 PB3 PA15三个引脚不是普通IO xff0c 而是JTAG的复用功能 xff0c 分别为JNTRST JTDI JTDO 由上可以知要使PB3可以用 须关闭JTAG DP SW DP 可以不管 添加以下配置即
  • RTX移植STM32F103,超详细~

    目录 RTX移植前言移植1 创建工程2 配置工程3 添加LED文件4 编写测试代码5 编译烧录 RTX移植 往期回顾 为什么需要RTOS 前言 keil RTX是一款应用广泛的嵌入式RTOS xff0c 具体可见官网 为什么需要RTOS x
  • LED驱动IC TM1616,TM1650,TM1651替代兼容型号(VK,AIP)

    产品型号 xff1a VK1650 产品品牌 xff1a VINKA 永嘉微电 永嘉微 封装形式 xff1a SOP16 概述 VK1650 是一种带键盘扫描电路接口的 LED 驱动控制专用电路 内部集成有 MCU 输入输出控制数字 接口
  • 入门stm32简单电灯实验

    看原理图找内置LED接线 stm32f103 我这边是接的 PE5 外设时钟使能寄存器的相关配置 因为LED1接的是PE5 所以GBIO端口E 查看中文手册获取GPIOE寄存器起始地址0x4001 1800 通过查看系统架构 可以发现GPI
  • STM32F103 - 配置规则通道参数 - 05 - unfinished -unfinished-unfinished

    五 配置规则通道参数 设置指定ADC的规则组通道 一个序列 采样时间 常规通道配置 ADC RegularChannelConfig ADC1 ch 1 ADC SampleTime 239Cycles5 ADC1 ADC通道 采样时间为2
  • stm32f103 TIM2定时器4路PWM输出实验

    这里以TIM2为例 pwm c include pwm h uint16 t TIM2 CCR1 Val uint16 t TIM2 CCR2 Val uint16 t TIM2 CCR3 Val uint16 t TIM2 CCR4 Va
  • STM32基本IO的寄存器介绍

    STM32基本IO的寄存器介绍 说明 简介 端口配置低寄存器 32位 数据寄存器 32位 置位 复位寄存器 32位 复位寄存器 16位 锁存寄存器 32位 说明 最近自己在学习STM32 跟着原子哥的STM32教学视频学习 参考的资料有来自
  • 是否可以通过编程方式打开 Macbook Pro 键盘背光的各个按键?

    尽管我感觉这在技术上是不可能的 但无论如何还是值得一问 是否可以打开 Macbook Pro 的各个按键的键盘背光 我正在开发一款基于网格的软件 该软件允许用户通过按键盘上的任意键将光标定位在网格中的该点来进行导航 如果我能以某种方式打开某
  • 如何在没有微控制器的情况下用 C++ 连接 LED 灯?

    我想在没有微控制器的情况下点亮 关闭 LED 我希望通过编写 C 程序来控制 LED 但我遇到的问题是把它们连接起来有没有免费的方法 如果相关的话 我正在使用 Windows XP 我有 LED 但没有微控制器 好吧 我找到了一些函数 但它
  • Android 通知 LED 不使用我的颜色

    我正在尝试使用一个通知 该通知也使用我的 S3 上的通知 LED 但由于某种原因 颜色将始终为蓝色 我猜这是默认值 我尝试使用不同的颜色但没有任何变化 其他应用程序 例如 Whatsapp Gmail 和 Facebook 在显示不同颜色的

随机推荐