笔记:STM32103RCT6——呼吸灯

本文详细介绍了如何使用STM32最小开发板进行LED和按键的控制。通过GPIO初始化结构体配置,实现了LED的低电平点亮,并通过Keil5和标准库实现LED的呼吸灯效果。同时,讲解了按键的上拉输入模式,以及如何读取按键状态来控制LED的亮灭。整个过程涵盖了STM32的GPIO配置、延时函数和中断处理的基础知识。
摘要由CSDN通过智能技术生成

首先看到这个STM32最小开发板上面有两个led灯可以用IO来控制亮灭

LED0在PA8寄存器端口上,LED1在PD2寄存器端口上。可以确定的是LED是低电平点亮的。

然后回到keil5软件,利用标准库来初始化IO寄存器IO口

点开GPIO口标准库.h文件

在里面可以看到各种IO口控制的结构体配置。找到GPIO_Init初始化,可以看到有三种设置。

 复制这个结构定义就可以初始化结构,然后用结构体调用这几个控制模式

void led_Init(void)
{
	GPIO_InitTypeDef led_Init;           //定义初始化结构体
	
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD,ENABLE);
	
	led_Init.GPIO_Mode=GPIO_Mode_Out_PP;         //模式,带上拉电阻的推挽输出
	led_Init.GPIO_Pin=GPIO_Pin_2;    				//引脚
	led_Init.GPIO_Speed=GPIO_Speed_50MHz; 			//速度
    GPIO_Init(GPIOD,&led_Init);         //把结构体寄存器写入D组     
	
}

像速度一般设置为最高、引脚一般都可以在原理图都可以看到,这里的LED有D组的2脚和B组的13脚,但是模式这里就比较多,一开始点开就有点懵,不知道那个对应那个,后面通过了解,可以这样理解

(1)GPIO_Mode_AIN 模拟输入                  //GPIO无效,引脚直接接入ADC内部
(2)GPIO_Mode_IN_FLOATING 浮空输入     //可以读取引脚电平,若引脚悬空,则电平不确定        
(3)GPIO_Mode_IPD 下拉输入                 //可读取引脚电平,内部连接下拉电阻,,悬空的时候默认低电平
(4)GPIO_Mode_IPU 上拉输入                 //可读取引脚电平,内部连接上拉电阻,悬空的时候,默认高电平
(5)GPIO_Mode_Out_OD 开漏输出          //可输出引脚电平,高电平的时候为高阻态,低电平的时候接VSS
(6)GPIO_Mode_Out_PP 推挽输出           //可输出引脚电平,高电平的时候接VDD,低电平接VSS
(7)GPIO_Mode_AF_OD 复用开漏输出            //由片上外设控制,高电平为高阻态,低电平接VSS
(8)GPIO_Mode_AF_PP 复用推挽输出     //由片上外设控制,高电平接VDD,低电平接VSS

把引脚初始化后,就可以利用设置引脚来控制IO口的0和1

 在.h文件的底部就有控制各种IO的功能,使用LED的话就用复位和设置位,

然后通过变量的渐变来控制LED的0和1的亮灭就可以让LED达到假呼吸的效果。看起来像在慢慢呼吸的感觉。

unsigned int i,time=5000;
	
	led_Init();        //led的初始化
	while(1)
	{    for(i=0;i<time;i++)
		{
			delay(i);
			GPIO_ResetBits(GPIOD,GPIO_Pin_2); //设置0
			delay(time-i);
			GPIO_SetBits(GPIOD,GPIO_Pin_2);   //设置1
		}
		for(i=0;i<time;i++)
		{
			delay(i);
			GPIO_SetBits(GPIOD,GPIO_Pin_2);      //设置1
			delay(time-i);
			GPIO_ResetBits(GPIOD,GPIO_Pin_2);    //设置0
		}

然后通过同样的方法来初始化按键来控制LED

void key_Init(void)
{
	GPIO_InitTypeDef key_Init;
	
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);     //同样是C组寄存器的时钟
	
	key_Init.GPIO_Mode=GPIO_Mode_IPU;
	key_Init.GPIO_Pin=GPIO_Pin_1|GPIO_Pin_13;     //这里直接设置两个引脚
	key_Init.GPIO_Speed=GPIO_Speed_50MHz;
	
    GPIO_Init(GPIOC,&key_Init);
}

然后定义个函数返回按键的键值,这里可以看到按键不是设置和复位这个而是GPIO_ReadInputDataBit()读取按键按键所在的IO口的0和1了当按键按下的时候是0松开的为1

unsigned  key_scanf(void)
{
	unsigned char num=0;
	if(GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_1) == 0)  //判断按键是否按下
	{   delay(10);
		while(GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_1) == 0);//判断按键是否按下
		delay(10);
		num=1;
	}
	if(GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_13) == 0)
	{   delay(10);
		while(GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_13) == 0);
		delay(10);
		num=2;
	}

   return num;
}

然后定义一个变量来获取按键的键值,判断是按键1还是按键2开控制灯的亮灭

unsigned char number;
	led_Init();
	key_Init();
	while(1)
	{   
         number=key_scanf();  //获取键值
		
		 if(number == 1)
			 GPIO_ResetBits(GPIOD,GPIO_Pin_2);  //亮
		 if(number == 2)
			 GPIO_SetBits(GPIOD,GPIO_Pin_2);   //灭

写好之后就可通过下载器接STM的PA14引脚的SWCLK和PA13引脚的SWDIO端口和电源以及接地就可以下载到芯片里面实现了。

  • 3
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

c-tion

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值