基于CubeMX-STM32F302_uCOSII例程移植

1、说明

STM32F302的内核为Cortex-M4的,所以我们以官方的F4例程为基础移植。

2、准备

2.1、软件

1、官方例程源码:Micrium_STM3240G-EVAL_OS2 (需要账号)

2、移植完成代码:https://download.csdn.net/download/qq_39567970/20366977

3、官网例程源码+移植完成代码:https://download.csdn.net/download/qq_39567970/20367158

2.2、开发工具

以下两个工具大家都应该有,不然的话可以去官方下载。

1、STM32CubeMX 6.2.0

2、Keil uVision5 V5.34.0.0

2.3、移植时间

2021年7月18日

3、创建简易的 LED 工程

3.1、新建CubeMX工程

打开软件点击红框标注的 ACCESS TO MCU SELECTOR 选项

根据自己的需要选择对应的芯片,选择之后,点击Start Project,如下所示

3.2、配置时钟源,调试接口,端口

进入新的界面,点击 System Core,进行配置

配置时钟,选择外部晶体振荡器

配置调试接口,注意:此处不配置会出现第二次无法进行下载(SWD接口被复用为其他功能,一旦出现这个问题要使用Flymcu 进行修改恢复其调试接口的功能)

配置相应的GPIO端口,我们直接在 Pinout view 上进行修改。找到你想配置的引脚鼠标左击(其实就是你板子上连接LED的,一般这么搞(●’◡’●)),配置为输出就好了。

我配置了三个端口

3.3、配置时钟

进入时钟配置页面,②我们配置外部时钟的频率,③选择系统时钟源,④设置相应时钟频率,软件自动计算。

工程配置,②配置工程及文件夹的名字,

③配置工程的保存路径,

④选择相应的集成开发环境(IDE)

⑤选择 IDE 的版本,

⑥使用的HAL库的版本

代码生成配置、①选择代码生成的配置选项

②选择只复制必要的库文件(第一个选择拷贝所以的库文件)

③为外设的初始化生成单独的.c、.h文件(第二个选择后外设的初始化文件会全部在BSP 的文件中)

上述选项做完,点击 GENERATE CODE就可以生成相应的工程

生成的工程文件目录如下所示

4、移植 uCOSII

4.1、创建文件夹

在我们使用 CubeMX 创建的工程中添加 uCOSII 文件夹,在 uCOSII 文件夹内创建 Cfg、Ports、Source 三个文件夹。

我们打开下载好的 uCOSII 源码,找到对应的文件夹 Ports、Source

4.2、移植相关文件

4.2.1、移植 Cfg配置文件

打开uCOSII 例程源码中的 Examples 文件夹,将 ST/STM3240G-EVAL/OS2 文件夹中os_cfg.h拷贝到我们创建的工程目录下新建的 Cfg 文件夹中

4.2.2、移植 Ports 底层连接文件

打开Micrium\Software\uCOS-II\Ports\ARM-Cortex-M4\Generic\RealView 文件夹

将其中的文件全部拷贝到我们新建的 Ports 文件夹中

4.2.3、移植 Source OS源码文件

打开uCOSII 例程源码中的 Micrium\Software\uCOS-II\Source 文件夹,将其中的文件全部拷贝到我们创建的工程目录下新建的 Source 文件夹中

4.3、在 Keil MDK5 中配置相关文件

4.3.1、打开工程

打开创建的 Keil 工程

4.3.2、工程配置

①打开项目管理

②添加新的工程文件夹

③文件夹命名

④添加文件到新建的文件夹中

4.3.3、添加头文件

4.4、编译调试代码

4.4.1、编译出现未找到源文件错误

如下所示,我们注释掉②处,再次编译

4.4.2、编译出现如下错误未定义

如下所示的错误,原因是 CPU_STK 未定义,我们在 os_cpu.h 中添加定义

4.4.3、编译出现如下错误

将 os_cfg.h 中的 OS_APP_HOOKS_EN 定义为 0;

