【STM32F429】第4章 RL-USB移植(MDK AC5)

2023-12-09 11:40
文章标签 移植 usb rl mdk stm32f429 ac5

本文主要是介绍【STM32F429】第4章 RL-USB移植(MDK AC5),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

论坛原始地址(持续更新):http://www.armbbs.cn/forum.php?mod=viewthread&tid=99710 

第4章   RL-USB移植(MDK AC5)

本章教程为大家讲解RL-USB协议栈的AC5编译器移植。

目录

第4章   RL-USB移植(MDK AC5)

4.1   初学者重要提示

4.2   移植RL-USB整体说明

4.3   了解RL-USB模板框架设计

4.4   第1步,安装指定的MDK软件包

4.5   第2步,准备一个工程模板

4.6   第3步,添加RL-USB并配置

4.6.1      RL-USB相关文件和驱动

4.6.2      USB的配置文件RTE_Device.h

4.6.3      RL-USB配置

4.7   第4步,修改文件includes

4.8   第5步,添加两个应用文件

4.9   第6步,创建应用任务(重要,注意启动任务)

4.10 常见移植错误总结:

4.11 使用的MicroUSB接口并注意跳线帽设置

4.12 实验例程

4.13 总结


 

4.1   初学者重要提示

  1.  学习RL-USB移植前,务必保证已经熟练掌握了RTX5内核的移植,因为本章节的移植要用到RTX5移植的一些操作方法:http://www.armbbs.cn/forum.php?mod=viewthread&tid=93149 。
  2.  STM32H7使用MDK RTE环境添加RTX5和RL-USB,需要强制运行一次STM32CubeMX,因为H7已经没有配套RTE经典添加方式,而STM32F4是支持经典方式的,所以无需运行STM32CubeMX,
  3.  本章配套例子使用STM32内部RAM模拟一个U盘,使用的MicroUSB接口。

4.2   移植RL-USB整体说明

移植之前,有必要对移植过程有个整体的认识:

  •   第1步,准备一个RTX5工程模板。
  •   第2步,移植RL-USB。
    •   移植RL-USB是采用MDK的RTE环境直接添加。
  •   第3步,处理HAL库时间基准等。
  •   第4步,创建应用。

总的来说,这4步就可以完成移植,下面将STM32F4的移植步骤和注意事项为大家做个说明。

4.3   了解RL-USB模板框架设计

移植RL-USB前,我们优先了解下移植好的RL-USB内核模板,方面大家后面移植:

 

框图如下:

 

4.4   第1步,安装指定的MDK软件包

移植新版RL-USB需要大家下载当前最新的MDK软件包版本(如果有最新版,推荐大家用最新版):

  •   CMSIS 软件包使用当前最新的:V5.7.0
  •   STM32H7使用当前最新的:V2.6.0
  •   STM32F4使用当前最新的:V2.15.0
  •   STM32CubeMX使用当前最新的:V6.0.x
  •   ARM_Compiler使用当前最新的:V1.6.3
  •   RTX5中间件使用当前最新的:V7.12

这些软件包的安装在STM32F4用户手册的第2章2.3小节有详细说明。

http://www.armbbs.cn/forum.php?mod=viewthread&tid=93255 。

  •   所有这些软件包汇总下载地址:

http://www.armbbs.cn/forum.php?mod=viewthread&tid=100490 。

不管以后MDK的软件包版本如何升级,当前的软件包版本和以后的新版是可以同时安装的,也就是说可以安装多个不同版本,在这里可以选择指定版本:

 

4.5   第2步,准备一个工程模板

首先准备好一个简单的裸机工程模板,已经为大家做好:V6-4001_RTX5 Kernal Template,准备好的工程模板如下图所示(大家也可以制作其它任意的工程模板,不限制):

 

4.6   第3步,添加RL-USB并配置

看这部分内容前,务必保证已经熟练掌握了RTX5教程移植章节的添加方法。

4.6.1      RL-USB相关文件和驱动

CMSIS-Driver分组中添加USB Device驱动:

 

使用经典配置方式:

添加RL-USB并配置:

借助MDK RTE自动解决警告问题:

我们需要的都已经添加好,效果如下:

 

下面的文件隔离出来(隔离方法看RTX5教程移植章节):

 

4.6.2      USB的配置文件RTE_Device.h

