【东软载波ESF0654 PDS开发板活动】测试LED、按键

2020-03-11 19:38发布

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和按键)

#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

8.按键和LED顺利执行。


 

0条回答

一周热门 更多>