基于KEIL RTX CMSIS-RTOS在STM32单片机上的一些使用心得

USB hub驱动分析 最近在调试usb 功能设备驱动程序,包括hid类设备和audio等。发现很多问题都卡在了HUB的分离处理传输上,不知道是主机控制器兼容性的问题还是配置不对,在周期传输中hub总会出现各种各样的问题。趁着周末好好把hub这块基本的流程看一下。        硬件上主要就是hub芯片了,host接口直接引到上行端口,然后分4路引出:直接外接设备。另外MiniAB接口通过OTG转接线分为Adevi 阅读详情

最近要做一款一头USB接电脑模拟U盘, 一头通过串口与终端设备交互的设备, 好久没有接触单片机, 安装最新的KEIL5.24a, 发现好多功能都不会用了, 在适应了几天后开始着手进行开发, 在开发中遇到了一些问题和一些心得, 记录一下.

现在KEIL的中间件比较丰富, 但相对于VS来说还是太弱太弱, 写了两个插入注释的小工具插件才算感觉好一点, 连插入当前时间的模板都没有, 愁人......言归正传, 创建工程, 一开始我选择了USB Device的大容量存储器, 文件系统, SPI, UART等设备用到的中间件, 如果缺少依赖项则会有黄色提示, 点击提示自动定位选中即可, RTX选择的是4.81, 没有选择RTX5, 跟USB中间件貌似有冲突, 编译会出现错误....

接下来就是创建代码分组之类的东西了, 没啥好说的, 根据模板创建main文件, 设置线程堆栈空间等....

CMSIS-RTOS+RTX启动USB模拟U盘真是非常简单, 但是坑比较多, 资料太少, 下面两句即可,

USBD_Initialize(0);
// 等待设备0的连接
USBD_Connect(0);

但是要在RTX_Conf_CM.c中设置两个自定义线程, 总大小为1024, 因为USB有两个线程, 一个核心线程需要512字节空间, 一个USB存储线程也需要512存储空间. 到这里如果硬件正常的话在电脑上就可以识别出U盘来了, 但是不能对U盘进行操作, 因为还要实现USB对存储器的操作, 这个直接用模板添加USB大容量存储器代码即可, 默认为USBD_User_MSC_0.c, 在里面进行初始化以及读写操作即可. SPI设备要注意进行修改对应的读写驱动, 这里要注意的一个坑是Keil中间件里的文件系统对SPI Flash是不支持FAT文件格式的~!~!~!~用的是一种嵌入式文件系统, 根本不是FAT, 我被坑了好久好久...., 所以直接用开源的FATFS方案吧, diskio.c中的读写可直接用于USBD_User_MSC_0.c中的扇区读写, USBD_User_MSC_0.c中的块指的是扇区的意思, 不是存储器中块的意思, 要注意了~!~!

硬件设计中将JTAG引脚PA15当作通用IO口了, 开始没注意, 设置引脚电平总是无效, 很是郁闷, 翻了翻数据手册发现是JTAG口, 需要禁用, 但CMSIS-RTOS中间件没有定义GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE);这个函数, 那就自己找吧, 找到了GPIO_AFConfigure函数, 引脚复用映射设置, GPIO_AFConfigure(AFIO_SWJ_JTAG_NO_SW);这个参数不是禁用SW, 而是禁用JTAG, 真不知道怎么想的, 一共四个相关参数:

  AFIO_SWJ_FULL              = AFIO_FUNC_DEF (24, 7, 0, 0),
  AFIO_SWJ_FULL_NO_NJTRST    = AFIO_FUNC_DEF (24, 7, 1, 0),
  AFIO_SWJ_JTAG_NO_SW        = AFIO_FUNC_DEF (24, 7, 2, 0),
  AFIO_SWJ_NO_JTAG_NO_SW     = AFIO_FUNC_DEF (24, 7, 4, 0),

开始看着哪个都不对啊, 对照数据手册对数据进行挨个拆分, 查看GPIO_AFConfigure函数的实现, 才最终确认应该使用AFIO_SWJ_JTAG_NO_SW这个参数, 然而, 你直接这么调用是没有用的, 查看GPIO_AFConfigure函数代码你就会发现还有个宏定义AFIO_MAPR_SWJ_CFG_VAL需要关注下, 如果没有定义这个宏的话他的值是AFIO_SWJ_FULL, 这就导致了你不管传入什么值, JTAG跟SW都不会被禁用的, 我就在RTE_Components.h中提前进行了该宏的定义