配置使用Full USB:

 

4.6.3      RL-USB配置

添加完毕RL-USB所需的文件后,就是配置RL-USB,具体每个配置所代表的含义,会在后面章节专为大家讲解。

USBD_Config_0.c文件配置:

 

注意这个文件里面还有一个RL-USB内核线程的优先级配置,当前是将其配置为:

osPriorityAboveNormal:

 

USBD_Config_MSC_0.h文件的配置如下:

 

这个文件里面有一个USB MSC任务的优先级配置,当前是将其配置为:osPriorityAboveNormal。

 

4.7   第4步,修改文件includes

添加USB头文件:#include "rl_usb.h"

#ifndef  __INCLUDES_H__
#define  __INCLUDES_H__/*
*********************************************************************************************************
*                                         标准库
*********************************************************************************************************
*/
#include  <stdarg.h>
#include  <stdio.h>
#include  <stdlib.h>
#include  <math.h>/*
*********************************************************************************************************
*                                         其它库
*********************************************************************************************************
*//*
*********************************************************************************************************
*                                           OS和系统库
*********************************************************************************************************
*/
#include "cmsis_os2.h"
#include "rl_usb.h"/*
*********************************************************************************************************
*                                           宏定义
*********************************************************************************************************
*//*
*********************************************************************************************************
*                                        APP / BSP
*********************************************************************************************************
*/
#include "bsp.h"/*
*********************************************************************************************************
*                                          变量和函数
*********************************************************************************************************
*/
/* 方便RTOS里面使用 */
extern void SysTick_ISR(void);#define bsp_ProPer1ms  SysTick_ISR#endif/***************************** 安富莱电子 www.armfly.com (END OF FILE) *********************************/

4.8   第5步,添加两个应用文件

为了验证移植的USB是否成功,我们这里使用内部RAM模拟一个U盘。需要添加的两个文件在MDK安装目录里面。方便起见,大家可以直接从本章配套例子里面复制粘贴(这两个文件位于User文件夹),添加后的效果如下:

 

4.9   第6步,创建应用任务(重要,注意启动任务)

应用程序比较简单,大家可以直接复制本章教程配置例子的main.c文件中的内容到自己工程里面测试。主要创建了如下几个任务:

AppTaskUserIF任务   : 按键消息处理。

AppTaskLED任务      : LED闪烁。

AppTaskMsgPro任务   : 消息处理,暂未使用。

AppTaskStart任务    : 启动任务,也是最高优先级任务,这里实现按键扫描。

osRtxTimerThread任务: 定时器任务,暂未使用。

任务栈大小和任务控制块定义如下:

/*
**********************************************************************************************************变量
**********************************************************************************************************
*/
/* 任务的属性设置 */
const osThreadAttr_t ThreadStart_Attr = 
{/* 未使用 */
//    .cb_mem = &worker_thread_tcb_1,
//    .cb_size = sizeof(worker_thread_tcb_1),
//    .stack_mem = &worker_thread_stk_1[0],
//    .stack_size = sizeof(worker_thread_stk_1),
//    .priority = osPriorityAboveNormal,
//    .tz_module = 0.name = "osRtxStartThread",.attr_bits = osThreadDetached, .priority = osPriorityNormal4,.stack_size = 2048,
};const osThreadAttr_t ThreadMsgPro_Attr = 
{.name = "osRtxMsgProThread",.attr_bits = osThreadDetached, .priority = osPriorityNormal3,.stack_size = 1024,
};const osThreadAttr_t ThreadLED_Attr = 
{.name = "osRtxLEDThread",.attr_bits = osThreadDetached, .priority = osPriorityNormal2,.stack_size = 512,
};const osThreadAttr_t ThreadUserIF_Attr = 
{.name = "osRtxThreadUserIF",.attr_bits = osThreadDetached, .priority = osPriorityNormal1,.stack_size = 1024,
};

任务创建:

