按键编程 pal库和标准库

按钮的电路设计

在这里插入图片描述
电路的搭建
在这里插入图片描述
原理与编程
在这里插入图片描述
创建了两个变量 用来捕捉按键的状态 先让两个变量都为1 previous和current都为1 (按键没按下) 然后让current去捕捉按键的状态通过读gpioA的pin0 如果为0就是按键按下 如果为1就是按键没按下 然后赋值给current 如果current和previous相等就是按键没按下 如果相等就是按键按下了 那要在按键按下的瞬间改变LED的亮灭状态 即按键松开瞬间(在之前按键已经按下)if语句嵌套 第二个if为按键松开瞬间改变LED的亮灭状态
按键按下就亮 按键松开就熄灭

#include "stm32f10x.h"
#include "stm32f10x_pal.h"

int main(void)
{
	GPIO_InitTypeDef GPIOInitstruct;
	uint8_t current = Bit_SET;
	uint8_t previous = Bit_SET;//创建两个变量来捕捉按键状态
	
	PAL_Init();
	
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);//使能GPIOC的时钟
	GPIOInitstruct.GPIO_Pin = GPIO_Pin_13;
	GPIOInitstruct.GPIO_Mode = GPIO_Mode_Out_OD;
	GPIOInitstruct.GPIO_Speed = GPIO_Speed_2MHz;
	GPIO_Init(GPIOC,&GPIOInitstruct);//对GPIOC PIN13初始化为输出开漏模式 输出速度为2mhz 引脚为PIN13
	
	
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);//使能GPIOA的时钟
	
	GPIOInitstruct.GPIO_Pin = GPIO_Pin_0;
	GPIOInitstruct.GPIO_Mode = GPIO_Mode_IPU;
	GPIO_Init(GPIOA,&GPIOInitstruct); //对GPIOA PIN0初始化为输入上拉模式 不需要输出速度因为是输入模式 引脚为PIN0
	
	
	while(1)
	{
					if(GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_0)==Bit_RESET)
				{
						GPIO_WriteBit(GPIOC,GPIO_Pin_13,Bit_RESET);
					}
					else
					{
					GPIO_WriteBit(GPIOC,GPIO_Pin_13,Bit_SET);
					}
			
			}
	}
while(1)//按键按下就翻转一次led的电平
	{
			previous = current;
			current = GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_0);
			if(current!=previous)
			{
			
					if(current == previous)//按钮按下
					{
						
					
					}
					else//按钮松开
					{
									if(GPIO_ReadOutputDataBit(GPIOC, GPIO_Pin_13)==Bit_RESET)
											{
												GPIO_WriteBit(GPIOC,GPIO_Pin_13,Bit_SET);
												
											}
											else
											{
											
											GPIO_WriteBit(GPIOC,GPIO_Pin_13,Bit_RESET);
											
											}
					}
						
while(1)//加入了消抖
	{
		previous = current; 
		
		current = GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_0);
		
		if(current != previous)
		{
			PAL_Delay(10);
			
			current = GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_0);
			
			if(current != previous)
			{
				if(current == Bit_RESET) // 按钮按下
				{
					
				}
				else // 按钮松开
				{
					// ODR
					if(GPIO_ReadOutputDataBit(GPIOC, GPIO_Pin_13) == Bit_RESET)
					{
						GPIO_WriteBit(GPIOC, GPIO_Pin_13, Bit_SET);
					}
					else
					{
						GPIO_WriteBit(GPIOC, GPIO_Pin_13, Bit_RESET);
					}
				}
			}
		}
	}
}

PAL库的按钮驱动

按键驱动介绍 引用头文件
在这里插入图片描述
声明句柄 句柄是啥?
在这里插入图片描述
句柄就是一种数据结构 编程就为数据结构+算法 数据结构就是数据 算法就是对数据结构里的数据进行操作 如茶壶 首先定义一个结构体用来存放茶壶的一些数据 (容量和水量)
第一个函数(对数据进行操作的方法)就是初始化一个茶壶 第二个函数就是完成倒入茶壶水 第三个函数就是从茶壶里倒出水

对按钮的编程也是数据结构+算法的方法 声明一个结构体 填表在这里插入图片描述
PAL库把初始化和按键按下封装
出现了回调函数
在这里插入图片描述

