Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
GPIO
NXP 微控制器
[FDRM-MCXA156]GPIO测评:LED灯控制和按键控制
发布于 2025-02-28 17:57:02 浏览:113
订阅该版
[tocm] # **前言** ## FDRM-MCXA156简介: 有幸能够参与NXP和RT-thread的评测活动,关于这一块FRDM-MCXA156主控的开发板,第一感觉就是小巧,其次是通过官网了解,该A系列拥有同等的低功耗与高达 1 MB 的闪存和高达 128 KB 的 RAM,具有 8 KB ECC、CAN-FD、FlexIO、FS USB、I3C、LPLUART、LPSPI、LPI2C、DMA 和 LDO,主要的应用场景有空调,无刷直流电机(BLDC)控制,电表,电机驱动器。 ## 原理图和版图(文章底部可供下载),如图所示:    ------------ ### 本篇文章,来对FRDM-MCXA156浅浅入个门,搭载RTThread实时操作系统,点亮LED,并且针对rtthread的pin驱动进行一个介绍和使用。 首先需要配置一下初始的开发环境:ENV2.0的版本,rtthread源码,在github下载即可,keil5。rtthread官网下的文档中心都有 从github将rtthread的源码下载下来,我使用压缩包下载,然后解压根据路径 rt-thread-master\bsp\nxp\mcx\mcxa\frdm-mcxa156 找到这一个文件下的工程文件并且打开 ------------------  通过原理图可以看出,MCXA156的RGB三色灯是由P3_12,P3_13,P3_0组成的,因此只需要控制这三个引脚的高低电平就可以控制IO口驱动RGB三色灯。 接下来,通过以下三个宏定义,来控制相应的引脚 1 #define LED_R_PIN ((3*32)+12) 表示的是P3端口的12引脚 2 #define LED_G_PIN ((3*32)+13) 表示的是P3端口的13引脚 3 #define LED_B_PIN ((3*32)+0) 表示的是P3端口的0引脚 通过 rt_pin_mode(LED_B_PIN, PIN_MODE_OUTPUT); 配置LED_B_PIN为输出模式 如果需要配置其它模式可以更改,例如 PIN_MODE_INPUT 输入模式 PIN_MODE_INPUT_PULLDOWN 下拉输入 PIN_MODE_INPUT_PULLUP 上拉输入 PIN_MODE_OUTPUT_OD 推挽输出 rtthread还提供了设备驱动的支持,在本例子中,通过访问PIN设备驱动,能够很快捷方便的操控PIN设备, 例如通过 rt_pin_write(rt_base_t pin, rt_base_t value)和rt_pin_read(rt_base_t pin, rt_base_t value),操控PIN设备的输出和读取。 rt_pin_attach_irq(KEY0_PIN_NUM, PIN_IRQ_MODE_FALLING, beep_on, RT_NULL);可以设置引脚的中断触发模式.可以通过读取按键的上升沿和下降沿,识别按键是否按下,进行下一步操作等等的应用。例子二有相关PIN设备具体的实现 例子一:通过控制LED灯,以每500ms进行三色切换LED灯 ```c /* * Copyright (c) 2006-2025, RT-Thread Development Team * Copyright (c) 2019-2020, Arm Limited. All rights reserved. * * SPDX-License-Identifier: Apache-2.0 * * Change Logs: * Date Author Notes * 2019-10-24 Magicoe first version * 2020-01-10 Kevin/Karl Add PS demo * 2020-09-21 supperthomas fix the main.c * */ #include
#include "drv_pin.h" #define LED_R_PIN ((3*32)+12) //红灯 #define LED_G_PIN ((3*32)+13) //绿灯 #define LED_B_PIN ((3*32)+0) //蓝灯 int main(void) { rt_kprintf("MCXA156 HelloWorld\r\n"); rt_pin_mode(LED_R_PIN, PIN_MODE_OUTPUT); /* Set GPIO as Output */ rt_pin_mode(LED_G_PIN, PIN_MODE_OUTPUT); /* Set GPIO as Output */ rt_pin_mode(LED_B_PIN, PIN_MODE_OUTPUT); /* Set GPIO as Output */ rt_pin_write(LED_R_PIN, PIN_HIGH); //初始化LED红灯,为高电平,熄灭状态 rt_pin_write(LED_G_PIN, PIN_HIGH); //初始化LED绿灯,为高电平,熄灭状态 rt_pin_write(LED_B_PIN, PIN_HIGH); //初始化LED蓝灯,为高电平,熄灭状态 while (1) { rt_pin_write(LED_R_PIN, PIN_LOW); rt_thread_mdelay(500); rt_pin_write(LED_R_PIN, PIN_HIGH); rt_thread_mdelay(500); rt_pin_write(LED_G_PIN, PIN_LOW); rt_thread_mdelay(500); rt_pin_write(LED_G_PIN, PIN_HIGH); rt_thread_mdelay(500); rt_pin_write(LED_B_PIN, PIN_LOW); rt_thread_mdelay(500); rt_pin_write(LED_B_PIN, PIN_HIGH); rt_thread_mdelay(500); } } // end file ``` 例子二:通过使用SW_2,SW_3两个按键实现通过按键中断,进行三色灯的LED切换和清除所有LED灯。 ```c /* * Copyright (c) 2006-2025, RT-Thread Development Team * Copyright (c) 2019-2020, Arm Limited. All rights reserved. * * SPDX-License-Identifier: Apache-2.0 * * Change Logs: * Date Author Notes * 2019-10-24 Magicoe first version * 2020-01-10 Kevin/Karl Add PS demo * 2020-09-21 supperthomas fix the main.c * */ #include
#include "drv_pin.h" #define LED_R_PIN ((3*32)+12) #define LED_G_PIN ((3*32)+13) #define LED_B_PIN ((3*32)+0) #define KEY2 ((1*32)+7) //P1_7 为SW2 #define KEY3 (6) //P0_6 为SW3 int k=1; //打开LED红灯 void LED_R_ON(void *args){ rt_pin_write(LED_R_PIN, PIN_LOW); } //关闭LED红灯 void LED_R_OFF(void *args){ rt_pin_write(LED_R_PIN, PIN_HIGH); } //打开LED绿灯 void LED_G_ON(void *args){ rt_pin_write(LED_G_PIN, PIN_LOW); } //关闭LED绿灯 void LED_G_OFF(void *args){ rt_pin_write(LED_G_PIN, PIN_HIGH); } //打开LED蓝灯 void LED_B_ON(void *args){ rt_pin_write(LED_B_PIN, PIN_LOW); } //关闭LED蓝灯 void LED_B_OFF(void *args){ rt_pin_write(LED_B_PIN, PIN_HIGH); } //切换LED三色灯 void LED_CONTROL(void *args){ k++; if(k>3){k=1;} if(1==k){ rt_pin_write(LED_R_PIN, PIN_LOW); rt_pin_write(LED_G_PIN, PIN_HIGH); rt_pin_write(LED_B_PIN, PIN_HIGH); }else if(2==k){ rt_pin_write(LED_R_PIN, PIN_HIGH); rt_pin_write(LED_G_PIN, PIN_LOW); rt_pin_write(LED_B_PIN, PIN_HIGH); }else if(3==k){ rt_pin_write(LED_R_PIN, PIN_HIGH); rt_pin_write(LED_G_PIN, PIN_HIGH); rt_pin_write(LED_B_PIN, PIN_LOW); } } void LED_OFF(void *args){ rt_pin_write(LED_R_PIN, PIN_HIGH); rt_pin_write(LED_G_PIN, PIN_HIGH); rt_pin_write(LED_B_PIN, PIN_HIGH); } int main(void) { k=1; rt_kprintf("MCXA156 HelloWorld\r\n"); rt_pin_mode(LED_R_PIN, PIN_MODE_OUTPUT); /* Set GPIO as Output */ rt_pin_mode(LED_G_PIN, PIN_MODE_OUTPUT); /* Set GPIO as Output */ rt_pin_mode(LED_B_PIN, PIN_MODE_OUTPUT); /* Set GPIO as Output */ rt_pin_mode(KEY3, PIN_MODE_INPUT_PULLUP); //设置按键3为输入上拉模式 rt_pin_mode(KEY2, PIN_MODE_INPUT_PULLUP); //设置按键2为输入上拉模式 rt_pin_write(LED_R_PIN, PIN_HIGH);//关闭LED红灯 rt_pin_write(LED_G_PIN, PIN_HIGH);//关闭LED绿灯 rt_pin_write(LED_B_PIN, PIN_HIGH);//关闭LED蓝灯 //设置下降沿中断,采集到下降沿时触发中断,进入回调函数LED_R_ON rt_pin_attach_irq(KEY2, PIN_IRQ_MODE_FALLING, LED_OFF, RT_NULL); rt_pin_irq_enable(KEY2, PIN_IRQ_ENABLE); //设置下降沿中断,采集到下降沿时触发中断,进入回调函数LED_R_OFF rt_pin_attach_irq(KEY3, PIN_IRQ_MODE_FALLING, LED_CONTROL, RT_NULL); rt_pin_irq_enable(KEY3, PIN_IRQ_ENABLE); while (1) { } } ``` 原理图文件和版图文件大家自取: [SPF-90841.pdf](https://club.rt-thread.org/file_download/479829d358bfd087) [DNP-90841_A4.pdf](https://club.rt-thread.org/file_download/c118bbc02d8dec4c)
0
条评论
默认排序
按发布时间排序
登录
注册新账号
关于作者
CHNT_8350
这家伙很懒,什么也没写!
文章
10
回答
0
被采纳
0
关注TA
发私信
相关文章
1
试贴-消灭0主题
2
LPC M4的一些资料
3
LPC4088的临时分支
4
lpc1788 ad 不稳定
5
1788 LCD控制器缓冲区字节问题
6
一起来学习LPC4088吧
7
上传LPC4088的realtouch主工程
8
RealBoard 4088预定帖 [第一批板子不多,预定提前结束]
9
晒RealBoard LPC4088开箱照啦,速带小板凳前来围观
10
4088主程序需要的SD卡资源
推荐文章
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
rt-smart
RTC
FAL
I2C_IIC
ESP8266
UART
cubemx
WIZnet_W5500
ota在线升级
PWM
BSP
flash
freemodbus
packages_软件包
潘多拉开发板_Pandora
GD32
定时器
ADC
flashDB
编译报错
socket
中断
rt_mq_消息队列_msg_queue
Debug
keil_MDK
SFUD
msh
ulog
C++_cpp
MicroPython
本月问答贡献
lchnu
3
个答案
2
次被采纳
张世争
1
个答案
2
次被采纳
a1012112796
9
个答案
1
次被采纳
三世执戟
7
个答案
1
次被采纳
crystal266
4
个答案
1
次被采纳
本月文章贡献
jinchanchan
8
篇文章
13
次点赞
ssdd45555
3
篇文章
2
次点赞
聚散无由
1
篇文章
4
次点赞
rvcore
1
篇文章
1
次点赞
lvdongchina
1
篇文章
1
次点赞
回到
顶部
发布
问题
投诉
建议
回到
底部