/*
*********************************************************************************************************
*    函 数 名: main
*    功能说明: 标准c程序入口。
*    形    参: 无
*    返 回 值: 无
*********************************************************************************************************
*/
int main (void) 
{    /* HAL库,MPU,Cache,时钟等系统初始化 */System_Init();/* 内核开启前关闭HAL的时间基准 */HAL_SuspendTick();/* 内核初始化 */osKernelInitialize();                                  /* 创建启动任务 */ThreadIdStart = osThreadNew(AppTaskStart, NULL, &ThreadStart_Attr);  /* 开启多任务 */osKernelStart();while(1);
}/*
*********************************************************************************************************
*    函 数 名: AppTaskCreate
*    功能说明: 创建应用任务
*    形    参: 无
*    返 回 值: 无
*********************************************************************************************************
*/
static void AppTaskCreate (void)
{ThreadIdTaskMsgPro = osThreadNew(AppTaskMsgPro, NULL, &ThreadMsgPro_Attr);  ThreadIdTaskLED = osThreadNew(AppTaskLED, NULL, &ThreadLED_Attr);  ThreadIdTaskUserIF = osThreadNew(AppTaskUserIF, NULL, &ThreadUserIF_Attr);  
}

这里我们重点看下启动任务,主要做了五个工作:

  •   外设初始化bsp_Init。
  •   任务创建AppTaskCreate。
  •   初始化USB并连接电脑。
  •   需要周期性处理的程序bsp_ProPer1ms,对应裸机工程调用的SysTick_ISR。这个的实现非常重要,这样之前裸机里面使用的API,就可以直接在RTX5里面直接调用。
/*
*********************************************************************************************************
*    函 数 名: AppTaskStart
*    功能说明: 启动任务,这里用作BSP驱动包处理。
*    形    参: 无
*    返 回 值: 无
*   优 先 级: osPriorityHigh4  
*********************************************************************************************************
*/
void AppTaskStart(void *argument)
{const uint16_t usFrequency = 1; /* 延迟周期 */uint32_t tick;/* 初始化外设 */HAL_ResumeTick();bsp_Init();/* 创建任务 */AppTaskCreate();USBD_Initialize(0U);  /* 初始化USB设备 */USBD_Connect   (0U);  /* USB设备连接 *//* 获取当前时间 */tick = osKernelGetTickCount(); while(1){/* 需要周期性处理的程序,对应裸机工程调用的SysTick_ISR */bsp_ProPer1ms();/* 相对延迟 */tick += usFrequency;                          osDelayUntil(tick);}
}

4.10 常见移植错误总结:

编译后提示如下错误:error: 'Driver_USBD.h' file not found。

解决办法是将新版 CMSIS 软件包里面 Driver 文件夹全部复制到自己所创建工程里面的 CMSIS文件夹下,并添加路径:

 

4.11 使用的MicroUSB接口并注意跳线帽设置

本周教程移植的例子使用内部RAM模拟了一个U盘,效果如下:

注意使用的是MicroUSB接口:

 

注意板子左下角跳线帽的设置:

 

这里是用于选择CAN1 TX使用PB9或者PA12引脚,CAN1 RX使用PB8或者PA11引脚。大家这里可以什么都不接,或者CAN1 TX通过跳线帽短接PA12,CAN1 RX通过跳线帽短接PA11。切记不可以短接到PA12和PA11引脚上,USB要使用这两个引脚。

4.12 实验例程

本章节配套了如下几个例子供大家移植参考:

  •   V6-4001_RTX5 Kernal Template

RTX5内核模板。

  •   V6-4002_RL-USB Template

RL-USB工程内核模板,使用内部RAM模拟了一个U盘。

 

MDK进入调试状态后,选择周期更新:

 

然后打开调试组件,注意和RTX4的调试组件位置不同:

然后点击MDK的全速运行,

 

至此,就可以动态实时查看RL-USB的运行状态:

 

4.13 总结

本章节为大家讲解了RL-USB 在MDK AC5上的移植方法,移植涉及到的知识点比较多,初学的话,建议实际动手操作一遍。

 

这篇关于【STM32F429】第4章 RL-USB移植(MDK AC5)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:https://blog.csdn.net/Simon223/article/details/113942794
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/473641

相关文章

FreeRTOS-基本介绍和移植STM32

FreeRTOS-基本介绍和STM32移植 一、裸机开发和操作系统开发介绍二、任务调度和任务状态介绍2.1 任务调度2.1.1 抢占式调度2.1.2 时间片调度 2.2 任务状态 三、FreeRTOS源码和移植STM323.1 FreeRTOS源码3.2 FreeRTOS移植STM323.2.1 代码移植3.2.2 时钟中断配置 一、裸机开发和操作系统开发介绍 裸机:前后台系

