RT Thread Studio创建软件和硬件RTC工程

MCU型号:STM32F103RET6

一.配置软件模拟RTC

1.生成一个带串口输出的工程文件,新建RT-Thread项目工程文件。
在这里插入图片描述
2.查看电路图中的串口输出管脚,根据STMCubeMx软件可知此串口为USART1,选择芯片型号为STM32F103RET6,控制台串口选择UART1,发送脚:PB6,接收脚:PB7
在这里插入图片描述
在这里插入图片描述在这里插入图片描述
3.设置下载bin文件的下载地址为:0x08000000。
在这里插入图片描述
4.代码编译后下载到电路板,连上串口调试助手可看到调试信息。
在这里插入图片描述
5.打开RT-Thread Settings设置设备驱动中的软件模拟RTC,RTC设置如图所示,设置完成之后,记得保存,否则设置无效。
在这里插入图片描述
实际上是将soft_rtc.c文件添加到工程中编译,并将宏定义RT_USING_SOFT_RTC打开。
在这里插入图片描述
6.增加rtc的初始化代码rtc_app.h和rtc_app_c,以及修改main函数中的代码。

rtc_app.h

#ifndef APPLICATIONS_RTC_APP_H_
#define APPLICATIONS_RTC_APP_H_

int rtc_init(void);

#endif /* APPLICATIONS_RTC_APP_H_ */

rtc_app.c

#include <rtthread.h>
#include <rtdevice.h>

#define RTC_NAME       "rtc"
RT-Thread StudioRTT 官方推出的一站式开发工具,它通过图形化界面简化了嵌入式系统的开发流程,并集成了丰富的软件组件资源,从而提升了开发效率。该工具链主要基于 GCC 编译器,支持使用 STM32 系列芯片进行开发[^3]。 ### 工具链组成 RT-Thread Studio 使用的工具链通常包括以下核心组件: 1. **GCC 编译器**:用于将 C/C++ 源代码编译为机器码。 2. **GDB 调试器**:提供调试功能,例如断点设置、单步执行等。 3. **Make 工具**:管理项目的构建过程。 4. **OpenOCD**:用于连接调试器与目标设备,实现程序烧录调试功能。 5. **Python 脚本支持**:某些自动化任务可以通过 Python 脚本完成。 ### 工具链版本更新 RT-Thread Studio 支持通过手动配置的方式更新工具链版本。具体步骤如下: 1. 从官方地址下载最新的工具链压缩包,例如 `gcc-arm-none-eabi-9-2020-q2-update-win32.zip`。 2. 解压文件到任意目录备用。 3. 打开 RT-Thread Studio 的构建配置界面,进入 Toolchains 选项卡。 4. 根据需求选择 Global、Workspace 或 Project 级别的配置。 5. 在 Toolchain Path 设置中,浏览并选择解压后的工具链目录下的 `./bin` 文件夹。 6. 应用更改并关闭配置窗口,即可完成工具链的更新 [^4]。 ### 工具链使用指南 在 RT-Thread Studio 中使用工具链时,开发者可以借助其内置的功能快速完成项目创建、代码编写、编译、烧录调试。以下是基本操作流程: 1. **创建工程**:启动 RT-Thread Studio 后,选择新建工程,选择目标芯片型号(目前主要支持 ST 系列芯片)。 2. **配置系统时钟**:通过图形化界面配置系统时钟参数,例如使用外部晶振来提高时钟精度。 3. **添加驱动组件**:利用 RT-Thread 提供的丰富驱动软件包,快速集成 RTC、PWM 等设备功能。 4. **添加源文件**:在工程中添加 `.c` `.h` 文件,按照模块化方式组织代码。 5. **编译与调试**:点击构建按钮编译工程,若需要调试,可使用 GDB OpenOCD 进行在线调试。 6. **使用 FinSH Shell**:RT-Thread FinSH 是命令行组件,可用于调试或查看系统信息。通过串口、以太网或 USB 接口,用户可以在 PC 上调用 FinSH 命令接口进行交互 [^2]。 ### 示例代码 以下是一个简单的 RT-Thread 应用示例,演示如何创建一个线程并运行: ```c #include <rtthread.h> /* 线程1的入口函数 */ static void thread1_entry(void *parameter) { while (1) { rt_kprintf("Hello from Thread 1!\n"); rt_thread_mdelay(1000); // 延迟1秒 } } /* 线程2的入口函数 */ static void thread2_entry(void *parameter) { while (1) { rt_kprintf("Hello from Thread 2!\n"); rt_thread_mdelay(500); // 延迟0.5秒 } } int main(void) { rt_thread_t tid1, tid2; rt_thread_attr_t attr; /* 初始化线程属性 */ rt_thread_attr_init(&attr); /* 创建线程1 */ tid1 = rt_thread_create("thread1", thread1_entry, RT_NULL, 1024, 25, 10); if (tid1 != RT_NULL) rt_thread_startup(tid1); /* 创建线程2 */ tid2 = rt_thread_create("thread2", thread2_entry, RT_NULL, 1024, 25, 10); if (tid2 != RT_NULL) rt_thread_startup(tid2); return 0; } ``` 上述代码展示了如何在 RT-Thread创建两个线程,并分别打印输出内容。通过这种方式,开发者可以充分利用 RT-Thread 的多线程特性,实现高效的实时任务调度。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值