STM32H743+CubeMX-移植ThreadX

一、前言

令人激动的是,STM32Cube ecosystem迎来又一波的更新,名字是X-CUBE-AZROTS-H7。这个项目重大意义是从STM32CubeMX移植ThreadX,也可以移植rt-thread。目前使用STM32CubeMX移植ThreadX只支持H7系列的单片机,其他系列可能还需要等等。
视频教程:https://v.qq.com/x/page/c3232e9q80c.html
值得注意的是,我在移植的过程中发现,单独使用STM32CubeMX移植会有BUG,无法进入Mode界面配置ThreadX。但是,在STM32CubeIDE上使用STM32CubeMX的话,没有出现这个问题。

二、STM32CubeMX

2.1、新建工程

2.1

2.2、配置RCC

2.2

2.3、配置Clock Configuration

2.3

2.4、配置Debug方式

2.4

2.5、使能CPU ICache与DCache

2.5

2.6、下载ThreadX的内核

2.6-1
2.6-2
2.6-3
如上图所示,配置AZURE_RTOS_Application与ThreadX:

  • HW_Profile选择Custom_Board
    因为STM32H743IIT6并不是stm32 ecosystem评估板的芯片,所以只能选择Custom_Board了,意思是:自定义的板子
  • Application选择azure_rtos_app
    没有其他选择了。
  • 勾上ThreadX/Core
    内核,必须要用啊。
  • 勾上ThreadX/ TraceX support
    RTOS的强大调试工具,调试的时候使用的。
    接着,就可以按下界面右下角的ok,然后会弹回到原来的配置界面,然后左侧的选项栏里增加一个SoftWare Packs。
    2.6-4

三、ThreadX

3.1、Mode

3.1

3.2、修改裸机的Timebase Source

3.2
这一步非常重要,裸机的Time Base Source改为TIM1,是因为Systick被RTOS占用了。总的来说,虽然移植了RTOS,但是裸机系统也需要时钟源。这个跟移植FreeRTOS时是一样的。

3.3、配置ThreadX的User setting

3.3

  • TX_TIMER_TICKS_PER_SECOND改为1000
    这个TIMER在UCOSIII与FreeRTOS都有,是系统调度的频率,改为1000的意思是每秒进行1000次的调度,即调度的频率是1000Hz,大部分的RTOS通常都配置1000。
    其他配置暂时保持默认,至于每一个配置的意义,在ThreadX的官网有详细的介绍。
    官网网址:https://docs.microsoft.com/en-us/azure/rtos/threadx/chapter2

3.4、修改ThreadX的堆栈

3.4至于应用程序的堆栈配置多大,这个需要看MCU的型号。STM32H743IIT6有1MB的RAM空间,分配10KB就相当于1/100的RAM空间。

3.5、配置GPIO

3.55配置开发板的LED引脚的GPIO,用于验证ThreadX的线程有没有跑起来。

3.6、修改Project Manager

3.6
生成代码之前,修改生成代码的方式。

四、代码

4.1、 main.c

4.1
从main.c可以看到ThreadX初始化的相关函数,证明TThreadX系统移植成功。可以编译一下代码,反正我是没有报错与告警。

4.2、创建第一个ThreadX线程

4.2.1、app_azure_rtos.h

4.2.1.1

4.2.2、app_azure_rtos.c

4.2.2
4.3.3
4.3.4

4.2.3、返回到app_azure_rtos.h修改一下

4.2.3

五、编译,烧录代码

5.1、编译

5.1
还是没有报错与警告。

5.2、烧录代码

5.2
完成,创建一个线程。。。。。

  • 8
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 6
    评论
您好!对于STM32F407和ETH LWIP,我可以为您提供一些关于TCP client客户端的开发方面的信息。 首先,您需要使用STM32CubeMX软件来配置STM32F407的ETH和LWIP库。在STM32CubeMX中,您可以配置以太网接口和选择使用LWIP协议栈。确保在配置期间启用TCP/IP协议。 一旦配置完成并生成代码,您可以在生成的代码中找到LWIP库的API函数以及以太网驱动程序的相关函数。在这里,您将能够设置和管理TCP连接。 以下是一个简单的TCP客户端示例代码,用于向服务器发送数据: ```c #include "lwip/api.h" #define SERVER_IP "192.168.0.100" #define SERVER_PORT 8080 void tcp_client_task(void *arg) { struct netconn *conn; err_t err; // 创建TCP连接 conn = netconn_new(NETCONN_TCP); if (conn != NULL) { ip_addr_t server_addr; // 设置服务器IP地址和端口 IP4_ADDR(&server_addr, 192, 168, 0, 100); // 连接服务器 err = netconn_connect(conn, &server_addr, SERVER_PORT); if (err == ERR_OK) { const char *data = "Hello, server!"; struct netbuf *send_buf; // 创建发送数据包 send_buf = netbuf_new(); if (send_buf != NULL) { // 将数据添加到发送数据包中 netbuf_ref(send_buf, data, strlen(data)); // 发送数据包 err = netconn_send(conn, send_buf); // 释放发送数据包 netbuf_delete(send_buf); } } // 关闭连接 netconn_close(conn); netconn_delete(conn); } vTaskDelete(NULL); } ``` 请注意,此示例代码仅用于演示目的,您可能需要根据您的具体需求进行修改。另外,还要确保正确初始化LWIP协议栈和以太网接口。 希望这些信息对您有所帮助!如果您有任何进一步的问题,请随时提问。
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Wallace Zhang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值