Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
nuc980
NK-980IOT 测评之 GPIO
发布于 2022-03-30 19:10:19 浏览:690
订阅该版
[tocm] 开发环境: * win 11 * RT-Thread Studio 2.2.1 ### 1. 创建工程 RT-Thread 已经有了 NUC980 的 BSP,可以直接使用,也有 NK-980IOT 的工程。 我创建工程的方法是基于开发板,新安装的 RT- Thread Studio 默认是没有支持 NK-980IOT,需要自己安装,打开 RT-Thread Studio,使用 SDK Manager ,如下: ![SDK_Manager.png](https://oss-club.rt-thread.org/uploads/20220330/1be922fababddc34306586280fbd890e.png) 打开后,下拉到 Nuvoton,选择 NK-980IOT,然后安装: ![install_sdk.png](https://oss-club.rt-thread.org/uploads/20220330/c7ff4c1c9772166b277d8eca3f1fbd55.png.webp) 然后新建项目,我新建一个 **RT-Thread 项目**,选择**基于开发板**,对应的开发板选择 **NK-980IOT**,项目命名位 **GPIO_test**,如下: ![project.png](https://oss-club.rt-thread.org/uploads/20220330/17734eaa3a150d6ee430779923686d1d.png) 这样就创建了一个 NK-980IOT 的 RT-Thread 工程了,如下: ![project_exp.png](https://oss-club.rt-thread.org/uploads/20220330/63c9edbb8b6b2138ac24d5950fa619c6.png) 尝试编译一下,编译成功,没报错: ![build.png](https://oss-club.rt-thread.org/uploads/20220330/697d29a41ec9fa35bd6dbe26fc279953.png) ### 2. 烧录运行 板子上一共有2 个 micro usb 接口,一个用于是连接到 nuc980 usb,可以用于给 nuc980 下载固件,还有一个USB是连接到板子上的 USB 转 TTL,可以用于调试,把NUC980 设置为 USB 启动进入下载模式,然后分别把这两个 USB 口都连接到 PC,使用 MobaXterm 打开对应 COM口,,打开 NuWriter,选择 NUC980DR61YC,让 RT-Thread 在 nuc980 RAM上跑,设置完后 download,如下: ![download_run.png](https://oss-club.rt-thread.org/uploads/20220330/8e83624820466b42699d8934a3e3c578.png.webp) 板子上的 LED5 会闪烁一段时间然后保持常亮,通过查看工程里面的代码可以知道,上电后,线程 main 会让 LED5 闪烁 1000 次,然后退出。 ### 3. RT-Thread 的 NUC980 BSP 中 GPIO 的使用 通过查看工程里面的源码,可以知道,NUC980 的 GPIO 使用方法,首先使用 `rt_pin_mode`设置工作模式,原型如下: ``` /* RT-Thread Hardware PIN APIs */ void rt_pin_mode(rt_base_t pin, rt_base_t mode) ``` 第一个参数是所要设置的 IO,可是使用 `NU_GET_PININDEX` 来获得说要设置的 IO 的 rt_bast_t, 第二个参数是 GPIO 的工作模式,查看源码,可以看到有如下工作模式: ``` #define PIN_MODE_OUTPUT 0x00 #define PIN_MODE_INPUT 0x01 #define PIN_MODE_INPUT_PULLUP 0x02 #define PIN_MODE_INPUT_PULLDOWN 0x03 #define PIN_MODE_OUTPUT_OD 0x04 ``` 设置完后,用作输出的话,使用函数 `rt_pin_write` 来写高电平或者低电平,用作输入的话使用 `rt_pin_read` 来读取对于的电平。 ### 4. 测试 来验证下,板子引出了很多 IO 可以用来测试,这里使用 NU4 引出的 IO 来测试, ![Test_io.png](https://oss-club.rt-thread.org/uploads/20220330/e8ffa09399eccac8d0cd20aa85221802.png) 用 8 个LED 来测试,正极都接在一起,既共阳接法,负极接 IO 口,IO口拉低是 LED亮,拉高时 LED 灭,跟 NuMaker-RTU-NUC980 连接如下: ![connect.jpg](https://oss-club.rt-thread.org/uploads/20220330/a7b9772a023372c5986b4bd1beb28175.jpg.webp) 代码修改位如下: ``` /**************************************************************************//** * * @copyright (C) 2019 Nuvoton Technology Corp. All rights reserved. * * SPDX-License-Identifier: Apache-2.0 * * Change Logs: * Date Author Notes * 2020-12-12 Wayne First version * ******************************************************************************/ #include
#include
#include
#define LED0 NU_GET_PININDEX(NU_PF, 9) #define LED1 NU_GET_PININDEX(NU_PF, 10) #define LED2 NU_GET_PININDEX(NU_PD, 12) #define LED3 NU_GET_PININDEX(NU_PD, 13) #define LED4 NU_GET_PININDEX(NU_PD, 15) #define LED5 NU_GET_PININDEX(NU_PD, 14) #define LED6 NU_GET_PININDEX(NU_PG, 6) #define LED7 NU_GET_PININDEX(NU_PG, 7) int main(int argc, char **argv) { uint8_t i=0; rt_pin_mode(LED0, PIN_MODE_OUTPUT); rt_pin_mode(LED1, PIN_MODE_OUTPUT); rt_pin_mode(LED2, PIN_MODE_OUTPUT); rt_pin_mode(LED3, PIN_MODE_OUTPUT); rt_pin_mode(LED4, PIN_MODE_OUTPUT); rt_pin_mode(LED5, PIN_MODE_OUTPUT); rt_pin_mode(LED6, PIN_MODE_OUTPUT); rt_pin_mode(LED7, PIN_MODE_OUTPUT); for(i=0;i<100;i++) { rt_pin_write(LED0, PIN_HIGH); rt_pin_write(LED1, PIN_HIGH); rt_pin_write(LED2, PIN_HIGH); rt_pin_write(LED3, PIN_HIGH); rt_pin_write(LED4, PIN_HIGH); rt_pin_write(LED5, PIN_HIGH); rt_pin_write(LED6, PIN_HIGH); rt_pin_write(LED7, PIN_HIGH); rt_thread_mdelay(200); rt_pin_write(LED0, PIN_LOW); rt_pin_write(LED1, PIN_LOW); rt_pin_write(LED2, PIN_LOW); rt_pin_write(LED3, PIN_LOW); rt_pin_write(LED4, PIN_LOW); rt_pin_write(LED5, PIN_LOW); rt_pin_write(LED6, PIN_LOW); rt_pin_write(LED7, PIN_LOW); rt_thread_mdelay(200); } return 0; } ``` 正常的话,每个 GPIO 都能正常工作,那 8 个 LED 都会闪烁 100 次,然后保持常亮, 编译、烧录运行、结果是接到 PF9、PF10 的 LED 没有点亮,看了下,这 2 个口也是有 UART1 的功能,会不会是复用 了呢?运行过程中使用 list_device 看了下设备: ![list_device.png](https://oss-club.rt-thread.org/uploads/20220330/4c60a992f99f73e5ec87dc185e355419.png) 确实有 uart1,那就不启用 uart1,再 rt-thread studio 设置下,把 Enable UART1 关闭,如下: ![project_setting_u1.png](https://oss-club.rt-thread.org/uploads/20220330/456a092cd330bad6429c300df44057c2.png.webp) 再次编译运行,可是结果还是一样, 问题在哪呢? 看了下代码,**nu_pin_init.c** 文件中 uart io 初始化部分,如下: ![uart1_flag.png](https://oss-club.rt-thread.org/uploads/20220330/fd5fd18c5c1d58749950421c9d94c02d.png) 虽然没有打开 UART1,可是把 GPF9、GPF10 复位用 UART1 的代码还是执行了,所以 GPF9、GPF10 无法用作 GPIO,把上述代码改为如下: ``` static void nu_pin_uart_init(void) { /* UART0: GPF11, GPF12 */ outpw(REG_SYS_GPF_MFPH, (inpw(REG_SYS_GPF_MFPH) & 0xfff00fff) | 0x11000); #if !defined(BOARD_USING_LCD_ILI9341) && defined(BSP_USING_UART1) /* UART1: GPF9, GPF10 */ outpw(REG_SYS_GPF_MFPH, (inpw(REG_SYS_GPF_MFPH) & 0xfffff00f) | 0x00220); #endif } ``` 编译、烧录、运行,8 个 LED 都能成功点亮。
0
条评论
默认排序
按发布时间排序
登录
注册新账号
关于作者
杨桃树
这家伙很懒,什么也没写!
文章
3
回答
0
被采纳
0
关注TA
发私信
相关文章
1
ENV下的NUC980能移动到RT STUDIO上吗?
2
NUC980 生成 UFFS 文件系统镜像
3
怎样生成基于NUC980、rt_thread系统的板级支持包(MDK开发环境)
4
这个接口在哪个文件里面的。
5
NUC980IOT开发板rt工程创建文件
6
NUC980之EMAC功能模块的硬件介绍
7
nuc980DDR和MDK的IRAM是怎样的映射关系
8
ncu977 跑rtthread 操作io没有反应
9
NUC980开发板生成Keil工程找不到Device和编译出错
10
rtthread studio创建NUC980工程无法设置RTC日期和时间
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
国产MCU移植系列教程汇总,欢迎查看!
4
机器人操作系统 (ROS2) 和 RT-Thread 通信
5
五分钟玩转RT-Thread新社区
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
FinSH
ART-Pi
USB
DMA
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
FAL
rt-smart
ESP8266
I2C_IIC
UART
WIZnet_W5500
ota在线升级
freemodbus
PWM
flash
cubemx
packages_软件包
BSP
潘多拉开发板_Pandora
定时器
ADC
flashDB
GD32
socket
中断
编译报错
Debug
SFUD
rt_mq_消息队列_msg_queue
msh
keil_MDK
ulog
C++_cpp
MicroPython
本月问答贡献
踩姑娘的小蘑菇
4
个答案
1
次被采纳
红枫
4
个答案
1
次被采纳
张世争
4
个答案
1
次被采纳
Ryan_CW
4
个答案
1
次被采纳
xiaorui
1
个答案
1
次被采纳
本月文章贡献
catcatbing
3
篇文章
5
次点赞
qq1078249029
2
篇文章
2
次点赞
xnosky
2
篇文章
1
次点赞
Woshizhapuren
1
篇文章
5
次点赞
YZRD
1
篇文章
2
次点赞
回到
顶部
发布
问题
投诉
建议
回到
底部