本文来源电子发烧友社区,作者:chenzd, 帖子地址:https://bbs.elecfans.com/jishu_2307398_1_1.html
IO_HAL(项目体验视频,详见作者原帖子)
1.项目概述:
key按下,即引脚PC.1有低电平输入,此时led点亮,即PC.0为低电平;
key弹起,即引脚PC.1悬空,此时led熄灭,即PC.0为高电平。
2.软件调试:
简述hal库的编程的理解:引入HAL层的概念,将软件大致分为三类:第一类hal层:直接和硬件相关,操作寄存器与原始的芯片api;第二类组件层:通过hal层间接操作硬件,只需要了解部分和组件直接相关的必要硬件信息即可,主要目的是实现组件功能,第三类应用层:通过调用组件层,只关注功能,关注硬件。优势:1.有利于多人协同开发:可以按三个层次对人员的工作进行分配,定义好接口,可实现三层软件同时开发,大大提高开发效率2.有利于不同平台的移植:在移植时:应用 层可不过修改,组件层修改量很少,只需要着重修改hal层就可满足要求;
2.1Hal层:
目录结构如下图所示:
2.1.1变量:
定义结构体:
结构体元素为初始化io引脚的必要元素如:端口号,序号,输入输出模式,初始电平;
typedefstruct
{
u32 gpio_sel; //port
u32 Pin; /*!< Specifies the GPIO pins to be configured.
This parameter can be any value of [url=home.php?mod=space&uid=1352397]@ref[/url] GPIO_pins_define */
SYS_GpioModeDef Mode; /*!< Specifies the operating mode for the selected pins.
This parameter can be a value of @ref GPIO_mode_define */
u8 Lev; //initial electrical level;
}GPIO_InitTypeDef;
2.1.2函数:
用于初始化io引脚,
voidHAL_GPIO_Init( GPIO_InitTypeDef *GPIO_Init);
用于读取引脚的电平状态
u8HAL_GPIO_ReadPin(GPIO_InitTypeDef *GPIO_Init);
2.2组件层
目录结构如下图所示:
初始化io引脚的步骤
- 定义结构体变量
- 为结构体变量赋值
- 引用hal函数,即可实现引脚初始化
示例为led引脚初始化:
staticGPIO_InitTypeDef GPIO_LED0;
voidLedInit()
{
GPIO_LED0.gpio_sel = GPIOC_BASE_ADDR;
GPIO_LED0.Pin = GPIO_PIN0;
GPIO_LED0.Mode = *SYS_GPIO_OUTPT* ;
GPIO_LED0.Lev = 1;
HAL_GPIO_Init(&GPIO_LED0);
}
voidLedOn();
voidLedOff();
读取引脚的电平状态如下所示:
u8GetKeyState()
ret = HAL_GPIO_ReadPin(&GPIO_KEY0);
2.3应用层
目录结构如图所示:
voidUserFunction1()
{
KeyInit();
LedInit();
**while** (1)
{
**if** (GetKeyState() == 0)
{
LedOn();
}
**else**
{
LedOff();
}
}
}
整体软件的目录结构为,如下图所示:
3.硬件接入:
独立按键key连接引脚PC.1,key按下,有低电平输入,key弹起,即悬空;
led连接引脚PC.0,led为共阳极,低电平点亮;
硬件接线如下图所示:
4.视频演示:
实际现象与描述一致。
5.建议
发布评论请先 登录
相关推荐
评论