From 2c24b54bf103cabd01890dc1a4f2583b1fadf64d Mon Sep 17 00:00:00 2001 From: sakimisu <1203593632@qq.com> Date: Sun, 15 Jan 2023 16:51:28 +0800 Subject: [PATCH] split tx_rx_thread into tx_thread and rx_thread --- cherryusb_config_template.h | 22 +- core/usbd_core.c | 67 +++- .../stm32f429igt6/Core/Inc/FreeRTOSConfig.h | 312 ++++++++++++++++++ .../stm32f429igt6/Core/Inc/usb_config.h | 58 ++-- .../usb_device/stm32f429igt6/Core/Src/main.c | 2 +- 5 files changed, 416 insertions(+), 45 deletions(-) create mode 100644 demo/stm32/usb_device/stm32f429igt6/Core/Inc/FreeRTOSConfig.h diff --git a/cherryusb_config_template.h b/cherryusb_config_template.h index adec67eb..972ada04 100644 --- a/cherryusb_config_template.h +++ b/cherryusb_config_template.h @@ -44,14 +44,24 @@ /* Enable test mode */ // #define CONFIG_USBDEV_TEST_MODE -//#define CONFIG_USBDEV_TX_RX_THREAD +//#define CONFIG_USBDEV_TX_THREAD +//#define CONFIG_USBDEV_RX_THREAD -#ifdef CONFIG_USBDEV_TX_RX_THREAD -#ifndef CONFIG_USBDEV_TX_RX_PRIO -#define CONFIG_USBDEV_TX_RX_PRIO 4 +#ifdef CONFIG_USBDEV_TX_THREAD +#ifndef CONFIG_USBDEV_TX_PRIO +#define CONFIG_USBDEV_TX_PRIO 4 #endif -#ifndef CONFIG_USBDEV_TX_RX_STACKSIZE -#define CONFIG_USBDEV_TX_RX_STACKSIZE 2048 +#ifndef CONFIG_USBDEV_TX_STACKSIZE +#define CONFIG_USBDEV_TX_STACKSIZE 2048 +#endif +#endif + +#ifdef CONFIG_USBDEV_RX_THREAD +#ifndef CONFIG_USBDEV_RX_PRIO +#define CONFIG_USBDEV_RX_PRIO 4 +#endif +#ifndef CONFIG_USBDEV_RX_STACKSIZE +#define CONFIG_USBDEV_RX_STACKSIZE 2048 #endif #endif diff --git a/core/usbd_core.c b/core/usbd_core.c index cd91ea00..cbe7a97b 100644 --- a/core/usbd_core.c +++ b/core/usbd_core.c @@ -6,7 +6,7 @@ * SPDX-License-Identifier: Apache-2.0 */ #include "usbd_core.h" -#ifdef CONFIG_USBDEV_TX_RX_THREAD +#if defined(CONFIG_USBDEV_TX_THREAD) || defined(CONFIG_USBDEV_RX_THREAD) #include "usb_osal.h" #endif @@ -72,9 +72,13 @@ static struct usb_bos_descriptor *bos_desc; struct usbd_tx_rx_msg tx_msg[USB_EP_IN_NUM]; struct usbd_tx_rx_msg rx_msg[USB_EP_OUT_NUM]; -#ifdef CONFIG_USBDEV_TX_RX_THREAD -usb_osal_mq_t usbd_tx_rx_mq; -usb_osal_thread_t usbd_tx_rx_thread; +#if defined(CONFIG_USBDEV_TX_THREAD) +usb_osal_mq_t usbd_tx_mq; +usb_osal_thread_t usbd_tx_thread; +#endif +#if defined(CONFIG_USBDEV_RX_THREAD) +usb_osal_mq_t usbd_rx_mq; +usb_osal_thread_t usbd_rx_thread; #endif static void usbd_class_event_notify_handler(uint8_t event, void *arg); @@ -1094,36 +1098,55 @@ void usbd_event_ep0_out_complete_handler(uint8_t ep, uint32_t nbytes) void usbd_event_ep_in_complete_handler(uint8_t ep, uint32_t nbytes) { -#ifndef CONFIG_USBDEV_TX_RX_THREAD +#ifndef CONFIG_USBDEV_TX_THREAD if (tx_msg[ep & 0x7f].cb) { tx_msg[ep & 0x7f].cb(ep, nbytes); } #else tx_msg[ep & 0x7f].nbytes = nbytes; - usb_osal_mq_send(usbd_tx_rx_mq, (uint32_t)&tx_msg[ep & 0x7f]); + usb_osal_mq_send(usbd_tx_mq, (uint32_t)&tx_msg[ep & 0x7f]); #endif } void usbd_event_ep_out_complete_handler(uint8_t ep, uint32_t nbytes) { -#ifndef CONFIG_USBDEV_TX_RX_THREAD +#ifndef CONFIG_USBDEV_RX_THREAD if (rx_msg[ep & 0x7f].cb) { rx_msg[ep & 0x7f].cb(ep, nbytes); } #else rx_msg[ep & 0x7f].nbytes = nbytes; - usb_osal_mq_send(usbd_tx_rx_mq, (uint32_t)&rx_msg[ep & 0x7f]); + usb_osal_mq_send(usbd_rx_mq, (uint32_t)&rx_msg[ep & 0x7f]); #endif } -#ifdef CONFIG_USBDEV_TX_RX_THREAD -static void usbdev_tx_rx_thread(void *argument) +#ifdef CONFIG_USBDEV_TX_THREAD +static void usbdev_tx_thread(void *argument) { struct usbd_tx_rx_msg *msg; int ret; while (1) { - ret = usb_osal_mq_recv(usbd_tx_rx_mq, (uint32_t *)&msg, 0xffffffff); + ret = usb_osal_mq_recv(usbd_tx_mq, (uint32_t *)&msg, 0xffffffff); + if (ret < 0) { + continue; + } + + if (msg->cb) { + msg->cb(msg->ep, msg->nbytes); + } + } +} +#endif + +#ifdef CONFIG_USBDEV_RX_THREAD +static void usbdev_rx_thread(void *argument) +{ + struct usbd_tx_rx_msg *msg; + int ret; + + while (1) { + ret = usb_osal_mq_recv(usbd_rx_mq, (uint32_t *)&msg, 0xffffffff); if (ret < 0) { continue; } @@ -1199,13 +1222,23 @@ bool usb_device_is_configured(void) int usbd_initialize(void) { -#ifdef CONFIG_USBDEV_TX_RX_THREAD - usbd_tx_rx_mq = usb_osal_mq_create(32); - if (usbd_tx_rx_mq == NULL) { +#ifdef CONFIG_USBDEV_TX_THREAD + usbd_tx_mq = usb_osal_mq_create(16); + if (usbd_tx_mq == NULL) { return -1; } - usbd_tx_rx_thread = usb_osal_thread_create("usbd_tx_rx", CONFIG_USBDEV_TX_RX_STACKSIZE, CONFIG_USBDEV_TX_RX_PRIO, usbdev_tx_rx_thread, NULL); - if (usbd_tx_rx_thread == NULL) { + usbd_tx_thread = usb_osal_thread_create("usbd_tx", CONFIG_USBDEV_TX_STACKSIZE, CONFIG_USBDEV_TX_PRIO, usbdev_tx_thread, NULL); + if (usbd_tx_thread == NULL) { + return -1; + } +#endif +#ifdef CONFIG_USBDEV_RX_THREAD + usbd_rx_mq = usb_osal_mq_create(16); + if (usbd_rx_mq == NULL) { + return -1; + } + usbd_rx_thread = usb_osal_thread_create("usbd_rx", CONFIG_USBDEV_RX_STACKSIZE, CONFIG_USBDEV_RX_PRIO, usbdev_rx_thread, NULL); + if (usbd_rx_thread == NULL) { return -1; } #endif @@ -1217,7 +1250,7 @@ int usbd_deinitialize(void) usbd_core_cfg.intf_offset = 0; usb_slist_init(&usbd_intf_head); usb_dc_deinit(); -#ifdef CONFIG_USBDEV_TX_RX_THREAD +#if defined(CONFIG_USBDEV_TX_THREAD) || defined(CONFIG_USBDEV_RX_THREAD) #endif return 0; } diff --git a/demo/stm32/usb_device/stm32f429igt6/Core/Inc/FreeRTOSConfig.h b/demo/stm32/usb_device/stm32f429igt6/Core/Inc/FreeRTOSConfig.h new file mode 100644 index 00000000..5226adc9 --- /dev/null +++ b/demo/stm32/usb_device/stm32f429igt6/Core/Inc/FreeRTOSConfig.h @@ -0,0 +1,312 @@ +/* + FreeRTOS V9.0.0 - Copyright (C) 2016 Real Time Engineers Ltd. + All rights reserved + + VISIT http://www.FreeRTOS.org TO ENSURE YOU ARE USING THE LATEST VERSION. + + This file is part of the FreeRTOS distribution. + + FreeRTOS is free software; you can redistribute it and/or modify it under + the terms of the GNU General Public License (version 2) as published by the + Free Software Foundation >>>> AND MODIFIED BY <<<< the FreeRTOS exception. + + *************************************************************************** + >>! NOTE: The modification to the GPL is included to allow you to !<< + >>! distribute a combined work that includes FreeRTOS without being !<< + >>! obliged to provide the source code for proprietary components !<< + >>! outside of the FreeRTOS kernel. !<< + *************************************************************************** + + FreeRTOS is distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS + FOR A PARTICULAR PURPOSE. Full license text is available on the following + link: http://www.freertos.org/a00114.html + + *************************************************************************** + * * + * FreeRTOS provides completely free yet professionally developed, * + * robust, strictly quality controlled, supported, and cross * + * platform software that is more than just the market leader, it * + * is the industry's de facto standard. * + * * + * Help yourself get started quickly while simultaneously helping * + * to support the FreeRTOS project by purchasing a FreeRTOS * + * tutorial book, reference manual, or both: * + * http://www.FreeRTOS.org/Documentation * + * * + *************************************************************************** + + http://www.FreeRTOS.org/FAQHelp.html - Having a problem? Start by reading + the FAQ page "My application does not run, what could be wrong?". Have you + defined configASSERT()? + + http://www.FreeRTOS.org/support - In return for receiving this top quality + embedded software for free we request you assist our global community by + participating in the support forum. + + http://www.FreeRTOS.org/training - Investing in training allows your team to + be as productive as possible as early as possible. Now you can receive + FreeRTOS training directly from Richard Barry, CEO of Real Time Engineers + Ltd, and the world's leading authority on the world's leading RTOS. + + http://www.FreeRTOS.org/plus - A selection of FreeRTOS ecosystem products, + including FreeRTOS+Trace - an indispensable productivity tool, a DOS + compatible FAT file system, and our tiny thread aware UDP/IP stack. + + http://www.FreeRTOS.org/labs - Where new FreeRTOS products go to incubate. + Come and try FreeRTOS+TCP, our new open source TCP/IP stack for FreeRTOS. + + http://www.OpenRTOS.com - Real Time Engineers ltd. license FreeRTOS to High + Integrity Systems ltd. to sell under the OpenRTOS brand. Low cost OpenRTOS + licenses offer ticketed support, indemnification and commercial middleware. + + http://www.SafeRTOS.com - High Integrity Systems also provide a safety + engineered and independently SIL3 certified version for use in safety and + mission critical applications that require provable dependability. + +*/ + + +#ifndef FREERTOS_CONFIG_H +#define FREERTOS_CONFIG_H + +#include "stm32f4xx_hal.h" + +//针对不同的编译器调用不同的stdint.h文件 +#if defined(__ICCARM__) || defined(__CC_ARM) || defined(__GNUC__) + #include + extern uint32_t SystemCoreClock; +#endif + +//断言 + +#define configASSERT(x) +/************************************************************************ + * FreeRTOS基础配置配置选项 + *********************************************************************/ +/* 置1:RTOS使用抢占式调度器;置0:RTOS使用协作式调度器(时间片) + * + * 注:在多任务管理机制上,操作系统可以分为抢占式和协作式两种。 + * 协作式操作系统是任务主动释放CPU后,切换到下一个任务。 + * 任务切换的时机完全取决于正在运行的任务。 + */ +#define configUSE_PREEMPTION 1 + +//1使能时间片调度(默认式使能的) +#define configUSE_TIME_SLICING 1 + +/* 某些运行FreeRTOS的硬件有两种方法选择下一个要执行的任务: + * 通用方法和特定于硬件的方法(以下简称“特殊方法”)。 + * + * 通用方法: + * 1.configUSE_PORT_OPTIMISED_TASK_SELECTION 为 0 或者硬件不支持这种特殊方法。 + * 2.可以用于所有FreeRTOS支持的硬件 + * 3.完全用C实现,效率略低于特殊方法。 + * 4.不强制要求限制最大可用优先级数目 + * 特殊方法: + * 1.必须将configUSE_PORT_OPTIMISED_TASK_SELECTION设置为1。 + * 2.依赖一个或多个特定架构的汇编指令(一般是类似计算前导零[CLZ]指令)。 + * 3.比通用方法更高效 + * 4.一般强制限定最大可用优先级数目为32 + * 一般是硬件计算前导零指令,如果所使用的,MCU没有这些硬件指令的话此宏应该设置为0! + */ +#define configUSE_PORT_OPTIMISED_TASK_SELECTION 1 + +/* 置1:使能低功耗tickless模式;置0:保持系统节拍(tick)中断一直运行 + * 假设开启低功耗的话可能会导致下载出现问题,因为程序在睡眠中,可用以下办法解决 + * + * 下载方法: + * 1.将开发版正常连接好 + * 2.按住复位按键,点击下载瞬间松开复位按键 + * + * 1.通过跳线帽将 BOOT 0 接高电平(3.3V) + * 2.重新上电,下载 + * + * 1.使用FlyMcu擦除一下芯片,然后进行下载 + * STMISP -> 清除芯片(z) + */ +#define configUSE_TICKLESS_IDLE 0 + +/* + * 写入实际的CPU内核时钟频率,也就是CPU指令执行频率,通常称为Fclk + * Fclk为供给CPU内核的时钟信号,我们所说的cpu主频为 XX MHz, + * 就是指的这个时钟信号,相应的,1/Fclk即为cpu时钟周期; + */ +#define configCPU_CLOCK_HZ (SystemCoreClock) + +//RTOS系统节拍中断的频率。即一秒中断的次数,每次中断RTOS都会进行任务调度 +#define configTICK_RATE_HZ (( TickType_t )1000) + +//可使用的最大优先级 +#define configMAX_PRIORITIES (32) + +//空闲任务使用的堆栈大小 +#define configMINIMAL_STACK_SIZE ((unsigned short)128) + +//任务名字字符串长度 +#define configMAX_TASK_NAME_LEN (16) + + //系统节拍计数器变量数据类型,1表示为16位无符号整形,0表示为32位无符号整形 +#define configUSE_16_BIT_TICKS 0 + +//空闲任务放弃CPU使用权给其他同优先级的用户任务 +#define configIDLE_SHOULD_YIELD 1 + +//启用队列 +#define configUSE_QUEUE_SETS 1 + +//开启任务通知功能,默认开启 +#define configUSE_TASK_NOTIFICATIONS 1 + +//使用互斥信号量 +#define configUSE_MUTEXES 1 + +//使用递归互斥信号量 +#define configUSE_RECURSIVE_MUTEXES 0 + +//为1时使用计数信号量 +#define configUSE_COUNTING_SEMAPHORES 1 + +/* 设置可以注册的信号量和消息队列个数 */ +#define configQUEUE_REGISTRY_SIZE 10 + +#define configUSE_APPLICATION_TASK_TAG 0 + + +/***************************************************************** + FreeRTOS与内存申请有关配置选项 +*****************************************************************/ +//支持动态内存申请 +#define configSUPPORT_DYNAMIC_ALLOCATION 1 +//支持静态内存 +#define configSUPPORT_STATIC_ALLOCATION 0 +//系统所有总的堆大小 +#define configTOTAL_HEAP_SIZE ((size_t)(36*1024)) + + +/*************************************************************** + FreeRTOS与钩子函数有关的配置选项 +**************************************************************/ +/* 置1:使用空闲钩子(Idle Hook类似于回调函数);置0:忽略空闲钩子 + * + * 空闲任务钩子是一个函数,这个函数由用户来实现, + * FreeRTOS规定了函数的名字和参数:void vApplicationIdleHook(void ), + * 这个函数在每个空闲任务周期都会被调用 + * 对于已经删除的RTOS任务,空闲任务可以释放分配给它们的堆栈内存。 + * 因此必须保证空闲任务可以被CPU执行 + * 使用空闲钩子函数设置CPU进入省电模式是很常见的 + * 不可以调用会引起空闲任务阻塞的API函数 + */ +#define configUSE_IDLE_HOOK 0 + +/* 置1:使用时间片钩子(Tick Hook);置0:忽略时间片钩子 + * + * + * 时间片钩子是一个函数,这个函数由用户来实现, + * FreeRTOS规定了函数的名字和参数:void vApplicationTickHook(void ) + * 时间片中断可以周期性的调用 + * 函数必须非常短小,不能大量使用堆栈, + * 不能调用以”FromISR" 或 "FROM_ISR”结尾的API函数 + */ + /*xTaskIncrementTick函数是在xPortSysTickHandler中断函数中被调用的。因此,vApplicationTickHook()函数执行的时间必须很短才行*/ +#define configUSE_TICK_HOOK 0 + +//使用内存申请失败钩子函数 +#define configUSE_MALLOC_FAILED_HOOK 0 + +/* + * 大于0时启用堆栈溢出检测功能,如果使用此功能 + * 用户必须提供一个栈溢出钩子函数,如果使用的话 + * 此值可以为1或者2,因为有两种栈溢出检测方法 */ +#define configCHECK_FOR_STACK_OVERFLOW 0 + + +/******************************************************************** + FreeRTOS与运行时间和任务状态收集有关的配置选项 +**********************************************************************/ +//启用运行时间统计功能 +#define configGENERATE_RUN_TIME_STATS 0 + //启用可视化跟踪调试 +#define configUSE_TRACE_FACILITY 0 +/* 与宏configUSE_TRACE_FACILITY同时为1时会编译下面3个函数 + * prvWriteNameToBuffer() + * vTaskList(), + * vTaskGetRunTimeStats() +*/ +#define configUSE_STATS_FORMATTING_FUNCTIONS 1 + + +/******************************************************************** + FreeRTOS与协程有关的配置选项 +*********************************************************************/ +//启用协程,启用协程以后必须添加文件croutine.c +#define configUSE_CO_ROUTINES 0 +//协程的有效优先级数目 +#define configMAX_CO_ROUTINE_PRIORITIES ( 2 ) + + +/*********************************************************************** + FreeRTOS与软件定时器有关的配置选项 +**********************************************************************/ + //启用软件定时器 +#define configUSE_TIMERS 1 +//软件定时器优先级 +#define configTIMER_TASK_PRIORITY (configMAX_PRIORITIES-1) +//软件定时器队列长度 +#define configTIMER_QUEUE_LENGTH 10 +//软件定时器任务堆栈大小 +#define configTIMER_TASK_STACK_DEPTH (configMINIMAL_STACK_SIZE*2) + +/************************************************************ + FreeRTOS可选函数配置选项 +************************************************************/ +#define INCLUDE_xTaskGetSchedulerState 1 +#define INCLUDE_vTaskPrioritySet 1 +#define INCLUDE_uxTaskPriorityGet 1 +#define INCLUDE_vTaskDelete 1 +#define INCLUDE_vTaskCleanUpResources 1 +#define INCLUDE_vTaskSuspend 1 +#define INCLUDE_vTaskDelayUntil 1 +#define INCLUDE_vTaskDelay 1 +#define INCLUDE_eTaskGetState 1 +#define INCLUDE_xTimerPendFunctionCall 1 +//#define INCLUDE_xTaskGetCurrentTaskHandle 1 +//#define INCLUDE_uxTaskGetStackHighWaterMark 0 +//#define INCLUDE_xTaskGetIdleTaskHandle 0 + + +/****************************************************************** + FreeRTOS与中断有关的配置选项 +******************************************************************/ +#ifdef __NVIC_PRIO_BITS + #define configPRIO_BITS __NVIC_PRIO_BITS +#else + #define configPRIO_BITS 4 +#endif +//中断最低优先级 +#define configLIBRARY_LOWEST_INTERRUPT_PRIORITY 15 + +//系统可管理的最高中断优先级 +#define configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY 5 + +#define configKERNEL_INTERRUPT_PRIORITY ( configLIBRARY_LOWEST_INTERRUPT_PRIORITY << (8 - configPRIO_BITS) ) /* 240 */ + +#define configMAX_SYSCALL_INTERRUPT_PRIORITY ( configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY << (8 - 4) ) + + +/**************************************************************** + FreeRTOS与中断服务函数有关的配置选项 +****************************************************************/ +#define xPortPendSVHandler PendSV_Handler +#define vPortSVCHandler SVC_Handler + + +/* 以下为使用Percepio Tracealyzer需要的东西,不需要时将 configUSE_TRACE_FACILITY 定义为 0 */ +#if ( configUSE_TRACE_FACILITY == 1 ) +#include "trcRecorder.h" +#define INCLUDE_xTaskGetCurrentTaskHandle 1 // 启用一个可选函数(该函数被 Trace源码使用,默认该值为0 表示不用) +#endif + + +#endif /* FREERTOS_CONFIG_H */ + diff --git a/demo/stm32/usb_device/stm32f429igt6/Core/Inc/usb_config.h b/demo/stm32/usb_device/stm32f429igt6/Core/Inc/usb_config.h index c55bf494..972ada04 100644 --- a/demo/stm32/usb_device/stm32f429igt6/Core/Inc/usb_config.h +++ b/demo/stm32/usb_device/stm32f429igt6/Core/Inc/usb_config.h @@ -44,14 +44,24 @@ /* Enable test mode */ // #define CONFIG_USBDEV_TEST_MODE -//#define CONFIG_USBDEV_TX_RX_THREAD +//#define CONFIG_USBDEV_TX_THREAD +//#define CONFIG_USBDEV_RX_THREAD -#ifdef CONFIG_USBDEV_TX_RX_THREAD -#ifndef CONFIG_USBDEV_TX_RX_PRIO -#define CONFIG_USBDEV_TX_RX_PRIO 4 +#ifdef CONFIG_USBDEV_TX_THREAD +#ifndef CONFIG_USBDEV_TX_PRIO +#define CONFIG_USBDEV_TX_PRIO 4 #endif -#ifndef CONFIG_USBDEV_TX_RX_STACKSIZE -#define CONFIG_USBDEV_TX_RX_STACKSIZE 2048 +#ifndef CONFIG_USBDEV_TX_STACKSIZE +#define CONFIG_USBDEV_TX_STACKSIZE 2048 +#endif +#endif + +#ifdef CONFIG_USBDEV_RX_THREAD +#ifndef CONFIG_USBDEV_RX_PRIO +#define CONFIG_USBDEV_RX_PRIO 4 +#endif +#ifndef CONFIG_USBDEV_RX_STACKSIZE +#define CONFIG_USBDEV_RX_STACKSIZE 2048 #endif #endif @@ -71,18 +81,6 @@ #define CONFIG_USBDEV_MSC_VERSION_STRING "0.01" #endif -// #define CONFIG_USBDEV_MSC_THREAD - -#ifdef CONFIG_USBDEV_MSC_THREAD -#ifndef CONFIG_USBDEV_MSC_STACKSIZE -#define CONFIG_USBDEV_MSC_STACKSIZE 2048 -#endif - -#ifndef CONFIG_USBDEV_MSC_PRIO -#define CONFIG_USBDEV_MSC_PRIO 4 -#endif -#endif - #ifndef CONFIG_USBDEV_AUDIO_VERSION #define CONFIG_USBDEV_AUDIO_VERSION 0x0100 #endif @@ -91,6 +89,24 @@ #define CONFIG_USBDEV_AUDIO_MAX_CHANNEL 8 #endif +#ifndef CONFIG_USBDEV_RNDIS_RESP_BUFFER_SIZE +#define CONFIG_USBDEV_RNDIS_RESP_BUFFER_SIZE 128 +#endif + +#ifndef CONFIG_USBDEV_RNDIS_ETH_MAX_FRAME_SIZE +#define CONFIG_USBDEV_RNDIS_ETH_MAX_FRAME_SIZE 1536 +#endif + +#ifndef CONFIG_USBDEV_RNDIS_VENDOR_ID +#define CONFIG_USBDEV_RNDIS_VENDOR_ID 0x0000ffff +#endif + +#ifndef CONFIG_USBDEV_RNDIS_VENDOR_DESC +#define CONFIG_USBDEV_RNDIS_VENDOR_DESC "CherryUSB" +#endif + +#define CONFIG_USBDEV_RNDIS_USING_LWIP + /* ================ USB HOST Stack Configuration ================== */ #define CONFIG_USBHOST_MAX_RHPORTS 1 @@ -134,9 +150,9 @@ /* ================ EHCI Configuration ================ */ -#define CONFIG_USB_EHCI_HCCR_BASE (0x20072000) -#define CONFIG_USB_EHCI_HCOR_BASE (0x20072000 + 0x10) -#define CONFIG_EHCI_FRAME_LIST_SIZE 1024 +#define CONFIG_USB_EHCI_HCCR_BASE (0x20072000) +#define CONFIG_USB_EHCI_HCOR_BASE (0x20072000 + 0x10) +#define CONFIG_USB_EHCI_FRAME_LIST_SIZE 1024 // #define CONFIG_USB_EHCI_INFO_ENABLE // #define CONFIG_USB_ECHI_HCOR_RESERVED_DISABLE // #define CONFIG_USB_EHCI_CONFIGFLAG diff --git a/demo/stm32/usb_device/stm32f429igt6/Core/Src/main.c b/demo/stm32/usb_device/stm32f429igt6/Core/Src/main.c index 3e4f60ed..0a417ffa 100644 --- a/demo/stm32/usb_device/stm32f429igt6/Core/Src/main.c +++ b/demo/stm32/usb_device/stm32f429igt6/Core/Src/main.c @@ -132,7 +132,7 @@ int main(void) extern void cdc_acm_msc_init(void); cdc_acm_msc_init(); -#ifdef CONFIG_USBDEV_TX_RX_THREAD +#if defined(CONFIG_USBDEV_TX_THREAD) || defined(CONFIG_USBDEV_RX_THREAD) vTaskStartScheduler(); #endif /* USER CODE END 2 */