#define AFIO_MAPR_SWJ_CFG_VAL            AFIO_SWJ_JTAG_NO_SW

这样就可以禁用JTAG并保留SW调试了.

PS: 以上这种方式很不安全, 因为文件注释说明是自动生成的, 而且我发现每次重新打开项目会重新生成该文件, 修改的代码会丢失, 所以找到了一个比较安全的方式, 在Keil的项目属性中进行宏定义设置中添加以下定义即可:

AFIO_MAPR_SWJ_CFG_VAL=AFIO_SWJ_JTAG_NO_SW

这样就不需要修改RTE_Components.h文件了.

CMSIS-RTOS + RTX总体来说是很方便的, Keil调试也非常方便, 但是实用资料并不多, 比如说串口在该系统里就不需要使用中断了, 都给你包装好了, 但需要使用线程来接收, 自己摸索的一种接收方式, 也不知道是不是正规方法, 官方也没给出案例, 在这个产品中我都接触不到中断函数, SPI, 定时器等等都给包装好了, 但对我来说长时间没接触还保留着以前的STM32开发的观念, 冲突比较痛苦, 先写这些吧....


CMSIS-RTOS在stm32使用 【代码】CMSIS-RTOS在stm32使用。 阅读详情

相关推荐

Keil RTX5在STM32F103上的实战移植指南:从零开始搭建RTOS环境

本文提供了一份详细的Keil RTX5实时操作系统在STM32F103平台上的实战移植指南。内容涵盖从零搭建开发环境、创建并配置Keil工程、编写多任务应用代码,到关键系统配置与调试的完整流程。通过将LED闪烁分解为不同任务,直观演示了RTOS的多任务调度机制,帮助开发者快速掌握在资源有限的MCU上部署RTX5的核心方法与调试技巧。

weixin_29159127的博客 636

STM32——USB 内部FLASH模拟U盘

