感芯科技
直播中

chenzd

4年用户 26经验值
擅长:可编程逻辑
私信 关注
[资料]

【感芯科技64线程MC3172开发板免费试用体验】1.HAL库实现IO控制Led&Key

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层:

目录结构如下图所示:
hal.png

2.1.1变量:

定义结构体:

结构体元素为初始化io引脚的必要元素如:端口号,序号,输入输出模式,初始电平;

typedef struct

{

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引脚,

void HAL_GPIO_Init ( GPIO_InitTypeDef *GPIO_Init);

用于读取引脚的电平状态

u8 HAL_GPIO_ReadPin (GPIO_InitTypeDef *GPIO_Init);

2.2组件层

目录结构如下图所示:
组件.png

初始化io引脚的步骤

  1. 定义结构体变量
  2. 为结构体变量赋值
  3. 引用hal函数,即可实现引脚初始化

示例为led引脚初始化:

static GPIO_InitTypeDef GPIO_LED0;

void LedInit ()

{

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);

}

void LedOn ();

void LedOff ();

读取引脚的电平状态如下所示:

u8 GetKeyState ()

ret = HAL_GPIO_ReadPin(&GPIO_KEY0);

2.3应用层

目录结构如图所示:
app.png

void UserFunction1 ()

{

KeyInit();

LedInit();



 **while** (1)

{

     **if** (GetKeyState() == 0)

    {

        LedOn();

    }

    **else**

    {

        LedOff();

    }

}

}

整体软件的目录结构为,如下图所示:

all.png

3.硬件接入:

独立按键key连接引脚PC.1,key按下,有低电平输入,key弹起,即悬空;

led连接引脚PC.0,led为共阳极,低电平点亮;

硬件接线如下图所示:
硬件.png

4.视频演示:

实际现象与描述一致。

5.建议

建议在开发板的硬件电路中增加led,key,3.3v/5v电源,电源开关,以及复位按键,可以提高开发者的开发效率。

回帖(2)

chenzd

2022-9-24 18:44:29
即将更新:针对感芯科技64线程MC3172开发板,2.HAL库实现串口,3.HAL库实现pwm的编程说明,敬请期待.
后续代码将上传至Gitee上,做开源分享和交流。
举报

华仔stm32

2022-9-25 21:14:02
看到楼主,在做开发上有很多自己的小零件,很有想法,值得学习!
举报

更多回帖

发帖
×
20
完善资料,
赚取积分