【STM32H7】第7章 RL-TCPnet V7.X网络协议栈移植(RTX5)

资讯 2024-06-25 阅读:92 评论:0
美化布局示例

欧易(OKX)最新版本

【遇到注册下载问题请加文章最下面的客服微信】永久享受返佣20%手续费!

APP下载   全球官网 大陆官网

币安(Binance)最新版本

币安交易所app【遇到注册下载问题请加文章最下面的客服微信】永久享受返佣20%手续费!

APP下载   官网地址

火币HTX最新版本

火币老牌交易所【遇到注册下载问题请加文章最下面的客服微信】永久享受返佣20%手续费!

APP下载   官网地址
  1. 学习本章节前,务必要优先学习第6章的底层驱动讲解。

    Before learning this chapter, it is important that priority be given to the bottom-driven presentation of chapter 6.

  2. 测试时,请将网线接到路由器或者交换机上面测试,因为已经使能了DHCP,可以自动获取IP地址。而且使能了NetBIOS局域网域名,用户只需在电脑端ping armfly,就可以获得板子的IP地址。

    At the time of testing, take the network to the router or switchboard because it has enabled DHCP to get an IP address automatically. It also enables NetBIOS local domain name, and the user can get the IP address of the plate only on the computer endping armfly.

  3. 如果要使用固定IP进行测试,请看附件章节A。

    For tests using fixed IP, see section A of the annex.

  4. 网口使用的是DM9161/9162(紧挨着9帧串口座的网口),而不是DM9000。

    The portal uses DM 961/9162 (next to the nine-column net), not DM 9000.

  5. 测试例子,务必看本章7.14小节的操作步骤。

    For example, it is important to see the operational steps in subsection 7.14 of this chapter.

移植之前,有必要对移植过程有个整体的认识:

  • 第1步,准备一个工程模板。

    Step 1, prepare an engineering template.

  • 第2步,移植RTX5。

    Step 2, transplant RTX5.

    • 移植RTX5是采用MDK的RTE环境直接添加。当前H7芯片使用RTX5强制运行STM32CubeMX,所以需要大家提前安装好STM32CubeMX V5.4或者以上版本。

      RTX5 is added directly to the RTE environment using MDK. The current H7 chip uses RTX5 to enforce STM32CubeMX, so you need to install STM32CubeMX V 5.4 or more in advance.

    • 特别注意几个网络任务的优先级安排。

      Particular attention was paid to the prioritization of several network tasks.


AppTaskMsgPro任务 : osPriorityNormal2

AppTaskEthCheck : osPriorityNormal3。

netCore_Thread任务 : osPriorityAboveNormal。

netEth0_Thread任务 : osPriorityAboveNormal1。

osRtxTimerThread任务: osPriorityRealtime。

注意这个定时器任务osRtxTimerThread的优先级一定要最高,因为这个是RL-TCPnet的时间基准运行任务。

  • 第3步,移植RL-TCPnet。

    Step 3, transplantation of RL-TCPnet.

  • 第4步,处理HAL库时间基准,以太网收发描述符内存区的MPU配置以及MAC,PHY驱动等相关问题。

    Step 4 deals with issues related to the HAL library time frame, the MPU configuration of the memory area of the Tainet transceiver and the MAC, PHY drive.

  • 第5步,创建应用。

    Step 5, create application.

总的来说,这5步就可以完成移植,这里还有一点比较重要的,需要放在开头说明,为了保证工程的独立性,教程中将RTE环境添加的HAL库文件,MAC驱动和PHY驱动独立了出来,并且单独制作了一个移植文件ETH_INIT.c,将GPIO设置,网线插拔消息,以太网中断等都汇总到这个文件里面,方便大家移植工程到自己的板子上。

下面将STM32H7的移植步骤和注意事项为大家做个说明。

移植新版RL-TCPnet网络协议栈需要大家下载指定的MDK软件包版本:

armbbs.cn/forum.php? 。

  • 所有这些软件包汇总下载地址:

    All of these packages are aggregated to download addresses:

armbbs.cn/forum.php? 。

不管以后MDK的软件包版本如何升级,当前的软件包版本和以后的新版是可以同时安装的,也就是说可以安装多个不同版本,在这里可以选择指定版本:

