GVKun编程网logo

基于RT-Thread在STM32H7上移植LWIP(一)(rtthread移植到stm32)

6

在这里,我们将给大家分享关于基于RT-Thread在STM32H7上移植LWIP的知识,让您更了解一的本质,同时也会涉及到如何更有效地18个经典RT-Thread例程新鲜出炉(基于探索者STM32F4

在这里,我们将给大家分享关于基于RT-Thread在STM32H7上移植LWIP的知识,让您更了解的本质,同时也会涉及到如何更有效地18个经典RT-Thread例程新鲜出炉(基于探索者STM32F407)!RT-Thread联合正点原子出品、Bootloader 跳转到 RT-Thread 或 FreeRTOS(基于 STM32)、rt-thread 裁剪系列(一) 之 lwip、RT-Thread在MM32上的移植使用,今晚还有直播噢!的内容。

本文目录一览:

基于RT-Thread在STM32H7上移植LWIP(一)(rtthread移植到stm32)

基于RT-Thread在STM32H7上移植LWIP(一)(rtthread移植到stm32)

一、写在前面

STM32H7目前还是一个比较新的MCU,网上的资料相对于F1 F4系列相对来说就很少了,我自己在移植这个LWIP的时候走了不少弯路,得到了不少人帮助。写这篇文章也是对我自己移植的一个总结,也是希望后来人能少走弯路。
这篇文章有由个人编辑并整理,如有错误,欢迎拍砖。

二、RT-Thread、STM32H7、LWIP简介

RT-Thread是一个来自中国的开源物联网操作系统,它提供了非常强的可伸缩能力:从一个可以运行在ARM Cortex-M0芯片上的极小内核,到中等的ARM Cortex-M3/4/7系统,甚至是运行于MIPS32、ARM Cortex-A系列处理器上功能丰富系统。

STM32H7是ST意法半导体Cortex_M系列最高性能处理器。主频高达400M,FLASH高达2Mbytes,SRAM高达1Mbytes,采用六级流水线,自带 指令 和数据 Cache、集成 JPEG编解码器、 编解码器、 集成双精度硬件浮点计算单元( DPFPU)和 DSP指令。

LWIP是瑞典计算机科学院(SICS)的Adam Dunkels开发的一个小型开源的TCP/IP协议栈。

三、STM32H7的特殊性

这里的特殊性,仅仅只是对比F1 F4系列:

1、RAM
F1 F4系列只有一块RAM,在使用RTOS的时候直接分配给RTOS做堆就可以了。
H7的RAM构成看下表:

DTCM的速度是400M,但是DMA无法进行访问。
AXI SRAM的速度是200M,DMA可以进行访问。
SRAM3是以太网和USB的缓冲区。

2、CACHE
H7比F1 F4多了一个L1 CACHE一级缓存,这个缓存在为低速存储器带来加速的同时,也为程序带   来了一些问题,其中最为主要的时数据一致性的问题。
CACHE策略问题请参考言简意赅的介绍M7内核的Cache工作流程,摸爬滚打半年的经验总结。

(链接请复制至外部浏览器打开:http://forum.armfly.com/forum.php?mod=viewthread&tid=90066&highlight=%C3%FE%C5%C0%B9%F6%B4%F2

3、DMA
H7的DAM分为DMA1,DAM2,BDMA,MDMA。其中SDIO和ETH的DMA又是独立的,就是说他们有专用的DMA和其他的DAM之间使用不冲突,无须额外使能,只需要开启中断就默认使用DMA模式。

四、移植前的准备工作

1、确保有一个可以在开发板上能正常运行RT-Thread的工程,目前RT-Thread已经有了正点原子H743的BSP

(地址:https://github.com/RT-Thread/rt-thread/tree/master/bsp/stm32/stm32h743-atk-apollo  喜欢的话不要忘了给RT-Thread点一个),通过ENV工具使用scons --dist来把这个工程拿出来,复制出dist文件夹下的工程就可以直接使用了;

2、使用ENV工具,开启软件模拟IIC,因为正点原子的开发板的PHY复位接到了pcf8574的7号引脚,然后生成工程肯定会报错,这个时候从别的BSP目录下拷贝出pcf8574.c pcf8574.h phy_reset.c,放到工程里,然后在rtconfig.h加入以下代码来启用模拟IIC

1#define BSP_USING_I2C2
2
3#define BSP_I2C2_SCL_PIN 116
4#define BSP_I2C2_SDA_PIN 117

这里的引脚号由硬件决定,如果不是原子的开发板可以省略这一步

3、因为RT-Thread目录下的STM32BSP是依赖CUBEMX,所以还需要在CUBEMX里面开启ETH的引脚,这个请和自己的板子一致;

开启RMII模式,注意这里的PC1引脚无法选择成高电平,需要在生成的使msp.c里面自己修改为高电平,并开启中断。

4、检查是否开启了I_CACHE和D_CACHE

这里一定要开启,里面由依赖关系,不然会导致cache无法正确运行。

5、然后通过CUBEMX生成工程并把时钟初始化部分拷贝出来复制到board.c

6、在drv_mpu.c中加入MPU配置
以太网DMA描述符区,只能配置为Strongly - order或者Device。

 1  MPU_Region_InitTypeDef MPU_InitStruct;
2
3  /* Disable the MPU */
4  HAL_MPU_Disable();
5
6  /* Configure the MPU attributes as Device not cacheable 
7     for ETH DMA descriptors */

8  MPU_InitStruct.Enable = MPU_REGION_ENABLE;
9  MPU_InitStruct.BaseAddress = 0x30040000;
10  MPU_InitStruct.Size = MPU_REGION_SIZE_256B;
11  MPU_InitStruct.AccessPermission = MPU_REGION_FULL_ACCESS;
12  MPU_InitStruct.IsBufferable = MPU_ACCESS_BUFFERABLE;
13  MPU_InitStruct.IsCacheable = MPU_ACCESS_NOT_CACHEABLE;
14  MPU_InitStruct.IsShareable = MPU_ACCESS_NOT_SHAREABLE;
15  MPU_InitStruct.Number = MPU_REGION_NUMBER0;
16  MPU_InitStruct.TypeExtField = MPU_TEX_LEVEL0;
17  MPU_InitStruct.SubRegionDisable = 0x00;
18  MPU_InitStruct.DisableExec = MPU_INSTRUCTION_ACCESS_ENABLE;
19
20  HAL_MPU_ConfigRegion(&MPU_InitStruct);
21
22  /* Configure the MPU attributes as Cacheable write through 
23     for LwIP RAM heap which contains the Tx buffers */

24  MPU_InitStruct.Enable = MPU_REGION_ENABLE;
25  MPU_InitStruct.BaseAddress = 0x30044000;
26  MPU_InitStruct.Size = MPU_REGION_SIZE_16KB;
27  MPU_InitStruct.AccessPermission = MPU_REGION_FULL_ACCESS;
28  MPU_InitStruct.IsBufferable = MPU_ACCESS_NOT_BUFFERABLE;
29  MPU_InitStruct.IsCacheable = MPU_ACCESS_CACHEABLE;
30  MPU_InitStruct.IsShareable = MPU_ACCESS_NOT_SHAREABLE;
31  MPU_InitStruct.Number = MPU_REGION_NUMBER1;
32  MPU_InitStruct.TypeExtField = MPU_TEX_LEVEL0;
33  MPU_InitStruct.SubRegionDisable = 0x00;
34  MPU_InitStruct.DisableExec = MPU_INSTRUCTION_ACCESS_ENABLE;
35
36  HAL_MPU_ConfigRegion(&MPU_InitStruct);
37
38  /* Enable the MPU */
39  HAL_MPU_Enable(MPU_PRIVILEGED_DEFAULT);

7、在工程中添加ETH库函数,stm32h7xx_hal_eth.cstm32h7xx_hal_eth_ex.c

五、LWIP协议栈的移植

该移植参考思路,移植也可以通过git log的方式参考这个移植步骤,但是这里移植里面有几处错误后文会提出。后来发现这个移植与STM32Cube\Repository\STM32Cube_FW_H7_V1.3.2\Projects\STM32H743ZI-Nucleo\Applications\LwIP,基本一致。

1、LWIP协议栈的源码
如果你有安装CUBEMX,那么直接从
STM32Cube\Repository\STM32Cube_FW_H7_V1.3.2\Middlewares\Third_Party\LwIPP的目录下把LWIP的源码拷贝出来就可以了。或者下载参考思路里面的链接把LWIP源码拷贝出来。

2、工程中添加新的文件夹
lwip/api:添加LwIP\src\api目录下的所有文件

lwip/core:添加LwIP\src\core目录下的文件,并包括ipv4文件夹下的文件

lwip/netif:添加ethernet.c,sysarch.c

lwip/port:添加ethernetif.c,lan8742.c(lan8720也可以用)

移植准备工作就全部做完了,下一节修改工程报错!


文章来源:https://blog.csdn.net/whj123999/article/details/89815908




NOW

近期活动


RT-Thread线上活动


1、RT-Thread能力认证考试——RCEA】在6月份考试开始之前,我们将为报名参加的小伙伴提供为期4周的考前线上培训,并赠送官方教材一本。点击可查看详情,RAC能力认证:你未来就业晋升的通行证!


报名截至5月7号(明天)



RT-Thread线下活动

* 活动抽赠书籍/开发板


1、【武汉站】物联网操作系统RT-Thread基础入门免费培训全天2019年5月18日 9:30 ~ 2019年5月18日 17:00,培训全程将以【理论+动手】方式进行,通过拆解一个DEMO实例,带你从内核到组件到软件包全面了解RT-Thread的体系框架。


扫码报名武汉站

2、【合肥站】物联网操作系统RT-Thread基础入门免费培训全天2019年5月19日 9:30 ~ 2019年5月19日 17:00,培训内容同上。


扫码报名合肥站




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

RT-Thread


让物联网终端的开发变得简单、快速,芯片的价值得到最大化发挥。Apache2.0协议,可免费在商业产品中使用,不需要公布源码,无潜在商业风险。

长按二维码,关注我们

点击阅读原文即可进入报名页

你点的每个“在看”,我都认真当成了喜欢

本文分享自微信公众号 - RTThread物联网操作系统(RTThread)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

18个经典RT-Thread例程新鲜出炉(基于探索者STM32F407)!RT-Thread联合正点原子出品

18个经典RT-Thread例程新鲜出炉(基于探索者STM32F407)!RT-Thread联合正点原子出品

为方便大家基于STM32开发平台学习RT-Thread,RT-Thread联合正点原子在探索者STM32F407开发板上推出配套例程,后期会在正点原子所有STM32开发平台上推出RT-Thread例程。

RT-Thread官方网站的在线文档也做了同步更新,在线文档地址:

http://www.rt-thread.org/document/site/docs/tutorials/quickstart/




一. 资料下载方式

本教程配套资料下载地址:

方式一:在本公众号回复“18个RT-Thread例程”,获取资源(包含正点原子STM32F)下载链接

↓↓

第一步.关注RT-Thread微信公众号

第二步.回复【18个RT-Thread例程

↓↓↓


方式正点原子论坛帖子地址:http://www.openedv.com/thread-232081-1-1.html

RT-Thread Github源码下载地址:

https://github.com/RT-Thread/rt-thread



二.关于正点原子 & RT-Thread

        RT-Thread是一个集实时操作系统(RTOS)内核、中间件组件和开发者社区于一体的技术平台,由熊谱翔先生带领并集合开源社区力量开发而成。经过11年的累积发展,RT-Thread已成为国人自主开发、国内最成熟稳定和装机量最大的开源RTOS。RT-Thread也是一个组件完整丰富、高度可伸缩、简易开发、超低功耗、高安全性的物联网操作系统。

        2017年9月正式发布物联网操作系统RT-Thread V3.0,与此同时正点原子与RT-Thread正式达成战略合作伙伴关系,发挥各自在嵌入式开发平台以及IOT实时系统优势,为广大物联网/嵌入式开发人员提供IOT快速开发解决方案。


三. 关注正点原子 RT-Thread公众号

   





本文分享自微信公众号 - RTThread物联网操作系统(RTThread)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

Bootloader 跳转到 RT-Thread 或 FreeRTOS(基于 STM32)

Bootloader 跳转到 RT-Thread 或 FreeRTOS(基于 STM32)

Bootloader 跳转到 RT-Thread 或 FreeRTOS(基于 STM32) 作者:猾蚁 QQ:7376220
一、Bootloader 程序
1. 准备好升级程序项目,可以使用 STM32CubeMX 来自动生成代码,然后自己编
写代码实现升级策略。
2. 跳转代码实现
Main.c
#defineBOOT_LOADER_Address0x08000000
#defineBOOT_LOADER_SIZE (200*1024) //0x32000(200KB)
#defineBOOT_OS_Address(BOOT_LOADER_Address+BOOT_LOADER_SIZE)
typedef void(*pFunction)(void);
pFunctionJump_To_Application;
uint32_tJumpAddress;
staticvoidjump_to_os(void);
//重定向 printf
intfputc(intch,FILE*f)
{
while((USART1->SR&0X40)==0);
USART1->DR=(uint8_t)ch;
returnch;
}
intmain(void)
{
HAL_Init();
SystemClock_Config();
MX_USART1_UART_Init();
//在这里实现升级策略
printf("user_init()\r\n");
//升级完成后程序跳转到 RT-Thread
jump_to_os();
}
staticvoidjump_to_os(void)
{
if(((*(__IOuint32_t*)BOOT_OS_Address)&0x2FFE0000)==0x20000000)
{/*Jumptouserapplication*/
printf("jump_to_os\r\n");
__disable_irq();//关闭总中断
HAL_DeInit();
JumpAddress=*(__IOuint32_t*)(BOOT_OS_Address+4);
Jump_To_Application=(pFunction)JumpAddress;
/*Initializeuserapplication''sStackPointer*/
__set_MSP(*(__IOuint32_t*)BOOT_OS_Address);
Jump_To_Application();
}
else
{
printf("BOOT_OS_Address:%08X\r\n",*(__IOuint32_t*)BOOT_OS_Address);
}
}
3. Keil 设置
上面的 IROM1 的 Size 设置与前面宏定义 BOOT_LOADER_SIZE 值相同,值为十六
进制
这里的 Start、size 和前面的 IROM1 设置相同
编译后下载,因为前面未选择 ResetandRun,下载完成后程序不会运行。
二、RT-Thread 程序
1. 准备好 RT-Thread 项目,确认项目可成功编译运行。
2. 重定义中断向量表地址
找 到 stmtem_stm32fnxx.c 文 件 中 的 SystemInit 函 数 , 找 到 SCB->VTOR =
FLASH_BASE | VECT_TAB_OFFSET 这一句,转到 VECT_TAB_OFFSET 的宏定义,修
改值为前面 BOOT_LOADER_SIZE 的值:#defineVECT_TAB_OFFSET 0x32000
3. 启用 SystemInit 函数,使上面中断向量表重定义生效
SystemInit 函数没有被任何 C 代码调用,它在启动汇编代码中被导入调用。启用
startup_stm32fnnnxx.s 文件中 SystemInit 被调用的相关代码(去掉分号注释即
可) ,启用后如下图:
4. Keil 设置
IROM1的Start设置为前面BOOT_OS_Address定义的值, size设置为MCU的Flash
总大小减去 BOOT_LOADER_SIZE 后剩余的大小。
这里的 Start、size 和前面的 IROM1 设置相同
编译后下载,如果上面选择了 ResetandRun,下载完成后程序会从 Bootloader
开始运行,实现程序升级过程后跳转到 RT-Thread 运行,如下图

 

 

其它参考:

https://www.cnblogs.com/michaelHeaven/p/3418705.html

https://blog.csdn.net/m0_37738150/article/details/79498220

http://www.eeworld.com.cn/mcu/2018/ic-news081940856.html

http://www.eeworld.com.cn/mcu/2018/ic-news081940854.html

https://wenku.baidu.com/view/6748673201f69e3143329496.html   振南的znFAT

rt-thread 裁剪系列(一) 之 lwip

rt-thread 裁剪系列(一) 之 lwip

本文由RT-Thread论坛用户@出出啊原创发布:https://club.rt-thread.org/as...

前言

很久之前就开始整理下面的优化项列表了,但是有很多问题研究不深,一时不敢冒失推出。
前不久,有人在论坛上提问,当时我给的答案比现在少,但是现在列出来的这些也不能保证是全部,以后再做补充吧。

lwip 协议栈、sal socket 抽象层使用了很多全局数组变量当作线程栈,可以修改成从内存堆动态申请的内存。
有些功能和特性在嵌入式设备里是用不到的,可以先去掉。
还有的是可有可无的特性,如果想用,也存在优化空间,可以自己实现。

以下说明不限于 lwip ,sal 部分也有涉及。

裁剪详解

sal 可裁剪优化项
  1. SAL_INTERNET_CHECK: 网络检测,使用到了 workqueue 。检测原理就是尝试连接 "link.rt-thread.org::8101",发送检测数据。
    这个或者可以去掉检测,或者换成自家服务器。
  2. #define SAL_SOCKETS_NUM 4: 这个可能是支持创建 socket 的最大数量。
  3. RT_USING_NETDEV: 网络接口设备,没有终端操作的情况下可以优化掉。其中,NETDEV_USING_IFCONFIG NETDEV_USING_PING NETDEV_USING_NETSTAT NETDEV_USING_AUTO_DEFAULT 分别可以单独增删。
  4. NETDEV_IPV6: 目前支持还不普及的吧,可以关掉,如果需要才开启。
lwip 可裁剪优化项
  1. RT_LWIP_IGMP 组播需要用到的,不用组播可能可以去掉
  2. RT_LWIP_ICMP ping 命令使用的协议,没有 ping 也不需要这个协议。
  3. RT_LWIP_DNS 局域网不需要这个,或者说,直接使用 ip 地址进行连接而不是使用 url 链接地址,可以不使用 dns。
  4. RT_LWIP_TCP_WND tcp 接收窗口,这个应该是申请内存大小。可以适当减小。不定义就是 1460 x 2 字节
  5. RT_LWIP_TCP_SND_BUF tcp 发送缓存,同上,不定义就是 1460 x 2 字节
  6. LWIP_NO_TX_THREADLWIP_NO_RX_THREAD eth 线程,发送一个,接收一个。以下是几个相关宏定义,如果不定义堆栈大小,默认使用 1024

    #define RT_LWIP_ETHTHREAD_PRIORITY 12
    #define RT_LWIP_ETHTHREAD_STACKSIZE 1024
    #define RT_LWIP_ETHTHREAD_MBOX_SIZE 8
    #define LWIP_NO_TX_THREAD
    #define LWIP_NO_RX_THREAD

    源码里,这部分还有很大优化空间,具体见下文详解。

  7. LWIP_NETIF_STATUS_CALLBACK 和前边的 SAL_INTERNET_CHECK 有关,这里设置网络连接回调。可以通知应用层连接上 INTERNET 了。
  8. LWIP_NETIF_LINK_CALLBACK 网卡连接状态,仅表示物理连接接入网络,有可能是和电脑直连,或者交换机、路由器等等。
  9. SO_REUSE 端口复用,这个在组播,而且是 UDP 协议才有用。不需要就定义成 0
  10. LWIP_SO_SNDTIMEO LWIP_SO_RCVTIMEO LWIP_SO_RCVBUF 这三个,如果 rtconf.h 里没有定义, lwipopts.h 会定义,所以不需要就定义成 0。
    其中 LWIP_SO_RCVBUF 接收缓冲,涉及到接收缓冲上限。多数情况下不会有影响,只有网络数据多的时候才可能达到这个缓存上限。
  11. RT_LWIP_USING_PING 这个和前面的 NETDEV_USING_PING RT_LWIP_ICMP 有关。
  12. RT_LWIP_STATS 这是一组 stat 的总开关,详细细节查看 lwipopts.h 文件内的定义。或者取消 RT_LWIP_STATS 定义,关闭所有 stat 项,或者单独修改 lwipopts.h 文件中某些 stat 定义。
  13. 修改 eth_rx_thread 和 eth_tx_thread ,启用 RT_USING_HEAP 后,添加动态创建线程。这两个线程被初始化在 INIT_PREV_EXPORT 阶段。片上内存堆和片外内地堆初始化注册都在 INIT_BOARD_EXPORT 阶段,可以申请使用动态内存。
erx etx 两个线程

以 etx 为例。ethernetif_linkoutput 函数主要操作如下:

    if (rt_mb_send(ð_tx_thread_mb, (rt_uint32_t) &msg) == RT_EOK)
    {
        /* waiting for ack */
        rt_sem_take(&(enetif->tx_ack), RT_WAITING_FOREVER);
    }

发送了一个邮箱,然后等待一个信号量。这个信号量从哪儿来?看下面的 etx 线程入口函数。

static void eth_tx_thread_entry(void* parameter)
{
    struct eth_tx_msg* msg;

    while (1)
    {
        if (rt_mb_recv(ð_tx_thread_mb, (rt_ubase_t *)&msg, RT_WAITING_FOREVER) == RT_EOK)
        {
            struct eth_device* enetif;

            RT_ASSERT(msg->netif != RT_NULL);
            RT_ASSERT(msg->buf   != RT_NULL);

            enetif = (struct eth_device*)msg->netif->state;
            if (enetif != RT_NULL)
            {
                /* call driver''s interface */
                if (enetif->eth_tx(&(enetif->parent), msg->buf) != RT_EOK)
                {
                    /* transmit eth packet failed */
                }
            }

            /* send ACK */
            rt_sem_release(&(enetif->tx_ack));
        }
    }
}

etx 等待 ethernetif_linkoutput 的邮件消息,然后调用 eth 驱动接口函数,完成后释放信号量给 ethernetif_linkoutput一个应答。

从这里看,用上这个线程,需要额外增加两次 ipc 消息。
去掉 etx 之后呢?ethernetif_linkoutput 变成下面的样子。

static err_t ethernetif_linkoutput(struct netif *netif, struct pbuf *p)
{
    struct eth_device* enetif;

    RT_ASSERT(netif != RT_NULL);
    enetif = (struct eth_device*)netif->state;

    if (enetif->eth_tx(&(enetif->parent), p) != RT_EOK)
    {
        return ERR_IF;
    }
    return ERR_OK;
}

与使用 etx 线程唯一不同的是:使用线程时,发送数据操作 eth 驱动都在 etx 线程里进行的;如果去掉,就有可能多个应用线程同时发送数据,出现多个线程竞争 eth 驱动资源的现象。但是,这个可以经过优化应用层业务逻辑进行规避。

更多关于不使用 etx 和 erx 线程的修改,请移步我的 gitee 仓库。

本系列提到的所有代码更改已经提交到 gitee ,欢迎大家测试
https://gitee.com/thewon/rt_t...

RT-Thread在MM32上的移植使用,今晚还有直播噢!

RT-Thread在MM32上的移植使用,今晚还有直播噢!

直播今晚8点,基于灵动MM32 MCU的RT-Thread移植与开发

Bilibili直播间地址:http://live.bilibili.com/21644795  

欢迎大家关注我们的B站账号,看直播不迷路(记得一键三联噢)

简介

本文档为上海灵动微电子AE团队为MM32 MiniBoard开发板提供的BSP(板级支持包) 说明。通过阅读本文档,开发者可以快速地上手该 BSP,将 RT-Thread 运行在开发板上。

1.1 开发板介绍

MM32 MiniBoard Rev.D2 是为了用户快速上手、了解学习MM32系列MCU的一块入门级开发板,可满足基础测试及高端开发需求。


开发板外观如下图所示:

MM32 MiniBoard Rev.D2



MM32 MiniBoard Rev.D2 开发板板载资源如下:

MCU:MM32L373PF  ARM 32-bit Cortex-M3,主频 96MHz,128KB FLASH ,20KB SRAM


常用外设

    • LED:4个4色LED,可用于测试GPIO功能

    • 按键:1个复位按键、 1个WakeUp按键、两个普通按键

    • SPI Flash W25P80,容量8M bit,速度50MHz

    • I2C接口EEPROM芯片,AT24C02,容量256字节

    • 1个旋转式电位计(变阻器),用于ADC测试

    • 能耗测试开关:待机模式和运行模式


    常用接口:Micro-USB接口,RS-232接口,UART接口
    调试接口:SWD,支持J-Link、U-LINK2、MM32-LINK调试器

更多详细信息请咨询[灵动微电子技术支持][http://www.mm32.com.cn]

1.2 MCU 简介

MM32L373PF 是上海灵动微电子股份有限公司的一款面向电机驱动、工业应用、消费电子、白色家电等领域的低功耗芯片。包括如下硬件特性:

2. 编译说明

本 BSP 为开发者提供 MDK5 工程。下面以 MDK5 开发环境为例,介绍如何将系统运行起来。
双击 project.uvprojx 文件,打开 MDK5 工程,编译并下载程序到开发板。
工程默认配置使用 Jlink 仿真器下载程序,在通过 Jlink 连接开发板到 PC 的基础上,点击下载按钮即可下载程序到开发板
推荐熟悉 RT_Thread 的用户使用 env工具 ,可以在console下进入到  bsp/mm32l37x  目录中,运行以下命令:scons
来编译这个板级支持包。如果编译正确无误,会产生rtthread.elf、rtthread.bin文件。其中 rtthread.bin 可以烧写到设备中运行。

3. 烧写及执行

3.1 硬件连接

使用MM32-LINK或Jlink等调试工具连接开发板到PC,通过调试调试工具供电或使用Micro-USB供电。若使用Jlink等调试工具,还需要将UART1_TX(PA9)、UART1_RX(PA10)、GND接到串口工具上。

3.2 运行结果

如果编译 & 烧写无误,当复位设备后,会看到板子上的4个LED闪烁。串口打印RT-Thread的启动logo信息:
1 \ | /
2- RT -     Thread Operating System
3 / | \     4.0.0 build Dec 11 2018
4 2006 - 2018 Copyright by rt-thread team
5msh />

4. 驱动支持情况及计划



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



RT-Thread


让物联网终端的开发变得简单、快速,芯片的价值得到最大化发挥。Apache2.0协议,可免费在商业产品中使用,不需要公布源码,无潜在商业风险。





长按二维码,关注我们


点击阅读原文,进入RT-Thread 哔哩哔哩直播间
你点的每个“在看”,我都认真当成了喜欢

本文分享自微信公众号 - RTThread物联网操作系统(RTThread)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

关于基于RT-Thread在STM32H7上移植LWIP的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于18个经典RT-Thread例程新鲜出炉(基于探索者STM32F407)!RT-Thread联合正点原子出品、Bootloader 跳转到 RT-Thread 或 FreeRTOS(基于 STM32)、rt-thread 裁剪系列(一) 之 lwip、RT-Thread在MM32上的移植使用,今晚还有直播噢!等相关知识的信息别忘了在本站进行查找喔。

本文标签:

上一篇Wifi设备配网问题(wifi设备配网的原理)

下一篇jsTree – 通过ajax按需加载子节点