Usb Audio Device Descriptor(10) Hid Device

对于 Standard Interface Descriptor, 当 bInterfaceClass=0x03时,即为HID设备。Standard Interface Descriptor如下 struct usb_standard_interface_descriptor{U8 bLength; /*Size of this descriptor in bytes*/U8 bDescrip

Android rk3399 UAC(USB Audio)开发笔记

一、UAC有1.0和2.0,因Windows对2.0支持不好,我使用的是UAC1.0驱动 内核配置:CONFIG_USB_CONFIGFS_F_UAC1          ---这个宏配置无需物理codec,使用虚拟 alsa codec  驱动路径:"kernel\drivers\usb\gadget\function\f_uac1.c" 内核配置:CONFIG_USB_CONFIGFS_

RT-Thread(Nano版本)的快速移植(基于NUCLEO-F446RE)

目录 概述 1 RT-Thread 1.1 RT-Thread的版本  1.2 认识Nano版本 2 STM32F446U上移植RT-Thread  2.1 STM32Cube创建工程 2.2 移植RT-Thread 2.2.1 安装RT-Thread Packet  2.2.2 加载RT-Thread 2.2.3 匹配相关接口 2.2.3.1 初次编译代码  2.2.3.

多款式随身WiFi如何挑选,USB随身WiFi、无线电池随身WiFi、充电宝随身WiFi哪个好?优缺点分析!

市面上的随身WiFi款式多样琳琅满目,最具代表性的就是USB插电款、无线款和充电宝款。今天就来用一篇文章分析一下这三种款式的优缺点。 USB插电款 优点:便宜,无需充电,在有电源的地方可以随时随地插电使用,比如中兴的USB随身WiFi。 缺点:无电源的情况下,无法带出门使用,部分品牌考虑到这个问题,会配备一个充电仓,这个充电仓相对来说就有点累赘了。网速上也不太稳定,波动比较大。

基于FPGA的开源项目:FOC/SHA/USB/JPEG等

文章目录 [1. USB 1.1控制器](https://github.com/WangXuan95/FPGA-USB-Device)[2. FOC控制算法](https://github.com/WangXuan95/FPGA-FOC)[3. BSV高级硬件描述语言入门指南](https://github.com/WangXuan95/BSV_Tutorial_cn)[4. 基于XDMA的

libmad音频解码库-Linux交叉编译移植

下载并解压libmad-0.15.1b.tar.gz 下载链接:https://downloads.sourceforge.net/mad/libmad-0.15.1b.tar.gz $tar -xvf libmad-0.15.1b.tar.gz$cd libmad-0.15.1b 1、先执行下面的命令:这条命令是为了适配高版本的gcc,因为高版本的gcc已经将-fforce-mem去除了:

arm linux lua移植

lua: lua home 1.下载lua源码 lua下载 lua-5.3.4.tar.gz 2.解压: tar xvf lua-5.3.4.tar.gz 3.修改makefile and luaconf.h $修改 lua-5.3.4/Makefile #INSTALL_TOP= /usr/local INSTALL_TOP= $(shell pwd)/out #修改安装目录(当前目录/o

s3c2440---PWM使用之蜂鸣器驱动移植

一、蜂鸣器驱动介绍 1.1.什么是蜂鸣器               蜂鸣器是一种简单的声响发生器,常用于电子产品中作为警示或提醒作用。其基本原理是通过交替改变直流电的电压方向来产生声音,一般使用交替电流产生声音会比较稳定。 1.2.蜂鸣器的类别 1.有源蜂鸣器 1)结构原理 有源蜂鸣器内部自带振荡源,只需接通电源即可发声。内部电路会自动产生一定频率的振荡信号,从而驱动蜂鸣器发声。

关于小米手机USB传输稍大点的文件老中断的问题解决方法!

关于小米手机USB传输稍大点的文件老中断的问题解决方法! 这是一个很痛苦的事情,当你传输大文件的时候,传输到一半就会莫名其妙的中断,拔插数据线很多次以后,好不容易没准可以成功传输一次。 后来使用了360的手机助手,从调试模式传输文件,虽然不会中断,但是慢的要死。 最后我看到手机插上后手机提示 有3种模式:仅限充电 传输文件(MTP) 传输照片(PTP)。当然我们选择传输文件是没戏了,会中