将 os_cfg.h 中的 OS_TICKS_PER_SEC 定义为 1000;

将 os_cpu_c.c文件中的函数 OS_CPU_SysTickHandler,OS_CPU_SysTickInit 屏蔽掉

编译后如下所示

4.4.3、修改异常中断名称PendSV_Handler

我们需要修改异常中断处理部分,①将STM32的启动文件中的异常中断命名PendSV_Handler进行复制,将其替换掉 uCOSII 汇编文件中的 OS_CPU_PendSVHandler (共三处)

替换位置1

替换位置2

替换位置3

替换完成之后要把之前的生成工程中的 PendSV_Handler(void)注释掉。

注意:在从CubeMX添加其他外设更新工程时此处的注释会被消除掉!!!

4.4.4、添加滴答定时器的配置

在stm32f3xx_it.c 文件夹中添加 #include "ucos_ii.h" 头文件,在滴答定时器中断中添加

OSIntEnter();、OSTimeTick();、OSIntExit();

如图所示,头文件需添加到提示的范围内,不然CubeMX更新工程会将其删除

4.4.5、创建简易测试任务

创建三个LED闪烁的任务,编译运行成功,但是当进行浮点运算时会出现 HardFault,

我们需要在stm32 的启动文件中添加如下汇编代码,再进行浮点运算就可以了

               ;to enable FPUIF {FPU} != "SoftVFP"; Enable Floating Point Support at reset for FPULDR     R0, =0xE000ED88         ; Load address of CPACR registerLDR     R1, [R0]                ; Read value at CPACRORR     R1,  R1, #(0xF <<20)    ; Set bits 20-23 to enable CP10 and CP11 coprocessors; Write back the modified CPACR valueSTR     R1, [R0]                ; Wait for store to completeDSB; Disable automatic FP register content; Disable lazy context switchLDR     R0, =0xE000EF34         ; Load address to FPCCR registerLDR     R1, [R0]AND     R1,  R1, #(0x3FFFFFFF)  ; Clear the LSPEN and ASPEN bitsSTR     R1, [R0]ISB                             ; Reset pipeline now the FPU is enabledENDIF;to enable FPU

5、注意事项

注意:通过CubeMX 添加新的外设后更新工程有两个修改的地方会被刷新掉

①:在 stm32f3xx_it.c 文件中注释掉的函数 PendSV_Handler(void),会被取消注释更新工程后需要从新注释掉。

②:在 starup_stm32f302xc.S 文件中开启 FPU 的汇编代码会被删除掉,更新工程后需要从新添加。

