0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

RT-Thread Bootloader on Tencent EVB MX+

RTThread物联网操作系统 来源:未知 2023-04-07 02:05 次阅读

0. 写在前面的话

这篇文章写着玩,主要是图一乐。纪念一下最开始使用RTT到处查找资料的过程。

本文内容比较简单,若是有朋友才开始用RTT,希望会有一些帮助吧。

国产优秀嵌入式操作系统RT-Thread,赞!

本文看着复杂,但是实际操作简单。实验过程约15~30分钟。有几张图死活传不上来,似乎也不支持个人gitee的图床,算了,影响不大。

硬件资源:Tencent EVB MX+

CPUSTM32L431RCT6

将要掌握的内容:

RT-Thread在STM32系列的移植

RT-Studio基本操作方法

FAL(Flash Abstract Layer)+W25Q64的QSPI移植

Qboot的移植与基础个性化(最基础的个性化)修改

1. RT-Thread OS基本移植

Tencent EVB MX+是腾讯Tencent OS Tiny官方开发板,微控制器采用STM32L431RCT6, 通过QSPI接口连接WinBond W25Q64JV 64Mb (8MB)片外Flash。

1.1 新建RT-Thread工程,修改drc_clk.c

1.新建RT-Thread工程,并且指定合理的文件保存路径、选择芯片、RT-Thread版本号。

注:RT-Thread 4.0.3版本的AT device软件包与UART RX DMA 方式配合不好。所以,我们选择RT-Thread 4.0.2版本。参考来源:RT-Thread-at_client_getchar函数,打开DMA数据会丢失(bug反馈)RT-Thread问答社区 - RT-Thread

7fdf614e-d4a5-11ed-bfe3-dac502259ad0.png

2.在新建项目的图中,我们发现如下语句:工程使用的是芯片内部HSI时钟,如需修改,请完善drv_clk.c。

7ffb549e-d4a5-11ed-bfe3-dac502259ad0.png

目前最新RT-Thread Studio 2.1.1版本虽然支持与ST CubeMX的联动,但是,使用CubeMX生成工程后,会出现函数重复定义、头文件不匹配等一系列问题。这些问题虽然可以通过设置RT-Thread项目的头文件目录、添加编译Exclude路径进行解决,但是使用门槛相对较高。为了保证移植的准确性,降低使用门槛,我们不使用联动。一种可行方案为:在其他目录使用CubeMX新建与当前芯片相同的ioc工程,然后从CubeMX生成的工程中复制对应的代码即可。后续随着RT Studio的更新,这个问题我想会逐步改善的。3.创建Cube MX工程,配置时钟树,生成工程。在本示例中,CubeMX工程存储在D:RT-ThreadCubeMXlc.ioc中。在CubeMX中将时钟设置为HSE,且使得HCLK为80MHz。

8013126e-d4a5-11ed-bfe3-dac502259ad0.png

