基于CubeMX-STM32F302_uCOSII例程移植
基于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. stm32h7 移植RTX5(AC6) 基于CUBEMX
基于CUBEMX H750 移植 RTX5 使用AC6编译器 本文参考了安富莱论坛的相关教程: [安富莱]RTX5内核教程,采用CMSIS-RTOS V2封装层,已经更新发布至第6章 (2020-09 ...
- [MATLAB学习]:Matlab生成滑动平均滤波算法文件并移植到STM32单片机上运行——基于CubeMX
前言 人生如逆旅,我亦是行人. 今天分享一个在 MATLAB 上生成C算法文件,并将其移植到 keil5上,运行至 STM32 单片机,一个很有用的方法. 准备工作: 已安装 MATLAB 的软件(注 ...
- 2. stm32h7 移植RL-USB(AC6)MSC模式 基于CUBEMX
本文参考了安富莱论坛的相关教程: RL-USB教程开工制作,各种常用USB通信协议和上位机案例统统整出来,更新至第9章(2020-11-16) 需要先完成 RTX5 的移植工作: 1. stm32h7 ...
- 基于CubeMX+STM32F405RGT6+freeMODBUS_RTU的移植
基于CubeMX+STM32F405RGT6+freeMODBUS_RTU的移植 目录 一.CubeMX的配置 二.freeMODBUS移植 三.测试 移植前准备工作(不限于以下方式): 硬件 开发板 ...
- harmonyos能否移植到MCU,HarmonyOS(LiteOs_m) 官方例程移植到STM32初体验
HarmonyOS(LiteOs_m) 官方例程移植到STM32初体验 硬件平台 基于正点原子战舰V3开发板 MCU:STM32F103ZET6 片上SRAM大小:64KBytes 片上FLASH大小 ...
- TL437x-IDK基于AM437x的OpenCV移植教程
1基于AM437x的OpenCV移植 表 1 开发板型号 是否支持本实验 TL437x-EVM 支持 TL437x-EasyEVM 支持 TL437x-IDK 支持 TL437xF-EVM 支持 AM ...
- STM32HAL ADC+TIM+DMA采集交流信号 基于cubemx
ADC+TIM+DMA采集交流 前言 本文主要讲解定时器触发ADC去采集交流信号,DMA把数据搬移到内存. 所需工具: 开发板:STM32F103C8T6 STM32CubeMX IDE: Keil- ...
- 基于CUBEMX和STM32C8T6的同轴麦轮小车制作(二)——HAL库接受jy61p陀螺仪数据,并解决数据溢出卡死问题。
基于CUBEMX和STM32C8T6的同轴麦轮小车制作(二)--HAL库接受jy61p陀螺仪数据,并解决数据溢出卡死问题 本文利用STM32C8T6中的串口1于JY61P实时通信,并用串口2将其角度打 ...
- 基于STM32F4的CANOpen移植教程(超级详细)
CANopen移植到STM32F4平台 前言 1 物品准备 2 相关软件安装 2.1 CAN上位机 2.2 对象字典生成工具objdictedit环境配置 3 将CANopen移植到STM32F407 ...
最新文章
- 开箱即用——用这个模板快速统筹企业车辆安排
- python绘制横向堆积柱状图_Python 堆叠柱状图绘制方法
- Qt如何将数据保存成CSV文件
- 怎么修改db2服务器名字,服务器创建db2数据库实例名
- Spring Boot中的默认日志logback
- oracle卸载客户端,oracle11g客户端如何完全卸载
- 元素周期表排列的规律_元素周期表中的几个规律
- 锯齿波FMCW雷达目标检测原理
- 元搜索推荐:比比猫!(马丁编辑)
- python opencv 实现图像白平衡
- java中的字节流和字符流
- 【Python学习笔记②】——基础的数据结构【两万字总结 + 字符串、列表、元组、字典 + 增删查改】
- 合天网安实验室CTF-解密100-Funny Crypto
- 驭势吴甘沙:我的根本利益|Xtecher人物特稿
- html5 css背景图片满,css background-size与背景图片填满div
- 作为一个面试官,我会这样问问题——面试攻略之见招拆招
- abaqus python_ABAQUS中的python语言入门
- 视频播放插件(video.js)
- 数学建模竞赛用python_2018全国中学生数学建模与Python编程夏令营
- Pocsuite3渗透测试框架编写POC和EXP脚本