473|1

55

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

【瑞萨RA8D1开发板,基于M85内核的图形MCU测评】初识GPIO流水灯 [复制链接]

 
开发环境:
IDE:MKD 5.38a
开发板:CPKCOR-RA8D1B开发板
MCU:R7FA8D1BHEC332AS00

1 GPIO工作原理

熟悉单片机的朋友都知道,学习的第一个例程就是流水灯,要想实现流水灯,首先必须了解GPIO的工作原理。GPIO的基本结构如下图所示。
Figure 1-1 GPIO的基本结构
和其他Cortex-M系列的MCU一样,RA8D1的I/O也有多种模式:输入模式,输出模式,模拟输入模式,复用模式。

1.1 通用输入输出模式

通用输入输出模式也就是普通GPIO模式。

1.1.1 通用输入模式

通用输入模式分为浮空输入和上拉/下拉输入。
Figure 1-2 通用输入模式
浮空输入:
浮空(floating)就是逻辑器件的输入引脚即不接高电平,也不接低电平。由于逻辑器件的内部结构,当它输入引脚悬空时,相当于该引脚接了高电平。一般实际运用时,引脚不建议悬空,易受干扰。通俗讲就是让管脚什么都不接,浮空着。信号进入芯片内部后,既没有接上拉电阻也没有接下拉电阻,经由触发器输入。配置成这个模式后,用电压变量引脚电压为1点几伏,这是个不确定值。由于其输入阻抗比较大,一般把这种模式用于标准的通讯协议,比如IIC、USART的等。
上拉输入:
上拉就是把电位拉高,比如拉到Vcc。上拉就是将不确定的信号通过一个电阻嵌位在高电平,电阻同时起限流作用,弱强只是上拉电阻的阻值不同,没有什么严格区分。上拉输入就是信号进入芯片后加了一个上拉电阻,再经过施密特触发器转换成0、1信号,读取此时的引脚电平为高电平。
下拉输入:
就是把电压拉低,拉到GND。与上拉原理相似。下拉输入就是信号进入芯片后加了一个下拉电阻,再经过施密特触发器转换成0、1信号,读取此时的引脚电平为低电平;

1.1.2 通用输出模式

通用输出模式推挽模式和开漏模式。
Figure 1-3 通用输出模式
开漏输出
一般用在电平不匹配的场合,如需要输出5V的高电平。输出端相当于三极管的集电极,要得到高电平状态需要上拉电阻才行。适合于做电流型的驱动,其吸收电流的能力相对强(一般20mA以内)。
推挽输出:
可以输出高、低电平,连接数字器件;推挽结构一般是指两个三极管分别受两个互补信号的控制,总是在一个三极管导通的时候另一个截止。高低电平由IC的电源决定。推挽电路是两个参数相同的三极管或MOSFET,以推挽方式存在于电路中,各负责正负半周的波形放大任务,电路工作时,两只对称的功率开关管每次只有一个导通,所以导通损耗小、效率高。输出既可以向负载灌电流,也可以从负载抽取电流。推拉式输出级既提高电路的负载能力,又提高开关速度。

1.2 模拟输入模式

Figure 1-4 模拟输入
信号进入后不经过上拉电阻或者下拉电阻,关闭施密特触发器,经由另一线路把电压信号传送到片上外设模块。模拟输入是指传统方式的输入,数字输入是输入PCM数字信号,即0、1的二进制数字信号,通过数模转换,转换成模拟信号,经前级放大进入功率放大器,功率放大器还是模拟的。比如传送给ADC模块,由ADC采集电压信号。所以可以理解为模拟输入的信号是未经处理的信号,是原汁原味的信号。

1.3 复用模式

复用开漏输出
可以理解为GPIO口被用作第二功能时的配置情况(即并非作为通用IO口使用)。端口必须配置成复用开漏功能输出模式。
复用推挽输出:
可以理解为GPIO口被用作第二功能时的配置情况(即并非作为通用IO口使用)。端口必须配置成复用推挽功能输出模式。

2 GPIO流水灯硬件电路分析

发光二极管是属于二极管的一种,具有二级管单向导电特性,即只有在正向电压(二极管的正极接正,负极接负)下才能导通发光。PA01引脚接发光二极管(LED)的正极,所以PA01引脚输出高电平LED亮,PA01引脚输出低电平PA01熄灭。
Figure 2-1 LED电路图
值得注意的,不同的开发板,LED连接的GPIO一般是不同的,请注意修改。

3 GPIO 流水灯实现

3.1 配置LED GPIO

在前面一章,已经搭建了RA8D1的开发环境,接下来在第一章的基础上配置GPIO。
首先打开RA Smart Configurator,按照下图所示操作,即可打开RA Smart Configurator。
Figure 3-1 打开RA Smart Configurator
然后即可配置参数。这里将LED配置后才能输出模式。

 

 
Figure 3-2 RA Smart Configurator配置GPIO
然后最后点右上角的 “Generate Project Content” 图标生成工程即可。

3.2 编译代码

打开工程,在hal_entry.c添加如下代码。
/* Exported macro ------------------------------------------------------------*/
#define GPIO_LED1 BSP_IO_PORT_10_PIN_01
/*******************************************************************************************************************//**
* main() is generated by the RA Configuration editor and is used to generate threads if an RTOS is used. This function
* is called by main() when no RTOS is used.
**********************************************************************************************************************/
void hal_entry(void)
{
/* TODO: add your own code here */
while(1)
{
R_BSP_SoftwareDelay(500, BSP_DELAY_UNITS_MILLISECONDS);
R_IOPORT_PinWrite(&g_ioport_ctrl, GPIO_LED1, BSP_IO_LEVEL_HIGH);
R_BSP_SoftwareDelay(500, BSP_DELAY_UNITS_MILLISECONDS);
R_IOPORT_PinWrite(&g_ioport_ctrl, GPIO_LED1, BSP_IO_LEVEL_LOW);
 
}
#if BSP_TZ_SECURE_BUILD
/* Enter non-secure code */
R_BSP_NonSecureEnter();
#endif
}
应用代码很简单,就是不断改变LED引脚的高低电平,再加上延时,从而实现流水灯的效果。

4 实验现象

将编译好的程序下载到板子中,可以看到LED灯不停闪烁。
 

最新回复

这个是闪灯,不是流水灯,可以多配置几个IO来搞起来。   详情 回复 发表于 2024-7-6 11:52
点赞 关注

回复
举报

6960

帖子

11

TA的资源

版主

沙发
 

这个是闪灯,不是流水灯,可以多配置几个IO来搞起来。

 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表