首先准备好一个简单的裸机工程模板,工程模板的制作就不做讲解了。这里要注意一点,由于我们要使用当前最新的HAL库软件包V1.6.0,需要大家使用这个帖子里面提供的例子:

p style=margin-top: 1.4em; margin-bototom: 1.4em; collor: rgb (18, 18, 18); font-family: -apple-systemfont, "Helvetica Neue", "PingFang-top: 1.4em; margin-botom: 1.4em; sc: "Noto Sans JK SC", "WenQuan-Micro."

armbbs.cn/forum.php?

这里的重点是教大家移植RL-TCPnet协议栈。

RTX5可以方便的通过MDK的RTE环境添加进来。对于H7版本,MDK会强制运行一次CubeMX,并添加很多H7的HAL库文件,这些库文件我们可以使用,也可以不使用。教程配套的工程文件是不使用这些的,因为前面的工程模板里面已经添加了。所以要将这些文件全部隔离出来。

点击OK按钮后,弹出如下界面:

点击Start STM32CubeMX,这里需要大家电脑上已经安装了STM32CubeMX,并且为其安装了H7的软件包。

打开后,用户仅需配置如下地方即可:

然后点击右上角的GENERATE CODE:

然后弹出如下对话框,点击Close即可,然后关闭STM32CubeMX。

重新回到MDK,会有一个对话框,点击是即可:

最后就可以看到RTX5源码已经添加到工程里面了:

添加的所有文件中,仅RTX5和文件stm32h7xx_hal_msp.c留下,其它文件全部隔离出来,隔离方法也比较简单,比如隔离生成的main.c函数,鼠标右击此文件选择Options for file ‘main.c’

然后取消掉include Target Build前的对勾,点击OK:

看到main.c文件上有个红色横杠,就表示已经隔离出来了:

同样的方法,将stm32h7xx_it.c文件也隔离出来,文件stm32h7xx_it.h不用管。

Device下面的这些文件也是同样的隔离方法:

只是鼠标右击弹出的界面有些不同:

注意stm32h7xx_hal_msp.c无需隔离,其它所有的文件全部隔离,stm32h7xx_hal_msp.c对于的隔离配置是STM32CubeMX,如果也隔离了,编译会有问题:

隔离后的效果如下:

剩下就是配置RTX5,设置RTX_Config.h文件即可,移植阶段先按照如下设置配置好,后面章节会专门为大家讲解每个参数的配置含义

像添加RTX5一样,也可以通过RTE环境添加RL-TCPnet相关配置。

CMSIS-Driver分组中添加MAC驱动和PHY驱动,其中PHY驱动随便选择一个即可,因为这个里面没有开发板上使用的DM9161/9162:

添加Event Recoder的支持,因为RL-TCPnet库的调试版本需要Event Recoder的支持:

添加ETH驱动:

添加网络配置:

我们需要的都已经添加好,效果如下:

红色方框里面的PHY和MAC驱动要隔离出来,通过下一步单独添加。

文件stm32h7xx_hal_eth.c和stm32h7xx_hal_eth_ex.c也要隔离出来,我们单独在分组HAL_Driver里面添加:

添加完毕RL-TCPnet所需的文件后,就是配置RL-TCPnet,具体每个配置所代表的含义,会在后面章节专为大家讲解。

p style=margin-top: 1.4em; margin-bottom: 1.4em; collor: rgb (18, 18, 18); font-family:-apple-system, BlinkMacSystemFont, "Helvetica Neue", "PingFang SC", "Surce Shans SC" ; "Noto Sans JK SC" ;

Net_Config.c文件配置:

注意这个文件里面还有一个RL-TCPnet内核线程的优先级配置,当前是将其配置为:

osPriorityNormal:

Net_Config_ETH_0.h文件的配置如下:

这个文件里面有一个以太网接口任务的优先级配置,当前是将其配置为:osPriorityAboveNormal1。

其它文件Net_Config_TCP.h,Net_Config_UDP.h和Net_Debug.c使用默认配置即可。

将我们裸机模板中制作好的RL-ARM文件夹复制粘贴到大家准备好的工程模板中。

p style=margin-top:1.4em; margin-bottom: 1.4em; col: logb (18, 18), font-fam”

RL-ARM文件夹中有如下七个文件夹,其中只有Driver文件夹里面有文件

