Led和按键的测试就很简单了,都属于对GPIO的操作,简单了解一下ES32F065的GPIO 1可配置为输入或输出 输出模式可配置 推挽/开漏 上拉/下拉
输入模式 端口浮空 上拉/下拉模拟端口 2支持端口输出数据的复位、置位或取反,可按位操作
3支持复用为外设功能端口 4输出驱动能力可配置:四种驱动能力选择
5支持 16 个外部输入中断
6支持端口配置写保护功能 1. 端口控制寄存器 每组 GPIO 有 16 个相对独立的引脚,每个引脚都可以通过寄存器自由配置。
通过配置 GPIO_MODE,可选择相应端口的模式,可配置为输入模式,输出模式和端口关闭模式。选择输出模式时,端口输入同样有效。选择端口关闭模式时,相应端口可被复用为模拟功能。
通过配置 GPIO_PUPD,可使能相应端口的上拉或/和下拉电阻。
通过配置 GPIO_ODOS,可将相应端口输出方式配置为推挽、源极开路和漏极开路三种模式。在配置为源极开路或漏极开路模式时,可使能相应端口的上拉或下拉,以保证正常输出,也可在端口外部连接上拉或下拉电阻。
通过配置 GPIO_ODRV,可选择相应端口的输出驱动能力,以满足不同的负载要求。
通过配置 GPIO_FLT,可使能相应端口的输入滤波功能,可滤除外部引线上高频信号干扰或毛刺。若输入需要较高的实时性,建议关闭输入滤波功能。 通过配置 GPIO_TYPE,可选择相应端口的输入类型,可选择 TTL 或 SMIT 两种模式。
通过配置 GPIO_FUNC,可选择相应 GPIO 的复用功能,可选择 FUNC_ALT0 ~
FUNC_ALT7。复用功能 GPIO 为输入时必须配置为输入模式,且需外部驱动;复用功能GPIO 为输出时必须配置为输出模式,推挽或开漏;复用功能 GPIO 为双向模式时,端口必须配置为输出模式,推挽或开漏。
通过配置 GPIO_LOCK,可锁定相应端口的控制寄存器数值。直到下一次 CPU 复位锁定才可被解除。端口数据寄存器不受锁定的控制。 2. 端口数据寄存器 软件可通过读取 GPIO_DIN 才获知端口的电平状态,若相应端口输入滤波被使能,则读到的是端口滤波之后的状态。
通过配置 GPIO_DOUT,可选择端口输出电平值,若端口模式已配置为输出,则该值所对应的电平会在管脚上立即生效。
通过配置 GPIO_BSRR,可按位改写端口输出电平值。对置位寄存器某些位进行写入 1 可置位相应端口,写入 0 的位不会影响相应端口的输出电平。对复位寄存器某些位进行写入1 可复位相应端口,写入 0 的位不会影响相应端口的输出电平。若同时将某位置位和复位,则置位的优先级更高。
通过配置 GPIO_BIR,可按位翻转端口输出电平值。对翻转寄存器某些位进行写入 1 可将相应端口电平值翻转,写入 0 的位不会影响相应端口的输出电平。 3. 这里简单提及一下端口控制寄存器和端口数据寄存器,想要深入了解可参考ES32F065使用手册,介绍很详细。通过BSP库直接使用LED和KEY更加简单,不需要了解寄存器是如何操作。添加bsp_key.c和bsp_led.c 到BSP目录下。 4. 编译出错,提示不能打开"ald_gpio.h",心态爆炸,我还要把MD库换成ALD库。 5.移除MD分组,添加ALD分组,在ALD添加对应文件。 6.替换irq.c文件,将用于测试ALD工程的irq.c来替换MD工程的irq.c,不然会报错。 7.修改main.c 和main.h(用于测试bsp库的LED和按键) <font size="4"><b>#include "main.h"
//按键处理函数
void KeyProcess()
{
if(bsp_key_read_key1()== BSP_KEY1_PRESS)
{
led_operate(0, LED_ON);
led_operate(1, LED_ON);
}
if(bsp_key_read_key1()== BSP_KEY1_RELEASE)
{
led_operate(0, LED_OFF);
led_operate(1, LED_OFF);
}
}
int main()
{
led_module_init(); //LED初始化
bsp_key_init(); //按键初始化
while (1)
{
KeyProcess(); //按键处理函数
}
}
#ifndef __MAIN_H__
#define __MAIN_H__
#include "bsp_led.h"
#include "bsp_key.h"
#endif
</b></font>
8.按键和LED顺利执行。
|