基于STM32F767在STM32CubeIDE1.5中使用ThreadX

519 阅读2分钟

平台说明:

  • 软件开发工具:STM32CubeIDE1.5

  • 硬件开发板:NUCLEO-F767ZI

一,基本步骤:

  1. 根据项目需要使用STM32CubeIDE生成初始工程文件,生成后编译一下,主要是为了检验一下生成的工程的正确性.
  2. 根据MCU的类型复制ThreadX源代码和移值代码,STM32F767为cortex-m7内核,所以使用ports/cortex_m7目录中的移植文件.再复制_tx_initialize_low_level.s(此文件是我从官方示例中拷贝的,目前我知道是要修改MCU的频率和ThreadX系统基础时钟的)文件到我们的文件目录中.从这里下载:github.com/azure-rtos/…,微软提供的历程是可以直接使用的,但是代码结构不适合使用MX.
  3. Project配置中增加ThreadX头文件路径和源文件路径。Project Properties --> C/C++ Build --> Settings --> Tools Settings --> MCU GCC Compiler --> Include paths.
  4. 注释掉STM32CubeIDE默认代码stm32f7xx.c中的PendSV_Handler()和SysTick_Handler(),避免重复定义。为避免重新生成代码时注释被优化,将#if 0放置在DebugMon_Handler()的用户段0,将#endif放置在SysTick_Handler()的用户段1(这个可以在MX中NVIC-->Code Generation中取消默认生成的勾即可).
  5. 在 STM32F767ZITX_FLASH.ld 中的 .user_heap_stack 段定义__RAM_segment_used_end_,其表示未使用RAM空间的起始地址,用于做动态分配。
  6. 在 startup_stm32f767zitx.s 中定义全局变量 _vectors,其在 tx_initialize_low_level.S 中被调用.
  7. 最后我的工程文件结构:

后续将采用速度更快的STM32H743ZI来学习Threadx

补充

我将采用开发板上的LD1(绿灯),LD2(蓝灯),LD3(红灯)来指示.

网上找到的一些好的ThreadX相关文章链接:blog.csdn.net/qq_37555002:系列文章,详细地,系统地讲解.


记录:

  • 2021/2/1:点灯成功(差点放弃);
  • 2021/2/18:添加二,三,四项(计划);