基于CubeMX-STM32F302_uCOSII例程移植相关推荐

  1. 1. stm32h7 移植RTX5(AC6) 基于CUBEMX

    基于CUBEMX H750 移植 RTX5 使用AC6编译器 本文参考了安富莱论坛的相关教程: [安富莱]RTX5内核教程,采用CMSIS-RTOS V2封装层,已经更新发布至第6章 (2020-09 ...

  2. [MATLAB学习]:Matlab生成滑动平均滤波算法文件并移植到STM32单片机上运行——基于CubeMX

    前言 人生如逆旅,我亦是行人. 今天分享一个在 MATLAB 上生成C算法文件,并将其移植到 keil5上,运行至 STM32 单片机,一个很有用的方法. 准备工作: 已安装 MATLAB 的软件(注 ...

  3. 2. stm32h7 移植RL-USB(AC6)MSC模式 基于CUBEMX

    本文参考了安富莱论坛的相关教程: RL-USB教程开工制作,各种常用USB通信协议和上位机案例统统整出来,更新至第9章(2020-11-16) 需要先完成 RTX5 的移植工作: 1. stm32h7 ...

  4. 基于CubeMX+STM32F405RGT6+freeMODBUS_RTU的移植

    基于CubeMX+STM32F405RGT6+freeMODBUS_RTU的移植 目录 一.CubeMX的配置 二.freeMODBUS移植 三.测试 移植前准备工作(不限于以下方式): 硬件 开发板 ...

  5. harmonyos能否移植到MCU,HarmonyOS(LiteOs_m) 官方例程移植到STM32初体验

    HarmonyOS(LiteOs_m) 官方例程移植到STM32初体验 硬件平台 基于正点原子战舰V3开发板 MCU:STM32F103ZET6 片上SRAM大小:64KBytes 片上FLASH大小 ...

  6. TL437x-IDK基于AM437x的OpenCV移植教程

    1基于AM437x的OpenCV移植 表 1 开发板型号 是否支持本实验 TL437x-EVM 支持 TL437x-EasyEVM 支持 TL437x-IDK 支持 TL437xF-EVM 支持 AM ...

  7. STM32HAL ADC+TIM+DMA采集交流信号 基于cubemx

    ADC+TIM+DMA采集交流 前言 本文主要讲解定时器触发ADC去采集交流信号,DMA把数据搬移到内存. 所需工具: 开发板:STM32F103C8T6 STM32CubeMX IDE: Keil- ...

  8. 基于CUBEMX和STM32C8T6的同轴麦轮小车制作(二)——HAL库接受jy61p陀螺仪数据,并解决数据溢出卡死问题。

    基于CUBEMX和STM32C8T6的同轴麦轮小车制作(二)--HAL库接受jy61p陀螺仪数据,并解决数据溢出卡死问题 本文利用STM32C8T6中的串口1于JY61P实时通信,并用串口2将其角度打 ...

  9. 基于STM32F4的CANOpen移植教程(超级详细)

    CANopen移植到STM32F4平台 前言 1 物品准备 2 相关软件安装 2.1 CAN上位机 2.2 对象字典生成工具objdictedit环境配置 3 将CANopen移植到STM32F407 ...

最新文章

  1. 开箱即用——用这个模板快速统筹企业车辆安排
  2. python绘制横向堆积柱状图_Python 堆叠柱状图绘制方法
  3. Qt如何将数据保存成CSV文件
  4. 怎么修改db2服务器名字,服务器创建db2数据库实例名
  5. Spring Boot中的默认日志logback
  6. oracle卸载客户端,oracle11g客户端如何完全卸载
  7. 元素周期表排列的规律_元素周期表中的几个规律
  8. 锯齿波FMCW雷达目标检测原理
  9. 元搜索推荐:比比猫!(马丁编辑)
  10. python opencv 实现图像白平衡
  11. java中的字节流和字符流
  12. 【Python学习笔记②】——基础的数据结构【两万字总结 + 字符串、列表、元组、字典 + 增删查改】
  13. 合天网安实验室CTF-解密100-Funny Crypto
  14. 驭势吴甘沙:我的根本利益|Xtecher人物特稿
  15. html5 css背景图片满,css background-size与背景图片填满div
  16. 作为一个面试官,我会这样问问题——面试攻略之见招拆招
  17. abaqus python_ABAQUS中的python语言入门
  18. 视频播放插件(video.js)
  19. 数学建模竞赛用python_2018全国中学生数学建模与Python编程夏令营
  20. Pocsuite3渗透测试框架编写POC和EXP脚本

热门文章

  1. 应用偏最小二乘回归(PLSR)对NIR光谱与样本中RON含量进行定量分析
  2. C语言:删除线性链表中数据域为 item 的所有结点
  3. 基于树莓派(C语音)实现人脸识别(翔云平台)
  4. 基于翔云OCR云平台的人脸识别(2)
  5. Message:Message: 前言中不允许有内容
  6. notoriously 众所周知地;声名狼藉地;恶名昭彰地
  7. 五一期间最受欢迎的几个景区【有图有真相】
  8. 对有序变量进行回归分析,使用SPSS能够轻松做到
  9. iOS应用发布流程(一)------相关app证书的申请、下载以及安装
  10. Matlab无线通信仿真之奈奎斯特准则