完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
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 底层连接文件 打开MicriumSoftwareuCOS-IIPortsARM-Cortex-M4GenericRealView 文件夹 将其中的文件全部拷贝到我们新建的 Ports 文件夹中 4.2.3、移植 Source OS源码文件 打开uCOSII 例程源码中的 MicriumSoftwareuCOS-IISource 文件夹,将其中的文件全部拷贝到我们创建的工程目录下新建的 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 FPU IF {FPU} != "SoftVFP" ; Enable Floating Point Support at reset for FPU LDR R0, =0xE000ED88 ; Load address of CPACR register LDR R1, [R0] ; Read value at CPACR ORR R1, R1, #(0xF <<20) ; Set bits 20-23 to enable CP10 and CP11 coprocessors ; Write back the modified CPACR value STR R1, [R0] ; Wait for store to complete DSB ; Disable automatic FP register content ; Disable lazy context switch LDR R0, =0xE000EF34 ; Load address to FPCCR register LDR R1, [R0] AND R1, R1, #(0x3FFFFFFF) ; Clear the LSPEN and ASPEN bits STR R1, [R0] ISB ; Reset pipeline now the FPU is enabled ENDIF ;to enable FPU 5、注意事项 注意:通过CubeMX 添加新的外设后更新工程有两个修改的地方会被刷新掉 ①:在 stm32f3xx_it.c 文件中注释掉的函数 PendSV_Handler(void),会被取消注释更新工程后需要从新注释掉。 ②:在 starup_stm32f302xc.S 文件中开启 FPU 的汇编代码会被删除掉,更新工程后需要从新添加。 |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1602 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1536 浏览 1 评论
967 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
680 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1579 浏览 2 评论
1861浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
642浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
514浏览 3评论
528浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
501浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-19 17:25 , Processed in 1.011448 second(s), Total 79, Slave 62 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号