打印
[国产单片机]

【东软载波ESF3696 PDS开发板活动】第六步: 测试LED、按键

[复制链接]
443|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
Led和按键的测试就很简单了,都属于对GPIO的操作,简单了解一下ES32F3696GPIO
  
1可配置为输入或输出
  
输出模式可配置   推挽/开漏  上拉/下拉
  输入模式  端口浮空  上拉/下拉模拟端口
  
2支持端口输出数据的复位、置位或取反,可按位操作
  3支持复用为外设功能端口
  
4输出驱动能力可配置:四种驱动能力选择
  5支持 16 个外部输入中断
  6支持端口配置写保护功能
  

使用特权

评论回复

相关帖子

沙发
一路向北lm|  楼主 | 2021-1-19 20:19 | 只看该作者
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 复位锁定才可被解除。端口数据寄存器不受锁定的控制。

使用特权

评论回复
板凳
一路向北lm|  楼主 | 2021-1-19 20:20 | 只看该作者
2.        端口数据寄存器
软件可通过读取 GPIO_DIN 才获知端口的电平状态,若相应端口输入滤波被使能,则读到的是端口滤波之后的状态。
通过配置 GPIO_DOUT,可选择端口输出电平值,若端口模式已配置为输出,则该值所对应的电平会在管脚上立即生效。
通过配置 GPIO_BSRR,可按位改写端口输出电平值。对置位寄存器某些位进行写入 1 可置位相应端口,写入 0 的位不会影响相应端口的输出电平。对复位寄存器某些位进行写入1 可复位相应端口,写入 0 的位不会影响相应端口的输出电平。若同时将某位置位和复位,则置位的优先级更高。
通过配置 GPIO_BIR,可按位翻转端口输出电平值。对翻转寄存器某些位进行写入 1 可将相应端口电平值翻转,写入 0 的位不会影响相应端口的输出电平。

使用特权

评论回复
地板
一路向北lm|  楼主 | 2021-1-19 20:20 | 只看该作者
这里简单提及一下端口控制寄存器和端口数据寄存器,想要深入了解可参考ES32F3696使用手册,介绍很详细。通过BSP库直接使用LED和KEY更加简单,不需要了解寄存器是如何操作。添加bsp_key.c和bsp_led.c 到BSP目录下。

使用特权

评论回复
5
一路向北lm|  楼主 | 2021-1-19 20:20 | 只看该作者
编译出错,提示不能打开"ald_gpio.h",心态爆炸,我还要把MD库换成ALD库。

使用特权

评论回复
6
一路向北lm|  楼主 | 2021-1-19 20:21 | 只看该作者
移除MD分组,添加ALD分组,在ALD添加对应文件

使用特权

评论回复
7
一路向北lm|  楼主 | 2021-1-19 20:21 | 只看该作者
替换irq.c文件 ,将用于测试ALD工程的irq.c来替换MD工程的irq.c,不然会报错,修改main.c 和main.h(用于测试bsp库的LED和按键)

使用特权

评论回复
8
一路向北lm|  楼主 | 2021-1-19 20:21 | 只看该作者
#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


使用特权

评论回复
9
一路向北lm|  楼主 | 2021-1-19 20:22 | 只看该作者
按键和LED顺利执行

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

274

主题

3760

帖子

75

粉丝