前言 本文章使用STM32CubeMX将单片机变成一个小U盘 操作步骤 1.选择单片机型号 我使用的是STM32f103RCT6 2.设置外部高速时钟 3.设置Debug 4.配置USB 、 选择Mass Storage Class 5.配置时钟树 USB设备时钟设为48MHz 6.改变堆栈大小 把堆栈变大,否则无法启动 然后生成代码 7.代码修改 打开usbd_storage_if.c文件,修改 ​ /** * @} ...

liuliyinhezi的博客 7003

Keil芯片包与CMSIS关系详解:以STM32为例说明

深入讲解Keil芯片包与CMSIS之间的协作机制,结合STM32开发实例,阐明两者在嵌入式项目中的关键作用与集成方式。

weixin_36231030的博客 1341

STM32锁住,解开方法

1、按住单片机复位键不松开;2、同时下载程序3、弹出一个窗口,选择NO4、再重新下载程序,即可。

既有随处可栖的江湖,也有追风逐梦的骁勇! 2万+

基于Keil 5的Manage Run-Time Environment快速配置RTX5 RTOS工程实践

本文详细介绍了基于Keil 5的Manage Run-Time Environment(RTE)快速配置RTX5 RTOS的工程实践。通过RTE图形化界面,开发者可高效配置STM32芯片外设、操作系统内核及中间件,自动解决依赖关系,大幅提升开发效率并避免常见配置错误。文章涵盖了从工程创建、关键配置到实战演示的全流程。

salt的博客 696

STM32寄存器设置IO状态设置,实现输入上拉下拉

//1,配置相关引脚的复用功能,使能CAN时钟。 RCC->APB2ENR|=1<<2; //使能PORTA时钟 AFIO->MAPR = AFIO_MAPR_SWJ_CFG_JTAGDISABLE; //关闭JTAG 释放出PB3,PB4,PA15 GPIOA->CRH&=0X0FFFFFFF; //A15 GPIOA->CRH|=0X80000000; //IO状态设置 GPIOA->ODR &=0x7FFF;

sam的博客 2288

【翻译CMSIS_RTOS2 API v2】鸿蒙CMSIS-RTOS2接口之任务(线程)管理

RTOS2中文接口

hjh_cos 2674

CMSIS-RTOS-RTX5官网教程学习文档

keil 官方推出的RTX5学习教程文档,目前是英文版本,教程是基于RTX5版本(之前的RTX4版本后续已经不再更新); RTX5的汽车级,工业级,医疗和铁路安全认证已经通过: ISO 26262 (ASIL D) 汽车级最高安全认证 IEC 61508 (SIL 3) 工业级认证 IEC 62304 (Class C) 医疗认证 EN 50128 (SIL 4) 运输/铁路安全认证 支持的内核: Cortex-M0/M0+ Cortex-M23 Cortex-M3 Cortex-M4 Cortex-M7 Cortex-M33/M35 Cortex-A系列 软件Apache2.0授权,几乎随意商用;Github开源地址:https://github.com/ARM-software/CMSIS_5 如开发环境为MDK,移植方法更为简单。

STM32F407+CubeMX+Keil上移植RTX5实时系统

文章目录一、前言二、CubeMX2.1、RCC 与 Clock Configuration2.2、SYS2.3、GPIO2.4、Project Manager三、Keil3.1、Target3.2、Output3.3、C/C++(AC6)3.4、Debug3.5、模板代码(main.c)3.6、开始移植RTX53.6、隔离Device上的文件四、代码4.1、main.h4.2、main.c五、DEBUG5.1、RTX RTOS六、细节补充6.1、移植Event Recorder调试工具 一、前言 STM3

wallace89的博客 6748

使用Jacob实现将Word文件转换为Pdf文件

如果是首次使用 jacob,建议先直接从 github上下载 zip包,因为在实现Word转Pdf的时候,不仅需要用到 jacob.jar,还需要 jacob.dll 库,而zip包中都有。官方使用文档可以参考:https://github.com/freemansoft/jacob-project/blob/main/docs/UsingJacob.md。// 如果安装的是微软的 Office,需要使用 Word.Application。

qq_41672950的博客 750

Honeywell EPKS 核心功能块组态与执行调度实战解析

本文深入解析Honeywell EPKS系统的核心功能块组态与执行调度技术,涵盖控制模块(CM)、顺序控制模块(SCM)和输入输出模块(IOM)的配置方法。通过实战案例分享执行顺序(ORDERINCM)和CEE执行周期的优化策略,帮助工程师提升工业自动化系统的控制精度和运行效率。

weixin_28724319的博客 414

STM32H750 KEIL CMSIS RTOS2工程的的建立

STM32H750 KEIL CMSIS RTOS2工程的的建立

devicenet的博客 2710

Python实战:5分钟搞定VCF文件中每个样本的SNP统计(附bcftools安装指南)

本文介绍了三种高效统计VCF文件中每个样本SNP数量的Python方法,包括原生解析、结合bcftools的推荐方案以及使用PyVCF3专业库。特别推荐bcftools结合Python的方法,适用于中大型VCF文件,显著提升处理效率。文章还提供了bcftools安装指南和进阶统计技巧,帮助生物信息学分析人员快速完成SNP统计任务。

weixin_30555125的博客 494

CMSIS-RTOS 和 RTX 区别

特性CMSIS-RTOSRTX定位标准化接口,允许多个RTOS实现CMSIS-RTOS的实现,专为Keil MDK优化实现不提供RTOS实现,只定义API提供具体的RTOS实现,基于CMSIS-RTOS标准工具链支持可与多种工具链配合使用,如IAR、GCC等主要与Keil MDK工具链集成调试和集成调试和集成依赖于所选RTOS实现提供与Keil调试工具的深度集成,易于调试和分析适用范围更通用,适用于不同RTOS和不同开发环境主要针对Keil环境,适合需要高集成度的应用。

分享自己总结的知识与遇见的问题,希望对大家有用。 731

【近源攻击】badusb制作

BadUSB是利用伪造HID设备执行攻击载荷的一种攻击方式。HID(Human InterfaceDevice)设备通常指的就是键盘鼠标等与人交互的设备,用户插入BadUSB,就会自动执行预置在固件中的恶意代码。BadUsb插入后,会模拟键盘鼠标对电脑进行操作,通过这些操作打开电脑的命令终端,并执行一条命令,这条命令将从指定网址下载其他代码并于后台静默运行。这些代码功能包括:窃取信息、反弹shell、发送邮件等,从而实现控制目标机或者窃取信息的目的。

qinjilll的博客 2549

华为OD机试双机位C卷-流水线(Py/Java/C/C++/Js/Go)

华为OD机试双机位C卷 流水线,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解。华为OD机试 - 流水线。

qq_45776114的博客 2266

不需要移植,在keil上打个勾就让stm32跑起操作系统

初识keil5,不得不说自动化配置的强大,建个新工程基本不需要各种粘贴复制文件夹,以前一直担心直接拷贝模板工程会同时拷贝很多垃圾文件,现在就完全不需要担心了。keil5的使用这里不赘述,这次的主题主要是仅仅使用keil软件就让STM32跑起操作系统,不需要所谓的移植。说起让MCU跑操作系统,总让新手望而生畏,让高手觉得没必要,浪费资源,其实如果给MCU添加操作系统就像添加一个GPIO外设一样简单,

不走寻常路 1万+

YOLOv8多传感器融合技术——毫米波雷达融合技术详解

本文介绍了YOLOv8与毫米波雷达融合技术在自动驾驶系统中的应用。毫米波雷达具有全天候工作、测距测速精准等优势,但存在分辨率低等局限。通过融合YOLOv8的视觉检测能力,可显著提升系统在恶劣环境下的感知性能。文章详细阐述了融合实现方法,包括雷达数据处理、目标投影匹配、置信度融合等关键技术,并提供了评估指标和应用场景分析。这种多传感器融合方案能有效弥补单一传感器的不足,为自动驾驶提供更可靠的环境感知能力,是实现高级别自动驾驶的重要技术支撑。

u010117029的博客 175

AT32F403A替代STM32F103之移植CMSIS RTOS V1封装层-CMSIS RTX

最近意外的发现一款优秀的国产芯片——雅特力的AT32F403A 以下是摘自雅特力官网: 雅特力科技AT32F403A系列高效能微控制器,搭载32位ARM Cortex-M4内核,配合先进制程有效提升整体效能达240MHz的运算速度。内建的单精度浮点运算单元(FPU)及数字信号处理器(DSP),搭配丰富的外设及灵活的时钟控制机制,能满足多种领域应用。完善的内存设计,最高可支持1MB闪存存储器(Flash)及224KB随机存取存储器(SRAM),其闪存存储器执行零等待的优异表现,超越业界同级芯片水平.

qq_19947653的博客 3808

【量化入门】Tushare库获取公募基金的历史净值

在本文中,我们将介绍如何使用Python的Tushare库获取公募基金的历史净值。

木头大左的博客 1143

Open3D——点云构建Delaunay三角网【2026最新版】

点云构建Delaunay三角网

点云侠的博客 8367

基于STM32F767的Keil CMSIS组件使用——文件系统之USB

基于ARM CMSIS组件RTOS、文件系统,实现对USB存储设备的控制

qq_39820210的博客 2848

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

为什么你的STM32项目需要RTX?从裸机编程到RTOS任务调度的进阶之路

本文探讨了STM32项目中从裸机编程转向RTOS任务调度的重要性,重点介绍了Keil RTX在STM32F103上的应用优势。通过对比裸机编程的局限性和RTOS的核心优势,详细解析了RTX的移植步骤、性能优化及进阶技巧,帮助开发者提升项目实时性和开发效率。

ttt77的博客 592

stm32使用Keil创建RTOS工程

芯片选择STM32,使用Keil创建RTOS。直接使用Keil自带的RTX5,简单方便。用的API函数都一样。将void PendSV_Handler(void),void SysTick_Handler(void),void SVC_Handler(void) 这3个中断都屏蔽掉。1.在Manage Run-Time Environment上点击,添加为RTOS2(API),我这里选择了Source。分别创建2个线程 ,句柄分别为threadID_LED和threadID_Start。

m0_37202877的博客 1111

STM32H743+Cube-Keil上移植RTX5实时系统

文章目录一、前言二、CubeMX2.1、RCC 与 Clock Configuration2.2、SYS2.3、GPIO2.4、DEBUG2.5、Project Manager三、Keil3.1、Target3.2、Output3.3、模板代码(main.c)3.4、开始移植RTX5四、代码4.1、main.h4.2、main.c 一、前言 在CM内核上,RTX5好像已经无敌了。为此,学习如何在STM32H743上完成RTX5的移植。 我使用的Keil版本: 一定要使用最新的CMSIS软件包。下载地址:h

wallace89的博客 2963

聊聊CMSIS-RTOS是什么东东

关注+星标公众号,不错过精彩内容素材来源 |网络我们之前分享的文章《Cortex-M软件接口标准CMSIS有哪些重要内容》中描述了CMSIS主要内容:CMSIS-RTOS:主要用于RTO...

strongerHuang 2944
上一篇: 基于libVlc开发Winform视频播放器
下一篇: Keil的几个插件
路过&
博客等级 码龄19年 126粉丝 91原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值