4.根据CubeMX代码,修改drv_clk.c文件将CubeMX生成的工程中void SystemClock_Config(void)函数的部分内容,复制至drv_clk.c文件的void system_clock_config(int target_freq_mhz)处。下方代码块中被屏蔽的部分,是RT-Thread Studio生成的原始代码,37~49行的代码是从CubeMX工程中粘贴而来。
 1voidsystem_clock_config(inttarget_freq_mhz)
 2{
 3RCC_OscInitTypeDefRCC_OscInitStruct={0};
 4RCC_ClkInitTypeDefRCC_ClkInitStruct={0};
 5/**InitializestheCPU,AHBandAPBbussesclocks
 6*/
 7//RCC_OscInitStruct.OscillatorType=RCC_OSCILLATORTYPE_HSI;
 8//RCC_OscInitStruct.HSIState=RCC_HSI_ON;
 9//RCC_OscInitStruct.HSICalibrationValue=RCC_HSICALIBRATION_DEFAULT;
10//RCC_OscInitStruct.PLL.PLLState=RCC_PLL_ON;
11//RCC_OscInitStruct.PLL.PLLSource=RCC_PLLSOURCE_HSI;
12//RCC_OscInitStruct.PLL.PLLM=8;
13//RCC_OscInitStruct.PLL.PLLN=target_freq_mhz;
14//#ifdefined(RCC_PLLP_SUPPORT)
15//RCC_OscInitStruct.PLL.PLLP=RCC_PLLP_DIV7;
16//#endif
17//RCC_OscInitStruct.PLL.PLLQ=RCC_PLLQ_DIV2;
18//RCC_OscInitStruct.PLL.PLLR=RCC_PLLR_DIV2;
19//if(HAL_RCC_OscConfig(&RCC_OscInitStruct)!=HAL_OK)
20//{
21//Error_Handler();
22//}
23//RCC_OscInitStruct.OscillatorType=RCC_OSCILLATORTYPE_HSE;
24//RCC_OscInitStruct.HSEState=RCC_HSE_ON;
25//RCC_OscInitStruct.PLL.PLLState=RCC_PLL_ON;
26//RCC_OscInitStruct.PLL.PLLSource=RCC_PLLSOURCE_HSE;
27//RCC_OscInitStruct.PLL.PLLM=1;
28//RCC_OscInitStruct.PLL.PLLN=20;
29//RCC_OscInitStruct.PLL.PLLP=RCC_PLLP_DIV7;
30//RCC_OscInitStruct.PLL.PLLQ=RCC_PLLQ_DIV2;
31//RCC_OscInitStruct.PLL.PLLR=RCC_PLLR_DIV2;
32//if(HAL_RCC_OscConfig(&RCC_OscInitStruct)!=HAL_OK)
33//{
34//Error_Handler();
35//}
36RCC_OscInitStruct.OscillatorType=RCC_OSCILLATORTYPE_HSE;
37RCC_OscInitStruct.HSEState=RCC_HSE_ON;
38RCC_OscInitStruct.PLL.PLLState=RCC_PLL_ON;
39RCC_OscInitStruct.PLL.PLLSource=RCC_PLLSOURCE_HSE;
40RCC_OscInitStruct.PLL.PLLM=1;
41RCC_OscInitStruct.PLL.PLLN=20;
42RCC_OscInitStruct.PLL.PLLP=RCC_PLLP_DIV7;
43RCC_OscInitStruct.PLL.PLLQ=RCC_PLLQ_DIV2;
44RCC_OscInitStruct.PLL.PLLR=RCC_PLLR_DIV2;
45if(HAL_RCC_OscConfig(&RCC_OscInitStruct)!=HAL_OK)
46{
47Error_Handler();
48}

		
1.2 配置RT-Thread工程串口,使能RX DMA

		

802e72ca-d4a5-11ed-bfe3-dac502259ad0.png

8040563e-d4a5-11ed-bfe3-dac502259ad0.png

board.h中,将UART2部分修改成如下形式:
1#defineBSP_USING_UART2
2#defineBSP_UART2_RX_USING_DMA/**< 添加 UART2 DMA RX*/
3#defineBSP_UART2_TX_PIN"PA2"
4#defineBSP_UART2_RX_PIN"PA3"

8050e526-d4a5-11ed-bfe3-dac502259ad0.png

2. QSPI+W25Q64的FAL移植 2.1 EVB MX+硬件信息说明 在Tencent EVB MX+开发板上,W25Q64JV通过QSPI接口与STM32L4进行连接。所以,我们也需要在CubeMX配置QSPI。配置完毕后再次使用CubeMX生成工程。 注意,我们仅仅需要外设的初始化部分。即HAL_QSPI_MspInit函数, 用于引脚配置,相关时钟使能, 初始化等操作。

8068feb8-d4a5-11ed-bfe3-dac502259ad0.png

8083e7e6-d4a5-11ed-bfe3-dac502259ad0.png

80a2c94a-d4a5-11ed-bfe3-dac502259ad0.png

2.2 配置RT-Thread软件包FAL参数

1.使能SPI总线,使能SFUD,在SFUD中使用QSPI模式。

80b3cb82-d4a5-11ed-bfe3-dac502259ad0.png

2.在board.h中开启QSPI和On Chip Flash。

在board.h中查找下述语句,并取消屏蔽即可。

1#defineBSP_USING_QSPI
2#defineBSP_USING_ON_CHIP_FLASH

3.添加FAL软件包,修改FAL设备名称。

80cc0efe-d4a5-11ed-bfe3-dac502259ad0.png

2.3 修改FAL分区表

1.编译工程,会产生11个Errors。提示fal_cfg.h头文件没有被包含进工程目录中。

80e92552-d4a5-11ed-bfe3-dac502259ad0.png

2.按照下图,添加Includes的Path。

此步骤也可以进行文件剪切处理:将fal_cfh.h文件从fal-v0.5.0/sample/portin路径中剪切至fal-v0.5.0/inc路径中。

81188914-d4a5-11ed-bfe3-dac502259ad0.png

3.再次编译,现在只剩下1个Error。提示stm32f2_onchip_flash没有定义.

813d6bbc-d4a5-11ed-bfe3-dac502259ad0.png

4.改正stm32f2_onchip_flash未定义的错误,并自定义分区表。

打开packages->fal-v0.5.0->samples->porting路径下的fal_cfg.h,进行修改。

本修改的目的是将drv_flash_l4.c中声明的内部FLASH块stm32_onchip_flash放入到分区表中,替代FAL例程中不存在的stm32f2_onchip_flash。

816018ce-d4a5-11ed-bfe3-dac502259ad0.png

注:

将fal_cfg.h中的stm32_onchip_flash修改为stm32_onchip_flash。(说明:stm32_onchip_flash在drv_flash_l4.c文件中定义)

将fal_cfg.h的FAL_PART_TABLE中的字符串stm32_onchip修改为onchip_flash。(说明:onchip_flash是片内FLASH的名称,也在drv_flash_l4.c文件中被使用)。

将fal_cfg.h的FAL_PART_TABLE中的字符串NOR_FLASH_DEV_NAME修改为FAL_USING_NOR_FLASH_DEV_NAME。(说明:FAL_USING_NOR_FLASH_DEV_NAME是片外FLASH的名称,在rtconfig.h文件中)。

修改完成后的分区表如下所示。

8185029c-d4a5-11ed-bfe3-dac502259ad0.png

当然,在实际项目中,具体的偏移量和位置要根据实际情况进行分析和修改。本文后续的Demo演示中,就只用了bl、application、download、factory分区。

5.在board.c的函数RT_WEAK void rt_hw_board_init()下方添加HAL_QSPI_MspInit代码。该代码由CubeMX自动生成。

 1voidHAL_QSPI_MspInit(QSPI_HandleTypeDef*qspiHandle)
 2{
 3GPIO_InitTypeDefGPIO_InitStruct={0};
 4if(qspiHandle->Instance==QUADSPI)
 5{
 6/*USERCODEBEGINQUADSPI_MspInit0*/
 7/*USERCODEENDQUADSPI_MspInit0*/
 8/*QUADSPIclockenable*/
 9__HAL_RCC_QSPI_CLK_ENABLE();
10__HAL_RCC_GPIOB_CLK_ENABLE();
11/**QUADSPIGPIOConfiguration
12PB0------>QUADSPI_BK1_IO1
13PB1------>QUADSPI_BK1_IO0
14PB10------>QUADSPI_CLK
15PB11------>QUADSPI_BK1_NCS
16*/
17GPIO_InitStruct.Pin=GPIO_PIN_0|GPIO_PIN_1|GPIO_PIN_10|GPIO_PIN_11;
18GPIO_InitStruct.Mode=GPIO_MODE_AF_PP;
19GPIO_InitStruct.Pull=GPIO_NOPULL;
20GPIO_InitStruct.Speed=GPIO_SPEED_FREQ_VERY_HIGH;
21GPIO_InitStruct.Alternate=GPIO_AF10_QUADSPI;
22HAL_GPIO_Init(GPIOB,&GPIO_InitStruct);
23/*USERCODEBEGINQUADSPI_MspInit1*/
24/*USERCODEENDQUADSPI_MspInit1*/
25}
26}

6.在终端窗口,输入list_device,可以发现,类型为SPI BUS的qspi1已经挂载进设备清单。

819ddb64-d4a5-11ed-bfe3-dac502259ad0.png

此处要特别注意qspi1. 在drv_qspi.c文件中,rt_hw_qspi_bus_init内部使用的总线名称就是qspi1, 官方的qspi驱动程序代码如下所示。

1staticintrt_hw_qspi_bus_init(void)
2{
3returnstm32_qspi_register_bus(&_stm32_qspi_bus,"qspi1");
4}
5INIT_BOARD_EXPORT(rt_hw_qspi_bus_init);

2.5 测试FAL

1.下载程序,得到下图结果。

81b697d0-d4a5-11ed-bfe3-dac502259ad0.png

2.使用list_device命令,得到下图结果。

81d3896c-d4a5-11ed-bfe3-dac502259ad0.png

3.使用fal系列命令:fal probe [device_name | part_name]。

81f20784-d4a5-11ed-bfe3-dac502259ad0.png

显然,easyflash和W25Q64JV分别是分区名称和Flash Device名称,所以可以正常Probe。而qspi1_0是QSPI设备名称,不能使用FAL Probe命令。请务必了解它们之间的区别。

4.使用fal erase, write, read等命令

  • 执行了1次读操作,从0x00地址开始读出128字节

  • 执行了1次写操作,写入5个数据到0x00地址

  • 执行了1次读操作,从0x00地址开始读出32字节

  • 执行了1次写操作,写入5个数据到0x10地址

  • 执行了1次读操作,从0x00地址开始读出32字节

82121150-d4a5-11ed-bfe3-dac502259ad0.png

显然,如果再次写入5个数据到0x00地址后,读取出来的数据会有误,写入和读取不相同。这是由Flash的特性决定的。如果需要更新0x00地址开始的5个数据,则必须需要擦除地址0x00开始的扇区(最小擦除单位)。该操作将删除4096个字节。

Flash的特性:数据存储的每个位,在更新存储数据时,能把1改成0,而0却不能改为1。所以要求在写入数据前,必须对目标区域进行擦除操作,即把目标区域中的数据位擦除为1。

W25Q64支持扇区擦除、块擦除及整片擦除,最小的擦除单位是扇区,一个块包含16个扇区,有128个块。

以扇区擦除为例,擦除大小为4KB,即4096字节的数据。擦除实际上是往扇区写入数据,把数据位都写为1。

8230aab6-d4a5-11ed-bfe3-dac502259ad0.png

3. Bootloader制作

3.1 添加Qboot包支持

按照下图配置qboot软件包

827e002c-d4a5-11ed-bfe3-dac502259ad0.png

3.2 Qboot包中配置出厂按钮和LED指示灯

在Tencent EVB MX+电路板上,LED1被配置在PC13,KEY1被配置在PB12,如下图所示

82a06c70-d4a5-11ed-bfe3-dac502259ad0.png

在drv_gpio.c中的static const struct pin_index pins[]数组中,可以找到LED1和KEY1引脚分别对应45和28。

3.3 修改main.c和其他个性化处理

简单修改main.c文件

1intmain(void)
2{
3returnRT_EOK;
4}

在程序修改过程中,我将qboot.c中的所有“Qboot 字符串替换成了"Bootloader,然后修改了Finsh命令:

1/**<原始*/
2//MSH_CMD_EXPORT_ALIAS(qbt_shell_cmd,qboot,Quickbootloadertestcommands);
3/**<修改*/
4MSH_CMD_EXPORT_ALIAS(qbt_shell_cmd,bl,Quickbootloadertestcommands);

一切无误后,编译工程,成功得到基于Qboot、FAL的Bootloader程序,占用ROM 114.46KB。如果取消掉Finsh组件,则Bootloader大小会在84KB左右。

82b5b846-d4a5-11ed-bfe3-dac502259ad0.png

3.4 测试

为了确保后续操作无误,使用ST CubeMX Programer将STM32L431的片内Flash进行擦除。擦除后再断开ST Link。

82db2f5e-d4a5-11ed-bfe3-dac502259ad0.png

82f9e714-d4a5-11ed-bfe3-dac502259ad0.png

4. Application制作与OTA测试

有了上述基础,按照如下步骤制作Application:

1.按照第1节”基本移植RT-Thread”进行操作

2.按照第2节”基于QSPI+W25Q64JV进行FAL移植”进行操作

3.添加ota_downloader软件包。由于STM32L431 Flash的限制,我们仅仅测试Ymodem OTA方式。

830d21da-d4a5-11ed-bfe3-dac502259ad0.png

4.修改main.c文件

顺手写了个1.07版本。后面的图已经截好,所以就不改成1.00版本了。

 1#include
 2#defineDBG_TAG"main"
 3#defineDBG_LVLDBG_LOG
 4#include
 5#include"board.h"
 6#include"fal.h"
 7#defineAPP_VERSION1L/**< major version number */
 8#defineAPP_SUBVERSION0L/**< minor version number */
 9#defineAPP_REVISION7L/**< revise version number */
10intmain(void)
11{
12fal_init();/*TangHuiminaddcommentsfortesingpullrequest*/
13LOG_I("ApplicationSoftware%d.%d.%dbuild%s
",
14APP_VERSION,APP_SUBVERSION,APP_REVISION,__DATE__);
15returnRT_EOK;
16}
17/*将中断向量表起始地址重新设置为application分区的起始地址*/
18staticintrt_hw_app_vector_reconfig(void)
19{
20#defineNVIC_VECTOR_MASK0xFFFFFF80
21#defineRT_APP_PART_ADDR0x08020000
22/*重新设置中断向量表*/
23SCB->VTOR=RT_APP_PART_ADDR&NVIC_VECTOR_MASK;
24return0;
25}
26INIT_BOARD_EXPORT(rt_hw_app_vector_reconfig);

5.修改linkscripts

linkscripts图中的ROM Size为256KB。当然,我们可以将其限制为128KB,因为Bootloader已经占用了128KB。

8336d912-d4a5-11ed-bfe3-dac502259ad0.png

6.编译并下载生成的bin文件,测试程序跳转

将APP下载到Application分区,则Bootloader启动后,判断应用程序存在,会自动跳转至Application。

83576f38-d4a5-11ed-bfe3-dac502259ad0.png

7.再次修改main.c,编译,请不要直接下载,我们会使用Ymodem_OTA方式下载

1#defineAPP_VERSION1L/**< major version number */
2#defineAPP_SUBVERSION0L/**< minor version number */
3#defineAPP_REVISION8L/**< revise version number */

8.制作OTA包。工具位于Bootloader工程的packagesqboot-v1.05 ools路径下。

8371e5c0-d4a5-11ed-bfe3-dac502259ad0.png

9.测试Ymodem_ota

建议使用XShell工具,连接串口。在命令行输入ymodem_ota,然后右键选择使用Ymodem方式发送,发送上一步生成的OTA rbl文件,即升级包。

838c7b24-d4a5-11ed-bfe3-dac502259ad0.png

下载完成后,软件重启,首先进入到Bootloader,从download分区搬运代码到application分区(注意:此处不是简单搬运,而是由qboot代码进行了解压缩后再进行搬运,过程较为复杂。若感兴趣,可进一步深挖quicklz等解压缩软件包。)

程序升级结果如下,自动从1.07版本升级到1.08版本。

83a437aa-d4a5-11ed-bfe3-dac502259ad0.png

5. 填坑

1.RT_APP_PART_ADDR

在qboot.h中有如下一段代码:

1#ifdefRT_APP_PART_ADDR
2#defineQBOOT_APP_ADDRRT_APP_PART_ADDR
3#else
4#defineQBOOT_APP_ADDR0x08020000
5#endif

由于在qboot软件包中,并没有配置RT_APP_PART_ADDR项。qboot默认APP从内部Flash 128KB处开始。此处不注意的话,会导致修改内部Flash分区表后,APP无法有效跳转。

如果,我们划分90KB给bootloader,166KB给application,则需要在fal_cfg.h文件中修改bootloader、application分区的offset和len。此时,application的中断向量表将会放置在0x08016800地址。为了保证bootloader工作正常,我们需要在bootloader工程的rtconfig.h中添加如下代码,否则,bootloader会自动跳转至无效的QBOOT_APP_ADDR地址。

1#defineRT_APP_PART_ADDR0x08016800/**<按需要修改成你的application分区偏移*/

2.不要打开不必要的中断,在Application中再初始化相应外设。Bootloader关注自己应作的工作就好。

祝大家使用RTT快乐!

————————————————

版权声明:

本文为RT-Thread论坛用户「lchnu」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:

https://club.rt-thread.org/ask/article/a66b4c96c13cc0d5.html

———————End———————

RT-Thread线下入门培训-4月场次 青岛、北京

1.免费2.动手实验+理论3.主办方免费提供开发板4.自行携带电脑,及插线板用于笔记本电脑充电5.参与者需要有C语言单片机ARM Cortex-M核)基础,请提前安装好RT-Thread Studio 开发环境

83f74fe4-d4a5-11ed-bfe3-dac502259ad0.png

立即扫码报名

报名链接

https://jinshuju.net/f/UYxS2k

巡回城市:青岛、北京、西安、成都、武汉、郑州、杭州、深圳、上海、南京

你可以添加微信:rtthread2020 为好友,注明:公司+姓名,拉进RT-Thread官方微信交流群!

点击阅读原文进入RT-ThreadXIFX赛事官网


		

	


原文标题:RT-Thread Bootloader on Tencent EVB MX+

文章出处:【微信公众号:RTThread物联网操作系统】欢迎添加关注!文章转载请注明出处。


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • RT-Thread
    +关注

    关注

    31

    文章

    1150

    浏览量

    38911

原文标题:RT-Thread Bootloader on Tencent EVB MX+

文章出处:【微信号:RTThread,微信公众号:RTThread物联网操作系统】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    4月25日北京站RT-Thread线下workshop,探索RT-Thread混合部署新模式

    4月25日,下午我们将在北京举办RT-Thread混合部署线下workshop,在瑞芯微RK3568平台上实现同时运行RT-Thread和linux,本次workshop邀请到RT-Thread资深
    的头像 发表于 04-16 08:35 93次阅读
    4月25日北京站<b class='flag-5'>RT-Thread</b>线下workshop,探索<b class='flag-5'>RT-Thread</b>混合部署新模式

    4月10日深圳场RT-Thread线下workshop,探索RT-Thread混合部署新模式!

    4月10日我们将在深圳福田举办RT-Thread混合部署线下workshop,在瑞芯微RK3568平台上实现同时运行RT-Thread和linux,本次workshop邀请到RT-Thread资深嵌入式软件工程师农晓明老师为您讲
    的头像 发表于 03-27 11:36 440次阅读
    4月10日深圳场<b class='flag-5'>RT-Thread</b>线下workshop,探索<b class='flag-5'>RT-Thread</b>混合部署新模式!

    4月10日深圳场RT-Thread线下workshop,探索RT-Thread混合部署新模式!

    4月10日我们将在深圳福田举办RT-Thread混合部署线下workshop,在瑞芯微RK3568平台上实现同时运行RT-Thread和linux,本次workshop邀请到RT-Thread资深
    的头像 发表于 03-27 08:34 159次阅读
    4月10日深圳场<b class='flag-5'>RT-Thread</b>线下workshop,探索<b class='flag-5'>RT-Thread</b>混合部署新模式!

    i.MX RT1170:VGLite移植RT-Thread Nano过程讲解(下)

    上篇介绍了如何移植 RT-Thread Nano 内核与 Finsh 控制台到 RT1170。本篇继续介绍如何将 NXP 官方的 VGLite API 移植到 RT-Thread Nano 上。
    的头像 发表于 11-09 11:22 506次阅读

    i.MX RT1170:VGLite移植RT-Thread Nano过程讲解(上)

    RT-Thread 是国人自主研发的开源实时操作系统(RTOS),RT-Thread Nano 是极简版的硬实时内核,内存占用小,移植简单。VGLite 是 NXP 提供的轻量级 2D 图形 API,基于 FreeRTOS 实现。
    的头像 发表于 11-09 11:20 1263次阅读
    i.<b class='flag-5'>MX</b> <b class='flag-5'>RT</b>1170:VGLite移植<b class='flag-5'>RT-Thread</b> Nano过程讲解(上)

    基于rt-thread的socket通信设计

    最近再研究 rt-thread 的通信 ,想设计出 eps8266(多个) rt-thread(作为中控) 服务器的通信框架,使用的开发板是 潘多拉
    的头像 发表于 10-13 15:02 699次阅读
    基于<b class='flag-5'>rt-thread</b>的socket通信设计

    RT-Thread使用Soft RTC(软件模拟RTC)

    开发环境:野火的stm32f407,rt-thread studio版本是版本: 2.2.6,rt-thread 使用版本为4.0.3,stm32f4的资源包为0.2.2。
    的头像 发表于 10-12 17:39 359次阅读
    <b class='flag-5'>RT-Thread</b>使用Soft RTC(软件模拟RTC)

    试用RT-Thread Studio(VSCode)

    想尝试RT-Thread studio (VSCode),先下载安装VSCode,再搜索RT-Thread
    的头像 发表于 10-12 10:58 573次阅读
    试用<b class='flag-5'>RT-Thread</b> Studio(VSCode)

    RT-Thread v5.0.2 发布

    RT-Thread 代码仓库地址: ●  https://github.com/RT-Thread/rt-thread RT-Thread 5.0.2 版本发布日志详情: ●  htt
    的头像 发表于 10-10 18:45 782次阅读
    <b class='flag-5'>RT-Thread</b> v5.0.2 发布

    新书上架|嵌入式系统原理及应用——基于STM32和RT-Thread

    人间九月,山河已秋, RT-Thread又上新了!自2018年RT-Thread首本书籍问世后,越来越多的创作者因为RT-Thread的自主可控、稳定可靠、友好生态,把RT-Thread
    的头像 发表于 09-25 18:25 547次阅读
    新书上架|嵌入式系统原理及应用——基于STM32和<b class='flag-5'>RT-Thread</b>

    基于 RT-Thread 的 RoboMaster 电控框架(一)

    由于 RT-Thread 稳定高效的内核,丰富的文档教程,积极活跃的社区氛围,以及设备驱动框架、Kconfig、Scons、日志系统、海量的软件包……很难不选择 RT-Thread 进行项目开发
    的头像 发表于 09-19 19:55 420次阅读

    新书上架|RT-Thread带你解密“芯”世界

    夏木荫荫,人间八月,RT-Thread又上新了!自2018年RT-Thread首本书籍问世后,越来越多的创作者因为RT-Thread的自主可控、稳定可靠、友好生态,把RT-Thread
    的头像 发表于 08-22 20:10 456次阅读
    新书上架|<b class='flag-5'>RT-Thread</b>带你解密“芯”世界

    教你手上没有开发板如何跑RT-THREAD STM32应用?

    首先打开 RT-Thread Studio,新建RT-Thread
    的头像 发表于 07-18 16:09 1056次阅读
    教你手上没有开发板如何跑<b class='flag-5'>RT-THREAD</b> STM32应用?

    RT-Thread中的Github Actions

    RT-Thread中一共有五个Github Action(rt-thread/.github/workflow) 分别是: RT-Thread BSP build check(.github
    的头像 发表于 06-01 03:10 356次阅读
    <b class='flag-5'>RT-Thread</b>中的Github Actions

    基于RT-Thread Studio学习

    前期准备:从官网下载 RT-Thread Studio,弄个账号登陆,开启rt-thread学习之旅。
    的头像 发表于 05-15 11:00 2595次阅读
    基于<b class='flag-5'>RT-Thread</b> Studio学习