Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
新手学习
星火1号_spark_星火一号_开发板
新手教程-Pin设备使用
发布于 2024-09-11 09:24:55 浏览:372
订阅该版
[tocm] # PIN设备 ## 1. 引脚简介 > 芯片上的引脚一般分为 4 类:电源、时钟、控制与 I/O,I/O 口在使用模式上又分为 General Purpose Input Output(通用输入 / 输出),简称 GPIO,与功能复用 I/O(如 SPI/I2C/UART 等)。大多数 MCU 的引脚都不止一个功能。不同引脚内部结构不一样,拥有的功能也不一样。可以通过不同的配置,切换引脚的实际功能。通用 I/O 口主要特性如下:可编程控制中断:中断触发模式可配置,一般有下图所示 5 种中断触发模式: ![5种中断触发模式.png](https://oss-club.rt-thread.org/uploads/20240910/528afba335a0305bcccae827151bb686.png) 输入输出模式可控制。 输出模式一般包括:推挽、开漏、上拉、下拉。引脚为输出模式时,可以通过配置引脚输出的电平状态为高电平或低电平来控制连接的外围设备 输入模式一般包括:浮空、上拉、下拉、模拟。引脚为输入模式时,可以读取引脚的电平状态,即高电平或低电平 ## 2. 基于Spark项目 按键控制LED ### 2.1创建项目 ![创建项目.jpg](https://oss-club.rt-thread.org/uploads/20240910/0ef8438c2b8c90da28430c3d7d291690.jpg) ![创建项目2.png](https://oss-club.rt-thread.org/uploads/20240910/fb1794e23788438a225d6e083278d86e.png.webp) ### 2.2查找需要的PIN ![PIN引脚.jpg](https://oss-club.rt-thread.org/uploads/20240910/942b7c07fd697e52cd888db029206b9d.jpg.webp) ### 2.3注释main代码 ![注释main代码.png](https://oss-club.rt-thread.org/uploads/20240910/893a7563f2e2349f44bf3120b06708a5.png.webp) ### 2.4编写新的线程代码 ![编写新的线程代码.jpg](https://oss-club.rt-thread.org/uploads/20240910/32e2348f2a6acf61a5a15d726c27269b.jpg.webp) ```C #include
#include
#include
#define DBG_TAG "pin" #define DBG_LVL DBG_LOG #include
#define THREAD_PRIORITY 25 // 线程优先级 #define THREAD_STACK_SIZE 512 // 线程堆栈大小 #define THREAD_TIMESLICE 5 // 线程时间片 #define LED_BLUE_NUM GET_PIN(F, 11) #define LED_RED_NUM GET_PIN(F, 12) #define KEY_UP_NUM GET_PIN(C, 5) #define KEY_DOWN_NUM GET_PIN(C, 1) static rt_thread_t tid1 = RT_NULL; void led_blue_turn(void *args) { static char count=0; if (count%2==0) { rt_pin_write(LED_BLUE_NUM, PIN_LOW); } else { rt_pin_write(LED_BLUE_NUM, PIN_HIGH); } LOG_D("led_blue_turn!\n"); count++; } static void pin_entry(void *parameter) { while (1) { /* 读取按键 KEY0 的引脚状态 */ if (rt_pin_read(KEY_UP_NUM) == PIN_LOW) { rt_thread_mdelay(50); if (rt_pin_read(KEY_UP_NUM) == PIN_LOW) { /* 按键已被按下,输出 log,点亮 LED 灯 */ LOG_D("KEY_UP pressed!"); rt_pin_write(LED_RED_NUM, PIN_LOW); } } else { /* 按键没被按下,熄灭 LED 灯 */ rt_pin_write(LED_RED_NUM, PIN_HIGH); } rt_thread_mdelay(10); } } /* 线程示例 */ int thread_pin(void) { /*设置LED引脚为输出模式 */ // rt_base_t LED_RED_NUM= rt_pin_get("PF.12"); rt_pin_mode(LED_RED_NUM, PIN_MODE_OUTPUT); rt_pin_mode(LED_BLUE_NUM, PIN_MODE_OUTPUT); /*设置按键引脚为输入模式*/ rt_pin_mode(KEY_UP_NUM, PIN_MODE_INPUT_PULLUP); rt_pin_mode(KEY_DOWN_NUM, PIN_MODE_INPUT_PULLUP); /* 绑定中断,下降沿模式,回调函数名为led_blue_on */ rt_pin_attach_irq(KEY_DOWN_NUM, PIN_IRQ_MODE_FALLING, led_blue_turn, RT_NULL); /* 使能中断 */ rt_pin_irq_enable(KEY_DOWN_NUM, PIN_IRQ_ENABLE); tid1 = rt_thread_create("pin", pin_entry, RT_NULL, THREAD_STACK_SIZE, THREAD_PRIORITY, THREAD_TIMESLICE); /* 如果获得线程控制块,启动这个线程 */ if (tid1 != RT_NULL) rt_thread_startup(tid1); return 0; } /* 导出到 msh 命令列表中 */ MSH_CMD_EXPORT(thread_pin, thread_pin); ``` ## 3.编译下载 ![编译下载.png](https://oss-club.rt-thread.org/uploads/20240910/1b851a7062f8595a119c51dc032942bb.png.webp) ## 4.运行 ![运行线程.png](https://oss-club.rt-thread.org/uploads/20240910/4be3f85d04d7ea8733ddc78a51f5beb9.png) ## 5.运行结果 ![运行结果.png](https://oss-club.rt-thread.org/uploads/20240910/42d4af5e4904a4f968d6a0b42631d157.png)
1
条评论
默认排序
按发布时间排序
登录
注册新账号
关于作者
Licy
这家伙很懒,什么也没写!
文章
3
回答
2
被采纳
1
关注TA
发私信
相关文章
1
大神们,rt-thread启用WDT了,但是还是没启动,怎么办?
2
求一个师傅带带队,有偿交学费 肯吃苦
3
自己按照官方手册 在drv_gpio.c里面找不到PIN脚信息
4
rtt studio f4默认生成的代码无法使用
5
官方例程中的 USB设置配置不成功
6
STM32F4的虚拟串口 的USB时钟如何配置
7
AT24CXX 软件包函数 at24cxx的问题
8
rtthread studio和bsp文件之间生成的区别和联系?
9
pwm根据手册修改为对应的引脚后无效
10
文件系统挂实验 ls命令异常
推荐文章
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
WIZnet_W5500
ota在线升级
UART
PWM
cubemx
freemodbus
flash
packages_软件包
BSP
潘多拉开发板_Pandora
定时器
ADC
GD32
flashDB
socket
中断
Debug
编译报错
msh
SFUD
keil_MDK
rt_mq_消息队列_msg_queue
at_device
ulog
C++_cpp
本月问答贡献
踩姑娘的小蘑菇
7
个答案
3
次被采纳
张世争
8
个答案
2
次被采纳
rv666
5
个答案
2
次被采纳
用户名由3_15位
11
个答案
1
次被采纳
KunYi
6
个答案
1
次被采纳
本月文章贡献
程序员阿伟
6
篇文章
2
次点赞
hhart
3
篇文章
4
次点赞
大龄码农
1
篇文章
2
次点赞
ThinkCode
1
篇文章
1
次点赞
Betrayer
1
篇文章
1
次点赞
回到
顶部
发布
问题
投诉
建议
回到
底部