当前位置:网站首页>STM32学习笔记(白话文理解版)—小灯的点亮、闪烁、呼吸

STM32学习笔记(白话文理解版)—小灯的点亮、闪烁、呼吸

2022-08-11 05:25:00 LaiGuo.

STM32学习笔记(白话文理解版)—小灯的点亮、闪烁、呼吸

一、点灯原理

以stm32C8T6最小系统板为例:
在这里插入图片描述

  • 原理:PC13输出低电平,则LED正向导通,LED灯亮,故电灯任务可变为,使单片机IO引脚输出低电平。
  • 实质:控制单片机引脚输出高电平或低电平

二、基本点灯方式

方法:
1.配置GPIO引脚
2.控制GPIO引脚输出高低电平

(1)主函数部分(任选一种):

  • 第一种主函数
#include "stm32f10x.h" //STM32头文件
#include "sys.h"
#include "led.h"

int main (void)//主程序
{
    
	LED_Init();//调用自己写的函数,目的让LED初始化
	while(1)
	{
    	
		GPIO_WriteBit(GPIOC,GPIO_Pin_13,(BitAction)(0)); //可理解为,在PC13引脚,写入0
	}
}
  • 第二种主函数
#include "stm32f10x.h" //STM32头文件
#include "sys.h"
#include "led.h"

int main (void)
{
    //主程序
	LED_Init();
	while(1)
	{
    
	//根据原理图得知,PC13低电平,LED灯电量:
		GPIO_ResetBits(GPIOC,GPIO_Pin_13);//使GPIO13置于低电平 
	//[GPIO_SetBits(GPIOC,GPIO_Pin_13置于高电平]
	}
}
  • 第三种主函数
#include "stm32f10x.h" //STM32头文件
#include "sys.h"
#include "led.h"


int main (void)
{
    //主程序
	LED_Init();
	while(1)
	{
    
		PCout(13)=1;//位带操作,令PC 13输出位1,其中有PBout、PCout、PAout等,表示哪个引脚组,()中为这个引脚组的具体哪个引脚,=为使这个引脚置1还是置0
	}
}

(2)配置部分:

#include "led.h"

/* GPIO初始化可理解为: 1.使能时钟,时钟比喻为人的心脏,必须使能时钟,STM32才能正常工作 2.使用GPIO初始化函数 3.根据GPIO初始化函数要求,配置GPIO初始化 */

void LED_Init(void){
     //LED灯的接口初始化
	
	GPIO_InitTypeDef  GPIO_InitStructure;//配置GPIO,使用GPIO初始化函数,函数得第二个参数是结构体,故定义结构体
 	
	//1.使能时钟,时钟比喻为人的心脏,必须使能时钟,STM32才能正常工作
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE); 
	
	//3.根据GPIO初始化函数要求,配置GPIO初始化
    GPIO_InitStructure.GPIO_Pin =GPIO_Pin_13; //初始化GPIOC引脚组的,第几个引脚?哦原来是引脚13 
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; //选择IO接口工作方式,见下文,具体哪些方式用到百度就行 
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; //设置IO接口速度(2/10/50MHz) 一般50MHZ
	
	//2.使用GPIO初始化函数
	GPIO_Init(GPIOC, &GPIO_InitStructure);//(GPIO初始化函数)第一个参数:初始化哪个引脚组;第二个参数:具体配置
}
 
/* 选择IO接口工作方式: GPIO_Mode_AIN 模拟输入 GPIO_Mode_IN_FLOATING 浮空输入 GPIO_Mode_IPD 下拉输入 GPIO_Mode_IPU 上拉输入 GPIO_Mode_Out_PP 推挽输出 GPIO_Mode_Out_OD 开漏输出 GPIO_Mode_AF_PP 复用推挽输出 GPIO_Mode_AF_OD 复用开漏输出 */

三、小灯闪烁

(1)实现原理:

给小灯一个高电平,延时几秒;再给小灯一个低电平,延时几秒,如此反复就实现了闪灯操作

(2)实现程序:

  • 只需要在原来程序基础上,在主程序中修改,进行延时即可实现
#include "stm32f10x.h" //STM32头文件
#include "sys.h"
#include "led.h"
#include "delay.h"

int main (void)
{
    //主程序
	LED_Init();
	while(1)
		{
    
			GPIO_SetBits(GPIOC,GPIO_Pin_13);
			delay_ms(500);
			GPIO_ResetBits(GPIOC,GPIO_Pin_13);
			delay_ms(500);
	  }
}

四、小灯呼吸

(1)实现原理:

在一个周期内使小灯亮的时间增多,暗的时间减少,在人眼视觉上,便体现为小灯变亮。

在这里插入图片描述

(2)实现程序:

  • 将延时函数参数设置成变量,运用C语言知识,不断改变变量的值,即调节了一个周期内的高低电平比列
#include "stm32f10x.h" //STM32头文件
#include "sys.h"
#include "led.h"
#include "delay.h"

int main (void)
{
    //主程序
	u8 MENU;
	u16 i,t;
	MENU = 0;//定义菜单
	t = 1;
	//上述定义能用到的变量
	
	LED_Init();
	while(1)
		{
    
			//灯是低电平亮
			//如果是菜单0:使输出低电平的时间从1不断增大,也就是灯不断变亮
			if(MENU == 0)
			{
    
				for(i=0;i<10;i++)//每一个t的值都执行10次,执行10次后t+1
				{
    
					GPIO_ResetBits(GPIOC,GPIO_Pin_13);
					delay_us(t);
					GPIO_SetBits(GPIOC,GPIO_Pin_13);
					delay_us(501-t);
				}
				t++;
				if(t == 500)//当t加到500时,执行菜单1
				{
    
					MENU = 1;
				}		
			}
			//如果是菜单1:使输出低电平的时间逐渐减小,也就是灯逐渐变暗
			if(MENU == 1)
			{
    
				for(i=0;i<10;i++)//每一个t的值执行10次,执行10次后t减1
				{
    
					GPIO_ResetBits(GPIOC,GPIO_Pin_13);
					delay_us(t);
					GPIO_SetBits(GPIOC,GPIO_Pin_13);
					delay_us(501-t);
				}
				t--;
				if(t == 1)//t从500减到1后执行菜单0
				{
    
					MENU = 0;
				}		
			}
	  }
}
原网站

版权声明
本文为[LaiGuo.]所创,转载请带上原文链接,感谢
https://blog.csdn.net/m0_58326153/article/details/126196266