然后将其也添加到工程文件里面:

文件PHY_DM916x和EMAC_STM32H7xx在第6章已经做了专门说明,这里重点把文件ETH_INIT.c文件做个说明。

这个文件比较重要,将以太网收发缓冲,引脚配置,网线插拔状态和以太网中断设置都整理到了里面,方便大家将网络协议栈移植到自己的板子上。

这里将此文件为大家做个说明。

以太网描述符和收发缓冲区定义如下:

__attribute__((at(0x30040000))) ETH_DMADescTypeDef  DMARxDscrTab[ETH_RX_DESC_CNT]; 


__attribute__((at(0x30040060))) ETH_DMADescTypeDef  DMATxDscrTab[ETH_TX_DESC_CNT]; 


__attribute__((at(0x30040200))) uint8_t Rx_Buff[ETH_RX_DESC_CNT][ETH_MAX_PACKET_SIZE];

以太网发送描述是定义在EMAC_STM32H7xx.c文件里面:


#ifndef EMAC_TXBUF_ADDRESS

#define EMAC_TXBUF_ADDRESS      0x30042000

#endif


static uint8_t  TX_Buff[ETH_TX_DESC_CNT][ETH_MAX_PACKET_SIZE] __MEMORY_AT(EMAC_TXBUF_ADDRESS);

宏定义ETH_TX_DESC_CNT和ETH_RX_DESC_CNT在stm32h7xx_hal_conf.h文件里面:


#define ETH_TX_DESC_CNT         4 

#define ETH_RX_DESC_CNT         4 

宏定义ETH_MAX_PACKET_SIZE在文件stm32h7xx_hal_eth.h里面定义:


#define ETH_MAX_PACKET_SIZE ((uint32_t)1528U)

有了这些认识后,还有一个关键点要认识到,H7的以太网收发描述符和收发缓存最好都定义到D2域的SRAM3空间,首地址是0x3004 0000,总大小32KB。


7.8.2 以太网消息通知函数

以太网消息通知函数如下:


__IO uint8_t  g_ucEthLinkStatus=0;  


void netETH_Notify (uint32_t if_num, netETH_Event event, uint32_t val) 

{

    NET_ETH_LINK_INFO *info;


    switch (event) 

    {

        case netETH_LinkDown:

            if(g_ucEthLinkStatus==2)

            {

                g_ucEthLinkStatus=3;

            }

            else

            {

                g_ucEthLinkStatus=1;

            }

            printf_eth ("Link is downrn");

            break;

        

        case netETH_LinkUp:

            g_ucEthLinkStatus=2;

            printf_eth ("Link is uprn");

            info=(NET_ETH_LINK_INFO *)&val;

            

            switch (info->speed) 

            {

                case 0:

                    printf_eth ("10 MBitrn");

                    break;

                

                case 1:

                    printf_eth ("100 MBitrn");

                    break;

                

                case 2:

                    printf_eth ("1 GBitrn");

                    break;

            }

            

            switch (info->duplex) 

            {

                case 0:

                    printf_eth ("Half duplexrn");

                    break;

                case 1:

                    printf_eth ("Full duplexrn");

                    break;

            }

            break;

        

        case netETH_Wakeup:

            printf_eth ("Wakeup frame receivedrn");

            break;

        

        case netETH_TimerAlarm:

            printf_eth ("Timer alarmrn");

            break;

    }

}

这里要注意变量g_ucEthLinkStatus=1的情况。因为上电后,不管板子有没有插入网线,都会进入一次消息netETH_LinkDown,我们把这种情况用数值1来表示。


7.8.3 以太网引脚,时钟和中断配置

初始化部分:


void HAL_ETH_MspInit(ETH_HandleTypeDef* heth)

