基于STM32F103入门1——点亮LED灯_multisim模拟一个stm32开关控制8个led的颜色(1)

img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上物联网嵌入式知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、电子书籍、讲解视频,并且后续会持续更新

如果你需要这些资料,可以戳这里获取

按 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秒啥的都有可以。
直接上代码:
配置震动传感器模块代码

代码

img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上物联网嵌入式知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、电子书籍、讲解视频,并且后续会持续更新

如果你需要这些资料,可以戳这里获取

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

代码

[外链图片转存中…(img-Y7BLE7Jt-1715714257563)]
[外链图片转存中…(img-XH6DHBfW-1715714257564)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上物联网嵌入式知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、电子书籍、讲解视频,并且后续会持续更新

如果你需要这些资料,可以戳这里获取

  • 20
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值