#include "stm32f10x.h"
#include "stm32f10x_pal.h"
#include "stm32f10x_pal_button.h"
	
	PalButton_HandleTypeDef hButton1;//声明句柄
	static void OnButton1Released(void)
	{
		
		
		if(GPIO_ReadOutputDataBit(GPIOC, GPIO_Pin_13) == Bit_SET)
					{
						GPIO_WriteBit(GPIOC, GPIO_Pin_13, Bit_RESET);
					}
					else
					{
						GPIO_WriteBit(GPIOC, GPIO_Pin_13, Bit_SET);
					}
			//P13亮灭切换的代码
	
	}
int main(void)
{
	GPIO_InitTypeDef GPIOInitStruct;
	
	PAL_Init();
	
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
	
	GPIOInitStruct.GPIO_Pin = GPIO_Pin_13;	
	GPIOInitStruct.GPIO_Mode = GPIO_Mode_Out_OD;
	GPIOInitStruct.GPIO_Speed = GPIO_Speed_2MHz;
	GPIO_Init(GPIOC, &GPIOInitStruct);
	
	
	// PA0
	hButton1.Init.GPIOx = GPIOA;
	hButton1.Init.GPIO_Pin = GPIO_Pin_0;
	hButton1.Init.Button_Mode = Button_Mode_IPU;
	hButton1.Init.ButtonReleasedCallback = OnButton1Released;
	
	PAL_Button_Init(&hButton1);
	
	while(1)
	{
		
		PAL_Button_Proc(&hButton1);//检测按键是否按下 如果按下就执行回调函数
	}
}

升级版 点击左侧的按钮点亮 点击右边的按钮熄灭

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: STM32是一款由STMicroelectronics公司开发的32位单片机系列,广泛应用于各种嵌入式应用领域。Altium Designer是一款流行的电子设计自动化软件,提供全面的电子设计工具和功能。STM32 Altium是为了方便设计师在Altium Designer中使用STM32系列单片机而创建的元件。 STM32 Altium包含了STM32系列单片机的各种元件模型,如微控制器、外设模块、引脚定义等。使用STM32 Altium,设计师可以直接在Altium Designer的界面中选择和添加需要的元件,而无需手动创建和编辑器件。这大大提高了设计效率,减少了设计错误。 在使用STM32 Altium时,设计师可以通过简单的拖放操作将STM32单片机和其他元件快速连接在一起,建立起完整的电路图。Altium Designer提供了丰富的连接和布局工具,可以帮助设计师对电路进行优化和调整。设计师还可以使用Altium Designer的仿真功能对电路进行验证和测试,确保其工作正常。 此外,STM32 Altium还提供了一些常用的封装和外设模块,如LED、LCD、串口、SPI等。设计师可以直接从中选择适合自己需求的模块,无需自己设计和调试。这极大地简化了设计流程,加快了产品的开发和推出速度。 总之,STM32 Altium是一个方便、实用的工具,帮助设计师在Altium Designer中快速、准确地使用STM32单片机。它不仅提高了设计效率,还提供了丰富的元件模型和外设模块,让设计师能够更轻松地完成嵌入式系统的设计。 ### 回答2: STM32是一款由意法半导体(STMicroelectronics)生产的32位微控制器系列,广泛应用于嵌入式系统领域。Altium Designer是一款综合的电子设计自动化(EDA)软件,提供原理图设计、PCB布局和仿真等功能。有许多用户希望在Altium Designer中使用STM32芯片,为此STMicroelectronics提供了STM32的Altium。 STM32 Altium是一套预先设计好的元件,其中包括了各种STM32系列微控制器的符号和封装。这个可以在Altium Designer软件中进行导入和使用,方便工程师在设计电路时直接使用STM32芯片。 使用STM32 Altium的好处是可以节省设计时间和提高设计准确性。中的元件已经经过了验证和测试,可以确保在设计过程中避免出现错误。用户可以通过简单的拖放操作将芯片符号和封装添加到自己的原理图和PCB布局中。此外,还提供了与STM32相关的其他元件、外设和接口等,帮助用户快速构建与STM32芯片兼容的电路。 除了STM32 Altium,STMicroelectronics还提供了其他类型的,如器件符号、封装和模型等。这些可以一起使用,使工程师能够进行更加全面和统一的电路设计。 总之,STM32 Altium为工程师提供了方便快捷的设计工具,帮助他们在Altium Designer中更好地使用STM32系列芯片。这样的集成设计环境能够提高工作效率,减少错误,并加速产品开发进程。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值