{

    GPIO_InitTypeDef GPIO_InitStruct;


   

    if(heth->Instance==ETH)

    {

       

        __HAL_RCC_ETH1MAC_CLK_ENABLE();

        __HAL_RCC_ETH1TX_CLK_ENABLE();

        __HAL_RCC_ETH1RX_CLK_ENABLE();


       

        __HAL_RCC_GPIOA_CLK_ENABLE();

        __HAL_RCC_GPIOB_CLK_ENABLE();

        __HAL_RCC_GPIOC_CLK_ENABLE();

        __HAL_RCC_GPIOG_CLK_ENABLE();


        

       

美化布局示例

欧易(OKX)最新版本

【遇到注册下载问题请加文章最下面的客服微信】永久享受返佣20%手续费!

APP下载   全球官网 大陆官网

币安(Binance)最新版本

币安交易所app【遇到注册下载问题请加文章最下面的客服微信】永久享受返佣20%手续费!

APP下载   官网地址

火币HTX最新版本

火币老牌交易所【遇到注册下载问题请加文章最下面的客服微信】永久享受返佣20%手续费!

APP下载   官网地址
文字格式和图片示例

注册有任何问题请添加 微信:MVIP619 拉你进入群

弹窗与图片大小一致 文章转载注明

分享:

扫一扫在手机阅读、分享本文

发表评论
平台列表
美化布局示例

欧易(OKX)

  全球官网 大陆官网

币安(Binance)

  官网

火币(HTX)

  官网

Gate.io

  官网

Bitget

  官网

deepcoin

  官网
热门文章
  • 从 IPFS社区Meetup谈谈2020年的IPFS的发展历程

    从 IPFS社区Meetup谈谈2020年的IPFS的发展历程
    8月3日, IPFS社区Meetup 如期举办,这一次的社区Meetup由交流与演讲和闪电演示两部分组成,其实该会议主要带领我们回顾了IPFS在2020年的发展历程(包括项目进展、IPFS生态发展等),展示了IPFS及其生态。2020年对于IPFS而言是不平凡的一年,其唯一激励层Filecoin的主网即将上线,这让IPFS和Filecoin在全球范围内得到了前所未有的关注,也推动了IPFS的高速发展。接下来,我们一起走进IPFS在20...
  • 超10万人爆仓,比特币跳水,发生了什么

    超10万人爆仓,比特币跳水,发生了什么
    现货比特币ETF上市第二日,数字货币再迎来抛售。比特币一度跌破42000美元/枚,截止1月13日内跌幅超7%,报42562.1美元/枚。The current Bitcoin ETF is on the second day of the market and the digital currency is sold again. Bitcoin fell by over 7% to $4562.1 on 13 January.现货比特币ETF普遍跌6%左右。其中,DEFI跌...
  • 兴业基金调研远光软件、东芯股份

    兴业基金调研远光软件、东芯股份
    根据6月6日公布的公开市场信息和机构研究,世界安全基金会最近对下列两家上市公司进行了一项研究: 1) 光电软件(工程师基金参与公司专项研究) 其中一个亮点是该公司深入参与建造南方网中心和技术平台,导致南网市场在 " 九天 " 平台产品方面取得重大突破;该公司的Won-宇宙大厅已上线,而且,除了Won-宇宙之外,远洋宇宙的应用现已扩大到Won-宇宙发射、Won-宇宙-教师和政党建设-宇宙;该公司的Far-O-Cloud平台已经实现了完全成熟的国家生产,也可以在全国云中运作。...
  • 0.00003374个比特币等于多少人民币/美金

    0.00003374个比特币等于多少人民币/美金
    0.00003374比特币等于多少人民币?根据比特币对人民币的最新汇率,0.00003374比特币等于2.2826 1222美元/16.5261124728人民币。比特币(BTC)美元(USDT)人民币(CNY)0.00003374克洛克-0/22216.5261124728比特币对人民币的最新汇率为:489807.72 CNY(1比特币=489807.72人民币)(1美元=7.24人民币)(0.00003374USDT=0.0002442776 CNY)。汇率更新于2024...
  • $DOG暴涨400%,加密货币或许正在重新定义和计量“价值”

    $DOG暴涨400%,加密货币或许正在重新定义和计量“价值”
    近/克洛克-0/5,Meme币狗?走吗?去哪?那个?MOON($ DOG)连续上涨超过230%,突破前期高点,达到0.0062美元。在同一时期,比特币生态的许多主流L2协议代币下跌了50%以上。这些就是我们所说的“价值币”。虽然大起大落不能说明什么,但从过去的牛市来看,领头羊MemeCoin表现非凡。在上一轮牛市中,$DOGE的价格上涨了超过150倍,其市值接近900亿美元。还有其他MemeCoin,如$Shib、$People、$ELON、$AKITA等。2 vkwmkpm...
标签列表