Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
RT-Thread Studio
RT-Thread Studio
stm32F4
RTT-Studio实战-流水灯
发布于 2021-03-08 23:01:24 浏览:1937
订阅该版
@[toc] # RT-Thread Studio实战系列-流水灯实战 ## 一、初始准备 ### 1.硬件平台 使用正点原子STM32F4探索者 ![IMG_20210207_234256](https://oss-club.rt-thread.org/uploads/20220714/9c3209ad8cbe96b7d85175046925f177bbdc7e04.png) ### 2.软件平台 RT-Thread Studio软件平台 STM32CubeProgrammer下载平台 ![在这里插入图片描述](https://oss-club.rt-thread.org/uploads/20220714/c16ea96a89122afdde0239c587776fd49bd41b29.png) ## 二、操作步骤 ### 1.RTT环境生成 - 新建RTT项目 新建RTT控件如下 ![在这里插入图片描述](https://oss-club.rt-thread.org/uploads/20220714/8f719af110c226dc40607b2eeeedeaf6aeb047df.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQ1Mzk2Njcy,size_16,color_FFFFFF,t_70) 选择基于芯片的项目,填写工程名字,芯片类型,控制台串口和下载器,控制台串口我使用的串口一,连接电脑方便调试 ![在这里插入图片描述](https://oss-club.rt-thread.org/uploads/20220714/a1f7fad9bd83962fdd42a38a98c4cdb3e842818c.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQ1Mzk2Njcy,size_16,color_FFFFFF,t_70) 工程新建后左边的项目资源管理器会显示我们的工程,我们把他展开 ![在这里插入图片描述](https://oss-club.rt-thread.org/uploads/20220714/1d8530359fb7120df8515ef3b074ecdd62f80951.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQ1Mzk2Njcy,size_16,color_FFFFFF,t_70) - 新建程序文件 新建一个myapp文件夹,建立一个led_flash.c和.h文件,建立后如下 ![在这里插入图片描述](https://oss-club.rt-thread.org/uploads/20220714/425a3bffa53cff0678309f94e6a6361ec5859eb6.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQ1Mzk2Njcy,size_16,color_FFFFFF,t_70) ### 2.RTT程序编写 - 程序源码 创建之后分别写入头文件和.c文件的代码如下 led_flash.h的代码 ```c #ifndef __LED_FLASH_H__ #define __LED_FLASH_H__ static int led_init(void); static void led_entry(void *prg); #endif ``` led_flash.c的代码 ```c #include "led_flash.h" //RTT 操作系统头文件和设备管理 #include
#include
//调用包 #include
/* PIN脚编号,查看驱动文件drv_gpio.c确定 */ #define LED0_PIN 89 #define LED1_PIN 90 static void led_entry(void *prg) { /* 设置PIN脚模式为输出 */ rt_pin_mode(LED0_PIN, PIN_MODE_OUTPUT); rt_pin_mode(LED1_PIN, PIN_MODE_OUTPUT); while (1) { rt_pin_write(LED0_PIN, PIN_LOW); rt_pin_write(LED1_PIN, PIN_HIGH); rt_thread_mdelay(1000); /* 拉高PIN脚 */ rt_pin_write(LED0_PIN, PIN_HIGH); rt_pin_write(LED1_PIN, PIN_LOW); rt_thread_mdelay(1000); } } static int led_init(void) { rt_thread_t tid; rt_err_t ret = RT_EOK; tid = rt_thread_create("led", led_entry, RT_NULL, 512, 10, 20); if (tid != RT_NULL) { rt_thread_startup(tid); } else { ret = RT_ERROR; } return ret; } /* 导出到 msh 命令列表中 */ MSH_CMD_EXPORT(led_init,led_init); ``` - 代码分析 头文件代码简单理解,不用多说,c语言基本格式 .c文件逻辑如下,我们点亮LED是对IO口进行操作,在RTT里面,IO口的在drv_gpio.c内定义为引脚,我们在drv_gpio.c里面找到对应引脚,在探索者开发板上引脚对应如下 ![在这里插入图片描述](https://oss-club.rt-thread.org/uploads/20220714/12c72a8445f89e9be0e76ac82db1c15afc0ab406.png) drv_gpio.c找到的对应IO如下,对应的89和90引脚 ![在这里插入图片描述](https://oss-club.rt-thread.org/uploads/20220714/02876cb6114833977edca16574c82e342fb4ec81.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQ1Mzk2Njcy,size_16,color_FFFFFF,t_70) 我们先宏定义这两个引脚: ```c /* PIN脚编号,查看驱动文件drv_gpio.c确定 */ #define LED0_PIN 89 #define LED1_PIN 90 ``` 然后建立一个RTT线程初始化函数,建立流水灯线程的初始化,并在初始化完成后启动该线程,led线程初始化代码如下,采用的动态线程建立方式,判断建立成功后启动线程 ```C static int led_init(void) { rt_thread_t tid; rt_err_t ret = RT_EOK; //创建动态线程 tid = rt_thread_create("led", led_entry, RT_NULL, 512, 10, 20); if (tid != RT_NULL) { //建立成功则启动 rt_thread_startup(tid); } else { //建立失败则返回错误值 ret = RT_ERROR; } return ret; } ``` 线程中的led_entry对应的是LED流水灯的实体函数,编写如下,先初始化两个IO口,在在主循环使用IO口调用API,实现流水灯效果 ```c static void led_entry(void *prg) { /* 设置PIN脚模式为输出 */ rt_pin_mode(LED0_PIN, PIN_MODE_OUTPUT); rt_pin_mode(LED1_PIN, PIN_MODE_OUTPUT); while (1) { rt_pin_write(LED0_PIN, PIN_LOW); rt_pin_write(LED1_PIN, PIN_HIGH); rt_thread_mdelay(1000); /* 拉高PIN脚 */ rt_pin_write(LED0_PIN, PIN_HIGH); rt_pin_write(LED1_PIN, PIN_LOW); rt_thread_mdelay(1000); } } ``` 程序主体编写完成,我们只需要调用led_init函数,线程就能执行,这里有两个方式,一是通过MSH启动。二是在main函数里面调用led_init直接启动(注意我这里使用的是静态函数,需要在主函数里面调用需要定义成全局函数),我使用的是MSH方式,即把函数添加到注册表内,代码如下 ```c /* 导出到 msh 命令列表中 */ MSH_CMD_EXPORT(led_init,led_init); ``` ### 3.程序下载,观察现象 代码编写完成,点击小锤子编译 ![在这里插入图片描述](https://oss-club.rt-thread.org/uploads/20220714/bc3a2647f7efc5271d3ea566fc3124db1074d0a4.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQ1Mzk2Njcy,size_16,color_FFFFFF,t_70) 编译完成,选择ST-LINK下载程序 ![在这里插入图片描述](https://oss-club.rt-thread.org/uploads/20220714/f3d1285c1d336d4c0df4da84cc96edf51c807d5a.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQ1Mzk2Njcy,size_16,color_FFFFFF,t_70) 打开端口,选择主机和电脑连接的串口 ![在这里插入图片描述](https://oss-club.rt-thread.org/uploads/20220714/e6f8afbf27bd1783adbdcd8616267b76c42cdce9.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQ1Mzk2Njcy,size_16,color_FFFFFF,t_70) 在msh输入help,出现注册的命令,可以看到led_init,我门输入led_init,则流水灯线程启动,开发板可以看到现象 ![在这里插入图片描述](https://oss-club.rt-thread.org/uploads/20220714/70a2c5f5c43a9b01e227802e863d9d1d48760a2e.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQ1Mzk2Njcy,size_16,color_FFFFFF,t_70) 流水灯现象 ![1612940166430](https://oss-club.rt-thread.org/uploads/20220714/62039720cc4aea9f5cb14d951b6accdcfd8296e4.png) ## 三、工程源码 [github:源码链接](https://github.com/Ajie16/RTT_led_flash.git)
9
条评论
默认排序
按发布时间排序
登录
注册新账号
关于作者
JeckXu666
这家伙很懒,什么也没写!
文章
2
回答
28
被采纳
2
关注TA
发私信
相关文章
1
rt_thread studio 啥时候能用呢
2
RT_Thread使用反馈帖子
3
RTT studio 下的 AT指令问题。
4
什么时候RTT Sdudio支持Ubuntu,Deepin和UOS操作系统
5
rt thread Studio 关于J-LINK下载问题
6
RT-Thread studio 调试设置问题
7
RTT-Studio 如何设置调试配置参数?
8
rt_thread studio 软件包配置
9
RT-Studio目前只能开发STM32的项目吗?
10
rtt studio 生成hex名字修改
推荐文章
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
UART
ota在线升级
PWM
cubemx
freemodbus
flash
packages_软件包
BSP
潘多拉开发板_Pandora
定时器
ADC
GD32
flashDB
socket
中断
Debug
编译报错
SFUD
msh
rt_mq_消息队列_msg_queue
keil_MDK
ulog
MicroPython
C++_cpp
本月问答贡献
出出啊
1517
个答案
342
次被采纳
小小李sunny
1443
个答案
289
次被采纳
张世争
805
个答案
174
次被采纳
crystal266
547
个答案
161
次被采纳
whj467467222
1222
个答案
148
次被采纳
本月文章贡献
出出啊
1
篇文章
4
次点赞
小小李sunny
1
篇文章
1
次点赞
张世争
1
篇文章
1
次点赞
crystal266
2
篇文章
2
次点赞
whj467467222
2
篇文章
1
次点赞
回到
顶部
发布
问题
投诉
建议
回到
底部