2803|0

3836

帖子

19

TA的资源

纯净的硅(中级)

楼主
 

Keil模拟器玩RTT多线程点灯 [复制链接]

本帖最后由 fish001 于 2019-11-7 22:18 编辑

最近有个小师弟想省下饭钱,就为了买块正点原子STM32开发板,学RTT。他省了三天了,体重倒是降了一斤,但还是没把钱凑够。我知道后非常震惊,赶紧让他悬崖勒马,并教了他怎么在没板子的时候用模拟器学习STM32开发。

1 RTT简介

RT-Thread(简称RTT)是一款完全由国内团队开发维护的嵌入式实时多线程操作系统,基本属性之一是支持多任务(线程)。其中,一个处理器核心在某一时刻只能运行一个任务,由于每次对一个任务的执行时间很短、任务与任务之间通过任务调度器进行非常快速地切换,给人造成多个任务在一个时刻同时运行的错觉   

模拟器" class="reference-link">2 为什么用Keil模拟器

近期,已经有不少小伙伴在电子芯吧客社区获得STM32开发板的免费试用资格了,虽然还没收到货,但也有手快的老哥已经来问我咨询例程和学习资料了。另一边,也有假扮萌新的老司机也去申请,而被管理识破了。相信大家的初心还是很淳朴的,只是想尽量省钱地学学STM32开发。
当然,不管大家是否拿到了板子,都不耽误学习的。因为,随着计算机技术的发展,我们可以采用软件方式来模拟一个能够运行 RT-Thread 操作系统的硬件模块,这就是 ARM 公司的 MDK-ARM 仿真模拟环境。今天,我们来聊聊用Keil模拟器玩玩RTT多线程点灯。

3 例程要实现的功能

假设STM32F103的PC14和PC15分别接上了LED1和LED2。LED1循环着亮197毫秒、灭199毫秒。LED2循环着亮353毫秒、灭349毫秒。这样的亮灭时序,因为两个LED完全不同步,在无操作系统框架的条件下能写代码实现,但极其麻烦。但是,如果基于RTT来写,就简单多了。创建两个线程,线程1跑LED1的时序,线程2跑LED2的时序。

4 代码示例

打开RTT例程,工程文件名two-led-rtt-sim,该工程可去电子芯吧客qq群的群共享下载。

打开main.c文件,你会发现主函数里啥都不需要添加,直接返回0:
main函数
区别于传统的无操作系统的代码,RTT的各种功能不需要写进main函数里。

新建个控制LED的C文件(如果使用two-led-rtt-sim工程,这个文件已经帮您写好了),名字叫twoled。我们往里写入代码,先写上大概的代码框架:
led控制框架

其中,PC14和PC15在RTT的GPIO驱动。比如,LQFP48封装的STM32CxT6,PC14和PC15对应于RTT的3和4号引脚。
RTT的GPIO引脚说明

写一下RTT的CMD命令列表中two_led命令要执行的功能(如果使用two-led-rtt-sim工程,这些代码已经帮您写好了,下文不重复说了)。two_led要创建并启动两个线程,一个是thread1,入口是thread1_entry;另一个thread2,入口是thread2_entry。
RTT的CMD命令

线程1的入口函数如下,一边控制LED1亮灭,一边串口打印调试信息。这里的rt_kprintf函数的定义在RTT的串口驱动里,它控制串口1打印。
线程1

线程2具有与线程1一样的形式,区别只是GPIO引脚编号的延时时间。
线程2

5 测试

点击debug按钮,进入调试界面。
debug按钮

点击serial windows右边的小箭头,把串口1的窗口打开
uart1按钮

把串口1的窗口拖动到合适的位置。宽屏的显示器,当横屏放置时,可以把UART1的窗口放在代码窗口右侧;当竖屏放置时,可以把UART1的窗口放在代码窗口下方。总之,主要目的是为了布局美观,方便观测。
uart1窗口放在右侧的效果

点击运行按钮(或按F5键),然后UART1窗口就会打印RTT的命令行
运行按钮

点击运行按钮或按F5以后,程序就开始跑了。开机后显示了RTT的启动打印信息。其中,控制LED的CMD命令都是需要输入命令指令以后才会跑的。
下面启动LED控制,在串口1界面输入CMD命令two_led,然后回车:
输入命令

UART1显示了运行过程的串口打印。其中P14和P15引脚按各自的时序拉高和拉低,以控制LED亮灭。调试信息如下:
调试信息

 
点赞 关注

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

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

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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

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

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

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