| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 嵌入式 -> RT-Thread&&STM32开发系列(2):FAT头文件包含报错与RTT和CubeMX文件兼容问题 -> 正文阅读 |
|
[嵌入式]RT-Thread&&STM32开发系列(2):FAT头文件包含报错与RTT和CubeMX文件兼容问题 |
成就更好的自己近期的项目需要在RTT下,使用SD卡运行FAT文件系统,而且还能通过USB将这个SD卡虚拟化成大容量可存储设备,在项目初期遇到了一些小问题,记录一下,防止别的朋友踩坑。 文章概览:初始化后FAT头文件的包含问题; RTT与CubeMX生成的其他模组文件的兼容; 测试平台:STM32F407VGT6 STM32CubeMX版本:6.1.2 HAL库版本:1.16.1 RTT组件包版本:3.1.3 目录FAT头文件包含问题以往来说,笔者都是比较懒,都是像下面一样将各种外设的xx.h文件和自己写的一些xx.h文件都包含到main.h中,然后一些自定义的或者其他的.c文件直接包含main.h文件即可,这样的做法简单无脑。 但是在cubeMX生成的FAT工程里,将fatfs.h包含在main.h中就疯狂报错,具体如下: ? 我在网上查了半天,就看到了两个人跟我遇见的问题一样但是问而无果,所以这里把报错当做代码引用一下,增加编译报错关键字来让有同样问题的人搜到这篇博客。
刚开始我以为这样做没有问题,但是解决报错将近两个小时后觉得根据语法和编译原理的知识仍然没有解决,所以就尝试恢复到代码初始生成的状态。当我把头文件恢复到main.c以后就不报错了。 到此为止,就是因为头文件的不当包含出现的问题,这样让我想出了几个利害关系:
虽然并没有分析出包含在main.h中到底有什么错误,但是也确实该改掉这种方式了,这个问题就到此为止吧! RTT与CubeMX其他模组文件的兼容问题描述:之前一直使用的RTT只是用到了UART,TIM,IIC等简单的外设,这次一下子开了很多复杂功能就出现了一些问题。按照之前的RTT移植过程的配置都没出现什么问题,这一次配置完成后编译0error0warning但是shell界面只出现了版本输出,不显示msh>的命令行提示。 ? 很快就锁定了问题所在,但是在此之前需要先介绍一下几个知识点。 问题分析:
回到正题,msh配置没问题但是不显示说明目前的进程并没有让出cpu的使用权,进而说明程序在某个地方陷入循环或者卡死。进过Debug后发现程序卡死在初始化的MX_USB_DEVICE_Init(),这是USB的初始化,进而深入查找在其调用的USB底层文件看到了一个裸机开发熟悉的函数HAL_Delay(),就是他让程序卡死的。为什么呢?再来几个知识点。
所以在RTT系统中不能出现HAL_Delay函数,否则会使程序卡死。在MX_USB_DEVICE_Init()中的底层配置中调用了这个函数,因此程序卡死在这里。然后我又查了一下,我滴乖乖,SDIO和USB的操作中都不同程度的存在HAL_Delay函数,原因在于RTT与FAT一样属于第三方的软件包,不是ST官方的东西,所以在兼容性上与CubeMX生成的其他文件会有差异与兼容问题,不过由于HAL库的全面与强大,通常这种兼容问题都只需要进行小部分修改即可解决。 解决办法:因为HAL_Delay()函数存在的地方不少,所以直接替换这个函数不太合适。所以我们直接修改HAL_Delay()的定义。在stm32f4xx_hal.c文件中,包含rtthread.h文件,然后找到HAL_Delay()函数,将函数体全部注释,因为rt_thread_mdelay()函数的传入参数与HAL_Delay()传入参数类型一致,直接加一句rt_thread_mdelay(Delay)即可; 或者由于HAL_Delay()是_week弱定义,我们可以直接在main.c中用户代码区重新定义一个void HAL_Delay(uint32_t Delay),内容就一句话rt_thread_mdelay(Delay);这样重新生成代码时就不会担心被删掉。 问题解决!!! 写在最后,未来几期博客就以目前的项目为Handle来写,涉及STM32外设开发,模块开发,RTT开发,项目完成的时候打算开源到gitee上,敬请期待。 |
|
嵌入式 最新文章 |
基于高精度单片机开发红外测温仪方案 |
89C51单片机与DAC0832 |
基于51单片机宠物自动投料喂食器控制系统仿 |
《痞子衡嵌入式半月刊》 第 68 期 |
多思计组实验实验七 简单模型机实验 |
CSC7720 |
启明智显分享| ESP32学习笔记参考--PWM(脉冲 |
STM32初探 |
STM32 总结 |
【STM32】CubeMX例程四---定时器中断(附工 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/25 18:46:32- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |