Working with CDC
This commit is contained in:
74
.cproject
74
.cproject
@@ -17,12 +17,12 @@
|
|||||||
<configuration artifactExtension="elf" artifactName="${ProjName}" buildArtefactType="org.eclipse.cdt.build.core.buildArtefactType.exe" buildProperties="org.eclipse.cdt.build.core.buildArtefactType=org.eclipse.cdt.build.core.buildArtefactType.exe,org.eclipse.cdt.build.core.buildType=org.eclipse.cdt.build.core.buildType.debug" cleanCommand="rm -rf" description="" id="com.st.stm32cube.ide.mcu.gnu.managedbuild.config.exe.debug.1565570471" name="Debug" parent="com.st.stm32cube.ide.mcu.gnu.managedbuild.config.exe.debug">
|
<configuration artifactExtension="elf" artifactName="${ProjName}" buildArtefactType="org.eclipse.cdt.build.core.buildArtefactType.exe" buildProperties="org.eclipse.cdt.build.core.buildArtefactType=org.eclipse.cdt.build.core.buildArtefactType.exe,org.eclipse.cdt.build.core.buildType=org.eclipse.cdt.build.core.buildType.debug" cleanCommand="rm -rf" description="" id="com.st.stm32cube.ide.mcu.gnu.managedbuild.config.exe.debug.1565570471" name="Debug" parent="com.st.stm32cube.ide.mcu.gnu.managedbuild.config.exe.debug">
|
||||||
<folderInfo id="com.st.stm32cube.ide.mcu.gnu.managedbuild.config.exe.debug.1565570471." name="/" resourcePath="">
|
<folderInfo id="com.st.stm32cube.ide.mcu.gnu.managedbuild.config.exe.debug.1565570471." name="/" resourcePath="">
|
||||||
<toolChain id="com.st.stm32cube.ide.mcu.gnu.managedbuild.toolchain.exe.debug.1973471783" name="MCU ARM GCC" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.toolchain.exe.debug">
|
<toolChain id="com.st.stm32cube.ide.mcu.gnu.managedbuild.toolchain.exe.debug.1973471783" name="MCU ARM GCC" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.toolchain.exe.debug">
|
||||||
<option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.target_mcu.1054471218" name="MCU" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.target_mcu" value="STM32F103C6Tx" valueType="string"/>
|
<option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.target_mcu.1054471218" name="MCU" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.target_mcu" useByScannerDiscovery="true" value="STM32F103C6Tx" valueType="string"/>
|
||||||
<option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.target_cpuid.90760131" name="CPU" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.target_cpuid" value="0" valueType="string"/>
|
<option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.target_cpuid.90760131" name="CPU" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.target_cpuid" useByScannerDiscovery="false" value="0" valueType="string"/>
|
||||||
<option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.target_coreid.1402466860" name="Core" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.target_coreid" value="0" valueType="string"/>
|
<option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.target_coreid.1402466860" name="Core" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.target_coreid" useByScannerDiscovery="false" value="0" valueType="string"/>
|
||||||
<option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.target_board.641149995" name="Board" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.target_board" value="genericBoard" valueType="string"/>
|
<option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.target_board.641149995" name="Board" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.target_board" useByScannerDiscovery="false" value="genericBoard" valueType="string"/>
|
||||||
<option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.defaults.69729670" name="Defaults" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.defaults" value="com.st.stm32cube.ide.common.services.build.inputs.revA.1.0.6 || Debug || true || Executable || com.st.stm32cube.ide.mcu.gnu.managedbuild.option.toolchain.value.workspace || STM32F103C6Tx || 0 || 0 || arm-none-eabi- || ${gnu_tools_for_stm32_compiler_path} || ../Core/Inc | ../Drivers/STM32F1xx_HAL_Driver/Inc/Legacy | ../Drivers/STM32F1xx_HAL_Driver/Inc | ../Drivers/CMSIS/Device/ST/STM32F1xx/Include | ../Drivers/CMSIS/Include || || || USE_HAL_DRIVER | STM32F103x6 || || Drivers | Core/Startup | Core || || || ${workspace_loc:/${ProjName}/STM32F103C6TX_FLASH.ld} || true || NonSecure || || secure_nsclib.o || || None || || || " valueType="string"/>
|
<option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.defaults.69729670" name="Defaults" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.defaults" useByScannerDiscovery="false" value="com.st.stm32cube.ide.common.services.build.inputs.revA.1.0.6 || Debug || true || Executable || com.st.stm32cube.ide.mcu.gnu.managedbuild.option.toolchain.value.workspace || STM32F103C6Tx || 0 || 0 || arm-none-eabi- || ${gnu_tools_for_stm32_compiler_path} || ../Core/Inc | ../Drivers/STM32F1xx_HAL_Driver/Inc/Legacy | ../Drivers/STM32F1xx_HAL_Driver/Inc | ../Drivers/CMSIS/Device/ST/STM32F1xx/Include | ../Drivers/CMSIS/Include | ../USB_DEVICE/App | ../USB_DEVICE/Target | ../Middlewares/ST/STM32_USB_Device_Library/Core/Inc | ../Middlewares/ST/STM32_USB_Device_Library/Class/CDC/Inc || || || USE_HAL_DRIVER | STM32F103x6 || || Drivers | Core/Startup | Middlewares | Core | USB_DEVICE || || || ${workspace_loc:/${ProjName}/STM32F103C6TX_FLASH.ld} || true || NonSecure || || secure_nsclib.o || || None || || || " valueType="string"/>
|
||||||
<option id="com.st.stm32cube.ide.mcu.debug.option.cpuclock.1389950930" superClass="com.st.stm32cube.ide.mcu.debug.option.cpuclock" value="72" valueType="string"/>
|
<option id="com.st.stm32cube.ide.mcu.debug.option.cpuclock.1389950930" name="Cpu clock frequence" superClass="com.st.stm32cube.ide.mcu.debug.option.cpuclock" useByScannerDiscovery="false" value="72" valueType="string"/>
|
||||||
<targetPlatform archList="all" binaryParser="org.eclipse.cdt.core.ELF" id="com.st.stm32cube.ide.mcu.gnu.managedbuild.targetplatform.107133990" isAbstract="false" osList="all" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.targetplatform"/>
|
<targetPlatform archList="all" binaryParser="org.eclipse.cdt.core.ELF" id="com.st.stm32cube.ide.mcu.gnu.managedbuild.targetplatform.107133990" isAbstract="false" osList="all" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.targetplatform"/>
|
||||||
<builder buildPath="${workspace_loc:/LedRing}/Debug" id="com.st.stm32cube.ide.mcu.gnu.managedbuild.builder.302504780" keepEnvironmentInBuildfile="false" managedBuildOn="true" name="Gnu Make Builder" parallelBuildOn="true" parallelizationNumber="optimal" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.builder"/>
|
<builder buildPath="${workspace_loc:/LedRing}/Debug" id="com.st.stm32cube.ide.mcu.gnu.managedbuild.builder.302504780" keepEnvironmentInBuildfile="false" managedBuildOn="true" name="Gnu Make Builder" parallelBuildOn="true" parallelizationNumber="optimal" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.builder"/>
|
||||||
<tool id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.assembler.1539091071" name="MCU/MPU GCC Assembler" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.assembler">
|
<tool id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.assembler.1539091071" name="MCU/MPU GCC Assembler" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.assembler">
|
||||||
@@ -33,25 +33,29 @@
|
|||||||
<inputType id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.assembler.input.1404274751" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.assembler.input"/>
|
<inputType id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.assembler.input.1404274751" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.assembler.input"/>
|
||||||
</tool>
|
</tool>
|
||||||
<tool id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.2013607825" name="MCU/MPU GCC Compiler" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler">
|
<tool id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.2013607825" name="MCU/MPU GCC Compiler" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler">
|
||||||
<option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.option.debuglevel.1148791079" name="Debug level" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.option.debuglevel" value="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.option.debuglevel.value.g3" valueType="enumerated"/>
|
<option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.option.debuglevel.1148791079" name="Debug level" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.option.debuglevel" useByScannerDiscovery="false" value="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.option.debuglevel.value.g3" valueType="enumerated"/>
|
||||||
<option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.option.optimization.level.1669782560" name="Optimization level" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.option.optimization.level"/>
|
<option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.option.optimization.level.1669782560" name="Optimization level" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.option.optimization.level" useByScannerDiscovery="false" value="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.option.optimization.level.value.os" valueType="enumerated"/>
|
||||||
<option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.option.definedsymbols.798141372" name="Define symbols (-D)" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.option.definedsymbols" valueType="definedSymbols">
|
<option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.option.definedsymbols.798141372" name="Define symbols (-D)" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.option.definedsymbols" useByScannerDiscovery="false" valueType="definedSymbols">
|
||||||
<listOptionValue builtIn="false" value="DEBUG"/>
|
<listOptionValue builtIn="false" value="DEBUG"/>
|
||||||
<listOptionValue builtIn="false" value="USE_HAL_DRIVER"/>
|
<listOptionValue builtIn="false" value="USE_HAL_DRIVER"/>
|
||||||
<listOptionValue builtIn="false" value="STM32F103x6"/>
|
<listOptionValue builtIn="false" value="STM32F103x6"/>
|
||||||
</option>
|
</option>
|
||||||
<option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.option.includepaths.1797156071" name="Include paths (-I)" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.option.includepaths" valueType="includePath">
|
<option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.option.includepaths.1797156071" name="Include paths (-I)" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.option.includepaths" useByScannerDiscovery="false" valueType="includePath">
|
||||||
<listOptionValue builtIn="false" value="../Core/Inc"/>
|
<listOptionValue builtIn="false" value="../Core/Inc"/>
|
||||||
<listOptionValue builtIn="false" value="../Drivers/STM32F1xx_HAL_Driver/Inc/Legacy"/>
|
<listOptionValue builtIn="false" value="../Drivers/STM32F1xx_HAL_Driver/Inc/Legacy"/>
|
||||||
<listOptionValue builtIn="false" value="../Drivers/STM32F1xx_HAL_Driver/Inc"/>
|
<listOptionValue builtIn="false" value="../Drivers/STM32F1xx_HAL_Driver/Inc"/>
|
||||||
<listOptionValue builtIn="false" value="../Drivers/CMSIS/Device/ST/STM32F1xx/Include"/>
|
<listOptionValue builtIn="false" value="../Drivers/CMSIS/Device/ST/STM32F1xx/Include"/>
|
||||||
<listOptionValue builtIn="false" value="../Drivers/CMSIS/Include"/>
|
<listOptionValue builtIn="false" value="../Drivers/CMSIS/Include"/>
|
||||||
|
<listOptionValue builtIn="false" value="../USB_DEVICE/App"/>
|
||||||
|
<listOptionValue builtIn="false" value="../USB_DEVICE/Target"/>
|
||||||
|
<listOptionValue builtIn="false" value="../Middlewares/ST/STM32_USB_Device_Library/Core/Inc"/>
|
||||||
|
<listOptionValue builtIn="false" value="../Middlewares/ST/STM32_USB_Device_Library/Class/CDC/Inc"/>
|
||||||
</option>
|
</option>
|
||||||
<inputType id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.input.c.445798847" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.input.c"/>
|
<inputType id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.input.c.445798847" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.input.c"/>
|
||||||
</tool>
|
</tool>
|
||||||
<tool id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.cpp.compiler.1516431781" name="MCU/MPU G++ Compiler" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.cpp.compiler">
|
<tool id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.cpp.compiler.1516431781" name="MCU/MPU G++ Compiler" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.cpp.compiler">
|
||||||
<option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.cpp.compiler.option.debuglevel.1721670603" name="Debug level" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.cpp.compiler.option.debuglevel" value="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.cpp.compiler.option.debuglevel.value.g3" valueType="enumerated"/>
|
<option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.cpp.compiler.option.debuglevel.1721670603" name="Debug level" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.cpp.compiler.option.debuglevel" useByScannerDiscovery="false" value="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.cpp.compiler.option.debuglevel.value.g3" valueType="enumerated"/>
|
||||||
<option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.cpp.compiler.option.optimization.level.1890562860" name="Optimization level" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.cpp.compiler.option.optimization.level"/>
|
<option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.cpp.compiler.option.optimization.level.1890562860" name="Optimization level" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.cpp.compiler.option.optimization.level" useByScannerDiscovery="false"/>
|
||||||
</tool>
|
</tool>
|
||||||
<tool id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.linker.267232159" name="MCU/MPU GCC Linker" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.linker">
|
<tool id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.linker.267232159" name="MCU/MPU GCC Linker" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.linker">
|
||||||
<option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.linker.option.script.73530533" name="Linker Script (-T)" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.linker.option.script" value="${workspace_loc:/${ProjName}/STM32F103C6TX_FLASH.ld}" valueType="string"/>
|
<option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.linker.option.script.73530533" name="Linker Script (-T)" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.linker.option.script" value="${workspace_loc:/${ProjName}/STM32F103C6TX_FLASH.ld}" valueType="string"/>
|
||||||
@@ -73,7 +77,9 @@
|
|||||||
</folderInfo>
|
</folderInfo>
|
||||||
<sourceEntries>
|
<sourceEntries>
|
||||||
<entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="Core"/>
|
<entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="Core"/>
|
||||||
|
<entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="Middlewares"/>
|
||||||
<entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="Drivers"/>
|
<entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="Drivers"/>
|
||||||
|
<entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="USB_DEVICE"/>
|
||||||
</sourceEntries>
|
</sourceEntries>
|
||||||
</configuration>
|
</configuration>
|
||||||
</storageModule>
|
</storageModule>
|
||||||
@@ -95,40 +101,44 @@
|
|||||||
<configuration artifactExtension="elf" artifactName="${ProjName}" buildArtefactType="org.eclipse.cdt.build.core.buildArtefactType.exe" buildProperties="org.eclipse.cdt.build.core.buildArtefactType=org.eclipse.cdt.build.core.buildArtefactType.exe,org.eclipse.cdt.build.core.buildType=org.eclipse.cdt.build.core.buildType.release" cleanCommand="rm -rf" description="" id="com.st.stm32cube.ide.mcu.gnu.managedbuild.config.exe.release.167209041" name="Release" parent="com.st.stm32cube.ide.mcu.gnu.managedbuild.config.exe.release">
|
<configuration artifactExtension="elf" artifactName="${ProjName}" buildArtefactType="org.eclipse.cdt.build.core.buildArtefactType.exe" buildProperties="org.eclipse.cdt.build.core.buildArtefactType=org.eclipse.cdt.build.core.buildArtefactType.exe,org.eclipse.cdt.build.core.buildType=org.eclipse.cdt.build.core.buildType.release" cleanCommand="rm -rf" description="" id="com.st.stm32cube.ide.mcu.gnu.managedbuild.config.exe.release.167209041" name="Release" parent="com.st.stm32cube.ide.mcu.gnu.managedbuild.config.exe.release">
|
||||||
<folderInfo id="com.st.stm32cube.ide.mcu.gnu.managedbuild.config.exe.release.167209041." name="/" resourcePath="">
|
<folderInfo id="com.st.stm32cube.ide.mcu.gnu.managedbuild.config.exe.release.167209041." name="/" resourcePath="">
|
||||||
<toolChain id="com.st.stm32cube.ide.mcu.gnu.managedbuild.toolchain.exe.release.441309071" name="MCU ARM GCC" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.toolchain.exe.release">
|
<toolChain id="com.st.stm32cube.ide.mcu.gnu.managedbuild.toolchain.exe.release.441309071" name="MCU ARM GCC" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.toolchain.exe.release">
|
||||||
<option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.target_mcu.750627212" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.target_mcu" value="STM32F103C6Tx" valueType="string"/>
|
<option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.target_mcu.750627212" name="MCU" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.target_mcu" useByScannerDiscovery="true" value="STM32F103C6Tx" valueType="string"/>
|
||||||
<option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.target_cpuid.259889251" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.target_cpuid" value="0" valueType="string"/>
|
<option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.target_cpuid.259889251" name="CPU" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.target_cpuid" useByScannerDiscovery="false" value="0" valueType="string"/>
|
||||||
<option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.target_coreid.1924929564" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.target_coreid" value="0" valueType="string"/>
|
<option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.target_coreid.1924929564" name="Core" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.target_coreid" useByScannerDiscovery="false" value="0" valueType="string"/>
|
||||||
<option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.target_board.638359541" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.target_board" value="genericBoard" valueType="string"/>
|
<option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.target_board.638359541" name="Board" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.target_board" useByScannerDiscovery="false" value="genericBoard" valueType="string"/>
|
||||||
<option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.defaults.386818028" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.defaults" value="com.st.stm32cube.ide.common.services.build.inputs.revA.1.0.6 || Release || false || Executable || com.st.stm32cube.ide.mcu.gnu.managedbuild.option.toolchain.value.workspace || STM32F103C6Tx || 0 || 0 || arm-none-eabi- || ${gnu_tools_for_stm32_compiler_path} || ../Core/Inc | ../Drivers/STM32F1xx_HAL_Driver/Inc/Legacy | ../Drivers/STM32F1xx_HAL_Driver/Inc | ../Drivers/CMSIS/Device/ST/STM32F1xx/Include | ../Drivers/CMSIS/Include || || || USE_HAL_DRIVER | STM32F103x6 || || Drivers | Core/Startup | Core || || || ${workspace_loc:/${ProjName}/STM32F103C6TX_FLASH.ld} || true || NonSecure || || secure_nsclib.o || || None || || || " valueType="string"/>
|
<option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.defaults.386818028" name="Defaults" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.defaults" useByScannerDiscovery="false" value="com.st.stm32cube.ide.common.services.build.inputs.revA.1.0.6 || Release || false || Executable || com.st.stm32cube.ide.mcu.gnu.managedbuild.option.toolchain.value.workspace || STM32F103C6Tx || 0 || 0 || arm-none-eabi- || ${gnu_tools_for_stm32_compiler_path} || ../Core/Inc | ../Drivers/STM32F1xx_HAL_Driver/Inc/Legacy | ../Drivers/STM32F1xx_HAL_Driver/Inc | ../Drivers/CMSIS/Device/ST/STM32F1xx/Include | ../Drivers/CMSIS/Include | ../USB_DEVICE/App | ../USB_DEVICE/Target | ../Middlewares/ST/STM32_USB_Device_Library/Core/Inc | ../Middlewares/ST/STM32_USB_Device_Library/Class/CDC/Inc || || || USE_HAL_DRIVER | STM32F103x6 || || Drivers | Core/Startup | Middlewares | Core | USB_DEVICE || || || ${workspace_loc:/${ProjName}/STM32F103C6TX_FLASH.ld} || true || NonSecure || || secure_nsclib.o || || None || || || " valueType="string"/>
|
||||||
<option id="com.st.stm32cube.ide.mcu.debug.option.cpuclock.781532363" superClass="com.st.stm32cube.ide.mcu.debug.option.cpuclock" value="72" valueType="string"/>
|
<option id="com.st.stm32cube.ide.mcu.debug.option.cpuclock.781532363" name="Cpu clock frequence" superClass="com.st.stm32cube.ide.mcu.debug.option.cpuclock" useByScannerDiscovery="false" value="72" valueType="string"/>
|
||||||
<targetPlatform archList="all" binaryParser="org.eclipse.cdt.core.ELF" id="com.st.stm32cube.ide.mcu.gnu.managedbuild.targetplatform.292831228" isAbstract="false" osList="all" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.targetplatform"/>
|
<targetPlatform archList="all" binaryParser="org.eclipse.cdt.core.ELF" id="com.st.stm32cube.ide.mcu.gnu.managedbuild.targetplatform.292831228" isAbstract="false" osList="all" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.targetplatform"/>
|
||||||
<builder buildPath="${workspace_loc:/LedRing}/Release" id="com.st.stm32cube.ide.mcu.gnu.managedbuild.builder.825066264" managedBuildOn="true" name="Gnu Make Builder.Release" parallelBuildOn="true" parallelizationNumber="optimal" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.builder"/>
|
<builder buildPath="${workspace_loc:/LedRing}/Release" id="com.st.stm32cube.ide.mcu.gnu.managedbuild.builder.825066264" keepEnvironmentInBuildfile="false" managedBuildOn="true" name="Gnu Make Builder" parallelBuildOn="true" parallelizationNumber="optimal" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.builder"/>
|
||||||
<tool id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.assembler.12760274" name="MCU/MPU GCC Assembler" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.assembler">
|
<tool id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.assembler.12760274" name="MCU/MPU GCC Assembler" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.assembler">
|
||||||
<option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.assembler.option.debuglevel.1497331585" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.assembler.option.debuglevel" value="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.assembler.option.debuglevel.value.g0" valueType="enumerated"/>
|
<option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.assembler.option.debuglevel.1497331585" name="Debug level" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.assembler.option.debuglevel" value="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.assembler.option.debuglevel.value.g0" valueType="enumerated"/>
|
||||||
<inputType id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.assembler.input.1686857359" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.assembler.input"/>
|
<inputType id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.assembler.input.1686857359" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.assembler.input"/>
|
||||||
</tool>
|
</tool>
|
||||||
<tool id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.1334363842" name="MCU/MPU GCC Compiler" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler">
|
<tool id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.1334363842" name="MCU/MPU GCC Compiler" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler">
|
||||||
<option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.option.debuglevel.1734872960" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.option.debuglevel" value="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.option.debuglevel.value.g0" valueType="enumerated"/>
|
<option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.option.debuglevel.1734872960" name="Debug level" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.option.debuglevel" useByScannerDiscovery="false" value="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.option.debuglevel.value.g0" valueType="enumerated"/>
|
||||||
<option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.option.optimization.level.925137858" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.option.optimization.level" value="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.option.optimization.level.value.os" valueType="enumerated"/>
|
<option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.option.optimization.level.925137858" name="Optimization level" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.option.optimization.level" useByScannerDiscovery="false" value="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.option.optimization.level.value.os" valueType="enumerated"/>
|
||||||
<option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.option.definedsymbols.1172513853" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.option.definedsymbols" valueType="definedSymbols">
|
<option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.option.definedsymbols.1172513853" name="Define symbols (-D)" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.option.definedsymbols" useByScannerDiscovery="false" valueType="definedSymbols">
|
||||||
<listOptionValue builtIn="false" value="USE_HAL_DRIVER"/>
|
<listOptionValue builtIn="false" value="USE_HAL_DRIVER"/>
|
||||||
<listOptionValue builtIn="false" value="STM32F103x6"/>
|
<listOptionValue builtIn="false" value="STM32F103x6"/>
|
||||||
</option>
|
</option>
|
||||||
<option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.option.includepaths.1253371367" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.option.includepaths" valueType="includePath">
|
<option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.option.includepaths.1253371367" name="Include paths (-I)" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.option.includepaths" useByScannerDiscovery="false" valueType="includePath">
|
||||||
<listOptionValue builtIn="false" value="../Core/Inc"/>
|
<listOptionValue builtIn="false" value="../Core/Inc"/>
|
||||||
<listOptionValue builtIn="false" value="../Drivers/STM32F1xx_HAL_Driver/Inc/Legacy"/>
|
<listOptionValue builtIn="false" value="../Drivers/STM32F1xx_HAL_Driver/Inc/Legacy"/>
|
||||||
<listOptionValue builtIn="false" value="../Drivers/STM32F1xx_HAL_Driver/Inc"/>
|
<listOptionValue builtIn="false" value="../Drivers/STM32F1xx_HAL_Driver/Inc"/>
|
||||||
<listOptionValue builtIn="false" value="../Drivers/CMSIS/Device/ST/STM32F1xx/Include"/>
|
<listOptionValue builtIn="false" value="../Drivers/CMSIS/Device/ST/STM32F1xx/Include"/>
|
||||||
<listOptionValue builtIn="false" value="../Drivers/CMSIS/Include"/>
|
<listOptionValue builtIn="false" value="../Drivers/CMSIS/Include"/>
|
||||||
|
<listOptionValue builtIn="false" value="../USB_DEVICE/App"/>
|
||||||
|
<listOptionValue builtIn="false" value="../USB_DEVICE/Target"/>
|
||||||
|
<listOptionValue builtIn="false" value="../Middlewares/ST/STM32_USB_Device_Library/Core/Inc"/>
|
||||||
|
<listOptionValue builtIn="false" value="../Middlewares/ST/STM32_USB_Device_Library/Class/CDC/Inc"/>
|
||||||
</option>
|
</option>
|
||||||
<inputType id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.input.c.1200860401" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.input.c"/>
|
<inputType id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.input.c.1200860401" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.input.c"/>
|
||||||
</tool>
|
</tool>
|
||||||
<tool id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.cpp.compiler.1664709937" name="MCU/MPU G++ Compiler" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.cpp.compiler">
|
<tool id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.cpp.compiler.1664709937" name="MCU/MPU G++ Compiler" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.cpp.compiler">
|
||||||
<option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.cpp.compiler.option.debuglevel.344254215" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.cpp.compiler.option.debuglevel" value="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.cpp.compiler.option.debuglevel.value.g0" valueType="enumerated"/>
|
<option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.cpp.compiler.option.debuglevel.344254215" name="Debug level" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.cpp.compiler.option.debuglevel" useByScannerDiscovery="false" value="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.cpp.compiler.option.debuglevel.value.g0" valueType="enumerated"/>
|
||||||
<option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.cpp.compiler.option.optimization.level.85239935" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.cpp.compiler.option.optimization.level" value="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.cpp.compiler.option.optimization.level.value.os" valueType="enumerated"/>
|
<option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.cpp.compiler.option.optimization.level.85239935" name="Optimization level" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.cpp.compiler.option.optimization.level" useByScannerDiscovery="false" value="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.cpp.compiler.option.optimization.level.value.os" valueType="enumerated"/>
|
||||||
</tool>
|
</tool>
|
||||||
<tool id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.linker.1160204190" name="MCU/MPU GCC Linker" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.linker">
|
<tool id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.linker.1160204190" name="MCU/MPU GCC Linker" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.linker">
|
||||||
<option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.linker.option.script.424166306" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.linker.option.script" value="${workspace_loc:/${ProjName}/STM32F103C6TX_FLASH.ld}" valueType="string"/>
|
<option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.linker.option.script.424166306" name="Linker Script (-T)" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.linker.option.script" value="${workspace_loc:/${ProjName}/STM32F103C6TX_FLASH.ld}" valueType="string"/>
|
||||||
<inputType id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.linker.input.793452365" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.linker.input">
|
<inputType id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.linker.input.793452365" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.linker.input">
|
||||||
<additionalInput kind="additionalinputdependency" paths="$(USER_OBJS)"/>
|
<additionalInput kind="additionalinputdependency" paths="$(USER_OBJS)"/>
|
||||||
<additionalInput kind="additionalinput" paths="$(LIBS)"/>
|
<additionalInput kind="additionalinput" paths="$(LIBS)"/>
|
||||||
@@ -147,7 +157,9 @@
|
|||||||
</folderInfo>
|
</folderInfo>
|
||||||
<sourceEntries>
|
<sourceEntries>
|
||||||
<entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="Core"/>
|
<entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="Core"/>
|
||||||
|
<entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="Middlewares"/>
|
||||||
<entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="Drivers"/>
|
<entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="Drivers"/>
|
||||||
|
<entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="USB_DEVICE"/>
|
||||||
</sourceEntries>
|
</sourceEntries>
|
||||||
</configuration>
|
</configuration>
|
||||||
</storageModule>
|
</storageModule>
|
||||||
@@ -169,4 +181,12 @@
|
|||||||
</scannerConfigBuildInfo>
|
</scannerConfigBuildInfo>
|
||||||
</storageModule>
|
</storageModule>
|
||||||
<storageModule moduleId="org.eclipse.cdt.make.core.buildtargets"/>
|
<storageModule moduleId="org.eclipse.cdt.make.core.buildtargets"/>
|
||||||
|
<storageModule moduleId="refreshScope" versionNumber="2">
|
||||||
|
<configuration configurationName="Debug">
|
||||||
|
<resource resourceType="PROJECT" workspacePath="/LedRing"/>
|
||||||
|
</configuration>
|
||||||
|
<configuration configurationName="Release">
|
||||||
|
<resource resourceType="PROJECT" workspacePath="/LedRing"/>
|
||||||
|
</configuration>
|
||||||
|
</storageModule>
|
||||||
</cproject>
|
</cproject>
|
||||||
40
.mxproject
40
.mxproject
File diff suppressed because one or more lines are too long
6
.settings/org.eclipse.cdt.core.prefs
Normal file
6
.settings/org.eclipse.cdt.core.prefs
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
doxygen/doxygen_new_line_after_brief=true
|
||||||
|
doxygen/doxygen_use_brief_tag=false
|
||||||
|
doxygen/doxygen_use_javadoc_tags=true
|
||||||
|
doxygen/doxygen_use_pre_tag=false
|
||||||
|
doxygen/doxygen_use_structural_commands=false
|
||||||
|
eclipse.preferences.version=1
|
||||||
@@ -23,6 +23,9 @@ typedef enum {
|
|||||||
} commands_e;
|
} commands_e;
|
||||||
|
|
||||||
|
|
||||||
|
void RxCpltCallback();
|
||||||
|
void setRxFlag(void);
|
||||||
|
|
||||||
void cmd_UART_Request(void);
|
void cmd_UART_Request(void);
|
||||||
|
|
||||||
void cmd_RunCommand(commands_e cmd, uint32_t * input);
|
void cmd_RunCommand(commands_e cmd, uint32_t * input);
|
||||||
|
|||||||
@@ -53,7 +53,7 @@
|
|||||||
/*#define HAL_NOR_MODULE_ENABLED */
|
/*#define HAL_NOR_MODULE_ENABLED */
|
||||||
/*#define HAL_NAND_MODULE_ENABLED */
|
/*#define HAL_NAND_MODULE_ENABLED */
|
||||||
/*#define HAL_PCCARD_MODULE_ENABLED */
|
/*#define HAL_PCCARD_MODULE_ENABLED */
|
||||||
/*#define HAL_PCD_MODULE_ENABLED */
|
#define HAL_PCD_MODULE_ENABLED
|
||||||
/*#define HAL_HCD_MODULE_ENABLED */
|
/*#define HAL_HCD_MODULE_ENABLED */
|
||||||
/*#define HAL_PWR_MODULE_ENABLED */
|
/*#define HAL_PWR_MODULE_ENABLED */
|
||||||
/*#define HAL_RCC_MODULE_ENABLED */
|
/*#define HAL_RCC_MODULE_ENABLED */
|
||||||
@@ -65,7 +65,7 @@
|
|||||||
/*#define HAL_SPI_MODULE_ENABLED */
|
/*#define HAL_SPI_MODULE_ENABLED */
|
||||||
/*#define HAL_SRAM_MODULE_ENABLED */
|
/*#define HAL_SRAM_MODULE_ENABLED */
|
||||||
#define HAL_TIM_MODULE_ENABLED
|
#define HAL_TIM_MODULE_ENABLED
|
||||||
#define HAL_UART_MODULE_ENABLED
|
/*#define HAL_UART_MODULE_ENABLED */
|
||||||
/*#define HAL_USART_MODULE_ENABLED */
|
/*#define HAL_USART_MODULE_ENABLED */
|
||||||
/*#define HAL_WWDG_MODULE_ENABLED */
|
/*#define HAL_WWDG_MODULE_ENABLED */
|
||||||
|
|
||||||
|
|||||||
@@ -56,8 +56,8 @@ void DebugMon_Handler(void);
|
|||||||
void PendSV_Handler(void);
|
void PendSV_Handler(void);
|
||||||
void SysTick_Handler(void);
|
void SysTick_Handler(void);
|
||||||
void DMA1_Channel5_IRQHandler(void);
|
void DMA1_Channel5_IRQHandler(void);
|
||||||
|
void USB_LP_CAN1_RX0_IRQHandler(void);
|
||||||
void TIM2_IRQHandler(void);
|
void TIM2_IRQHandler(void);
|
||||||
void USART2_IRQHandler(void);
|
|
||||||
/* USER CODE BEGIN EFP */
|
/* USER CODE BEGIN EFP */
|
||||||
|
|
||||||
/* USER CODE END EFP */
|
/* USER CODE END EFP */
|
||||||
|
|||||||
@@ -1,52 +0,0 @@
|
|||||||
/* USER CODE BEGIN Header */
|
|
||||||
/**
|
|
||||||
******************************************************************************
|
|
||||||
* @file usart.h
|
|
||||||
* @brief This file contains all the function prototypes for
|
|
||||||
* the usart.c file
|
|
||||||
******************************************************************************
|
|
||||||
* @attention
|
|
||||||
*
|
|
||||||
* Copyright (c) 2026 STMicroelectronics.
|
|
||||||
* All rights reserved.
|
|
||||||
*
|
|
||||||
* This software is licensed under terms that can be found in the LICENSE file
|
|
||||||
* in the root directory of this software component.
|
|
||||||
* If no LICENSE file comes with this software, it is provided AS-IS.
|
|
||||||
*
|
|
||||||
******************************************************************************
|
|
||||||
*/
|
|
||||||
/* USER CODE END Header */
|
|
||||||
/* Define to prevent recursive inclusion -------------------------------------*/
|
|
||||||
#ifndef __USART_H__
|
|
||||||
#define __USART_H__
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
extern "C" {
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* Includes ------------------------------------------------------------------*/
|
|
||||||
#include "main.h"
|
|
||||||
|
|
||||||
/* USER CODE BEGIN Includes */
|
|
||||||
|
|
||||||
/* USER CODE END Includes */
|
|
||||||
|
|
||||||
extern UART_HandleTypeDef huart2;
|
|
||||||
|
|
||||||
/* USER CODE BEGIN Private defines */
|
|
||||||
|
|
||||||
/* USER CODE END Private defines */
|
|
||||||
|
|
||||||
void MX_USART2_UART_Init(void);
|
|
||||||
|
|
||||||
/* USER CODE BEGIN Prototypes */
|
|
||||||
|
|
||||||
/* USER CODE END Prototypes */
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#endif /* __USART_H__ */
|
|
||||||
|
|
||||||
@@ -21,7 +21,7 @@
|
|||||||
#include "dma.h"
|
#include "dma.h"
|
||||||
#include "i2c.h"
|
#include "i2c.h"
|
||||||
#include "tim.h"
|
#include "tim.h"
|
||||||
#include "usart.h"
|
#include "usb_device.h"
|
||||||
#include "gpio.h"
|
#include "gpio.h"
|
||||||
|
|
||||||
/* Private includes ----------------------------------------------------------*/
|
/* Private includes ----------------------------------------------------------*/
|
||||||
@@ -30,6 +30,9 @@
|
|||||||
#include "ws2812_effect.h"
|
#include "ws2812_effect.h"
|
||||||
#include "ds1307.h"
|
#include "ds1307.h"
|
||||||
#include "clock.h"
|
#include "clock.h"
|
||||||
|
|
||||||
|
#include "usbd_cdc_if.h"
|
||||||
|
|
||||||
/* USER CODE END Includes */
|
/* USER CODE END Includes */
|
||||||
|
|
||||||
/* Private typedef -----------------------------------------------------------*/
|
/* Private typedef -----------------------------------------------------------*/
|
||||||
@@ -60,11 +63,28 @@ extern uint8_t UART_RxBuf[6];
|
|||||||
void SystemClock_Config(void);
|
void SystemClock_Config(void);
|
||||||
/* USER CODE BEGIN PFP */
|
/* USER CODE BEGIN PFP */
|
||||||
|
|
||||||
|
void USB_DEVICE_MasterHardReset(void);
|
||||||
|
|
||||||
/* USER CODE END PFP */
|
/* USER CODE END PFP */
|
||||||
|
|
||||||
/* Private user code ---------------------------------------------------------*/
|
/* Private user code ---------------------------------------------------------*/
|
||||||
/* USER CODE BEGIN 0 */
|
/* USER CODE BEGIN 0 */
|
||||||
|
|
||||||
|
void USB_DEVICE_MasterHardReset(void){
|
||||||
|
|
||||||
|
GPIO_InitTypeDef GPIO_InitStruct;
|
||||||
|
|
||||||
|
GPIO_InitStruct.Pin = GPIO_PIN_12;
|
||||||
|
GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;
|
||||||
|
GPIO_InitStruct.Pull = GPIO_PULLDOWN;
|
||||||
|
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
|
||||||
|
|
||||||
|
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
|
||||||
|
HAL_GPIO_WritePin(GPIOA,GPIO_PIN_12,0);
|
||||||
|
|
||||||
|
HAL_Delay(1000);
|
||||||
|
}
|
||||||
|
|
||||||
/* USER CODE END 0 */
|
/* USER CODE END 0 */
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -99,7 +119,9 @@ int main(void)
|
|||||||
MX_DMA_Init();
|
MX_DMA_Init();
|
||||||
MX_TIM2_Init();
|
MX_TIM2_Init();
|
||||||
MX_I2C1_Init();
|
MX_I2C1_Init();
|
||||||
MX_USART2_UART_Init();
|
|
||||||
|
USB_DEVICE_MasterHardReset();
|
||||||
|
MX_USB_DEVICE_Init();
|
||||||
/* USER CODE BEGIN 2 */
|
/* USER CODE BEGIN 2 */
|
||||||
|
|
||||||
HAL_TIM_Base_Start(&htim2);
|
HAL_TIM_Base_Start(&htim2);
|
||||||
@@ -144,7 +166,14 @@ uint8_t UART_Buff[] = "Hello World\n";
|
|||||||
|
|
||||||
// ws_Effect_RoudTheClock();
|
// ws_Effect_RoudTheClock();
|
||||||
|
|
||||||
HAL_UART_Receive_IT(&huart2, UART_RxBuf, sizeof(UART_RxBuf));
|
|
||||||
|
|
||||||
|
//CDC_Transmit_FS(UART_Buff, sizeof(UART_Buff));
|
||||||
|
|
||||||
|
RxCpltCallback();
|
||||||
|
|
||||||
|
|
||||||
|
//HAL_UART_Receive_IT(&huart2, UART_RxBuf, sizeof(UART_RxBuf));
|
||||||
|
|
||||||
HAL_GPIO_TogglePin(LED_Green_GPIO_Port, LED_Green_Pin);
|
HAL_GPIO_TogglePin(LED_Green_GPIO_Port, LED_Green_Pin);
|
||||||
|
|
||||||
@@ -164,6 +193,7 @@ void SystemClock_Config(void)
|
|||||||
{
|
{
|
||||||
RCC_OscInitTypeDef RCC_OscInitStruct = {0};
|
RCC_OscInitTypeDef RCC_OscInitStruct = {0};
|
||||||
RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
|
RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
|
||||||
|
RCC_PeriphCLKInitTypeDef PeriphClkInit = {0};
|
||||||
|
|
||||||
/** Initializes the RCC Oscillators according to the specified parameters
|
/** Initializes the RCC Oscillators according to the specified parameters
|
||||||
* in the RCC_OscInitTypeDef structure.
|
* in the RCC_OscInitTypeDef structure.
|
||||||
@@ -193,6 +223,12 @@ void SystemClock_Config(void)
|
|||||||
{
|
{
|
||||||
Error_Handler();
|
Error_Handler();
|
||||||
}
|
}
|
||||||
|
PeriphClkInit.PeriphClockSelection = RCC_PERIPHCLK_USB;
|
||||||
|
PeriphClkInit.UsbClockSelection = RCC_USBCLKSOURCE_PLL_DIV1_5;
|
||||||
|
if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInit) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* USER CODE BEGIN 4 */
|
/* USER CODE BEGIN 4 */
|
||||||
|
|||||||
@@ -7,7 +7,8 @@
|
|||||||
|
|
||||||
|
|
||||||
#include "myComms.h"
|
#include "myComms.h"
|
||||||
#include "usart.h"
|
#include "usbd_cdc_if.h"
|
||||||
|
// #include "usart.h"
|
||||||
#include "clock.h"
|
#include "clock.h"
|
||||||
|
|
||||||
#include "stdio.h"
|
#include "stdio.h"
|
||||||
@@ -32,6 +33,7 @@ static uint8_t ok[] = "OK\n";
|
|||||||
uint8_t myId[] = "Clock\n";
|
uint8_t myId[] = "Clock\n";
|
||||||
|
|
||||||
uint8_t UART_RxBuf[6] = {0};
|
uint8_t UART_RxBuf[6] = {0};
|
||||||
|
uint8_t RxComplete_fl = 0;
|
||||||
|
|
||||||
void (*commands[])(uint32_t) = {
|
void (*commands[])(uint32_t) = {
|
||||||
cmd_WhoAmI,
|
cmd_WhoAmI,
|
||||||
@@ -42,9 +44,17 @@ void (*commands[])(uint32_t) = {
|
|||||||
cmd_setColour_second
|
cmd_setColour_second
|
||||||
};
|
};
|
||||||
|
|
||||||
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart){
|
|
||||||
|
|
||||||
|
void setRxFlag(void){
|
||||||
|
RxComplete_fl = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
void RxCpltCallback(){
|
||||||
|
|
||||||
|
if(RxComplete_fl == 1){
|
||||||
|
RxComplete_fl = 0;
|
||||||
cmd_UART_Request();
|
cmd_UART_Request();
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -54,9 +64,6 @@ void cmd_UART_Request(void){
|
|||||||
|
|
||||||
cmd_RunCommand((uint8_t) msg->cmdId, (uint32_t*) &msg->bytes);
|
cmd_RunCommand((uint8_t) msg->cmdId, (uint32_t*) &msg->bytes);
|
||||||
|
|
||||||
// HAL_UART_Transmit(&huart2, (uint8_t*) msg, sizeof(*msg), 1000);
|
|
||||||
|
|
||||||
// HAL_UART_Transmit(&huart2, ok, sizeof(ok), 1000);
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -73,7 +80,7 @@ void cmd_RunCommand(commands_e cmd, uint32_t* input){
|
|||||||
|
|
||||||
|
|
||||||
void cmd_WhoAmI(uint32_t){
|
void cmd_WhoAmI(uint32_t){
|
||||||
HAL_UART_Transmit(&huart2, myId, sizeof(myId), 1000);
|
CDC_Transmit_FS(myId, sizeof(myId));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -89,7 +96,7 @@ void cmd_SetTime(uint32_t time){
|
|||||||
ds1307_set_minutes(m);
|
ds1307_set_minutes(m);
|
||||||
ds1307_set_second(s);
|
ds1307_set_second(s);
|
||||||
|
|
||||||
HAL_UART_Transmit(&huart2, ok, sizeof(ok), 1000);
|
CDC_Transmit_FS(ok, sizeof(ok));
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -111,7 +118,7 @@ void cmd_GetTime(uint32_t time){
|
|||||||
|
|
||||||
msg[5] = 44;
|
msg[5] = 44;
|
||||||
|
|
||||||
HAL_UART_Transmit(&huart2, msg, sizeof(msg), 1000);
|
CDC_Transmit_FS(msg, sizeof(msg));
|
||||||
}
|
}
|
||||||
|
|
||||||
void cmd_setColour_hour(uint32_t colour){
|
void cmd_setColour_hour(uint32_t colour){
|
||||||
@@ -124,7 +131,7 @@ void cmd_setColour_hour(uint32_t colour){
|
|||||||
|
|
||||||
clock_setColourHours(r, g, b);
|
clock_setColourHours(r, g, b);
|
||||||
|
|
||||||
HAL_UART_Transmit(&huart2, ok, sizeof(ok), 1000);
|
CDC_Transmit_FS(ok, sizeof(ok));
|
||||||
|
|
||||||
}
|
}
|
||||||
void cmd_setColour_minute(uint32_t colour){
|
void cmd_setColour_minute(uint32_t colour){
|
||||||
@@ -137,7 +144,7 @@ void cmd_setColour_minute(uint32_t colour){
|
|||||||
|
|
||||||
clock_setColourMinutes(r, g, b);
|
clock_setColourMinutes(r, g, b);
|
||||||
|
|
||||||
HAL_UART_Transmit(&huart2, ok, sizeof(ok), 1000);
|
CDC_Transmit_FS(ok, sizeof(ok));
|
||||||
|
|
||||||
}
|
}
|
||||||
void cmd_setColour_second(uint32_t colour){
|
void cmd_setColour_second(uint32_t colour){
|
||||||
@@ -150,7 +157,7 @@ void cmd_setColour_second(uint32_t colour){
|
|||||||
|
|
||||||
clock_setColourSeconds(r, g, b);
|
clock_setColourSeconds(r, g, b);
|
||||||
|
|
||||||
HAL_UART_Transmit(&huart2, ok, sizeof(ok), 1000);
|
CDC_Transmit_FS(ok, sizeof(ok));
|
||||||
|
|
||||||
}
|
}
|
||||||
void cmd_setColour_background(uint32_t colour){
|
void cmd_setColour_background(uint32_t colour){
|
||||||
@@ -163,5 +170,5 @@ void cmd_setColour_background(uint32_t colour){
|
|||||||
|
|
||||||
clock_setColourBackground(r, g, b);
|
clock_setColourBackground(r, g, b);
|
||||||
|
|
||||||
HAL_UART_Transmit(&huart2, ok, sizeof(ok), 1000);
|
CDC_Transmit_FS(ok, sizeof(ok));
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -55,9 +55,9 @@
|
|||||||
/* USER CODE END 0 */
|
/* USER CODE END 0 */
|
||||||
|
|
||||||
/* External variables --------------------------------------------------------*/
|
/* External variables --------------------------------------------------------*/
|
||||||
|
extern PCD_HandleTypeDef hpcd_USB_FS;
|
||||||
extern DMA_HandleTypeDef hdma_tim2_ch1;
|
extern DMA_HandleTypeDef hdma_tim2_ch1;
|
||||||
extern TIM_HandleTypeDef htim2;
|
extern TIM_HandleTypeDef htim2;
|
||||||
extern UART_HandleTypeDef huart2;
|
|
||||||
/* USER CODE BEGIN EV */
|
/* USER CODE BEGIN EV */
|
||||||
|
|
||||||
/* USER CODE END EV */
|
/* USER CODE END EV */
|
||||||
@@ -214,6 +214,20 @@ void DMA1_Channel5_IRQHandler(void)
|
|||||||
/* USER CODE END DMA1_Channel5_IRQn 1 */
|
/* USER CODE END DMA1_Channel5_IRQn 1 */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief This function handles USB low priority or CAN RX0 interrupts.
|
||||||
|
*/
|
||||||
|
void USB_LP_CAN1_RX0_IRQHandler(void)
|
||||||
|
{
|
||||||
|
/* USER CODE BEGIN USB_LP_CAN1_RX0_IRQn 0 */
|
||||||
|
|
||||||
|
/* USER CODE END USB_LP_CAN1_RX0_IRQn 0 */
|
||||||
|
HAL_PCD_IRQHandler(&hpcd_USB_FS);
|
||||||
|
/* USER CODE BEGIN USB_LP_CAN1_RX0_IRQn 1 */
|
||||||
|
|
||||||
|
/* USER CODE END USB_LP_CAN1_RX0_IRQn 1 */
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief This function handles TIM2 global interrupt.
|
* @brief This function handles TIM2 global interrupt.
|
||||||
*/
|
*/
|
||||||
@@ -228,20 +242,6 @@ void TIM2_IRQHandler(void)
|
|||||||
/* USER CODE END TIM2_IRQn 1 */
|
/* USER CODE END TIM2_IRQn 1 */
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief This function handles USART2 global interrupt.
|
|
||||||
*/
|
|
||||||
void USART2_IRQHandler(void)
|
|
||||||
{
|
|
||||||
/* USER CODE BEGIN USART2_IRQn 0 */
|
|
||||||
|
|
||||||
/* USER CODE END USART2_IRQn 0 */
|
|
||||||
HAL_UART_IRQHandler(&huart2);
|
|
||||||
/* USER CODE BEGIN USART2_IRQn 1 */
|
|
||||||
|
|
||||||
/* USER CODE END USART2_IRQn 1 */
|
|
||||||
}
|
|
||||||
|
|
||||||
/* USER CODE BEGIN 1 */
|
/* USER CODE BEGIN 1 */
|
||||||
|
|
||||||
/* USER CODE END 1 */
|
/* USER CODE END 1 */
|
||||||
|
|||||||
122
Core/Src/usart.c
122
Core/Src/usart.c
@@ -1,122 +0,0 @@
|
|||||||
/* USER CODE BEGIN Header */
|
|
||||||
/**
|
|
||||||
******************************************************************************
|
|
||||||
* @file usart.c
|
|
||||||
* @brief This file provides code for the configuration
|
|
||||||
* of the USART instances.
|
|
||||||
******************************************************************************
|
|
||||||
* @attention
|
|
||||||
*
|
|
||||||
* Copyright (c) 2026 STMicroelectronics.
|
|
||||||
* All rights reserved.
|
|
||||||
*
|
|
||||||
* This software is licensed under terms that can be found in the LICENSE file
|
|
||||||
* in the root directory of this software component.
|
|
||||||
* If no LICENSE file comes with this software, it is provided AS-IS.
|
|
||||||
*
|
|
||||||
******************************************************************************
|
|
||||||
*/
|
|
||||||
/* USER CODE END Header */
|
|
||||||
/* Includes ------------------------------------------------------------------*/
|
|
||||||
#include "usart.h"
|
|
||||||
|
|
||||||
/* USER CODE BEGIN 0 */
|
|
||||||
|
|
||||||
/* USER CODE END 0 */
|
|
||||||
|
|
||||||
UART_HandleTypeDef huart2;
|
|
||||||
|
|
||||||
/* USART2 init function */
|
|
||||||
|
|
||||||
void MX_USART2_UART_Init(void)
|
|
||||||
{
|
|
||||||
|
|
||||||
/* USER CODE BEGIN USART2_Init 0 */
|
|
||||||
|
|
||||||
/* USER CODE END USART2_Init 0 */
|
|
||||||
|
|
||||||
/* USER CODE BEGIN USART2_Init 1 */
|
|
||||||
|
|
||||||
/* USER CODE END USART2_Init 1 */
|
|
||||||
huart2.Instance = USART2;
|
|
||||||
huart2.Init.BaudRate = 115200;
|
|
||||||
huart2.Init.WordLength = UART_WORDLENGTH_8B;
|
|
||||||
huart2.Init.StopBits = UART_STOPBITS_1;
|
|
||||||
huart2.Init.Parity = UART_PARITY_NONE;
|
|
||||||
huart2.Init.Mode = UART_MODE_TX_RX;
|
|
||||||
huart2.Init.HwFlowCtl = UART_HWCONTROL_NONE;
|
|
||||||
huart2.Init.OverSampling = UART_OVERSAMPLING_16;
|
|
||||||
if (HAL_UART_Init(&huart2) != HAL_OK)
|
|
||||||
{
|
|
||||||
Error_Handler();
|
|
||||||
}
|
|
||||||
/* USER CODE BEGIN USART2_Init 2 */
|
|
||||||
|
|
||||||
/* USER CODE END USART2_Init 2 */
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
void HAL_UART_MspInit(UART_HandleTypeDef* uartHandle)
|
|
||||||
{
|
|
||||||
|
|
||||||
GPIO_InitTypeDef GPIO_InitStruct = {0};
|
|
||||||
if(uartHandle->Instance==USART2)
|
|
||||||
{
|
|
||||||
/* USER CODE BEGIN USART2_MspInit 0 */
|
|
||||||
|
|
||||||
/* USER CODE END USART2_MspInit 0 */
|
|
||||||
/* USART2 clock enable */
|
|
||||||
__HAL_RCC_USART2_CLK_ENABLE();
|
|
||||||
|
|
||||||
__HAL_RCC_GPIOA_CLK_ENABLE();
|
|
||||||
/**USART2 GPIO Configuration
|
|
||||||
PA2 ------> USART2_TX
|
|
||||||
PA3 ------> USART2_RX
|
|
||||||
*/
|
|
||||||
GPIO_InitStruct.Pin = GPIO_PIN_2;
|
|
||||||
GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
|
|
||||||
GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;
|
|
||||||
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
|
|
||||||
|
|
||||||
GPIO_InitStruct.Pin = GPIO_PIN_3;
|
|
||||||
GPIO_InitStruct.Mode = GPIO_MODE_INPUT;
|
|
||||||
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
|
||||||
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
|
|
||||||
|
|
||||||
/* USART2 interrupt Init */
|
|
||||||
HAL_NVIC_SetPriority(USART2_IRQn, 0, 0);
|
|
||||||
HAL_NVIC_EnableIRQ(USART2_IRQn);
|
|
||||||
/* USER CODE BEGIN USART2_MspInit 1 */
|
|
||||||
|
|
||||||
/* USER CODE END USART2_MspInit 1 */
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void HAL_UART_MspDeInit(UART_HandleTypeDef* uartHandle)
|
|
||||||
{
|
|
||||||
|
|
||||||
if(uartHandle->Instance==USART2)
|
|
||||||
{
|
|
||||||
/* USER CODE BEGIN USART2_MspDeInit 0 */
|
|
||||||
|
|
||||||
/* USER CODE END USART2_MspDeInit 0 */
|
|
||||||
/* Peripheral clock disable */
|
|
||||||
__HAL_RCC_USART2_CLK_DISABLE();
|
|
||||||
|
|
||||||
/**USART2 GPIO Configuration
|
|
||||||
PA2 ------> USART2_TX
|
|
||||||
PA3 ------> USART2_RX
|
|
||||||
*/
|
|
||||||
HAL_GPIO_DeInit(GPIOA, GPIO_PIN_2|GPIO_PIN_3);
|
|
||||||
|
|
||||||
/* USART2 interrupt Deinit */
|
|
||||||
HAL_NVIC_DisableIRQ(USART2_IRQn);
|
|
||||||
/* USER CODE BEGIN USART2_MspDeInit 1 */
|
|
||||||
|
|
||||||
/* USER CODE END USART2_MspDeInit 1 */
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* USER CODE BEGIN 1 */
|
|
||||||
|
|
||||||
/* USER CODE END 1 */
|
|
||||||
1055
Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_pcd.h
Normal file
1055
Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_pcd.h
Normal file
File diff suppressed because it is too large
Load Diff
85
Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_pcd_ex.h
Normal file
85
Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_hal_pcd_ex.h
Normal file
@@ -0,0 +1,85 @@
|
|||||||
|
/**
|
||||||
|
******************************************************************************
|
||||||
|
* @file stm32f1xx_hal_pcd_ex.h
|
||||||
|
* @author MCD Application Team
|
||||||
|
* @brief Header file of PCD HAL Extension module.
|
||||||
|
******************************************************************************
|
||||||
|
* @attention
|
||||||
|
*
|
||||||
|
* Copyright (c) 2016 STMicroelectronics.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* This software is licensed under terms that can be found in the LICENSE file
|
||||||
|
* in the root directory of this software component.
|
||||||
|
* If no LICENSE file comes with this software, it is provided AS-IS.
|
||||||
|
*
|
||||||
|
******************************************************************************
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Define to prevent recursive inclusion -------------------------------------*/
|
||||||
|
#ifndef STM32F1xx_HAL_PCD_EX_H
|
||||||
|
#define STM32F1xx_HAL_PCD_EX_H
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif /* __cplusplus */
|
||||||
|
|
||||||
|
/* Includes ------------------------------------------------------------------*/
|
||||||
|
#include "stm32f1xx_hal_def.h"
|
||||||
|
|
||||||
|
#if defined (USB) || defined (USB_OTG_FS)
|
||||||
|
/** @addtogroup STM32F1xx_HAL_Driver
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @addtogroup PCDEx
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
/* Exported types ------------------------------------------------------------*/
|
||||||
|
/* Exported constants --------------------------------------------------------*/
|
||||||
|
/* Exported macros -----------------------------------------------------------*/
|
||||||
|
/* Exported functions --------------------------------------------------------*/
|
||||||
|
/** @addtogroup PCDEx_Exported_Functions PCDEx Exported Functions
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
/** @addtogroup PCDEx_Exported_Functions_Group1 Peripheral Control functions
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
#if defined (USB_OTG_FS)
|
||||||
|
HAL_StatusTypeDef HAL_PCDEx_SetTxFiFo(PCD_HandleTypeDef *hpcd, uint8_t fifo, uint16_t size);
|
||||||
|
HAL_StatusTypeDef HAL_PCDEx_SetRxFiFo(PCD_HandleTypeDef *hpcd, uint16_t size);
|
||||||
|
#endif /* defined (USB_OTG_FS) */
|
||||||
|
|
||||||
|
#if defined (USB)
|
||||||
|
HAL_StatusTypeDef HAL_PCDEx_PMAConfig(PCD_HandleTypeDef *hpcd, uint16_t ep_addr,
|
||||||
|
uint16_t ep_kind, uint32_t pmaadress);
|
||||||
|
|
||||||
|
void HAL_PCDEx_SetConnectionState(PCD_HandleTypeDef *hpcd, uint8_t state);
|
||||||
|
#endif /* defined (USB) */
|
||||||
|
void HAL_PCDEx_LPM_Callback(PCD_HandleTypeDef *hpcd, PCD_LPM_MsgTypeDef msg);
|
||||||
|
void HAL_PCDEx_BCD_Callback(PCD_HandleTypeDef *hpcd, PCD_BCD_MsgTypeDef msg);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
#endif /* defined (USB) || defined (USB_OTG_FS) */
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif /* __cplusplus */
|
||||||
|
|
||||||
|
|
||||||
|
#endif /* STM32F1xx_HAL_PCD_EX_H */
|
||||||
@@ -1,915 +0,0 @@
|
|||||||
/**
|
|
||||||
******************************************************************************
|
|
||||||
* @file stm32f1xx_hal_uart.h
|
|
||||||
* @author MCD Application Team
|
|
||||||
* @brief Header file of UART HAL module.
|
|
||||||
******************************************************************************
|
|
||||||
* @attention
|
|
||||||
*
|
|
||||||
* Copyright (c) 2016 STMicroelectronics.
|
|
||||||
* All rights reserved.
|
|
||||||
*
|
|
||||||
* This software is licensed under terms that can be found in the LICENSE file
|
|
||||||
* in the root directory of this software component.
|
|
||||||
* If no LICENSE file comes with this software, it is provided AS-IS.
|
|
||||||
*
|
|
||||||
******************************************************************************
|
|
||||||
*/
|
|
||||||
|
|
||||||
/* Define to prevent recursive inclusion -------------------------------------*/
|
|
||||||
#ifndef __STM32F1xx_HAL_UART_H
|
|
||||||
#define __STM32F1xx_HAL_UART_H
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
extern "C" {
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* Includes ------------------------------------------------------------------*/
|
|
||||||
#include "stm32f1xx_hal_def.h"
|
|
||||||
|
|
||||||
/** @addtogroup STM32F1xx_HAL_Driver
|
|
||||||
* @{
|
|
||||||
*/
|
|
||||||
|
|
||||||
/** @addtogroup UART
|
|
||||||
* @{
|
|
||||||
*/
|
|
||||||
|
|
||||||
/* Exported types ------------------------------------------------------------*/
|
|
||||||
/** @defgroup UART_Exported_Types UART Exported Types
|
|
||||||
* @{
|
|
||||||
*/
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief UART Init Structure definition
|
|
||||||
*/
|
|
||||||
typedef struct
|
|
||||||
{
|
|
||||||
uint32_t BaudRate; /*!< This member configures the UART communication baud rate.
|
|
||||||
The baud rate is computed using the following formula:
|
|
||||||
- IntegerDivider = ((PCLKx) / (16 * (huart->Init.BaudRate)))
|
|
||||||
- FractionalDivider = ((IntegerDivider - ((uint32_t) IntegerDivider)) * 16) + 0.5 */
|
|
||||||
|
|
||||||
uint32_t WordLength; /*!< Specifies the number of data bits transmitted or received in a frame.
|
|
||||||
This parameter can be a value of @ref UART_Word_Length */
|
|
||||||
|
|
||||||
uint32_t StopBits; /*!< Specifies the number of stop bits transmitted.
|
|
||||||
This parameter can be a value of @ref UART_Stop_Bits */
|
|
||||||
|
|
||||||
uint32_t Parity; /*!< Specifies the parity mode.
|
|
||||||
This parameter can be a value of @ref UART_Parity
|
|
||||||
@note When parity is enabled, the computed parity is inserted
|
|
||||||
at the MSB position of the transmitted data (9th bit when
|
|
||||||
the word length is set to 9 data bits; 8th bit when the
|
|
||||||
word length is set to 8 data bits). */
|
|
||||||
|
|
||||||
uint32_t Mode; /*!< Specifies whether the Receive or Transmit mode is enabled or disabled.
|
|
||||||
This parameter can be a value of @ref UART_Mode */
|
|
||||||
|
|
||||||
uint32_t HwFlowCtl; /*!< Specifies whether the hardware flow control mode is enabled or disabled.
|
|
||||||
This parameter can be a value of @ref UART_Hardware_Flow_Control */
|
|
||||||
|
|
||||||
uint32_t OverSampling; /*!< Specifies whether the Over sampling 8 is enabled or disabled, to achieve higher speed (up to fPCLK/8).
|
|
||||||
This parameter can be a value of @ref UART_Over_Sampling. This feature is only available
|
|
||||||
on STM32F100xx family, so OverSampling parameter should always be set to 16. */
|
|
||||||
} UART_InitTypeDef;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief HAL UART State structures definition
|
|
||||||
* @note HAL UART State value is a combination of 2 different substates: gState and RxState.
|
|
||||||
* - gState contains UART state information related to global Handle management
|
|
||||||
* and also information related to Tx operations.
|
|
||||||
* gState value coding follow below described bitmap :
|
|
||||||
* b7-b6 Error information
|
|
||||||
* 00 : No Error
|
|
||||||
* 01 : (Not Used)
|
|
||||||
* 10 : Timeout
|
|
||||||
* 11 : Error
|
|
||||||
* b5 Peripheral initialization status
|
|
||||||
* 0 : Reset (Peripheral not initialized)
|
|
||||||
* 1 : Init done (Peripheral initialized. HAL UART Init function already called)
|
|
||||||
* b4-b3 (not used)
|
|
||||||
* xx : Should be set to 00
|
|
||||||
* b2 Intrinsic process state
|
|
||||||
* 0 : Ready
|
|
||||||
* 1 : Busy (Peripheral busy with some configuration or internal operations)
|
|
||||||
* b1 (not used)
|
|
||||||
* x : Should be set to 0
|
|
||||||
* b0 Tx state
|
|
||||||
* 0 : Ready (no Tx operation ongoing)
|
|
||||||
* 1 : Busy (Tx operation ongoing)
|
|
||||||
* - RxState contains information related to Rx operations.
|
|
||||||
* RxState value coding follow below described bitmap :
|
|
||||||
* b7-b6 (not used)
|
|
||||||
* xx : Should be set to 00
|
|
||||||
* b5 Peripheral initialization status
|
|
||||||
* 0 : Reset (Peripheral not initialized)
|
|
||||||
* 1 : Init done (Peripheral initialized)
|
|
||||||
* b4-b2 (not used)
|
|
||||||
* xxx : Should be set to 000
|
|
||||||
* b1 Rx state
|
|
||||||
* 0 : Ready (no Rx operation ongoing)
|
|
||||||
* 1 : Busy (Rx operation ongoing)
|
|
||||||
* b0 (not used)
|
|
||||||
* x : Should be set to 0.
|
|
||||||
*/
|
|
||||||
typedef enum
|
|
||||||
{
|
|
||||||
HAL_UART_STATE_RESET = 0x00U, /*!< Peripheral is not yet Initialized
|
|
||||||
Value is allowed for gState and RxState */
|
|
||||||
HAL_UART_STATE_READY = 0x20U, /*!< Peripheral Initialized and ready for use
|
|
||||||
Value is allowed for gState and RxState */
|
|
||||||
HAL_UART_STATE_BUSY = 0x24U, /*!< an internal process is ongoing
|
|
||||||
Value is allowed for gState only */
|
|
||||||
HAL_UART_STATE_BUSY_TX = 0x21U, /*!< Data Transmission process is ongoing
|
|
||||||
Value is allowed for gState only */
|
|
||||||
HAL_UART_STATE_BUSY_RX = 0x22U, /*!< Data Reception process is ongoing
|
|
||||||
Value is allowed for RxState only */
|
|
||||||
HAL_UART_STATE_BUSY_TX_RX = 0x23U, /*!< Data Transmission and Reception process is ongoing
|
|
||||||
Not to be used for neither gState nor RxState.
|
|
||||||
Value is result of combination (Or) between gState and RxState values */
|
|
||||||
HAL_UART_STATE_TIMEOUT = 0xA0U, /*!< Timeout state
|
|
||||||
Value is allowed for gState only */
|
|
||||||
HAL_UART_STATE_ERROR = 0xE0U /*!< Error
|
|
||||||
Value is allowed for gState only */
|
|
||||||
} HAL_UART_StateTypeDef;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief HAL UART Reception type definition
|
|
||||||
* @note HAL UART Reception type value aims to identify which type of Reception is ongoing.
|
|
||||||
* This parameter can be a value of @ref UART_Reception_Type_Values :
|
|
||||||
* HAL_UART_RECEPTION_STANDARD = 0x00U,
|
|
||||||
* HAL_UART_RECEPTION_TOIDLE = 0x01U,
|
|
||||||
*/
|
|
||||||
typedef uint32_t HAL_UART_RxTypeTypeDef;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief HAL UART Rx Event type definition
|
|
||||||
* @note HAL UART Rx Event type value aims to identify which type of Event has occurred
|
|
||||||
* leading to call of the RxEvent callback.
|
|
||||||
* This parameter can be a value of @ref UART_RxEvent_Type_Values :
|
|
||||||
* HAL_UART_RXEVENT_TC = 0x00U,
|
|
||||||
* HAL_UART_RXEVENT_HT = 0x01U,
|
|
||||||
* HAL_UART_RXEVENT_IDLE = 0x02U,
|
|
||||||
*/
|
|
||||||
typedef uint32_t HAL_UART_RxEventTypeTypeDef;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief UART handle Structure definition
|
|
||||||
*/
|
|
||||||
typedef struct __UART_HandleTypeDef
|
|
||||||
{
|
|
||||||
USART_TypeDef *Instance; /*!< UART registers base address */
|
|
||||||
|
|
||||||
UART_InitTypeDef Init; /*!< UART communication parameters */
|
|
||||||
|
|
||||||
const uint8_t *pTxBuffPtr; /*!< Pointer to UART Tx transfer Buffer */
|
|
||||||
|
|
||||||
uint16_t TxXferSize; /*!< UART Tx Transfer size */
|
|
||||||
|
|
||||||
__IO uint16_t TxXferCount; /*!< UART Tx Transfer Counter */
|
|
||||||
|
|
||||||
uint8_t *pRxBuffPtr; /*!< Pointer to UART Rx transfer Buffer */
|
|
||||||
|
|
||||||
uint16_t RxXferSize; /*!< UART Rx Transfer size */
|
|
||||||
|
|
||||||
__IO uint16_t RxXferCount; /*!< UART Rx Transfer Counter */
|
|
||||||
|
|
||||||
__IO HAL_UART_RxTypeTypeDef ReceptionType; /*!< Type of ongoing reception */
|
|
||||||
|
|
||||||
__IO HAL_UART_RxEventTypeTypeDef RxEventType; /*!< Type of Rx Event */
|
|
||||||
|
|
||||||
DMA_HandleTypeDef *hdmatx; /*!< UART Tx DMA Handle parameters */
|
|
||||||
|
|
||||||
DMA_HandleTypeDef *hdmarx; /*!< UART Rx DMA Handle parameters */
|
|
||||||
|
|
||||||
HAL_LockTypeDef Lock; /*!< Locking object */
|
|
||||||
|
|
||||||
__IO HAL_UART_StateTypeDef gState; /*!< UART state information related to global Handle management
|
|
||||||
and also related to Tx operations.
|
|
||||||
This parameter can be a value of @ref HAL_UART_StateTypeDef */
|
|
||||||
|
|
||||||
__IO HAL_UART_StateTypeDef RxState; /*!< UART state information related to Rx operations.
|
|
||||||
This parameter can be a value of @ref HAL_UART_StateTypeDef */
|
|
||||||
|
|
||||||
__IO uint32_t ErrorCode; /*!< UART Error code */
|
|
||||||
|
|
||||||
#if (USE_HAL_UART_REGISTER_CALLBACKS == 1)
|
|
||||||
void (* TxHalfCpltCallback)(struct __UART_HandleTypeDef *huart); /*!< UART Tx Half Complete Callback */
|
|
||||||
void (* TxCpltCallback)(struct __UART_HandleTypeDef *huart); /*!< UART Tx Complete Callback */
|
|
||||||
void (* RxHalfCpltCallback)(struct __UART_HandleTypeDef *huart); /*!< UART Rx Half Complete Callback */
|
|
||||||
void (* RxCpltCallback)(struct __UART_HandleTypeDef *huart); /*!< UART Rx Complete Callback */
|
|
||||||
void (* ErrorCallback)(struct __UART_HandleTypeDef *huart); /*!< UART Error Callback */
|
|
||||||
void (* AbortCpltCallback)(struct __UART_HandleTypeDef *huart); /*!< UART Abort Complete Callback */
|
|
||||||
void (* AbortTransmitCpltCallback)(struct __UART_HandleTypeDef *huart); /*!< UART Abort Transmit Complete Callback */
|
|
||||||
void (* AbortReceiveCpltCallback)(struct __UART_HandleTypeDef *huart); /*!< UART Abort Receive Complete Callback */
|
|
||||||
void (* WakeupCallback)(struct __UART_HandleTypeDef *huart); /*!< UART Wakeup Callback */
|
|
||||||
void (* RxEventCallback)(struct __UART_HandleTypeDef *huart, uint16_t Pos); /*!< UART Reception Event Callback */
|
|
||||||
|
|
||||||
void (* MspInitCallback)(struct __UART_HandleTypeDef *huart); /*!< UART Msp Init callback */
|
|
||||||
void (* MspDeInitCallback)(struct __UART_HandleTypeDef *huart); /*!< UART Msp DeInit callback */
|
|
||||||
#endif /* USE_HAL_UART_REGISTER_CALLBACKS */
|
|
||||||
|
|
||||||
} UART_HandleTypeDef;
|
|
||||||
|
|
||||||
#if (USE_HAL_UART_REGISTER_CALLBACKS == 1)
|
|
||||||
/**
|
|
||||||
* @brief HAL UART Callback ID enumeration definition
|
|
||||||
*/
|
|
||||||
typedef enum
|
|
||||||
{
|
|
||||||
HAL_UART_TX_HALFCOMPLETE_CB_ID = 0x00U, /*!< UART Tx Half Complete Callback ID */
|
|
||||||
HAL_UART_TX_COMPLETE_CB_ID = 0x01U, /*!< UART Tx Complete Callback ID */
|
|
||||||
HAL_UART_RX_HALFCOMPLETE_CB_ID = 0x02U, /*!< UART Rx Half Complete Callback ID */
|
|
||||||
HAL_UART_RX_COMPLETE_CB_ID = 0x03U, /*!< UART Rx Complete Callback ID */
|
|
||||||
HAL_UART_ERROR_CB_ID = 0x04U, /*!< UART Error Callback ID */
|
|
||||||
HAL_UART_ABORT_COMPLETE_CB_ID = 0x05U, /*!< UART Abort Complete Callback ID */
|
|
||||||
HAL_UART_ABORT_TRANSMIT_COMPLETE_CB_ID = 0x06U, /*!< UART Abort Transmit Complete Callback ID */
|
|
||||||
HAL_UART_ABORT_RECEIVE_COMPLETE_CB_ID = 0x07U, /*!< UART Abort Receive Complete Callback ID */
|
|
||||||
HAL_UART_WAKEUP_CB_ID = 0x08U, /*!< UART Wakeup Callback ID */
|
|
||||||
|
|
||||||
HAL_UART_MSPINIT_CB_ID = 0x0BU, /*!< UART MspInit callback ID */
|
|
||||||
HAL_UART_MSPDEINIT_CB_ID = 0x0CU /*!< UART MspDeInit callback ID */
|
|
||||||
|
|
||||||
} HAL_UART_CallbackIDTypeDef;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief HAL UART Callback pointer definition
|
|
||||||
*/
|
|
||||||
typedef void (*pUART_CallbackTypeDef)(UART_HandleTypeDef *huart); /*!< pointer to an UART callback function */
|
|
||||||
typedef void (*pUART_RxEventCallbackTypeDef)(struct __UART_HandleTypeDef *huart, uint16_t Pos); /*!< pointer to a UART Rx Event specific callback function */
|
|
||||||
|
|
||||||
#endif /* USE_HAL_UART_REGISTER_CALLBACKS */
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @}
|
|
||||||
*/
|
|
||||||
|
|
||||||
/* Exported constants --------------------------------------------------------*/
|
|
||||||
/** @defgroup UART_Exported_Constants UART Exported Constants
|
|
||||||
* @{
|
|
||||||
*/
|
|
||||||
|
|
||||||
/** @defgroup UART_Error_Code UART Error Code
|
|
||||||
* @{
|
|
||||||
*/
|
|
||||||
#define HAL_UART_ERROR_NONE 0x00000000U /*!< No error */
|
|
||||||
#define HAL_UART_ERROR_PE 0x00000001U /*!< Parity error */
|
|
||||||
#define HAL_UART_ERROR_NE 0x00000002U /*!< Noise error */
|
|
||||||
#define HAL_UART_ERROR_FE 0x00000004U /*!< Frame error */
|
|
||||||
#define HAL_UART_ERROR_ORE 0x00000008U /*!< Overrun error */
|
|
||||||
#define HAL_UART_ERROR_DMA 0x00000010U /*!< DMA transfer error */
|
|
||||||
#if (USE_HAL_UART_REGISTER_CALLBACKS == 1)
|
|
||||||
#define HAL_UART_ERROR_INVALID_CALLBACK 0x00000020U /*!< Invalid Callback error */
|
|
||||||
#endif /* USE_HAL_UART_REGISTER_CALLBACKS */
|
|
||||||
/**
|
|
||||||
* @}
|
|
||||||
*/
|
|
||||||
|
|
||||||
/** @defgroup UART_Word_Length UART Word Length
|
|
||||||
* @{
|
|
||||||
*/
|
|
||||||
#define UART_WORDLENGTH_8B 0x00000000U
|
|
||||||
#define UART_WORDLENGTH_9B ((uint32_t)USART_CR1_M)
|
|
||||||
/**
|
|
||||||
* @}
|
|
||||||
*/
|
|
||||||
|
|
||||||
/** @defgroup UART_Stop_Bits UART Number of Stop Bits
|
|
||||||
* @{
|
|
||||||
*/
|
|
||||||
#define UART_STOPBITS_1 0x00000000U
|
|
||||||
#define UART_STOPBITS_2 ((uint32_t)USART_CR2_STOP_1)
|
|
||||||
/**
|
|
||||||
* @}
|
|
||||||
*/
|
|
||||||
|
|
||||||
/** @defgroup UART_Parity UART Parity
|
|
||||||
* @{
|
|
||||||
*/
|
|
||||||
#define UART_PARITY_NONE 0x00000000U
|
|
||||||
#define UART_PARITY_EVEN ((uint32_t)USART_CR1_PCE)
|
|
||||||
#define UART_PARITY_ODD ((uint32_t)(USART_CR1_PCE | USART_CR1_PS))
|
|
||||||
/**
|
|
||||||
* @}
|
|
||||||
*/
|
|
||||||
|
|
||||||
/** @defgroup UART_Hardware_Flow_Control UART Hardware Flow Control
|
|
||||||
* @{
|
|
||||||
*/
|
|
||||||
#define UART_HWCONTROL_NONE 0x00000000U
|
|
||||||
#define UART_HWCONTROL_RTS ((uint32_t)USART_CR3_RTSE)
|
|
||||||
#define UART_HWCONTROL_CTS ((uint32_t)USART_CR3_CTSE)
|
|
||||||
#define UART_HWCONTROL_RTS_CTS ((uint32_t)(USART_CR3_RTSE | USART_CR3_CTSE))
|
|
||||||
/**
|
|
||||||
* @}
|
|
||||||
*/
|
|
||||||
|
|
||||||
/** @defgroup UART_Mode UART Transfer Mode
|
|
||||||
* @{
|
|
||||||
*/
|
|
||||||
#define UART_MODE_RX ((uint32_t)USART_CR1_RE)
|
|
||||||
#define UART_MODE_TX ((uint32_t)USART_CR1_TE)
|
|
||||||
#define UART_MODE_TX_RX ((uint32_t)(USART_CR1_TE | USART_CR1_RE))
|
|
||||||
/**
|
|
||||||
* @}
|
|
||||||
*/
|
|
||||||
|
|
||||||
/** @defgroup UART_State UART State
|
|
||||||
* @{
|
|
||||||
*/
|
|
||||||
#define UART_STATE_DISABLE 0x00000000U
|
|
||||||
#define UART_STATE_ENABLE ((uint32_t)USART_CR1_UE)
|
|
||||||
/**
|
|
||||||
* @}
|
|
||||||
*/
|
|
||||||
|
|
||||||
/** @defgroup UART_Over_Sampling UART Over Sampling
|
|
||||||
* @{
|
|
||||||
*/
|
|
||||||
#define UART_OVERSAMPLING_16 0x00000000U
|
|
||||||
#if defined(USART_CR1_OVER8)
|
|
||||||
#define UART_OVERSAMPLING_8 ((uint32_t)USART_CR1_OVER8)
|
|
||||||
#endif /* USART_CR1_OVER8 */
|
|
||||||
/**
|
|
||||||
* @}
|
|
||||||
*/
|
|
||||||
|
|
||||||
/** @defgroup UART_LIN_Break_Detection_Length UART LIN Break Detection Length
|
|
||||||
* @{
|
|
||||||
*/
|
|
||||||
#define UART_LINBREAKDETECTLENGTH_10B 0x00000000U
|
|
||||||
#define UART_LINBREAKDETECTLENGTH_11B ((uint32_t)USART_CR2_LBDL)
|
|
||||||
/**
|
|
||||||
* @}
|
|
||||||
*/
|
|
||||||
|
|
||||||
/** @defgroup UART_WakeUp_functions UART Wakeup Functions
|
|
||||||
* @{
|
|
||||||
*/
|
|
||||||
#define UART_WAKEUPMETHOD_IDLELINE 0x00000000U
|
|
||||||
#define UART_WAKEUPMETHOD_ADDRESSMARK ((uint32_t)USART_CR1_WAKE)
|
|
||||||
/**
|
|
||||||
* @}
|
|
||||||
*/
|
|
||||||
|
|
||||||
/** @defgroup UART_Flags UART FLags
|
|
||||||
* Elements values convention: 0xXXXX
|
|
||||||
* - 0xXXXX : Flag mask in the SR register
|
|
||||||
* @{
|
|
||||||
*/
|
|
||||||
#define UART_FLAG_CTS ((uint32_t)USART_SR_CTS)
|
|
||||||
#define UART_FLAG_LBD ((uint32_t)USART_SR_LBD)
|
|
||||||
#define UART_FLAG_TXE ((uint32_t)USART_SR_TXE)
|
|
||||||
#define UART_FLAG_TC ((uint32_t)USART_SR_TC)
|
|
||||||
#define UART_FLAG_RXNE ((uint32_t)USART_SR_RXNE)
|
|
||||||
#define UART_FLAG_IDLE ((uint32_t)USART_SR_IDLE)
|
|
||||||
#define UART_FLAG_ORE ((uint32_t)USART_SR_ORE)
|
|
||||||
#define UART_FLAG_NE ((uint32_t)USART_SR_NE)
|
|
||||||
#define UART_FLAG_FE ((uint32_t)USART_SR_FE)
|
|
||||||
#define UART_FLAG_PE ((uint32_t)USART_SR_PE)
|
|
||||||
/**
|
|
||||||
* @}
|
|
||||||
*/
|
|
||||||
|
|
||||||
/** @defgroup UART_Interrupt_definition UART Interrupt Definitions
|
|
||||||
* Elements values convention: 0xY000XXXX
|
|
||||||
* - XXXX : Interrupt mask (16 bits) in the Y register
|
|
||||||
* - Y : Interrupt source register (2bits)
|
|
||||||
* - 0001: CR1 register
|
|
||||||
* - 0010: CR2 register
|
|
||||||
* - 0011: CR3 register
|
|
||||||
* @{
|
|
||||||
*/
|
|
||||||
|
|
||||||
#define UART_IT_PE ((uint32_t)(UART_CR1_REG_INDEX << 28U | USART_CR1_PEIE))
|
|
||||||
#define UART_IT_TXE ((uint32_t)(UART_CR1_REG_INDEX << 28U | USART_CR1_TXEIE))
|
|
||||||
#define UART_IT_TC ((uint32_t)(UART_CR1_REG_INDEX << 28U | USART_CR1_TCIE))
|
|
||||||
#define UART_IT_RXNE ((uint32_t)(UART_CR1_REG_INDEX << 28U | USART_CR1_RXNEIE))
|
|
||||||
#define UART_IT_IDLE ((uint32_t)(UART_CR1_REG_INDEX << 28U | USART_CR1_IDLEIE))
|
|
||||||
|
|
||||||
#define UART_IT_LBD ((uint32_t)(UART_CR2_REG_INDEX << 28U | USART_CR2_LBDIE))
|
|
||||||
|
|
||||||
#define UART_IT_CTS ((uint32_t)(UART_CR3_REG_INDEX << 28U | USART_CR3_CTSIE))
|
|
||||||
#define UART_IT_ERR ((uint32_t)(UART_CR3_REG_INDEX << 28U | USART_CR3_EIE))
|
|
||||||
/**
|
|
||||||
* @}
|
|
||||||
*/
|
|
||||||
|
|
||||||
/** @defgroup UART_Reception_Type_Values UART Reception type values
|
|
||||||
* @{
|
|
||||||
*/
|
|
||||||
#define HAL_UART_RECEPTION_STANDARD (0x00000000U) /*!< Standard reception */
|
|
||||||
#define HAL_UART_RECEPTION_TOIDLE (0x00000001U) /*!< Reception till completion or IDLE event */
|
|
||||||
/**
|
|
||||||
* @}
|
|
||||||
*/
|
|
||||||
|
|
||||||
/** @defgroup UART_RxEvent_Type_Values UART RxEvent type values
|
|
||||||
* @{
|
|
||||||
*/
|
|
||||||
#define HAL_UART_RXEVENT_TC (0x00000000U) /*!< RxEvent linked to Transfer Complete event */
|
|
||||||
#define HAL_UART_RXEVENT_HT (0x00000001U) /*!< RxEvent linked to Half Transfer event */
|
|
||||||
#define HAL_UART_RXEVENT_IDLE (0x00000002U)
|
|
||||||
/**
|
|
||||||
* @}
|
|
||||||
*/
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @}
|
|
||||||
*/
|
|
||||||
|
|
||||||
/* Exported macro ------------------------------------------------------------*/
|
|
||||||
/** @defgroup UART_Exported_Macros UART Exported Macros
|
|
||||||
* @{
|
|
||||||
*/
|
|
||||||
|
|
||||||
/** @brief Reset UART handle gstate & RxState
|
|
||||||
* @param __HANDLE__ specifies the UART Handle.
|
|
||||||
* UART Handle selects the USARTx or UARTy peripheral
|
|
||||||
* (USART,UART availability and x,y values depending on device).
|
|
||||||
* @retval None
|
|
||||||
*/
|
|
||||||
#if (USE_HAL_UART_REGISTER_CALLBACKS == 1)
|
|
||||||
#define __HAL_UART_RESET_HANDLE_STATE(__HANDLE__) do{ \
|
|
||||||
(__HANDLE__)->gState = HAL_UART_STATE_RESET; \
|
|
||||||
(__HANDLE__)->RxState = HAL_UART_STATE_RESET; \
|
|
||||||
(__HANDLE__)->MspInitCallback = NULL; \
|
|
||||||
(__HANDLE__)->MspDeInitCallback = NULL; \
|
|
||||||
} while(0U)
|
|
||||||
#else
|
|
||||||
#define __HAL_UART_RESET_HANDLE_STATE(__HANDLE__) do{ \
|
|
||||||
(__HANDLE__)->gState = HAL_UART_STATE_RESET; \
|
|
||||||
(__HANDLE__)->RxState = HAL_UART_STATE_RESET; \
|
|
||||||
} while(0U)
|
|
||||||
#endif /*USE_HAL_UART_REGISTER_CALLBACKS */
|
|
||||||
|
|
||||||
/** @brief Flushes the UART DR register
|
|
||||||
* @param __HANDLE__ specifies the UART Handle.
|
|
||||||
* UART Handle selects the USARTx or UARTy peripheral
|
|
||||||
* (USART,UART availability and x,y values depending on device).
|
|
||||||
*/
|
|
||||||
#define __HAL_UART_FLUSH_DRREGISTER(__HANDLE__) ((__HANDLE__)->Instance->DR)
|
|
||||||
|
|
||||||
/** @brief Checks whether the specified UART flag is set or not.
|
|
||||||
* @param __HANDLE__ specifies the UART Handle.
|
|
||||||
* UART Handle selects the USARTx or UARTy peripheral
|
|
||||||
* (USART,UART availability and x,y values depending on device).
|
|
||||||
* @param __FLAG__ specifies the flag to check.
|
|
||||||
* This parameter can be one of the following values:
|
|
||||||
* @arg UART_FLAG_CTS: CTS Change flag (not available for UART4 and UART5)
|
|
||||||
* @arg UART_FLAG_LBD: LIN Break detection flag
|
|
||||||
* @arg UART_FLAG_TXE: Transmit data register empty flag
|
|
||||||
* @arg UART_FLAG_TC: Transmission Complete flag
|
|
||||||
* @arg UART_FLAG_RXNE: Receive data register not empty flag
|
|
||||||
* @arg UART_FLAG_IDLE: Idle Line detection flag
|
|
||||||
* @arg UART_FLAG_ORE: Overrun Error flag
|
|
||||||
* @arg UART_FLAG_NE: Noise Error flag
|
|
||||||
* @arg UART_FLAG_FE: Framing Error flag
|
|
||||||
* @arg UART_FLAG_PE: Parity Error flag
|
|
||||||
* @retval The new state of __FLAG__ (TRUE or FALSE).
|
|
||||||
*/
|
|
||||||
#define __HAL_UART_GET_FLAG(__HANDLE__, __FLAG__) (((__HANDLE__)->Instance->SR & (__FLAG__)) == (__FLAG__))
|
|
||||||
|
|
||||||
/** @brief Clears the specified UART pending flag.
|
|
||||||
* @param __HANDLE__ specifies the UART Handle.
|
|
||||||
* UART Handle selects the USARTx or UARTy peripheral
|
|
||||||
* (USART,UART availability and x,y values depending on device).
|
|
||||||
* @param __FLAG__ specifies the flag to check.
|
|
||||||
* This parameter can be any combination of the following values:
|
|
||||||
* @arg UART_FLAG_CTS: CTS Change flag (not available for UART4 and UART5).
|
|
||||||
* @arg UART_FLAG_LBD: LIN Break detection flag.
|
|
||||||
* @arg UART_FLAG_TC: Transmission Complete flag.
|
|
||||||
* @arg UART_FLAG_RXNE: Receive data register not empty flag.
|
|
||||||
*
|
|
||||||
* @note PE (Parity error), FE (Framing error), NE (Noise error), ORE (Overrun
|
|
||||||
* error) and IDLE (Idle line detected) flags are cleared by software
|
|
||||||
* sequence: a read operation to USART_SR register followed by a read
|
|
||||||
* operation to USART_DR register.
|
|
||||||
* @note RXNE flag can be also cleared by a read to the USART_DR register.
|
|
||||||
* @note TC flag can be also cleared by software sequence: a read operation to
|
|
||||||
* USART_SR register followed by a write operation to USART_DR register.
|
|
||||||
* @note TXE flag is cleared only by a write to the USART_DR register.
|
|
||||||
*
|
|
||||||
* @retval None
|
|
||||||
*/
|
|
||||||
#define __HAL_UART_CLEAR_FLAG(__HANDLE__, __FLAG__) ((__HANDLE__)->Instance->SR = ~(__FLAG__))
|
|
||||||
|
|
||||||
/** @brief Clears the UART PE pending flag.
|
|
||||||
* @param __HANDLE__ specifies the UART Handle.
|
|
||||||
* UART Handle selects the USARTx or UARTy peripheral
|
|
||||||
* (USART,UART availability and x,y values depending on device).
|
|
||||||
* @retval None
|
|
||||||
*/
|
|
||||||
#define __HAL_UART_CLEAR_PEFLAG(__HANDLE__) \
|
|
||||||
do{ \
|
|
||||||
__IO uint32_t tmpreg = 0x00U; \
|
|
||||||
tmpreg = (__HANDLE__)->Instance->SR; \
|
|
||||||
tmpreg = (__HANDLE__)->Instance->DR; \
|
|
||||||
UNUSED(tmpreg); \
|
|
||||||
} while(0U)
|
|
||||||
|
|
||||||
/** @brief Clears the UART FE pending flag.
|
|
||||||
* @param __HANDLE__ specifies the UART Handle.
|
|
||||||
* UART Handle selects the USARTx or UARTy peripheral
|
|
||||||
* (USART,UART availability and x,y values depending on device).
|
|
||||||
* @retval None
|
|
||||||
*/
|
|
||||||
#define __HAL_UART_CLEAR_FEFLAG(__HANDLE__) __HAL_UART_CLEAR_PEFLAG(__HANDLE__)
|
|
||||||
|
|
||||||
/** @brief Clears the UART NE pending flag.
|
|
||||||
* @param __HANDLE__ specifies the UART Handle.
|
|
||||||
* UART Handle selects the USARTx or UARTy peripheral
|
|
||||||
* (USART,UART availability and x,y values depending on device).
|
|
||||||
* @retval None
|
|
||||||
*/
|
|
||||||
#define __HAL_UART_CLEAR_NEFLAG(__HANDLE__) __HAL_UART_CLEAR_PEFLAG(__HANDLE__)
|
|
||||||
|
|
||||||
/** @brief Clears the UART ORE pending flag.
|
|
||||||
* @param __HANDLE__ specifies the UART Handle.
|
|
||||||
* UART Handle selects the USARTx or UARTy peripheral
|
|
||||||
* (USART,UART availability and x,y values depending on device).
|
|
||||||
* @retval None
|
|
||||||
*/
|
|
||||||
#define __HAL_UART_CLEAR_OREFLAG(__HANDLE__) __HAL_UART_CLEAR_PEFLAG(__HANDLE__)
|
|
||||||
|
|
||||||
/** @brief Clears the UART IDLE pending flag.
|
|
||||||
* @param __HANDLE__ specifies the UART Handle.
|
|
||||||
* UART Handle selects the USARTx or UARTy peripheral
|
|
||||||
* (USART,UART availability and x,y values depending on device).
|
|
||||||
* @retval None
|
|
||||||
*/
|
|
||||||
#define __HAL_UART_CLEAR_IDLEFLAG(__HANDLE__) __HAL_UART_CLEAR_PEFLAG(__HANDLE__)
|
|
||||||
|
|
||||||
/** @brief Enable the specified UART interrupt.
|
|
||||||
* @param __HANDLE__ specifies the UART Handle.
|
|
||||||
* UART Handle selects the USARTx or UARTy peripheral
|
|
||||||
* (USART,UART availability and x,y values depending on device).
|
|
||||||
* @param __INTERRUPT__ specifies the UART interrupt source to enable.
|
|
||||||
* This parameter can be one of the following values:
|
|
||||||
* @arg UART_IT_CTS: CTS change interrupt
|
|
||||||
* @arg UART_IT_LBD: LIN Break detection interrupt
|
|
||||||
* @arg UART_IT_TXE: Transmit Data Register empty interrupt
|
|
||||||
* @arg UART_IT_TC: Transmission complete interrupt
|
|
||||||
* @arg UART_IT_RXNE: Receive Data register not empty interrupt
|
|
||||||
* @arg UART_IT_IDLE: Idle line detection interrupt
|
|
||||||
* @arg UART_IT_PE: Parity Error interrupt
|
|
||||||
* @arg UART_IT_ERR: Error interrupt(Frame error, noise error, overrun error)
|
|
||||||
* @retval None
|
|
||||||
*/
|
|
||||||
#define __HAL_UART_ENABLE_IT(__HANDLE__, __INTERRUPT__) ((((__INTERRUPT__) >> 28U) == UART_CR1_REG_INDEX)? ((__HANDLE__)->Instance->CR1 |= ((__INTERRUPT__) & UART_IT_MASK)): \
|
|
||||||
(((__INTERRUPT__) >> 28U) == UART_CR2_REG_INDEX)? ((__HANDLE__)->Instance->CR2 |= ((__INTERRUPT__) & UART_IT_MASK)): \
|
|
||||||
((__HANDLE__)->Instance->CR3 |= ((__INTERRUPT__) & UART_IT_MASK)))
|
|
||||||
|
|
||||||
/** @brief Disable the specified UART interrupt.
|
|
||||||
* @param __HANDLE__ specifies the UART Handle.
|
|
||||||
* UART Handle selects the USARTx or UARTy peripheral
|
|
||||||
* (USART,UART availability and x,y values depending on device).
|
|
||||||
* @param __INTERRUPT__ specifies the UART interrupt source to disable.
|
|
||||||
* This parameter can be one of the following values:
|
|
||||||
* @arg UART_IT_CTS: CTS change interrupt
|
|
||||||
* @arg UART_IT_LBD: LIN Break detection interrupt
|
|
||||||
* @arg UART_IT_TXE: Transmit Data Register empty interrupt
|
|
||||||
* @arg UART_IT_TC: Transmission complete interrupt
|
|
||||||
* @arg UART_IT_RXNE: Receive Data register not empty interrupt
|
|
||||||
* @arg UART_IT_IDLE: Idle line detection interrupt
|
|
||||||
* @arg UART_IT_PE: Parity Error interrupt
|
|
||||||
* @arg UART_IT_ERR: Error interrupt(Frame error, noise error, overrun error)
|
|
||||||
* @retval None
|
|
||||||
*/
|
|
||||||
#define __HAL_UART_DISABLE_IT(__HANDLE__, __INTERRUPT__) ((((__INTERRUPT__) >> 28U) == UART_CR1_REG_INDEX)? ((__HANDLE__)->Instance->CR1 &= ~((__INTERRUPT__) & UART_IT_MASK)): \
|
|
||||||
(((__INTERRUPT__) >> 28U) == UART_CR2_REG_INDEX)? ((__HANDLE__)->Instance->CR2 &= ~((__INTERRUPT__) & UART_IT_MASK)): \
|
|
||||||
((__HANDLE__)->Instance->CR3 &= ~ ((__INTERRUPT__) & UART_IT_MASK)))
|
|
||||||
|
|
||||||
/** @brief Checks whether the specified UART interrupt source is enabled or not.
|
|
||||||
* @param __HANDLE__ specifies the UART Handle.
|
|
||||||
* UART Handle selects the USARTx or UARTy peripheral
|
|
||||||
* (USART,UART availability and x,y values depending on device).
|
|
||||||
* @param __IT__ specifies the UART interrupt source to check.
|
|
||||||
* This parameter can be one of the following values:
|
|
||||||
* @arg UART_IT_CTS: CTS change interrupt (not available for UART4 and UART5)
|
|
||||||
* @arg UART_IT_LBD: LIN Break detection interrupt
|
|
||||||
* @arg UART_IT_TXE: Transmit Data Register empty interrupt
|
|
||||||
* @arg UART_IT_TC: Transmission complete interrupt
|
|
||||||
* @arg UART_IT_RXNE: Receive Data register not empty interrupt
|
|
||||||
* @arg UART_IT_IDLE: Idle line detection interrupt
|
|
||||||
* @arg UART_IT_ERR: Error interrupt
|
|
||||||
* @retval The new state of __IT__ (TRUE or FALSE).
|
|
||||||
*/
|
|
||||||
#define __HAL_UART_GET_IT_SOURCE(__HANDLE__, __IT__) (((((__IT__) >> 28U) == UART_CR1_REG_INDEX)? (__HANDLE__)->Instance->CR1:(((((uint32_t)(__IT__)) >> 28U) == UART_CR2_REG_INDEX)? \
|
|
||||||
(__HANDLE__)->Instance->CR2 : (__HANDLE__)->Instance->CR3)) & (((uint32_t)(__IT__)) & UART_IT_MASK))
|
|
||||||
|
|
||||||
/** @brief Enable CTS flow control
|
|
||||||
* @note This macro allows to enable CTS hardware flow control for a given UART instance,
|
|
||||||
* without need to call HAL_UART_Init() function.
|
|
||||||
* As involving direct access to UART registers, usage of this macro should be fully endorsed by user.
|
|
||||||
* @note As macro is expected to be used for modifying CTS Hw flow control feature activation, without need
|
|
||||||
* for USART instance Deinit/Init, following conditions for macro call should be fulfilled :
|
|
||||||
* - UART instance should have already been initialised (through call of HAL_UART_Init() )
|
|
||||||
* - macro could only be called when corresponding UART instance is disabled (i.e __HAL_UART_DISABLE(__HANDLE__))
|
|
||||||
* and should be followed by an Enable macro (i.e __HAL_UART_ENABLE(__HANDLE__)).
|
|
||||||
* @param __HANDLE__ specifies the UART Handle.
|
|
||||||
* The Handle Instance can be any USARTx (supporting the HW Flow control feature).
|
|
||||||
* It is used to select the USART peripheral (USART availability and x value depending on device).
|
|
||||||
* @retval None
|
|
||||||
*/
|
|
||||||
#define __HAL_UART_HWCONTROL_CTS_ENABLE(__HANDLE__) \
|
|
||||||
do{ \
|
|
||||||
ATOMIC_SET_BIT((__HANDLE__)->Instance->CR3, USART_CR3_CTSE); \
|
|
||||||
(__HANDLE__)->Init.HwFlowCtl |= USART_CR3_CTSE; \
|
|
||||||
} while(0U)
|
|
||||||
|
|
||||||
/** @brief Disable CTS flow control
|
|
||||||
* @note This macro allows to disable CTS hardware flow control for a given UART instance,
|
|
||||||
* without need to call HAL_UART_Init() function.
|
|
||||||
* As involving direct access to UART registers, usage of this macro should be fully endorsed by user.
|
|
||||||
* @note As macro is expected to be used for modifying CTS Hw flow control feature activation, without need
|
|
||||||
* for USART instance Deinit/Init, following conditions for macro call should be fulfilled :
|
|
||||||
* - UART instance should have already been initialised (through call of HAL_UART_Init() )
|
|
||||||
* - macro could only be called when corresponding UART instance is disabled (i.e __HAL_UART_DISABLE(__HANDLE__))
|
|
||||||
* and should be followed by an Enable macro (i.e __HAL_UART_ENABLE(__HANDLE__)).
|
|
||||||
* @param __HANDLE__ specifies the UART Handle.
|
|
||||||
* The Handle Instance can be any USARTx (supporting the HW Flow control feature).
|
|
||||||
* It is used to select the USART peripheral (USART availability and x value depending on device).
|
|
||||||
* @retval None
|
|
||||||
*/
|
|
||||||
#define __HAL_UART_HWCONTROL_CTS_DISABLE(__HANDLE__) \
|
|
||||||
do{ \
|
|
||||||
ATOMIC_CLEAR_BIT((__HANDLE__)->Instance->CR3, USART_CR3_CTSE); \
|
|
||||||
(__HANDLE__)->Init.HwFlowCtl &= ~(USART_CR3_CTSE); \
|
|
||||||
} while(0U)
|
|
||||||
|
|
||||||
/** @brief Enable RTS flow control
|
|
||||||
* This macro allows to enable RTS hardware flow control for a given UART instance,
|
|
||||||
* without need to call HAL_UART_Init() function.
|
|
||||||
* As involving direct access to UART registers, usage of this macro should be fully endorsed by user.
|
|
||||||
* @note As macro is expected to be used for modifying RTS Hw flow control feature activation, without need
|
|
||||||
* for USART instance Deinit/Init, following conditions for macro call should be fulfilled :
|
|
||||||
* - UART instance should have already been initialised (through call of HAL_UART_Init() )
|
|
||||||
* - macro could only be called when corresponding UART instance is disabled (i.e __HAL_UART_DISABLE(__HANDLE__))
|
|
||||||
* and should be followed by an Enable macro (i.e __HAL_UART_ENABLE(__HANDLE__)).
|
|
||||||
* @param __HANDLE__ specifies the UART Handle.
|
|
||||||
* The Handle Instance can be any USARTx (supporting the HW Flow control feature).
|
|
||||||
* It is used to select the USART peripheral (USART availability and x value depending on device).
|
|
||||||
* @retval None
|
|
||||||
*/
|
|
||||||
#define __HAL_UART_HWCONTROL_RTS_ENABLE(__HANDLE__) \
|
|
||||||
do{ \
|
|
||||||
ATOMIC_SET_BIT((__HANDLE__)->Instance->CR3, USART_CR3_RTSE); \
|
|
||||||
(__HANDLE__)->Init.HwFlowCtl |= USART_CR3_RTSE; \
|
|
||||||
} while(0U)
|
|
||||||
|
|
||||||
/** @brief Disable RTS flow control
|
|
||||||
* This macro allows to disable RTS hardware flow control for a given UART instance,
|
|
||||||
* without need to call HAL_UART_Init() function.
|
|
||||||
* As involving direct access to UART registers, usage of this macro should be fully endorsed by user.
|
|
||||||
* @note As macro is expected to be used for modifying RTS Hw flow control feature activation, without need
|
|
||||||
* for USART instance Deinit/Init, following conditions for macro call should be fulfilled :
|
|
||||||
* - UART instance should have already been initialised (through call of HAL_UART_Init() )
|
|
||||||
* - macro could only be called when corresponding UART instance is disabled (i.e __HAL_UART_DISABLE(__HANDLE__))
|
|
||||||
* and should be followed by an Enable macro (i.e __HAL_UART_ENABLE(__HANDLE__)).
|
|
||||||
* @param __HANDLE__ specifies the UART Handle.
|
|
||||||
* The Handle Instance can be any USARTx (supporting the HW Flow control feature).
|
|
||||||
* It is used to select the USART peripheral (USART availability and x value depending on device).
|
|
||||||
* @retval None
|
|
||||||
*/
|
|
||||||
#define __HAL_UART_HWCONTROL_RTS_DISABLE(__HANDLE__) \
|
|
||||||
do{ \
|
|
||||||
ATOMIC_CLEAR_BIT((__HANDLE__)->Instance->CR3, USART_CR3_RTSE);\
|
|
||||||
(__HANDLE__)->Init.HwFlowCtl &= ~(USART_CR3_RTSE); \
|
|
||||||
} while(0U)
|
|
||||||
#if defined(USART_CR3_ONEBIT)
|
|
||||||
|
|
||||||
/** @brief Macro to enable the UART's one bit sample method
|
|
||||||
* @param __HANDLE__ specifies the UART Handle.
|
|
||||||
* @retval None
|
|
||||||
*/
|
|
||||||
#define __HAL_UART_ONE_BIT_SAMPLE_ENABLE(__HANDLE__) ((__HANDLE__)->Instance->CR3|= USART_CR3_ONEBIT)
|
|
||||||
|
|
||||||
/** @brief Macro to disable the UART's one bit sample method
|
|
||||||
* @param __HANDLE__ specifies the UART Handle.
|
|
||||||
* @retval None
|
|
||||||
*/
|
|
||||||
#define __HAL_UART_ONE_BIT_SAMPLE_DISABLE(__HANDLE__) ((__HANDLE__)->Instance->CR3\
|
|
||||||
&= (uint16_t)~((uint16_t)USART_CR3_ONEBIT))
|
|
||||||
#endif /* UART_ONE_BIT_SAMPLE_Feature */
|
|
||||||
|
|
||||||
/** @brief Enable UART
|
|
||||||
* @param __HANDLE__ specifies the UART Handle.
|
|
||||||
* @retval None
|
|
||||||
*/
|
|
||||||
#define __HAL_UART_ENABLE(__HANDLE__) ((__HANDLE__)->Instance->CR1 |= USART_CR1_UE)
|
|
||||||
|
|
||||||
/** @brief Disable UART
|
|
||||||
* @param __HANDLE__ specifies the UART Handle.
|
|
||||||
* @retval None
|
|
||||||
*/
|
|
||||||
#define __HAL_UART_DISABLE(__HANDLE__) ((__HANDLE__)->Instance->CR1 &= ~USART_CR1_UE)
|
|
||||||
/**
|
|
||||||
* @}
|
|
||||||
*/
|
|
||||||
|
|
||||||
/* Exported functions --------------------------------------------------------*/
|
|
||||||
/** @addtogroup UART_Exported_Functions
|
|
||||||
* @{
|
|
||||||
*/
|
|
||||||
|
|
||||||
/** @addtogroup UART_Exported_Functions_Group1 Initialization and de-initialization functions
|
|
||||||
* @{
|
|
||||||
*/
|
|
||||||
|
|
||||||
/* Initialization/de-initialization functions **********************************/
|
|
||||||
HAL_StatusTypeDef HAL_UART_Init(UART_HandleTypeDef *huart);
|
|
||||||
HAL_StatusTypeDef HAL_HalfDuplex_Init(UART_HandleTypeDef *huart);
|
|
||||||
HAL_StatusTypeDef HAL_LIN_Init(UART_HandleTypeDef *huart, uint32_t BreakDetectLength);
|
|
||||||
HAL_StatusTypeDef HAL_MultiProcessor_Init(UART_HandleTypeDef *huart, uint8_t Address, uint32_t WakeUpMethod);
|
|
||||||
HAL_StatusTypeDef HAL_UART_DeInit(UART_HandleTypeDef *huart);
|
|
||||||
void HAL_UART_MspInit(UART_HandleTypeDef *huart);
|
|
||||||
void HAL_UART_MspDeInit(UART_HandleTypeDef *huart);
|
|
||||||
|
|
||||||
/* Callbacks Register/UnRegister functions ***********************************/
|
|
||||||
#if (USE_HAL_UART_REGISTER_CALLBACKS == 1)
|
|
||||||
HAL_StatusTypeDef HAL_UART_RegisterCallback(UART_HandleTypeDef *huart, HAL_UART_CallbackIDTypeDef CallbackID,
|
|
||||||
pUART_CallbackTypeDef pCallback);
|
|
||||||
HAL_StatusTypeDef HAL_UART_UnRegisterCallback(UART_HandleTypeDef *huart, HAL_UART_CallbackIDTypeDef CallbackID);
|
|
||||||
|
|
||||||
HAL_StatusTypeDef HAL_UART_RegisterRxEventCallback(UART_HandleTypeDef *huart, pUART_RxEventCallbackTypeDef pCallback);
|
|
||||||
HAL_StatusTypeDef HAL_UART_UnRegisterRxEventCallback(UART_HandleTypeDef *huart);
|
|
||||||
#endif /* USE_HAL_UART_REGISTER_CALLBACKS */
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @}
|
|
||||||
*/
|
|
||||||
|
|
||||||
/** @addtogroup UART_Exported_Functions_Group2 IO operation functions
|
|
||||||
* @{
|
|
||||||
*/
|
|
||||||
|
|
||||||
/* IO operation functions *******************************************************/
|
|
||||||
HAL_StatusTypeDef HAL_UART_Transmit(UART_HandleTypeDef *huart, const uint8_t *pData, uint16_t Size, uint32_t Timeout);
|
|
||||||
HAL_StatusTypeDef HAL_UART_Receive(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint32_t Timeout);
|
|
||||||
HAL_StatusTypeDef HAL_UART_Transmit_IT(UART_HandleTypeDef *huart, const uint8_t *pData, uint16_t Size);
|
|
||||||
HAL_StatusTypeDef HAL_UART_Receive_IT(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size);
|
|
||||||
HAL_StatusTypeDef HAL_UART_Transmit_DMA(UART_HandleTypeDef *huart, const uint8_t *pData, uint16_t Size);
|
|
||||||
HAL_StatusTypeDef HAL_UART_Receive_DMA(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size);
|
|
||||||
HAL_StatusTypeDef HAL_UART_DMAPause(UART_HandleTypeDef *huart);
|
|
||||||
HAL_StatusTypeDef HAL_UART_DMAResume(UART_HandleTypeDef *huart);
|
|
||||||
HAL_StatusTypeDef HAL_UART_DMAStop(UART_HandleTypeDef *huart);
|
|
||||||
|
|
||||||
HAL_StatusTypeDef HAL_UARTEx_ReceiveToIdle(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint16_t *RxLen,
|
|
||||||
uint32_t Timeout);
|
|
||||||
HAL_StatusTypeDef HAL_UARTEx_ReceiveToIdle_IT(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size);
|
|
||||||
HAL_StatusTypeDef HAL_UARTEx_ReceiveToIdle_DMA(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size);
|
|
||||||
|
|
||||||
HAL_UART_RxEventTypeTypeDef HAL_UARTEx_GetRxEventType(UART_HandleTypeDef *huart);
|
|
||||||
|
|
||||||
/* Transfer Abort functions */
|
|
||||||
HAL_StatusTypeDef HAL_UART_Abort(UART_HandleTypeDef *huart);
|
|
||||||
HAL_StatusTypeDef HAL_UART_AbortTransmit(UART_HandleTypeDef *huart);
|
|
||||||
HAL_StatusTypeDef HAL_UART_AbortReceive(UART_HandleTypeDef *huart);
|
|
||||||
HAL_StatusTypeDef HAL_UART_Abort_IT(UART_HandleTypeDef *huart);
|
|
||||||
HAL_StatusTypeDef HAL_UART_AbortTransmit_IT(UART_HandleTypeDef *huart);
|
|
||||||
HAL_StatusTypeDef HAL_UART_AbortReceive_IT(UART_HandleTypeDef *huart);
|
|
||||||
|
|
||||||
void HAL_UART_IRQHandler(UART_HandleTypeDef *huart);
|
|
||||||
void HAL_UART_TxCpltCallback(UART_HandleTypeDef *huart);
|
|
||||||
void HAL_UART_TxHalfCpltCallback(UART_HandleTypeDef *huart);
|
|
||||||
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart);
|
|
||||||
void HAL_UART_RxHalfCpltCallback(UART_HandleTypeDef *huart);
|
|
||||||
void HAL_UART_ErrorCallback(UART_HandleTypeDef *huart);
|
|
||||||
void HAL_UART_AbortCpltCallback(UART_HandleTypeDef *huart);
|
|
||||||
void HAL_UART_AbortTransmitCpltCallback(UART_HandleTypeDef *huart);
|
|
||||||
void HAL_UART_AbortReceiveCpltCallback(UART_HandleTypeDef *huart);
|
|
||||||
|
|
||||||
void HAL_UARTEx_RxEventCallback(UART_HandleTypeDef *huart, uint16_t Size);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @}
|
|
||||||
*/
|
|
||||||
|
|
||||||
/** @addtogroup UART_Exported_Functions_Group3
|
|
||||||
* @{
|
|
||||||
*/
|
|
||||||
/* Peripheral Control functions ************************************************/
|
|
||||||
HAL_StatusTypeDef HAL_LIN_SendBreak(UART_HandleTypeDef *huart);
|
|
||||||
HAL_StatusTypeDef HAL_MultiProcessor_EnterMuteMode(UART_HandleTypeDef *huart);
|
|
||||||
HAL_StatusTypeDef HAL_MultiProcessor_ExitMuteMode(UART_HandleTypeDef *huart);
|
|
||||||
HAL_StatusTypeDef HAL_HalfDuplex_EnableTransmitter(UART_HandleTypeDef *huart);
|
|
||||||
HAL_StatusTypeDef HAL_HalfDuplex_EnableReceiver(UART_HandleTypeDef *huart);
|
|
||||||
/**
|
|
||||||
* @}
|
|
||||||
*/
|
|
||||||
|
|
||||||
/** @addtogroup UART_Exported_Functions_Group4
|
|
||||||
* @{
|
|
||||||
*/
|
|
||||||
/* Peripheral State functions **************************************************/
|
|
||||||
HAL_UART_StateTypeDef HAL_UART_GetState(const UART_HandleTypeDef *huart);
|
|
||||||
uint32_t HAL_UART_GetError(const UART_HandleTypeDef *huart);
|
|
||||||
/**
|
|
||||||
* @}
|
|
||||||
*/
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @}
|
|
||||||
*/
|
|
||||||
/* Private types -------------------------------------------------------------*/
|
|
||||||
/* Private variables ---------------------------------------------------------*/
|
|
||||||
/* Private constants ---------------------------------------------------------*/
|
|
||||||
/** @defgroup UART_Private_Constants UART Private Constants
|
|
||||||
* @{
|
|
||||||
*/
|
|
||||||
/** @brief UART interruptions flag mask
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
#define UART_IT_MASK 0x0000FFFFU
|
|
||||||
|
|
||||||
#define UART_CR1_REG_INDEX 1U
|
|
||||||
#define UART_CR2_REG_INDEX 2U
|
|
||||||
#define UART_CR3_REG_INDEX 3U
|
|
||||||
/**
|
|
||||||
* @}
|
|
||||||
*/
|
|
||||||
|
|
||||||
/* Private macros ------------------------------------------------------------*/
|
|
||||||
/** @defgroup UART_Private_Macros UART Private Macros
|
|
||||||
* @{
|
|
||||||
*/
|
|
||||||
#define IS_UART_WORD_LENGTH(LENGTH) (((LENGTH) == UART_WORDLENGTH_8B) || \
|
|
||||||
((LENGTH) == UART_WORDLENGTH_9B))
|
|
||||||
#define IS_UART_LIN_WORD_LENGTH(LENGTH) (((LENGTH) == UART_WORDLENGTH_8B))
|
|
||||||
#define IS_UART_STOPBITS(STOPBITS) (((STOPBITS) == UART_STOPBITS_1) || \
|
|
||||||
((STOPBITS) == UART_STOPBITS_2))
|
|
||||||
#define IS_UART_PARITY(PARITY) (((PARITY) == UART_PARITY_NONE) || \
|
|
||||||
((PARITY) == UART_PARITY_EVEN) || \
|
|
||||||
((PARITY) == UART_PARITY_ODD))
|
|
||||||
#define IS_UART_HARDWARE_FLOW_CONTROL(CONTROL)\
|
|
||||||
(((CONTROL) == UART_HWCONTROL_NONE) || \
|
|
||||||
((CONTROL) == UART_HWCONTROL_RTS) || \
|
|
||||||
((CONTROL) == UART_HWCONTROL_CTS) || \
|
|
||||||
((CONTROL) == UART_HWCONTROL_RTS_CTS))
|
|
||||||
#define IS_UART_MODE(MODE) ((((MODE) & 0x0000FFF3U) == 0x00U) && ((MODE) != 0x00U))
|
|
||||||
#define IS_UART_STATE(STATE) (((STATE) == UART_STATE_DISABLE) || \
|
|
||||||
((STATE) == UART_STATE_ENABLE))
|
|
||||||
#if defined(USART_CR1_OVER8)
|
|
||||||
#define IS_UART_OVERSAMPLING(SAMPLING) (((SAMPLING) == UART_OVERSAMPLING_16) || \
|
|
||||||
((SAMPLING) == UART_OVERSAMPLING_8))
|
|
||||||
#endif /* USART_CR1_OVER8 */
|
|
||||||
#define IS_UART_LIN_OVERSAMPLING(SAMPLING) (((SAMPLING) == UART_OVERSAMPLING_16))
|
|
||||||
#define IS_UART_LIN_BREAK_DETECT_LENGTH(LENGTH) (((LENGTH) == UART_LINBREAKDETECTLENGTH_10B) || \
|
|
||||||
((LENGTH) == UART_LINBREAKDETECTLENGTH_11B))
|
|
||||||
#define IS_UART_WAKEUPMETHOD(WAKEUP) (((WAKEUP) == UART_WAKEUPMETHOD_IDLELINE) || \
|
|
||||||
((WAKEUP) == UART_WAKEUPMETHOD_ADDRESSMARK))
|
|
||||||
#define IS_UART_BAUDRATE(BAUDRATE) ((BAUDRATE) <= 4500000U)
|
|
||||||
#define IS_UART_ADDRESS(ADDRESS) ((ADDRESS) <= 0x0FU)
|
|
||||||
|
|
||||||
#define UART_DIV_SAMPLING16(_PCLK_, _BAUD_) (((_PCLK_)*25U)/(4U*(_BAUD_)))
|
|
||||||
#define UART_DIVMANT_SAMPLING16(_PCLK_, _BAUD_) (UART_DIV_SAMPLING16((_PCLK_), (_BAUD_))/100U)
|
|
||||||
#define UART_DIVFRAQ_SAMPLING16(_PCLK_, _BAUD_) ((((UART_DIV_SAMPLING16((_PCLK_), (_BAUD_)) - (UART_DIVMANT_SAMPLING16((_PCLK_), (_BAUD_)) * 100U)) * 16U)\
|
|
||||||
+ 50U) / 100U)
|
|
||||||
/* UART BRR = mantissa + overflow + fraction
|
|
||||||
= (UART DIVMANT << 4) + (UART DIVFRAQ & 0xF0) + (UART DIVFRAQ & 0x0FU) */
|
|
||||||
#define UART_BRR_SAMPLING16(_PCLK_, _BAUD_) (((UART_DIVMANT_SAMPLING16((_PCLK_), (_BAUD_)) << 4U) + \
|
|
||||||
(UART_DIVFRAQ_SAMPLING16((_PCLK_), (_BAUD_)) & 0xF0U)) + \
|
|
||||||
(UART_DIVFRAQ_SAMPLING16((_PCLK_), (_BAUD_)) & 0x0FU))
|
|
||||||
|
|
||||||
#define UART_DIV_SAMPLING8(_PCLK_, _BAUD_) (((_PCLK_)*25U)/(2U*(_BAUD_)))
|
|
||||||
#define UART_DIVMANT_SAMPLING8(_PCLK_, _BAUD_) (UART_DIV_SAMPLING8((_PCLK_), (_BAUD_))/100U)
|
|
||||||
#define UART_DIVFRAQ_SAMPLING8(_PCLK_, _BAUD_) ((((UART_DIV_SAMPLING8((_PCLK_), (_BAUD_)) - (UART_DIVMANT_SAMPLING8((_PCLK_), (_BAUD_)) * 100U)) * 8U)\
|
|
||||||
+ 50U) / 100U)
|
|
||||||
/* UART BRR = mantissa + overflow + fraction
|
|
||||||
= (UART DIVMANT << 4) + ((UART DIVFRAQ & 0xF8) << 1) + (UART DIVFRAQ & 0x07U) */
|
|
||||||
#define UART_BRR_SAMPLING8(_PCLK_, _BAUD_) (((UART_DIVMANT_SAMPLING8((_PCLK_), (_BAUD_)) << 4U) + \
|
|
||||||
((UART_DIVFRAQ_SAMPLING8((_PCLK_), (_BAUD_)) & 0xF8U) << 1U)) + \
|
|
||||||
(UART_DIVFRAQ_SAMPLING8((_PCLK_), (_BAUD_)) & 0x07U))
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @}
|
|
||||||
*/
|
|
||||||
|
|
||||||
/* Private functions ---------------------------------------------------------*/
|
|
||||||
/** @defgroup UART_Private_Functions UART Private Functions
|
|
||||||
* @{
|
|
||||||
*/
|
|
||||||
|
|
||||||
HAL_StatusTypeDef UART_Start_Receive_IT(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size);
|
|
||||||
HAL_StatusTypeDef UART_Start_Receive_DMA(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @}
|
|
||||||
*/
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @}
|
|
||||||
*/
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @}
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#endif /* __STM32F1xx_HAL_UART_H */
|
|
||||||
|
|
||||||
File diff suppressed because it is too large
Load Diff
641
Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_ll_usb.h
Normal file
641
Drivers/STM32F1xx_HAL_Driver/Inc/stm32f1xx_ll_usb.h
Normal file
@@ -0,0 +1,641 @@
|
|||||||
|
/**
|
||||||
|
******************************************************************************
|
||||||
|
* @file stm32f1xx_ll_usb.h
|
||||||
|
* @author MCD Application Team
|
||||||
|
* @brief Header file of USB Low Layer HAL module.
|
||||||
|
******************************************************************************
|
||||||
|
* @attention
|
||||||
|
*
|
||||||
|
* Copyright (c) 2016 STMicroelectronics.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* This software is licensed under terms that can be found in the LICENSE file
|
||||||
|
* in the root directory of this software component.
|
||||||
|
* If no LICENSE file comes with this software, it is provided AS-IS.
|
||||||
|
*
|
||||||
|
******************************************************************************
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Define to prevent recursive inclusion -------------------------------------*/
|
||||||
|
#ifndef STM32F1xx_LL_USB_H
|
||||||
|
#define STM32F1xx_LL_USB_H
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif /* __cplusplus */
|
||||||
|
|
||||||
|
/* Includes ------------------------------------------------------------------*/
|
||||||
|
#include "stm32f1xx_hal_def.h"
|
||||||
|
|
||||||
|
#if defined (USB) || defined (USB_OTG_FS)
|
||||||
|
/** @addtogroup STM32F1xx_HAL_Driver
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @addtogroup USB_LL
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Exported types ------------------------------------------------------------*/
|
||||||
|
#ifndef HAL_USB_TIMEOUT
|
||||||
|
#define HAL_USB_TIMEOUT 0xF000000U
|
||||||
|
#endif /* define HAL_USB_TIMEOUT */
|
||||||
|
|
||||||
|
#ifndef HAL_USB_CURRENT_MODE_MAX_DELAY_MS
|
||||||
|
#define HAL_USB_CURRENT_MODE_MAX_DELAY_MS 200U
|
||||||
|
#endif /* define HAL_USB_CURRENT_MODE_MAX_DELAY_MS */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief USB Mode definition
|
||||||
|
*/
|
||||||
|
|
||||||
|
typedef enum
|
||||||
|
{
|
||||||
|
USB_DEVICE_MODE = 0,
|
||||||
|
USB_HOST_MODE = 1,
|
||||||
|
USB_DRD_MODE = 2
|
||||||
|
} USB_ModeTypeDef;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief URB States definition
|
||||||
|
*/
|
||||||
|
typedef enum
|
||||||
|
{
|
||||||
|
URB_IDLE = 0,
|
||||||
|
URB_DONE,
|
||||||
|
URB_NOTREADY,
|
||||||
|
URB_NYET,
|
||||||
|
URB_ERROR,
|
||||||
|
URB_STALL
|
||||||
|
} USB_URBStateTypeDef;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Host channel States definition
|
||||||
|
*/
|
||||||
|
typedef enum
|
||||||
|
{
|
||||||
|
HC_IDLE = 0,
|
||||||
|
HC_XFRC,
|
||||||
|
HC_HALTED,
|
||||||
|
HC_ACK,
|
||||||
|
HC_NAK,
|
||||||
|
HC_NYET,
|
||||||
|
HC_STALL,
|
||||||
|
HC_XACTERR,
|
||||||
|
HC_BBLERR,
|
||||||
|
HC_DATATGLERR
|
||||||
|
} USB_HCStateTypeDef;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief USB Instance Initialization Structure definition
|
||||||
|
*/
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
uint8_t dev_endpoints; /*!< Device Endpoints number.
|
||||||
|
This parameter depends on the used USB core.
|
||||||
|
This parameter must be a number between Min_Data = 1 and Max_Data = 15 */
|
||||||
|
|
||||||
|
#if defined (USB_OTG_FS)
|
||||||
|
uint8_t Host_channels; /*!< Host Channels number.
|
||||||
|
This parameter Depends on the used USB core.
|
||||||
|
This parameter must be a number between Min_Data = 1 and Max_Data = 15 */
|
||||||
|
#endif /* defined (USB_OTG_FS) */
|
||||||
|
|
||||||
|
uint8_t dma_enable; /*!< USB DMA state.
|
||||||
|
If DMA is not supported this parameter shall be set by default to zero */
|
||||||
|
|
||||||
|
uint8_t speed; /*!< USB Core speed.
|
||||||
|
This parameter can be any value of @ref PCD_Speed/HCD_Speed
|
||||||
|
(HCD_SPEED_xxx, HCD_SPEED_xxx) */
|
||||||
|
|
||||||
|
uint8_t ep0_mps; /*!< Set the Endpoint 0 Max Packet size. */
|
||||||
|
|
||||||
|
uint8_t phy_itface; /*!< Select the used PHY interface.
|
||||||
|
This parameter can be any value of @ref PCD_PHY_Module/HCD_PHY_Module */
|
||||||
|
|
||||||
|
uint8_t Sof_enable; /*!< Enable or disable the output of the SOF signal. */
|
||||||
|
|
||||||
|
uint8_t low_power_enable; /*!< Enable or disable the low Power Mode. */
|
||||||
|
|
||||||
|
uint8_t lpm_enable; /*!< Enable or disable Link Power Management. */
|
||||||
|
|
||||||
|
uint8_t battery_charging_enable; /*!< Enable or disable Battery charging. */
|
||||||
|
|
||||||
|
#if defined (USB_OTG_FS)
|
||||||
|
uint8_t vbus_sensing_enable; /*!< Enable or disable the VBUS Sensing feature. */
|
||||||
|
|
||||||
|
uint8_t use_dedicated_ep1; /*!< Enable or disable the use of the dedicated EP1 interrupt. */
|
||||||
|
|
||||||
|
uint8_t use_external_vbus; /*!< Enable or disable the use of the external VBUS. */
|
||||||
|
#endif /* defined (USB_OTG_FS) */
|
||||||
|
} USB_CfgTypeDef;
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
uint8_t num; /*!< Endpoint number
|
||||||
|
This parameter must be a number between Min_Data = 1 and Max_Data = 15 */
|
||||||
|
|
||||||
|
uint8_t is_in; /*!< Endpoint direction
|
||||||
|
This parameter must be a number between Min_Data = 0 and Max_Data = 1 */
|
||||||
|
|
||||||
|
uint8_t is_stall; /*!< Endpoint stall condition
|
||||||
|
This parameter must be a number between Min_Data = 0 and Max_Data = 1 */
|
||||||
|
|
||||||
|
#if defined (USB_OTG_FS)
|
||||||
|
uint8_t is_iso_incomplete; /*!< Endpoint isoc condition
|
||||||
|
This parameter must be a number between Min_Data = 0 and Max_Data = 1 */
|
||||||
|
#endif /* defined (USB_OTG_FS) */
|
||||||
|
|
||||||
|
uint8_t type; /*!< Endpoint type
|
||||||
|
This parameter can be any value of @ref USB_LL_EP_Type */
|
||||||
|
|
||||||
|
uint8_t data_pid_start; /*!< Initial data PID
|
||||||
|
This parameter must be a number between Min_Data = 0 and Max_Data = 1 */
|
||||||
|
|
||||||
|
#if defined (USB)
|
||||||
|
uint16_t pmaadress; /*!< PMA Address
|
||||||
|
This parameter can be any value between Min_addr = 0 and Max_addr = 1K */
|
||||||
|
|
||||||
|
uint16_t pmaaddr0; /*!< PMA Address0
|
||||||
|
This parameter can be any value between Min_addr = 0 and Max_addr = 1K */
|
||||||
|
|
||||||
|
uint16_t pmaaddr1; /*!< PMA Address1
|
||||||
|
This parameter can be any value between Min_addr = 0 and Max_addr = 1K */
|
||||||
|
|
||||||
|
uint8_t doublebuffer; /*!< Double buffer enable
|
||||||
|
This parameter can be 0 or 1 */
|
||||||
|
#endif /* defined (USB) */
|
||||||
|
|
||||||
|
uint32_t maxpacket; /*!< Endpoint Max packet size
|
||||||
|
This parameter must be a number between Min_Data = 0 and Max_Data = 64KB */
|
||||||
|
|
||||||
|
uint8_t *xfer_buff; /*!< Pointer to transfer buffer */
|
||||||
|
|
||||||
|
uint32_t xfer_len; /*!< Current transfer length */
|
||||||
|
|
||||||
|
uint32_t xfer_count; /*!< Partial transfer length in case of multi packet transfer */
|
||||||
|
|
||||||
|
#if defined (USB_OTG_FS)
|
||||||
|
uint8_t even_odd_frame; /*!< IFrame parity
|
||||||
|
This parameter must be a number between Min_Data = 0 and Max_Data = 1 */
|
||||||
|
|
||||||
|
uint16_t tx_fifo_num; /*!< Transmission FIFO number
|
||||||
|
This parameter must be a number between Min_Data = 1 and Max_Data = 15 */
|
||||||
|
|
||||||
|
uint32_t dma_addr; /*!< 32 bits aligned transfer buffer address */
|
||||||
|
|
||||||
|
uint32_t xfer_size; /*!< requested transfer size */
|
||||||
|
#endif /* defined (USB_OTG_FS) */
|
||||||
|
|
||||||
|
#if defined (USB)
|
||||||
|
uint32_t xfer_len_db; /*!< double buffer transfer length used with bulk double buffer in */
|
||||||
|
|
||||||
|
uint8_t xfer_fill_db; /*!< double buffer Need to Fill new buffer used with bulk_in */
|
||||||
|
#endif /* defined (USB) */
|
||||||
|
} USB_EPTypeDef;
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
uint8_t dev_addr; /*!< USB device address.
|
||||||
|
This parameter must be a number between Min_Data = 1 and Max_Data = 255 */
|
||||||
|
|
||||||
|
uint8_t ch_num; /*!< Host channel number.
|
||||||
|
This parameter must be a number between Min_Data = 1 and Max_Data = 15 */
|
||||||
|
|
||||||
|
uint8_t ep_num; /*!< Endpoint number.
|
||||||
|
This parameter must be a number between Min_Data = 1 and Max_Data = 15 */
|
||||||
|
|
||||||
|
uint8_t ep_is_in; /*!< Endpoint direction
|
||||||
|
This parameter must be a number between Min_Data = 0 and Max_Data = 1 */
|
||||||
|
|
||||||
|
uint8_t speed; /*!< USB Host Channel speed.
|
||||||
|
This parameter can be any value of @ref HCD_Device_Speed:
|
||||||
|
(HCD_DEVICE_SPEED_xxx) */
|
||||||
|
|
||||||
|
uint8_t do_ping; /*!< Enable or disable the use of the PING protocol for HS mode. */
|
||||||
|
|
||||||
|
uint8_t hub_port_nbr; /*!< USB HUB port number */
|
||||||
|
uint8_t hub_addr; /*!< USB HUB address */
|
||||||
|
|
||||||
|
uint8_t ep_type; /*!< Endpoint Type.
|
||||||
|
This parameter can be any value of @ref USB_LL_EP_Type */
|
||||||
|
|
||||||
|
uint16_t max_packet; /*!< Endpoint Max packet size.
|
||||||
|
This parameter must be a number between Min_Data = 0 and Max_Data = 64KB */
|
||||||
|
|
||||||
|
uint8_t data_pid; /*!< Initial data PID.
|
||||||
|
This parameter must be a number between Min_Data = 0 and Max_Data = 1 */
|
||||||
|
|
||||||
|
uint8_t *xfer_buff; /*!< Pointer to transfer buffer. */
|
||||||
|
|
||||||
|
uint32_t XferSize; /*!< OTG Channel transfer size. */
|
||||||
|
|
||||||
|
uint32_t xfer_len; /*!< Current transfer length. */
|
||||||
|
|
||||||
|
uint32_t xfer_count; /*!< Partial transfer length in case of multi packet transfer. */
|
||||||
|
|
||||||
|
uint8_t toggle_in; /*!< IN transfer current toggle flag.
|
||||||
|
This parameter must be a number between Min_Data = 0 and Max_Data = 1 */
|
||||||
|
|
||||||
|
uint8_t toggle_out; /*!< OUT transfer current toggle flag
|
||||||
|
This parameter must be a number between Min_Data = 0 and Max_Data = 1 */
|
||||||
|
|
||||||
|
uint32_t dma_addr; /*!< 32 bits aligned transfer buffer address. */
|
||||||
|
|
||||||
|
uint32_t ErrCnt; /*!< Host channel error count. */
|
||||||
|
|
||||||
|
USB_URBStateTypeDef urb_state; /*!< URB state.
|
||||||
|
This parameter can be any value of @ref USB_URBStateTypeDef */
|
||||||
|
|
||||||
|
USB_HCStateTypeDef state; /*!< Host Channel state.
|
||||||
|
This parameter can be any value of @ref USB_HCStateTypeDef */
|
||||||
|
} USB_HCTypeDef;
|
||||||
|
|
||||||
|
#if defined (USB_OTG_FS)
|
||||||
|
typedef USB_ModeTypeDef USB_OTG_ModeTypeDef;
|
||||||
|
typedef USB_CfgTypeDef USB_OTG_CfgTypeDef;
|
||||||
|
typedef USB_EPTypeDef USB_OTG_EPTypeDef;
|
||||||
|
typedef USB_URBStateTypeDef USB_OTG_URBStateTypeDef;
|
||||||
|
typedef USB_HCStateTypeDef USB_OTG_HCStateTypeDef;
|
||||||
|
typedef USB_HCTypeDef USB_OTG_HCTypeDef;
|
||||||
|
#endif /* defined (USB_OTG_FS) */
|
||||||
|
|
||||||
|
/* Exported constants --------------------------------------------------------*/
|
||||||
|
|
||||||
|
/** @defgroup PCD_Exported_Constants PCD Exported Constants
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
#if defined (USB_OTG_FS)
|
||||||
|
/** @defgroup USB_OTG_CORE VERSION ID
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
#define USB_OTG_CORE_ID_300A 0x4F54300AU
|
||||||
|
#define USB_OTG_CORE_ID_310A 0x4F54310AU
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @defgroup USB_Core_Mode_ USB Core Mode
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
#define USB_OTG_MODE_DEVICE 0U
|
||||||
|
#define USB_OTG_MODE_HOST 1U
|
||||||
|
#define USB_OTG_MODE_DRD 2U
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @defgroup USB_LL_Core_Speed USB Low Layer Core Speed
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
#define USB_OTG_SPEED_FULL 3U
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @defgroup USB_LL_Core_PHY USB Low Layer Core PHY
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
#define USB_OTG_EMBEDDED_PHY 2U
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @defgroup USB_LL_Turnaround_Timeout Turnaround Timeout Value
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
#ifndef USBD_FS_TRDT_VALUE
|
||||||
|
#define USBD_FS_TRDT_VALUE 5U
|
||||||
|
#define USBD_DEFAULT_TRDT_VALUE 9U
|
||||||
|
#endif /* USBD_HS_TRDT_VALUE */
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @defgroup USB_LL_Core_MPS USB Low Layer Core MPS
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
#define USB_OTG_FS_MAX_PACKET_SIZE 64U
|
||||||
|
#define USB_OTG_MAX_EP0_SIZE 64U
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @defgroup USB_LL_Core_PHY_Frequency USB Low Layer Core PHY Frequency
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
#define DSTS_ENUMSPD_HS_PHY_30MHZ_OR_60MHZ (0U << 1)
|
||||||
|
#define DSTS_ENUMSPD_FS_PHY_30MHZ_OR_60MHZ (1U << 1)
|
||||||
|
#define DSTS_ENUMSPD_FS_PHY_48MHZ (3U << 1)
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @defgroup USB_LL_CORE_Frame_Interval USB Low Layer Core Frame Interval
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
#define DCFG_FRAME_INTERVAL_80 0U
|
||||||
|
#define DCFG_FRAME_INTERVAL_85 1U
|
||||||
|
#define DCFG_FRAME_INTERVAL_90 2U
|
||||||
|
#define DCFG_FRAME_INTERVAL_95 3U
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
#endif /* defined (USB_OTG_FS) */
|
||||||
|
/** @defgroup USB_LL_EP0_MPS USB Low Layer EP0 MPS
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
#define EP_MPS_64 0U
|
||||||
|
#define EP_MPS_32 1U
|
||||||
|
#define EP_MPS_16 2U
|
||||||
|
#define EP_MPS_8 3U
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @defgroup USB_LL_EP_Type USB Low Layer EP Type
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
#define EP_TYPE_CTRL 0U
|
||||||
|
#define EP_TYPE_ISOC 1U
|
||||||
|
#define EP_TYPE_BULK 2U
|
||||||
|
#define EP_TYPE_INTR 3U
|
||||||
|
#define EP_TYPE_MSK 3U
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @defgroup USB_LL_EP_Speed USB Low Layer EP Speed
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
#define EP_SPEED_LOW 0U
|
||||||
|
#define EP_SPEED_FULL 1U
|
||||||
|
#define EP_SPEED_HIGH 2U
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @defgroup USB_LL_CH_PID_Type USB Low Layer Channel PID Type
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
#define HC_PID_DATA0 0U
|
||||||
|
#define HC_PID_DATA2 1U
|
||||||
|
#define HC_PID_DATA1 2U
|
||||||
|
#define HC_PID_SETUP 3U
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @defgroup USB_LL Device Speed
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
#define USBD_FS_SPEED 2U
|
||||||
|
#define USBH_FSLS_SPEED 1U
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
#if defined (USB_OTG_FS)
|
||||||
|
/** @defgroup USB_LL_STS_Defines USB Low Layer STS Defines
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
#define STS_GOUT_NAK 1U
|
||||||
|
#define STS_DATA_UPDT 2U
|
||||||
|
#define STS_XFER_COMP 3U
|
||||||
|
#define STS_SETUP_COMP 4U
|
||||||
|
#define STS_SETUP_UPDT 6U
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @defgroup USB_LL_HCFG_SPEED_Defines USB Low Layer HCFG Speed Defines
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
#define HCFG_30_60_MHZ 0U
|
||||||
|
#define HCFG_48_MHZ 1U
|
||||||
|
#define HCFG_6_MHZ 2U
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @defgroup USB_LL_HFIR_Defines USB Low Layer frame interval Defines
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
#define HFIR_6_MHZ 6000U
|
||||||
|
#define HFIR_60_MHZ 60000U
|
||||||
|
#define HFIR_48_MHZ 48000U
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @defgroup USB_LL_HPRT0_PRTSPD_SPEED_Defines USB Low Layer HPRT0 PRTSPD Speed Defines
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
#define HPRT0_PRTSPD_HIGH_SPEED 0U
|
||||||
|
#define HPRT0_PRTSPD_FULL_SPEED 1U
|
||||||
|
#define HPRT0_PRTSPD_LOW_SPEED 2U
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define HCCHAR_CTRL 0U
|
||||||
|
#define HCCHAR_ISOC 1U
|
||||||
|
#define HCCHAR_BULK 2U
|
||||||
|
#define HCCHAR_INTR 3U
|
||||||
|
|
||||||
|
#define GRXSTS_PKTSTS_IN 2U
|
||||||
|
#define GRXSTS_PKTSTS_IN_XFER_COMP 3U
|
||||||
|
#define GRXSTS_PKTSTS_DATA_TOGGLE_ERR 5U
|
||||||
|
#define GRXSTS_PKTSTS_CH_HALTED 7U
|
||||||
|
|
||||||
|
#define CLEAR_INTERRUPT_MASK 0xFFFFFFFFU
|
||||||
|
|
||||||
|
#define HC_MAX_PKT_CNT 256U
|
||||||
|
|
||||||
|
#define USBx_PCGCCTL *(__IO uint32_t *)((uint32_t)USBx_BASE + USB_OTG_PCGCCTL_BASE)
|
||||||
|
#define USBx_HPRT0 *(__IO uint32_t *)((uint32_t)USBx_BASE + USB_OTG_HOST_PORT_BASE)
|
||||||
|
|
||||||
|
#define USBx_DEVICE ((USB_OTG_DeviceTypeDef *)(USBx_BASE + USB_OTG_DEVICE_BASE))
|
||||||
|
#define USBx_INEP(i) ((USB_OTG_INEndpointTypeDef *)(USBx_BASE\
|
||||||
|
+ USB_OTG_IN_ENDPOINT_BASE + ((i) * USB_OTG_EP_REG_SIZE)))
|
||||||
|
|
||||||
|
#define USBx_OUTEP(i) ((USB_OTG_OUTEndpointTypeDef *)(USBx_BASE\
|
||||||
|
+ USB_OTG_OUT_ENDPOINT_BASE + ((i) * USB_OTG_EP_REG_SIZE)))
|
||||||
|
|
||||||
|
#define USBx_DFIFO(i) *(__IO uint32_t *)(USBx_BASE + USB_OTG_FIFO_BASE + ((i) * USB_OTG_FIFO_SIZE))
|
||||||
|
|
||||||
|
#define USBx_HOST ((USB_OTG_HostTypeDef *)(USBx_BASE + USB_OTG_HOST_BASE))
|
||||||
|
#define USBx_HC(i) ((USB_OTG_HostChannelTypeDef *)(USBx_BASE\
|
||||||
|
+ USB_OTG_HOST_CHANNEL_BASE\
|
||||||
|
+ ((i) * USB_OTG_HOST_CHANNEL_SIZE)))
|
||||||
|
|
||||||
|
|
||||||
|
#define EP_ADDR_MSK 0xFU
|
||||||
|
#endif /* defined (USB_OTG_FS) */
|
||||||
|
|
||||||
|
#if defined (USB)
|
||||||
|
#define BTABLE_ADDRESS 0x000U
|
||||||
|
#define PMA_ACCESS 2U
|
||||||
|
|
||||||
|
#ifndef USB_EP_RX_STRX
|
||||||
|
#define USB_EP_RX_STRX (0x3U << 12)
|
||||||
|
#endif /* USB_EP_RX_STRX */
|
||||||
|
|
||||||
|
#define EP_ADDR_MSK 0x7U
|
||||||
|
|
||||||
|
#ifndef USE_USB_DOUBLE_BUFFER
|
||||||
|
#define USE_USB_DOUBLE_BUFFER 1U
|
||||||
|
#endif /* USE_USB_DOUBLE_BUFFER */
|
||||||
|
#endif /* defined (USB) */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Exported macro ------------------------------------------------------------*/
|
||||||
|
/** @defgroup USB_LL_Exported_Macros USB Low Layer Exported Macros
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
#if defined (USB_OTG_FS)
|
||||||
|
#define USB_MASK_INTERRUPT(__INSTANCE__, __INTERRUPT__) ((__INSTANCE__)->GINTMSK &= ~(__INTERRUPT__))
|
||||||
|
#define USB_UNMASK_INTERRUPT(__INSTANCE__, __INTERRUPT__) ((__INSTANCE__)->GINTMSK |= (__INTERRUPT__))
|
||||||
|
|
||||||
|
#define CLEAR_IN_EP_INTR(__EPNUM__, __INTERRUPT__) (USBx_INEP(__EPNUM__)->DIEPINT = (__INTERRUPT__))
|
||||||
|
#define CLEAR_OUT_EP_INTR(__EPNUM__, __INTERRUPT__) (USBx_OUTEP(__EPNUM__)->DOEPINT = (__INTERRUPT__))
|
||||||
|
#endif /* defined (USB_OTG_FS) */
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Exported functions --------------------------------------------------------*/
|
||||||
|
/** @addtogroup USB_LL_Exported_Functions USB Low Layer Exported Functions
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
#if defined (USB_OTG_FS)
|
||||||
|
HAL_StatusTypeDef USB_CoreInit(USB_OTG_GlobalTypeDef *USBx, USB_OTG_CfgTypeDef cfg);
|
||||||
|
HAL_StatusTypeDef USB_DevInit(USB_OTG_GlobalTypeDef *USBx, USB_OTG_CfgTypeDef cfg);
|
||||||
|
HAL_StatusTypeDef USB_EnableGlobalInt(USB_OTG_GlobalTypeDef *USBx);
|
||||||
|
HAL_StatusTypeDef USB_DisableGlobalInt(USB_OTG_GlobalTypeDef *USBx);
|
||||||
|
HAL_StatusTypeDef USB_SetTurnaroundTime(USB_OTG_GlobalTypeDef *USBx, uint32_t hclk, uint8_t speed);
|
||||||
|
HAL_StatusTypeDef USB_SetCurrentMode(USB_OTG_GlobalTypeDef *USBx, USB_ModeTypeDef mode);
|
||||||
|
HAL_StatusTypeDef USB_SetDevSpeed(const USB_OTG_GlobalTypeDef *USBx, uint8_t speed);
|
||||||
|
HAL_StatusTypeDef USB_FlushRxFifo(USB_OTG_GlobalTypeDef *USBx);
|
||||||
|
HAL_StatusTypeDef USB_FlushTxFifo(USB_OTG_GlobalTypeDef *USBx, uint32_t num);
|
||||||
|
HAL_StatusTypeDef USB_ActivateEndpoint(const USB_OTG_GlobalTypeDef *USBx, const USB_OTG_EPTypeDef *ep);
|
||||||
|
HAL_StatusTypeDef USB_DeactivateEndpoint(const USB_OTG_GlobalTypeDef *USBx, const USB_OTG_EPTypeDef *ep);
|
||||||
|
HAL_StatusTypeDef USB_ActivateDedicatedEndpoint(const USB_OTG_GlobalTypeDef *USBx, const USB_OTG_EPTypeDef *ep);
|
||||||
|
HAL_StatusTypeDef USB_DeactivateDedicatedEndpoint(const USB_OTG_GlobalTypeDef *USBx, const USB_OTG_EPTypeDef *ep);
|
||||||
|
HAL_StatusTypeDef USB_EPStartXfer(USB_OTG_GlobalTypeDef *USBx, USB_OTG_EPTypeDef *ep);
|
||||||
|
HAL_StatusTypeDef USB_WritePacket(const USB_OTG_GlobalTypeDef *USBx, uint8_t *src,
|
||||||
|
uint8_t ch_ep_num, uint16_t len);
|
||||||
|
|
||||||
|
void *USB_ReadPacket(const USB_OTG_GlobalTypeDef *USBx, uint8_t *dest, uint16_t len);
|
||||||
|
HAL_StatusTypeDef USB_EPSetStall(const USB_OTG_GlobalTypeDef *USBx, const USB_OTG_EPTypeDef *ep);
|
||||||
|
HAL_StatusTypeDef USB_EPClearStall(const USB_OTG_GlobalTypeDef *USBx, const USB_OTG_EPTypeDef *ep);
|
||||||
|
HAL_StatusTypeDef USB_EPStopXfer(const USB_OTG_GlobalTypeDef *USBx, USB_OTG_EPTypeDef *ep);
|
||||||
|
HAL_StatusTypeDef USB_SetDevAddress(const USB_OTG_GlobalTypeDef *USBx, uint8_t address);
|
||||||
|
HAL_StatusTypeDef USB_DevConnect(const USB_OTG_GlobalTypeDef *USBx);
|
||||||
|
HAL_StatusTypeDef USB_DevDisconnect(const USB_OTG_GlobalTypeDef *USBx);
|
||||||
|
HAL_StatusTypeDef USB_StopDevice(USB_OTG_GlobalTypeDef *USBx);
|
||||||
|
HAL_StatusTypeDef USB_ActivateSetup(const USB_OTG_GlobalTypeDef *USBx);
|
||||||
|
HAL_StatusTypeDef USB_EP0_OutStart(const USB_OTG_GlobalTypeDef *USBx, const uint8_t *psetup);
|
||||||
|
uint8_t USB_GetDevSpeed(const USB_OTG_GlobalTypeDef *USBx);
|
||||||
|
uint32_t USB_GetMode(const USB_OTG_GlobalTypeDef *USBx);
|
||||||
|
uint32_t USB_ReadInterrupts(USB_OTG_GlobalTypeDef const *USBx);
|
||||||
|
uint32_t USB_ReadChInterrupts(const USB_OTG_GlobalTypeDef *USBx, uint8_t chnum);
|
||||||
|
uint32_t USB_ReadDevAllOutEpInterrupt(const USB_OTG_GlobalTypeDef *USBx);
|
||||||
|
uint32_t USB_ReadDevOutEPInterrupt(const USB_OTG_GlobalTypeDef *USBx, uint8_t epnum);
|
||||||
|
uint32_t USB_ReadDevAllInEpInterrupt(const USB_OTG_GlobalTypeDef *USBx);
|
||||||
|
uint32_t USB_ReadDevInEPInterrupt(const USB_OTG_GlobalTypeDef *USBx, uint8_t epnum);
|
||||||
|
void USB_ClearInterrupts(USB_OTG_GlobalTypeDef *USBx, uint32_t interrupt);
|
||||||
|
|
||||||
|
HAL_StatusTypeDef USB_HostInit(USB_OTG_GlobalTypeDef *USBx, USB_OTG_CfgTypeDef cfg);
|
||||||
|
HAL_StatusTypeDef USB_InitFSLSPClkSel(const USB_OTG_GlobalTypeDef *USBx, uint8_t freq);
|
||||||
|
HAL_StatusTypeDef USB_ResetPort(const USB_OTG_GlobalTypeDef *USBx);
|
||||||
|
HAL_StatusTypeDef USB_DriveVbus(const USB_OTG_GlobalTypeDef *USBx, uint8_t state);
|
||||||
|
uint32_t USB_GetHostSpeed(USB_OTG_GlobalTypeDef const *USBx);
|
||||||
|
uint32_t USB_GetCurrentFrame(USB_OTG_GlobalTypeDef const *USBx);
|
||||||
|
HAL_StatusTypeDef USB_HC_Init(USB_OTG_GlobalTypeDef *USBx, uint8_t ch_num,
|
||||||
|
uint8_t epnum, uint8_t dev_address, uint8_t speed,
|
||||||
|
uint8_t ep_type, uint16_t mps);
|
||||||
|
HAL_StatusTypeDef USB_HC_StartXfer(USB_OTG_GlobalTypeDef *USBx,
|
||||||
|
USB_OTG_HCTypeDef *hc);
|
||||||
|
|
||||||
|
uint32_t USB_HC_ReadInterrupt(const USB_OTG_GlobalTypeDef *USBx);
|
||||||
|
HAL_StatusTypeDef USB_HC_Halt(const USB_OTG_GlobalTypeDef *USBx, uint8_t hc_num);
|
||||||
|
HAL_StatusTypeDef USB_DoPing(const USB_OTG_GlobalTypeDef *USBx, uint8_t ch_num);
|
||||||
|
HAL_StatusTypeDef USB_StopHost(USB_OTG_GlobalTypeDef *USBx);
|
||||||
|
HAL_StatusTypeDef USB_ActivateRemoteWakeup(const USB_OTG_GlobalTypeDef *USBx);
|
||||||
|
HAL_StatusTypeDef USB_DeActivateRemoteWakeup(const USB_OTG_GlobalTypeDef *USBx);
|
||||||
|
#endif /* defined (USB_OTG_FS) */
|
||||||
|
|
||||||
|
#if defined (USB)
|
||||||
|
HAL_StatusTypeDef USB_CoreInit(USB_TypeDef *USBx, USB_CfgTypeDef cfg);
|
||||||
|
HAL_StatusTypeDef USB_DevInit(USB_TypeDef *USBx, USB_CfgTypeDef cfg);
|
||||||
|
HAL_StatusTypeDef USB_EnableGlobalInt(USB_TypeDef *USBx);
|
||||||
|
HAL_StatusTypeDef USB_DisableGlobalInt(USB_TypeDef *USBx);
|
||||||
|
HAL_StatusTypeDef USB_SetCurrentMode(USB_TypeDef *USBx, USB_ModeTypeDef mode);
|
||||||
|
HAL_StatusTypeDef USB_SetDevSpeed(USB_TypeDef *USBx, uint8_t speed);
|
||||||
|
|
||||||
|
HAL_StatusTypeDef USB_FlushRxFifo(USB_TypeDef const *USBx);
|
||||||
|
HAL_StatusTypeDef USB_FlushTxFifo(USB_TypeDef const *USBx, uint32_t num);
|
||||||
|
|
||||||
|
#if defined (HAL_PCD_MODULE_ENABLED)
|
||||||
|
HAL_StatusTypeDef USB_ActivateEndpoint(USB_TypeDef *USBx, USB_EPTypeDef *ep);
|
||||||
|
HAL_StatusTypeDef USB_DeactivateEndpoint(USB_TypeDef *USBx, USB_EPTypeDef *ep);
|
||||||
|
HAL_StatusTypeDef USB_EPStartXfer(USB_TypeDef *USBx, USB_EPTypeDef *ep);
|
||||||
|
HAL_StatusTypeDef USB_EPSetStall(USB_TypeDef *USBx, USB_EPTypeDef *ep);
|
||||||
|
HAL_StatusTypeDef USB_EPClearStall(USB_TypeDef *USBx, USB_EPTypeDef *ep);
|
||||||
|
HAL_StatusTypeDef USB_EPStopXfer(USB_TypeDef *USBx, USB_EPTypeDef *ep);
|
||||||
|
#endif /* defined (HAL_PCD_MODULE_ENABLED) */
|
||||||
|
|
||||||
|
HAL_StatusTypeDef USB_SetDevAddress(USB_TypeDef *USBx, uint8_t address);
|
||||||
|
HAL_StatusTypeDef USB_DevConnect(USB_TypeDef *USBx);
|
||||||
|
HAL_StatusTypeDef USB_DevDisconnect(USB_TypeDef *USBx);
|
||||||
|
HAL_StatusTypeDef USB_StopDevice(USB_TypeDef *USBx);
|
||||||
|
HAL_StatusTypeDef USB_EP0_OutStart(USB_TypeDef *USBx, uint8_t *psetup);
|
||||||
|
HAL_StatusTypeDef USB_WritePacket(USB_TypeDef *USBx, uint8_t *src,
|
||||||
|
uint8_t ch_ep_num, uint16_t len);
|
||||||
|
|
||||||
|
void *USB_ReadPacket(USB_TypeDef *USBx, uint8_t *dest, uint16_t len);
|
||||||
|
|
||||||
|
uint32_t USB_ReadInterrupts(USB_TypeDef const *USBx);
|
||||||
|
uint32_t USB_ReadDevAllOutEpInterrupt(USB_TypeDef *USBx);
|
||||||
|
uint32_t USB_ReadDevOutEPInterrupt(USB_TypeDef *USBx, uint8_t epnum);
|
||||||
|
uint32_t USB_ReadDevAllInEpInterrupt(USB_TypeDef *USBx);
|
||||||
|
uint32_t USB_ReadDevInEPInterrupt(USB_TypeDef *USBx, uint8_t epnum);
|
||||||
|
void USB_ClearInterrupts(USB_TypeDef *USBx, uint32_t interrupt);
|
||||||
|
HAL_StatusTypeDef USB_ActivateRemoteWakeup(USB_TypeDef *USBx);
|
||||||
|
HAL_StatusTypeDef USB_DeActivateRemoteWakeup(USB_TypeDef *USBx);
|
||||||
|
|
||||||
|
void USB_WritePMA(USB_TypeDef const *USBx, uint8_t *pbUsrBuf,
|
||||||
|
uint16_t wPMABufAddr, uint16_t wNBytes);
|
||||||
|
|
||||||
|
void USB_ReadPMA(USB_TypeDef const *USBx, uint8_t *pbUsrBuf,
|
||||||
|
uint16_t wPMABufAddr, uint16_t wNBytes);
|
||||||
|
#endif /* defined (USB) */
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
#endif /* defined (USB) || defined (USB_OTG_FS) */
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif /* __cplusplus */
|
||||||
|
|
||||||
|
|
||||||
|
#endif /* STM32F1xx_LL_USB_H */
|
||||||
2720
Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_pcd.c
Normal file
2720
Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_pcd.c
Normal file
File diff suppressed because it is too large
Load Diff
243
Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_pcd_ex.c
Normal file
243
Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_hal_pcd_ex.c
Normal file
@@ -0,0 +1,243 @@
|
|||||||
|
/**
|
||||||
|
******************************************************************************
|
||||||
|
* @file stm32f1xx_hal_pcd_ex.c
|
||||||
|
* @author MCD Application Team
|
||||||
|
* @brief PCD Extended HAL module driver.
|
||||||
|
* This file provides firmware functions to manage the following
|
||||||
|
* functionalities of the USB Peripheral Controller:
|
||||||
|
* + Extended features functions
|
||||||
|
*
|
||||||
|
******************************************************************************
|
||||||
|
* @attention
|
||||||
|
*
|
||||||
|
* Copyright (c) 2016 STMicroelectronics.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* This software is licensed under terms that can be found in the LICENSE file
|
||||||
|
* in the root directory of this software component.
|
||||||
|
* If no LICENSE file comes with this software, it is provided AS-IS.
|
||||||
|
*
|
||||||
|
******************************************************************************
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Includes ------------------------------------------------------------------*/
|
||||||
|
#include "stm32f1xx_hal.h"
|
||||||
|
|
||||||
|
/** @addtogroup STM32F1xx_HAL_Driver
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @defgroup PCDEx PCDEx
|
||||||
|
* @brief PCD Extended HAL module driver
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifdef HAL_PCD_MODULE_ENABLED
|
||||||
|
|
||||||
|
#if defined (USB) || defined (USB_OTG_FS)
|
||||||
|
/* Private types -------------------------------------------------------------*/
|
||||||
|
/* Private variables ---------------------------------------------------------*/
|
||||||
|
/* Private constants ---------------------------------------------------------*/
|
||||||
|
/* Private macros ------------------------------------------------------------*/
|
||||||
|
/* Private functions ---------------------------------------------------------*/
|
||||||
|
/* Exported functions --------------------------------------------------------*/
|
||||||
|
|
||||||
|
/** @defgroup PCDEx_Exported_Functions PCDEx Exported Functions
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @defgroup PCDEx_Exported_Functions_Group1 Peripheral Control functions
|
||||||
|
* @brief PCDEx control functions
|
||||||
|
*
|
||||||
|
@verbatim
|
||||||
|
===============================================================================
|
||||||
|
##### Extended features functions #####
|
||||||
|
===============================================================================
|
||||||
|
[..] This section provides functions allowing to:
|
||||||
|
(+) Update FIFO configuration
|
||||||
|
|
||||||
|
@endverbatim
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
#if defined (USB_OTG_FS)
|
||||||
|
/**
|
||||||
|
* @brief Set Tx FIFO
|
||||||
|
* @param hpcd PCD handle
|
||||||
|
* @param fifo The number of Tx fifo
|
||||||
|
* @param size Fifo size
|
||||||
|
* @retval HAL status
|
||||||
|
*/
|
||||||
|
HAL_StatusTypeDef HAL_PCDEx_SetTxFiFo(PCD_HandleTypeDef *hpcd, uint8_t fifo, uint16_t size)
|
||||||
|
{
|
||||||
|
uint8_t i;
|
||||||
|
uint32_t Tx_Offset;
|
||||||
|
|
||||||
|
/* TXn min size = 16 words. (n : Transmit FIFO index)
|
||||||
|
When a TxFIFO is not used, the Configuration should be as follows:
|
||||||
|
case 1 : n > m and Txn is not used (n,m : Transmit FIFO indexes)
|
||||||
|
--> Txm can use the space allocated for Txn.
|
||||||
|
case2 : n < m and Txn is not used (n,m : Transmit FIFO indexes)
|
||||||
|
--> Txn should be configured with the minimum space of 16 words
|
||||||
|
The FIFO is used optimally when used TxFIFOs are allocated in the top
|
||||||
|
of the FIFO.Ex: use EP1 and EP2 as IN instead of EP1 and EP3 as IN ones.
|
||||||
|
When DMA is used 3n * FIFO locations should be reserved for internal DMA registers */
|
||||||
|
|
||||||
|
Tx_Offset = hpcd->Instance->GRXFSIZ;
|
||||||
|
|
||||||
|
if (fifo == 0U)
|
||||||
|
{
|
||||||
|
hpcd->Instance->DIEPTXF0_HNPTXFSIZ = ((uint32_t)size << 16) | Tx_Offset;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Tx_Offset += (hpcd->Instance->DIEPTXF0_HNPTXFSIZ) >> 16;
|
||||||
|
for (i = 0U; i < (fifo - 1U); i++)
|
||||||
|
{
|
||||||
|
Tx_Offset += (hpcd->Instance->DIEPTXF[i] >> 16);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Multiply Tx_Size by 2 to get higher performance */
|
||||||
|
hpcd->Instance->DIEPTXF[fifo - 1U] = ((uint32_t)size << 16) | Tx_Offset;
|
||||||
|
}
|
||||||
|
|
||||||
|
return HAL_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Set Rx FIFO
|
||||||
|
* @param hpcd PCD handle
|
||||||
|
* @param size Size of Rx fifo
|
||||||
|
* @retval HAL status
|
||||||
|
*/
|
||||||
|
HAL_StatusTypeDef HAL_PCDEx_SetRxFiFo(PCD_HandleTypeDef *hpcd, uint16_t size)
|
||||||
|
{
|
||||||
|
hpcd->Instance->GRXFSIZ = size;
|
||||||
|
|
||||||
|
return HAL_OK;
|
||||||
|
}
|
||||||
|
#endif /* defined (USB_OTG_FS) */
|
||||||
|
#if defined (USB)
|
||||||
|
/**
|
||||||
|
* @brief Configure PMA for EP
|
||||||
|
* @param hpcd Device instance
|
||||||
|
* @param ep_addr endpoint address
|
||||||
|
* @param ep_kind endpoint Kind
|
||||||
|
* USB_SNG_BUF: Single Buffer used
|
||||||
|
* USB_DBL_BUF: Double Buffer used
|
||||||
|
* @param pmaadress: EP address in The PMA: In case of single buffer endpoint
|
||||||
|
* this parameter is 16-bit value providing the address
|
||||||
|
* in PMA allocated to endpoint.
|
||||||
|
* In case of double buffer endpoint this parameter
|
||||||
|
* is a 32-bit value providing the endpoint buffer 0 address
|
||||||
|
* in the LSB part of 32-bit value and endpoint buffer 1 address
|
||||||
|
* in the MSB part of 32-bit value.
|
||||||
|
* @retval HAL status
|
||||||
|
*/
|
||||||
|
|
||||||
|
HAL_StatusTypeDef HAL_PCDEx_PMAConfig(PCD_HandleTypeDef *hpcd, uint16_t ep_addr,
|
||||||
|
uint16_t ep_kind, uint32_t pmaadress)
|
||||||
|
{
|
||||||
|
PCD_EPTypeDef *ep;
|
||||||
|
|
||||||
|
/* initialize ep structure*/
|
||||||
|
if ((0x80U & ep_addr) == 0x80U)
|
||||||
|
{
|
||||||
|
ep = &hpcd->IN_ep[ep_addr & EP_ADDR_MSK];
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ep = &hpcd->OUT_ep[ep_addr];
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Here we check if the endpoint is single or double Buffer*/
|
||||||
|
if (ep_kind == PCD_SNG_BUF)
|
||||||
|
{
|
||||||
|
/* Single Buffer */
|
||||||
|
ep->doublebuffer = 0U;
|
||||||
|
/* Configure the PMA */
|
||||||
|
ep->pmaadress = (uint16_t)pmaadress;
|
||||||
|
}
|
||||||
|
#if (USE_USB_DOUBLE_BUFFER == 1U)
|
||||||
|
else /* USB_DBL_BUF */
|
||||||
|
{
|
||||||
|
/* Double Buffer Endpoint */
|
||||||
|
ep->doublebuffer = 1U;
|
||||||
|
/* Configure the PMA */
|
||||||
|
ep->pmaaddr0 = (uint16_t)(pmaadress & 0xFFFFU);
|
||||||
|
ep->pmaaddr1 = (uint16_t)((pmaadress & 0xFFFF0000U) >> 16);
|
||||||
|
}
|
||||||
|
#endif /* (USE_USB_DOUBLE_BUFFER == 1U) */
|
||||||
|
|
||||||
|
return HAL_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Software Device Connection,
|
||||||
|
* this function is not required by USB OTG FS peripheral, it is used
|
||||||
|
* only by USB Device FS peripheral.
|
||||||
|
* @param hpcd PCD handle
|
||||||
|
* @param state connection state (0 : disconnected / 1: connected)
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
__weak void HAL_PCDEx_SetConnectionState(PCD_HandleTypeDef *hpcd, uint8_t state)
|
||||||
|
{
|
||||||
|
/* Prevent unused argument(s) compilation warning */
|
||||||
|
UNUSED(hpcd);
|
||||||
|
UNUSED(state);
|
||||||
|
/* NOTE : This function Should not be modified, when the callback is needed,
|
||||||
|
the HAL_PCDEx_SetConnectionState could be implemented in the user file
|
||||||
|
*/
|
||||||
|
}
|
||||||
|
#endif /* defined (USB) */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Send LPM message to user layer callback.
|
||||||
|
* @param hpcd PCD handle
|
||||||
|
* @param msg LPM message
|
||||||
|
* @retval HAL status
|
||||||
|
*/
|
||||||
|
__weak void HAL_PCDEx_LPM_Callback(PCD_HandleTypeDef *hpcd, PCD_LPM_MsgTypeDef msg)
|
||||||
|
{
|
||||||
|
/* Prevent unused argument(s) compilation warning */
|
||||||
|
UNUSED(hpcd);
|
||||||
|
UNUSED(msg);
|
||||||
|
|
||||||
|
/* NOTE : This function should not be modified, when the callback is needed,
|
||||||
|
the HAL_PCDEx_LPM_Callback could be implemented in the user file
|
||||||
|
*/
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Send BatteryCharging message to user layer callback.
|
||||||
|
* @param hpcd PCD handle
|
||||||
|
* @param msg LPM message
|
||||||
|
* @retval HAL status
|
||||||
|
*/
|
||||||
|
__weak void HAL_PCDEx_BCD_Callback(PCD_HandleTypeDef *hpcd, PCD_BCD_MsgTypeDef msg)
|
||||||
|
{
|
||||||
|
/* Prevent unused argument(s) compilation warning */
|
||||||
|
UNUSED(hpcd);
|
||||||
|
UNUSED(msg);
|
||||||
|
|
||||||
|
/* NOTE : This function should not be modified, when the callback is needed,
|
||||||
|
the HAL_PCDEx_BCD_Callback could be implemented in the user file
|
||||||
|
*/
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
#endif /* defined (USB) || defined (USB_OTG_FS) */
|
||||||
|
#endif /* HAL_PCD_MODULE_ENABLED */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
File diff suppressed because it is too large
Load Diff
2897
Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_ll_usb.c
Normal file
2897
Drivers/STM32F1xx_HAL_Driver/Src/stm32f1xx_ll_usb.c
Normal file
File diff suppressed because it is too large
Load Diff
40
LedRing.ioc
40
LedRing.ioc
@@ -24,23 +24,25 @@ Mcu.IP2=NVIC
|
|||||||
Mcu.IP3=RCC
|
Mcu.IP3=RCC
|
||||||
Mcu.IP4=SYS
|
Mcu.IP4=SYS
|
||||||
Mcu.IP5=TIM2
|
Mcu.IP5=TIM2
|
||||||
Mcu.IP6=USART2
|
Mcu.IP6=USB
|
||||||
Mcu.IPNb=7
|
Mcu.IP7=USB_DEVICE
|
||||||
|
Mcu.IPNb=8
|
||||||
Mcu.Name=STM32F103C(4-6)Tx
|
Mcu.Name=STM32F103C(4-6)Tx
|
||||||
Mcu.Package=LQFP48
|
Mcu.Package=LQFP48
|
||||||
Mcu.Pin0=PC13-TAMPER-RTC
|
Mcu.Pin0=PC13-TAMPER-RTC
|
||||||
Mcu.Pin1=PD0-OSC_IN
|
Mcu.Pin1=PD0-OSC_IN
|
||||||
Mcu.Pin10=VP_SYS_VS_Systick
|
Mcu.Pin10=VP_SYS_VS_Systick
|
||||||
Mcu.Pin11=VP_TIM2_VS_ClockSourceINT
|
Mcu.Pin11=VP_TIM2_VS_ClockSourceINT
|
||||||
|
Mcu.Pin12=VP_USB_DEVICE_VS_USB_DEVICE_CDC_FS
|
||||||
Mcu.Pin2=PD1-OSC_OUT
|
Mcu.Pin2=PD1-OSC_OUT
|
||||||
Mcu.Pin3=PA0-WKUP
|
Mcu.Pin3=PA0-WKUP
|
||||||
Mcu.Pin4=PA2
|
Mcu.Pin4=PA11
|
||||||
Mcu.Pin5=PA3
|
Mcu.Pin5=PA12
|
||||||
Mcu.Pin6=PA13
|
Mcu.Pin6=PA13
|
||||||
Mcu.Pin7=PA14
|
Mcu.Pin7=PA14
|
||||||
Mcu.Pin8=PB6
|
Mcu.Pin8=PB6
|
||||||
Mcu.Pin9=PB7
|
Mcu.Pin9=PB7
|
||||||
Mcu.PinsNb=12
|
Mcu.PinsNb=13
|
||||||
Mcu.ThirdPartyNb=0
|
Mcu.ThirdPartyNb=0
|
||||||
Mcu.UserConstants=
|
Mcu.UserConstants=
|
||||||
Mcu.UserName=STM32F103C6Tx
|
Mcu.UserName=STM32F103C6Tx
|
||||||
@@ -58,17 +60,17 @@ NVIC.PriorityGroup=NVIC_PRIORITYGROUP_4
|
|||||||
NVIC.SVCall_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false
|
NVIC.SVCall_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false
|
||||||
NVIC.SysTick_IRQn=true\:15\:0\:false\:false\:true\:false\:true\:false
|
NVIC.SysTick_IRQn=true\:15\:0\:false\:false\:true\:false\:true\:false
|
||||||
NVIC.TIM2_IRQn=true\:0\:0\:false\:false\:true\:true\:true\:true
|
NVIC.TIM2_IRQn=true\:0\:0\:false\:false\:true\:true\:true\:true
|
||||||
NVIC.USART2_IRQn=true\:0\:0\:false\:false\:true\:true\:true\:true
|
NVIC.USB_LP_CAN1_RX0_IRQn=true\:0\:0\:false\:false\:true\:false\:true\:true
|
||||||
NVIC.UsageFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false
|
NVIC.UsageFault_IRQn=true\:0\:0\:false\:false\:true\:false\:false\:false
|
||||||
PA0-WKUP.Signal=S_TIM2_CH1_ETR
|
PA0-WKUP.Signal=S_TIM2_CH1_ETR
|
||||||
|
PA11.Mode=Device
|
||||||
|
PA11.Signal=USB_DM
|
||||||
|
PA12.Mode=Device
|
||||||
|
PA12.Signal=USB_DP
|
||||||
PA13.Mode=Serial_Wire
|
PA13.Mode=Serial_Wire
|
||||||
PA13.Signal=SYS_JTMS-SWDIO
|
PA13.Signal=SYS_JTMS-SWDIO
|
||||||
PA14.Mode=Serial_Wire
|
PA14.Mode=Serial_Wire
|
||||||
PA14.Signal=SYS_JTCK-SWCLK
|
PA14.Signal=SYS_JTCK-SWCLK
|
||||||
PA2.Mode=Asynchronous
|
|
||||||
PA2.Signal=USART2_TX
|
|
||||||
PA3.Mode=Asynchronous
|
|
||||||
PA3.Signal=USART2_RX
|
|
||||||
PB6.Mode=I2C
|
PB6.Mode=I2C
|
||||||
PB6.Signal=I2C1_SCL
|
PB6.Signal=I2C1_SCL
|
||||||
PB7.Mode=I2C
|
PB7.Mode=I2C
|
||||||
@@ -113,7 +115,7 @@ ProjectManager.ToolChainLocation=
|
|||||||
ProjectManager.UAScriptAfterPath=
|
ProjectManager.UAScriptAfterPath=
|
||||||
ProjectManager.UAScriptBeforePath=
|
ProjectManager.UAScriptBeforePath=
|
||||||
ProjectManager.UnderRoot=true
|
ProjectManager.UnderRoot=true
|
||||||
ProjectManager.functionlistsort=1-SystemClock_Config-RCC-false-HAL-false,2-MX_GPIO_Init-GPIO-false-HAL-true,3-MX_DMA_Init-DMA-false-HAL-true,4-MX_TIM2_Init-TIM2-false-HAL-true,5-MX_I2C1_Init-I2C1-false-HAL-true
|
ProjectManager.functionlistsort=1-SystemClock_Config-RCC-false-HAL-false,2-MX_GPIO_Init-GPIO-false-HAL-true,3-MX_DMA_Init-DMA-false-HAL-true,4-MX_TIM2_Init-TIM2-false-HAL-true,5-MX_I2C1_Init-I2C1-false-HAL-true,6-MX_USART2_UART_Init-USART2-false-HAL-true
|
||||||
RCC.ADCFreqValue=36000000
|
RCC.ADCFreqValue=36000000
|
||||||
RCC.AHBFreq_Value=72000000
|
RCC.AHBFreq_Value=72000000
|
||||||
RCC.APB1CLKDivider=RCC_HCLK_DIV2
|
RCC.APB1CLKDivider=RCC_HCLK_DIV2
|
||||||
@@ -124,7 +126,7 @@ RCC.APB2TimFreq_Value=72000000
|
|||||||
RCC.FCLKCortexFreq_Value=72000000
|
RCC.FCLKCortexFreq_Value=72000000
|
||||||
RCC.FamilyName=M
|
RCC.FamilyName=M
|
||||||
RCC.HCLKFreq_Value=72000000
|
RCC.HCLKFreq_Value=72000000
|
||||||
RCC.IPParameters=ADCFreqValue,AHBFreq_Value,APB1CLKDivider,APB1Freq_Value,APB1TimFreq_Value,APB2Freq_Value,APB2TimFreq_Value,FCLKCortexFreq_Value,FamilyName,HCLKFreq_Value,MCOFreq_Value,PLLCLKFreq_Value,PLLMCOFreq_Value,PLLMUL,PLLSourceVirtual,SYSCLKFreq_VALUE,SYSCLKSource,TimSysFreq_Value,USBFreq_Value,VCOOutput2Freq_Value
|
RCC.IPParameters=ADCFreqValue,AHBFreq_Value,APB1CLKDivider,APB1Freq_Value,APB1TimFreq_Value,APB2Freq_Value,APB2TimFreq_Value,FCLKCortexFreq_Value,FamilyName,HCLKFreq_Value,MCOFreq_Value,PLLCLKFreq_Value,PLLMCOFreq_Value,PLLMUL,PLLSourceVirtual,SYSCLKFreq_VALUE,SYSCLKSource,TimSysFreq_Value,USBFreq_Value,USBPrescaler,VCOOutput2Freq_Value
|
||||||
RCC.MCOFreq_Value=72000000
|
RCC.MCOFreq_Value=72000000
|
||||||
RCC.PLLCLKFreq_Value=72000000
|
RCC.PLLCLKFreq_Value=72000000
|
||||||
RCC.PLLMCOFreq_Value=36000000
|
RCC.PLLMCOFreq_Value=36000000
|
||||||
@@ -133,7 +135,8 @@ RCC.PLLSourceVirtual=RCC_PLLSOURCE_HSE
|
|||||||
RCC.SYSCLKFreq_VALUE=72000000
|
RCC.SYSCLKFreq_VALUE=72000000
|
||||||
RCC.SYSCLKSource=RCC_SYSCLKSOURCE_PLLCLK
|
RCC.SYSCLKSource=RCC_SYSCLKSOURCE_PLLCLK
|
||||||
RCC.TimSysFreq_Value=72000000
|
RCC.TimSysFreq_Value=72000000
|
||||||
RCC.USBFreq_Value=72000000
|
RCC.USBFreq_Value=48000000
|
||||||
|
RCC.USBPrescaler=RCC_USBCLKSOURCE_PLL_DIV1_5
|
||||||
RCC.VCOOutput2Freq_Value=8000000
|
RCC.VCOOutput2Freq_Value=8000000
|
||||||
SH.S_TIM2_CH1_ETR.0=TIM2_CH1,PWM Generation1 CH1
|
SH.S_TIM2_CH1_ETR.0=TIM2_CH1,PWM Generation1 CH1
|
||||||
SH.S_TIM2_CH1_ETR.ConfNb=1
|
SH.S_TIM2_CH1_ETR.ConfNb=1
|
||||||
@@ -141,10 +144,17 @@ TIM2.Channel-PWM\ Generation1\ CH1=TIM_CHANNEL_1
|
|||||||
TIM2.IPParameters=Channel-PWM Generation1 CH1,Period,Pulse-PWM Generation1 CH1
|
TIM2.IPParameters=Channel-PWM Generation1 CH1,Period,Pulse-PWM Generation1 CH1
|
||||||
TIM2.Period=90
|
TIM2.Period=90
|
||||||
TIM2.Pulse-PWM\ Generation1\ CH1=9
|
TIM2.Pulse-PWM\ Generation1\ CH1=9
|
||||||
USART2.IPParameters=VirtualMode
|
USB_DEVICE.APP_RX_DATA_SIZE=128
|
||||||
USART2.VirtualMode=VM_ASYNC
|
USB_DEVICE.APP_TX_DATA_SIZE=128
|
||||||
|
USB_DEVICE.CLASS_NAME_FS=CDC
|
||||||
|
USB_DEVICE.IPParameters=VirtualMode,VirtualModeFS,CLASS_NAME_FS,USBD_MAX_STR_DESC_SIZ,APP_RX_DATA_SIZE,APP_TX_DATA_SIZE
|
||||||
|
USB_DEVICE.USBD_MAX_STR_DESC_SIZ=128
|
||||||
|
USB_DEVICE.VirtualMode=Cdc
|
||||||
|
USB_DEVICE.VirtualModeFS=Cdc_FS
|
||||||
VP_SYS_VS_Systick.Mode=SysTick
|
VP_SYS_VS_Systick.Mode=SysTick
|
||||||
VP_SYS_VS_Systick.Signal=SYS_VS_Systick
|
VP_SYS_VS_Systick.Signal=SYS_VS_Systick
|
||||||
VP_TIM2_VS_ClockSourceINT.Mode=Internal
|
VP_TIM2_VS_ClockSourceINT.Mode=Internal
|
||||||
VP_TIM2_VS_ClockSourceINT.Signal=TIM2_VS_ClockSourceINT
|
VP_TIM2_VS_ClockSourceINT.Signal=TIM2_VS_ClockSourceINT
|
||||||
|
VP_USB_DEVICE_VS_USB_DEVICE_CDC_FS.Mode=CDC_FS
|
||||||
|
VP_USB_DEVICE_VS_USB_DEVICE_CDC_FS.Signal=USB_DEVICE_VS_USB_DEVICE_CDC_FS
|
||||||
board=custom
|
board=custom
|
||||||
|
|||||||
179
Middlewares/ST/STM32_USB_Device_Library/Class/CDC/Inc/usbd_cdc.h
Normal file
179
Middlewares/ST/STM32_USB_Device_Library/Class/CDC/Inc/usbd_cdc.h
Normal file
@@ -0,0 +1,179 @@
|
|||||||
|
/**
|
||||||
|
******************************************************************************
|
||||||
|
* @file usbd_cdc.h
|
||||||
|
* @author MCD Application Team
|
||||||
|
* @brief header file for the usbd_cdc.c file.
|
||||||
|
******************************************************************************
|
||||||
|
* @attention
|
||||||
|
*
|
||||||
|
* <h2><center>© Copyright (c) 2015 STMicroelectronics.
|
||||||
|
* All rights reserved.</center></h2>
|
||||||
|
*
|
||||||
|
* This software component is licensed by ST under Ultimate Liberty license
|
||||||
|
* SLA0044, the "License"; You may not use this file except in compliance with
|
||||||
|
* the License. You may obtain a copy of the License at:
|
||||||
|
* www.st.com/SLA0044
|
||||||
|
*
|
||||||
|
******************************************************************************
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Define to prevent recursive inclusion -------------------------------------*/
|
||||||
|
#ifndef __USB_CDC_H
|
||||||
|
#define __USB_CDC_H
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Includes ------------------------------------------------------------------*/
|
||||||
|
#include "usbd_ioreq.h"
|
||||||
|
|
||||||
|
/** @addtogroup STM32_USB_DEVICE_LIBRARY
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @defgroup usbd_cdc
|
||||||
|
* @brief This file is the Header file for usbd_cdc.c
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/** @defgroup usbd_cdc_Exported_Defines
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
#define CDC_IN_EP 0x81U /* EP1 for data IN */
|
||||||
|
#define CDC_OUT_EP 0x01U /* EP1 for data OUT */
|
||||||
|
#define CDC_CMD_EP 0x82U /* EP2 for CDC commands */
|
||||||
|
|
||||||
|
#ifndef CDC_HS_BINTERVAL
|
||||||
|
#define CDC_HS_BINTERVAL 0x10U
|
||||||
|
#endif /* CDC_HS_BINTERVAL */
|
||||||
|
|
||||||
|
#ifndef CDC_FS_BINTERVAL
|
||||||
|
#define CDC_FS_BINTERVAL 0x10U
|
||||||
|
#endif /* CDC_FS_BINTERVAL */
|
||||||
|
|
||||||
|
/* CDC Endpoints parameters: you can fine tune these values depending on the needed baudrates and performance. */
|
||||||
|
#define CDC_DATA_HS_MAX_PACKET_SIZE 512U /* Endpoint IN & OUT Packet size */
|
||||||
|
#define CDC_DATA_FS_MAX_PACKET_SIZE 64U /* Endpoint IN & OUT Packet size */
|
||||||
|
#define CDC_CMD_PACKET_SIZE 8U /* Control Endpoint Packet size */
|
||||||
|
|
||||||
|
#define USB_CDC_CONFIG_DESC_SIZ 67U
|
||||||
|
#define CDC_DATA_HS_IN_PACKET_SIZE CDC_DATA_HS_MAX_PACKET_SIZE
|
||||||
|
#define CDC_DATA_HS_OUT_PACKET_SIZE CDC_DATA_HS_MAX_PACKET_SIZE
|
||||||
|
|
||||||
|
#define CDC_DATA_FS_IN_PACKET_SIZE CDC_DATA_FS_MAX_PACKET_SIZE
|
||||||
|
#define CDC_DATA_FS_OUT_PACKET_SIZE CDC_DATA_FS_MAX_PACKET_SIZE
|
||||||
|
|
||||||
|
/*---------------------------------------------------------------------*/
|
||||||
|
/* CDC definitions */
|
||||||
|
/*---------------------------------------------------------------------*/
|
||||||
|
#define CDC_SEND_ENCAPSULATED_COMMAND 0x00U
|
||||||
|
#define CDC_GET_ENCAPSULATED_RESPONSE 0x01U
|
||||||
|
#define CDC_SET_COMM_FEATURE 0x02U
|
||||||
|
#define CDC_GET_COMM_FEATURE 0x03U
|
||||||
|
#define CDC_CLEAR_COMM_FEATURE 0x04U
|
||||||
|
#define CDC_SET_LINE_CODING 0x20U
|
||||||
|
#define CDC_GET_LINE_CODING 0x21U
|
||||||
|
#define CDC_SET_CONTROL_LINE_STATE 0x22U
|
||||||
|
#define CDC_SEND_BREAK 0x23U
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/** @defgroup USBD_CORE_Exported_TypesDefinitions
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
uint32_t bitrate;
|
||||||
|
uint8_t format;
|
||||||
|
uint8_t paritytype;
|
||||||
|
uint8_t datatype;
|
||||||
|
} USBD_CDC_LineCodingTypeDef;
|
||||||
|
|
||||||
|
typedef struct _USBD_CDC_Itf
|
||||||
|
{
|
||||||
|
int8_t (* Init)(void);
|
||||||
|
int8_t (* DeInit)(void);
|
||||||
|
int8_t (* Control)(uint8_t cmd, uint8_t *pbuf, uint16_t length);
|
||||||
|
int8_t (* Receive)(uint8_t *Buf, uint32_t *Len);
|
||||||
|
|
||||||
|
} USBD_CDC_ItfTypeDef;
|
||||||
|
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
uint32_t data[CDC_DATA_HS_MAX_PACKET_SIZE / 4U]; /* Force 32bits alignment */
|
||||||
|
uint8_t CmdOpCode;
|
||||||
|
uint8_t CmdLength;
|
||||||
|
uint8_t *RxBuffer;
|
||||||
|
uint8_t *TxBuffer;
|
||||||
|
uint32_t RxLength;
|
||||||
|
uint32_t TxLength;
|
||||||
|
|
||||||
|
__IO uint32_t TxState;
|
||||||
|
__IO uint32_t RxState;
|
||||||
|
}
|
||||||
|
USBD_CDC_HandleTypeDef;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/** @defgroup USBD_CORE_Exported_Macros
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @defgroup USBD_CORE_Exported_Variables
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
extern USBD_ClassTypeDef USBD_CDC;
|
||||||
|
#define USBD_CDC_CLASS &USBD_CDC
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @defgroup USB_CORE_Exported_Functions
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
uint8_t USBD_CDC_RegisterInterface(USBD_HandleTypeDef *pdev,
|
||||||
|
USBD_CDC_ItfTypeDef *fops);
|
||||||
|
|
||||||
|
uint8_t USBD_CDC_SetTxBuffer(USBD_HandleTypeDef *pdev,
|
||||||
|
uint8_t *pbuff,
|
||||||
|
uint16_t length);
|
||||||
|
|
||||||
|
uint8_t USBD_CDC_SetRxBuffer(USBD_HandleTypeDef *pdev,
|
||||||
|
uint8_t *pbuff);
|
||||||
|
|
||||||
|
uint8_t USBD_CDC_ReceivePacket(USBD_HandleTypeDef *pdev);
|
||||||
|
|
||||||
|
uint8_t USBD_CDC_TransmitPacket(USBD_HandleTypeDef *pdev);
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif /* __USB_CDC_H */
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
|
||||||
945
Middlewares/ST/STM32_USB_Device_Library/Class/CDC/Src/usbd_cdc.c
Normal file
945
Middlewares/ST/STM32_USB_Device_Library/Class/CDC/Src/usbd_cdc.c
Normal file
@@ -0,0 +1,945 @@
|
|||||||
|
/**
|
||||||
|
******************************************************************************
|
||||||
|
* @file usbd_cdc.c
|
||||||
|
* @author MCD Application Team
|
||||||
|
* @brief This file provides the high layer firmware functions to manage the
|
||||||
|
* following functionalities of the USB CDC Class:
|
||||||
|
* - Initialization and Configuration of high and low layer
|
||||||
|
* - Enumeration as CDC Device (and enumeration for each implemented memory interface)
|
||||||
|
* - OUT/IN data transfer
|
||||||
|
* - Command IN transfer (class requests management)
|
||||||
|
* - Error management
|
||||||
|
*
|
||||||
|
* @verbatim
|
||||||
|
*
|
||||||
|
* ===================================================================
|
||||||
|
* CDC Class Driver Description
|
||||||
|
* ===================================================================
|
||||||
|
* This driver manages the "Universal Serial Bus Class Definitions for Communications Devices
|
||||||
|
* Revision 1.2 November 16, 2007" and the sub-protocol specification of "Universal Serial Bus
|
||||||
|
* Communications Class Subclass Specification for PSTN Devices Revision 1.2 February 9, 2007"
|
||||||
|
* This driver implements the following aspects of the specification:
|
||||||
|
* - Device descriptor management
|
||||||
|
* - Configuration descriptor management
|
||||||
|
* - Enumeration as CDC device with 2 data endpoints (IN and OUT) and 1 command endpoint (IN)
|
||||||
|
* - Requests management (as described in section 6.2 in specification)
|
||||||
|
* - Abstract Control Model compliant
|
||||||
|
* - Union Functional collection (using 1 IN endpoint for control)
|
||||||
|
* - Data interface class
|
||||||
|
*
|
||||||
|
* These aspects may be enriched or modified for a specific user application.
|
||||||
|
*
|
||||||
|
* This driver doesn't implement the following aspects of the specification
|
||||||
|
* (but it is possible to manage these features with some modifications on this driver):
|
||||||
|
* - Any class-specific aspect relative to communication classes should be managed by user application.
|
||||||
|
* - All communication classes other than PSTN are not managed
|
||||||
|
*
|
||||||
|
* @endverbatim
|
||||||
|
*
|
||||||
|
******************************************************************************
|
||||||
|
* @attention
|
||||||
|
*
|
||||||
|
* <h2><center>© Copyright (c) 2015 STMicroelectronics.
|
||||||
|
* All rights reserved.</center></h2>
|
||||||
|
*
|
||||||
|
* This software component is licensed by ST under Ultimate Liberty license
|
||||||
|
* SLA0044, the "License"; You may not use this file except in compliance with
|
||||||
|
* the License. You may obtain a copy of the License at:
|
||||||
|
* www.st.com/SLA0044
|
||||||
|
*
|
||||||
|
******************************************************************************
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* BSPDependencies
|
||||||
|
- "stm32xxxxx_{eval}{discovery}{nucleo_144}.c"
|
||||||
|
- "stm32xxxxx_{eval}{discovery}_io.c"
|
||||||
|
EndBSPDependencies */
|
||||||
|
|
||||||
|
/* Includes ------------------------------------------------------------------*/
|
||||||
|
#include "usbd_cdc.h"
|
||||||
|
#include "usbd_ctlreq.h"
|
||||||
|
|
||||||
|
|
||||||
|
/** @addtogroup STM32_USB_DEVICE_LIBRARY
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/** @defgroup USBD_CDC
|
||||||
|
* @brief usbd core module
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @defgroup USBD_CDC_Private_TypesDefinitions
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/** @defgroup USBD_CDC_Private_Defines
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/** @defgroup USBD_CDC_Private_Macros
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/** @defgroup USBD_CDC_Private_FunctionPrototypes
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
static uint8_t USBD_CDC_Init(USBD_HandleTypeDef *pdev,
|
||||||
|
uint8_t cfgidx);
|
||||||
|
|
||||||
|
static uint8_t USBD_CDC_DeInit(USBD_HandleTypeDef *pdev,
|
||||||
|
uint8_t cfgidx);
|
||||||
|
|
||||||
|
static uint8_t USBD_CDC_Setup(USBD_HandleTypeDef *pdev,
|
||||||
|
USBD_SetupReqTypedef *req);
|
||||||
|
|
||||||
|
static uint8_t USBD_CDC_DataIn(USBD_HandleTypeDef *pdev,
|
||||||
|
uint8_t epnum);
|
||||||
|
|
||||||
|
static uint8_t USBD_CDC_DataOut(USBD_HandleTypeDef *pdev,
|
||||||
|
uint8_t epnum);
|
||||||
|
|
||||||
|
static uint8_t USBD_CDC_EP0_RxReady(USBD_HandleTypeDef *pdev);
|
||||||
|
|
||||||
|
static uint8_t *USBD_CDC_GetFSCfgDesc(uint16_t *length);
|
||||||
|
|
||||||
|
static uint8_t *USBD_CDC_GetHSCfgDesc(uint16_t *length);
|
||||||
|
|
||||||
|
static uint8_t *USBD_CDC_GetOtherSpeedCfgDesc(uint16_t *length);
|
||||||
|
|
||||||
|
static uint8_t *USBD_CDC_GetOtherSpeedCfgDesc(uint16_t *length);
|
||||||
|
|
||||||
|
uint8_t *USBD_CDC_GetDeviceQualifierDescriptor(uint16_t *length);
|
||||||
|
|
||||||
|
/* USB Standard Device Descriptor */
|
||||||
|
__ALIGN_BEGIN static uint8_t USBD_CDC_DeviceQualifierDesc[USB_LEN_DEV_QUALIFIER_DESC] __ALIGN_END =
|
||||||
|
{
|
||||||
|
USB_LEN_DEV_QUALIFIER_DESC,
|
||||||
|
USB_DESC_TYPE_DEVICE_QUALIFIER,
|
||||||
|
0x00,
|
||||||
|
0x02,
|
||||||
|
0x00,
|
||||||
|
0x00,
|
||||||
|
0x00,
|
||||||
|
0x40,
|
||||||
|
0x01,
|
||||||
|
0x00,
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @defgroup USBD_CDC_Private_Variables
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/* CDC interface class callbacks structure */
|
||||||
|
USBD_ClassTypeDef USBD_CDC =
|
||||||
|
{
|
||||||
|
USBD_CDC_Init,
|
||||||
|
USBD_CDC_DeInit,
|
||||||
|
USBD_CDC_Setup,
|
||||||
|
NULL, /* EP0_TxSent, */
|
||||||
|
USBD_CDC_EP0_RxReady,
|
||||||
|
USBD_CDC_DataIn,
|
||||||
|
USBD_CDC_DataOut,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
USBD_CDC_GetHSCfgDesc,
|
||||||
|
USBD_CDC_GetFSCfgDesc,
|
||||||
|
USBD_CDC_GetOtherSpeedCfgDesc,
|
||||||
|
USBD_CDC_GetDeviceQualifierDescriptor,
|
||||||
|
};
|
||||||
|
|
||||||
|
/* USB CDC device Configuration Descriptor */
|
||||||
|
__ALIGN_BEGIN uint8_t USBD_CDC_CfgHSDesc[USB_CDC_CONFIG_DESC_SIZ] __ALIGN_END =
|
||||||
|
{
|
||||||
|
/*Configuration Descriptor*/
|
||||||
|
0x09, /* bLength: Configuration Descriptor size */
|
||||||
|
USB_DESC_TYPE_CONFIGURATION, /* bDescriptorType: Configuration */
|
||||||
|
USB_CDC_CONFIG_DESC_SIZ, /* wTotalLength:no of returned bytes */
|
||||||
|
0x00,
|
||||||
|
0x02, /* bNumInterfaces: 2 interface */
|
||||||
|
0x01, /* bConfigurationValue: Configuration value */
|
||||||
|
0x00, /* iConfiguration: Index of string descriptor describing the configuration */
|
||||||
|
0xC0, /* bmAttributes: self powered */
|
||||||
|
0x32, /* MaxPower 0 mA */
|
||||||
|
|
||||||
|
/*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
/*Interface Descriptor */
|
||||||
|
0x09, /* bLength: Interface Descriptor size */
|
||||||
|
USB_DESC_TYPE_INTERFACE, /* bDescriptorType: Interface */
|
||||||
|
/* Interface descriptor type */
|
||||||
|
0x00, /* bInterfaceNumber: Number of Interface */
|
||||||
|
0x00, /* bAlternateSetting: Alternate setting */
|
||||||
|
0x01, /* bNumEndpoints: One endpoints used */
|
||||||
|
0x02, /* bInterfaceClass: Communication Interface Class */
|
||||||
|
0x02, /* bInterfaceSubClass: Abstract Control Model */
|
||||||
|
0x01, /* bInterfaceProtocol: Common AT commands */
|
||||||
|
0x00, /* iInterface: */
|
||||||
|
|
||||||
|
/*Header Functional Descriptor*/
|
||||||
|
0x05, /* bLength: Endpoint Descriptor size */
|
||||||
|
0x24, /* bDescriptorType: CS_INTERFACE */
|
||||||
|
0x00, /* bDescriptorSubtype: Header Func Desc */
|
||||||
|
0x10, /* bcdCDC: spec release number */
|
||||||
|
0x01,
|
||||||
|
|
||||||
|
/*Call Management Functional Descriptor*/
|
||||||
|
0x05, /* bFunctionLength */
|
||||||
|
0x24, /* bDescriptorType: CS_INTERFACE */
|
||||||
|
0x01, /* bDescriptorSubtype: Call Management Func Desc */
|
||||||
|
0x00, /* bmCapabilities: D0+D1 */
|
||||||
|
0x01, /* bDataInterface: 1 */
|
||||||
|
|
||||||
|
/*ACM Functional Descriptor*/
|
||||||
|
0x04, /* bFunctionLength */
|
||||||
|
0x24, /* bDescriptorType: CS_INTERFACE */
|
||||||
|
0x02, /* bDescriptorSubtype: Abstract Control Management desc */
|
||||||
|
0x02, /* bmCapabilities */
|
||||||
|
|
||||||
|
/*Union Functional Descriptor*/
|
||||||
|
0x05, /* bFunctionLength */
|
||||||
|
0x24, /* bDescriptorType: CS_INTERFACE */
|
||||||
|
0x06, /* bDescriptorSubtype: Union func desc */
|
||||||
|
0x00, /* bMasterInterface: Communication class interface */
|
||||||
|
0x01, /* bSlaveInterface0: Data Class Interface */
|
||||||
|
|
||||||
|
/*Endpoint 2 Descriptor*/
|
||||||
|
0x07, /* bLength: Endpoint Descriptor size */
|
||||||
|
USB_DESC_TYPE_ENDPOINT, /* bDescriptorType: Endpoint */
|
||||||
|
CDC_CMD_EP, /* bEndpointAddress */
|
||||||
|
0x03, /* bmAttributes: Interrupt */
|
||||||
|
LOBYTE(CDC_CMD_PACKET_SIZE), /* wMaxPacketSize: */
|
||||||
|
HIBYTE(CDC_CMD_PACKET_SIZE),
|
||||||
|
CDC_HS_BINTERVAL, /* bInterval: */
|
||||||
|
/*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
/*Data class interface descriptor*/
|
||||||
|
0x09, /* bLength: Endpoint Descriptor size */
|
||||||
|
USB_DESC_TYPE_INTERFACE, /* bDescriptorType: */
|
||||||
|
0x01, /* bInterfaceNumber: Number of Interface */
|
||||||
|
0x00, /* bAlternateSetting: Alternate setting */
|
||||||
|
0x02, /* bNumEndpoints: Two endpoints used */
|
||||||
|
0x0A, /* bInterfaceClass: CDC */
|
||||||
|
0x00, /* bInterfaceSubClass: */
|
||||||
|
0x00, /* bInterfaceProtocol: */
|
||||||
|
0x00, /* iInterface: */
|
||||||
|
|
||||||
|
/*Endpoint OUT Descriptor*/
|
||||||
|
0x07, /* bLength: Endpoint Descriptor size */
|
||||||
|
USB_DESC_TYPE_ENDPOINT, /* bDescriptorType: Endpoint */
|
||||||
|
CDC_OUT_EP, /* bEndpointAddress */
|
||||||
|
0x02, /* bmAttributes: Bulk */
|
||||||
|
LOBYTE(CDC_DATA_HS_MAX_PACKET_SIZE), /* wMaxPacketSize: */
|
||||||
|
HIBYTE(CDC_DATA_HS_MAX_PACKET_SIZE),
|
||||||
|
0x00, /* bInterval: ignore for Bulk transfer */
|
||||||
|
|
||||||
|
/*Endpoint IN Descriptor*/
|
||||||
|
0x07, /* bLength: Endpoint Descriptor size */
|
||||||
|
USB_DESC_TYPE_ENDPOINT, /* bDescriptorType: Endpoint */
|
||||||
|
CDC_IN_EP, /* bEndpointAddress */
|
||||||
|
0x02, /* bmAttributes: Bulk */
|
||||||
|
LOBYTE(CDC_DATA_HS_MAX_PACKET_SIZE), /* wMaxPacketSize: */
|
||||||
|
HIBYTE(CDC_DATA_HS_MAX_PACKET_SIZE),
|
||||||
|
0x00 /* bInterval: ignore for Bulk transfer */
|
||||||
|
} ;
|
||||||
|
|
||||||
|
|
||||||
|
/* USB CDC device Configuration Descriptor */
|
||||||
|
__ALIGN_BEGIN uint8_t USBD_CDC_CfgFSDesc[USB_CDC_CONFIG_DESC_SIZ] __ALIGN_END =
|
||||||
|
{
|
||||||
|
/*Configuration Descriptor*/
|
||||||
|
0x09, /* bLength: Configuration Descriptor size */
|
||||||
|
USB_DESC_TYPE_CONFIGURATION, /* bDescriptorType: Configuration */
|
||||||
|
USB_CDC_CONFIG_DESC_SIZ, /* wTotalLength:no of returned bytes */
|
||||||
|
0x00,
|
||||||
|
0x02, /* bNumInterfaces: 2 interface */
|
||||||
|
0x01, /* bConfigurationValue: Configuration value */
|
||||||
|
0x00, /* iConfiguration: Index of string descriptor describing the configuration */
|
||||||
|
0xC0, /* bmAttributes: self powered */
|
||||||
|
0x32, /* MaxPower 0 mA */
|
||||||
|
|
||||||
|
/*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
/*Interface Descriptor */
|
||||||
|
0x09, /* bLength: Interface Descriptor size */
|
||||||
|
USB_DESC_TYPE_INTERFACE, /* bDescriptorType: Interface */
|
||||||
|
/* Interface descriptor type */
|
||||||
|
0x00, /* bInterfaceNumber: Number of Interface */
|
||||||
|
0x00, /* bAlternateSetting: Alternate setting */
|
||||||
|
0x01, /* bNumEndpoints: One endpoints used */
|
||||||
|
0x02, /* bInterfaceClass: Communication Interface Class */
|
||||||
|
0x02, /* bInterfaceSubClass: Abstract Control Model */
|
||||||
|
0x01, /* bInterfaceProtocol: Common AT commands */
|
||||||
|
0x00, /* iInterface: */
|
||||||
|
|
||||||
|
/*Header Functional Descriptor*/
|
||||||
|
0x05, /* bLength: Endpoint Descriptor size */
|
||||||
|
0x24, /* bDescriptorType: CS_INTERFACE */
|
||||||
|
0x00, /* bDescriptorSubtype: Header Func Desc */
|
||||||
|
0x10, /* bcdCDC: spec release number */
|
||||||
|
0x01,
|
||||||
|
|
||||||
|
/*Call Management Functional Descriptor*/
|
||||||
|
0x05, /* bFunctionLength */
|
||||||
|
0x24, /* bDescriptorType: CS_INTERFACE */
|
||||||
|
0x01, /* bDescriptorSubtype: Call Management Func Desc */
|
||||||
|
0x00, /* bmCapabilities: D0+D1 */
|
||||||
|
0x01, /* bDataInterface: 1 */
|
||||||
|
|
||||||
|
/*ACM Functional Descriptor*/
|
||||||
|
0x04, /* bFunctionLength */
|
||||||
|
0x24, /* bDescriptorType: CS_INTERFACE */
|
||||||
|
0x02, /* bDescriptorSubtype: Abstract Control Management desc */
|
||||||
|
0x02, /* bmCapabilities */
|
||||||
|
|
||||||
|
/*Union Functional Descriptor*/
|
||||||
|
0x05, /* bFunctionLength */
|
||||||
|
0x24, /* bDescriptorType: CS_INTERFACE */
|
||||||
|
0x06, /* bDescriptorSubtype: Union func desc */
|
||||||
|
0x00, /* bMasterInterface: Communication class interface */
|
||||||
|
0x01, /* bSlaveInterface0: Data Class Interface */
|
||||||
|
|
||||||
|
/*Endpoint 2 Descriptor*/
|
||||||
|
0x07, /* bLength: Endpoint Descriptor size */
|
||||||
|
USB_DESC_TYPE_ENDPOINT, /* bDescriptorType: Endpoint */
|
||||||
|
CDC_CMD_EP, /* bEndpointAddress */
|
||||||
|
0x03, /* bmAttributes: Interrupt */
|
||||||
|
LOBYTE(CDC_CMD_PACKET_SIZE), /* wMaxPacketSize: */
|
||||||
|
HIBYTE(CDC_CMD_PACKET_SIZE),
|
||||||
|
CDC_FS_BINTERVAL, /* bInterval: */
|
||||||
|
/*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
/*Data class interface descriptor*/
|
||||||
|
0x09, /* bLength: Endpoint Descriptor size */
|
||||||
|
USB_DESC_TYPE_INTERFACE, /* bDescriptorType: */
|
||||||
|
0x01, /* bInterfaceNumber: Number of Interface */
|
||||||
|
0x00, /* bAlternateSetting: Alternate setting */
|
||||||
|
0x02, /* bNumEndpoints: Two endpoints used */
|
||||||
|
0x0A, /* bInterfaceClass: CDC */
|
||||||
|
0x00, /* bInterfaceSubClass: */
|
||||||
|
0x00, /* bInterfaceProtocol: */
|
||||||
|
0x00, /* iInterface: */
|
||||||
|
|
||||||
|
/*Endpoint OUT Descriptor*/
|
||||||
|
0x07, /* bLength: Endpoint Descriptor size */
|
||||||
|
USB_DESC_TYPE_ENDPOINT, /* bDescriptorType: Endpoint */
|
||||||
|
CDC_OUT_EP, /* bEndpointAddress */
|
||||||
|
0x02, /* bmAttributes: Bulk */
|
||||||
|
LOBYTE(CDC_DATA_FS_MAX_PACKET_SIZE), /* wMaxPacketSize: */
|
||||||
|
HIBYTE(CDC_DATA_FS_MAX_PACKET_SIZE),
|
||||||
|
0x00, /* bInterval: ignore for Bulk transfer */
|
||||||
|
|
||||||
|
/*Endpoint IN Descriptor*/
|
||||||
|
0x07, /* bLength: Endpoint Descriptor size */
|
||||||
|
USB_DESC_TYPE_ENDPOINT, /* bDescriptorType: Endpoint */
|
||||||
|
CDC_IN_EP, /* bEndpointAddress */
|
||||||
|
0x02, /* bmAttributes: Bulk */
|
||||||
|
LOBYTE(CDC_DATA_FS_MAX_PACKET_SIZE), /* wMaxPacketSize: */
|
||||||
|
HIBYTE(CDC_DATA_FS_MAX_PACKET_SIZE),
|
||||||
|
0x00 /* bInterval: ignore for Bulk transfer */
|
||||||
|
} ;
|
||||||
|
|
||||||
|
__ALIGN_BEGIN uint8_t USBD_CDC_OtherSpeedCfgDesc[USB_CDC_CONFIG_DESC_SIZ] __ALIGN_END =
|
||||||
|
{
|
||||||
|
0x09, /* bLength: Configuation Descriptor size */
|
||||||
|
USB_DESC_TYPE_OTHER_SPEED_CONFIGURATION,
|
||||||
|
USB_CDC_CONFIG_DESC_SIZ,
|
||||||
|
0x00,
|
||||||
|
0x02, /* bNumInterfaces: 2 interfaces */
|
||||||
|
0x01, /* bConfigurationValue: */
|
||||||
|
0x04, /* iConfiguration: */
|
||||||
|
0xC0, /* bmAttributes: */
|
||||||
|
0x32, /* MaxPower 100 mA */
|
||||||
|
|
||||||
|
/*Interface Descriptor */
|
||||||
|
0x09, /* bLength: Interface Descriptor size */
|
||||||
|
USB_DESC_TYPE_INTERFACE, /* bDescriptorType: Interface */
|
||||||
|
/* Interface descriptor type */
|
||||||
|
0x00, /* bInterfaceNumber: Number of Interface */
|
||||||
|
0x00, /* bAlternateSetting: Alternate setting */
|
||||||
|
0x01, /* bNumEndpoints: One endpoints used */
|
||||||
|
0x02, /* bInterfaceClass: Communication Interface Class */
|
||||||
|
0x02, /* bInterfaceSubClass: Abstract Control Model */
|
||||||
|
0x01, /* bInterfaceProtocol: Common AT commands */
|
||||||
|
0x00, /* iInterface: */
|
||||||
|
|
||||||
|
/*Header Functional Descriptor*/
|
||||||
|
0x05, /* bLength: Endpoint Descriptor size */
|
||||||
|
0x24, /* bDescriptorType: CS_INTERFACE */
|
||||||
|
0x00, /* bDescriptorSubtype: Header Func Desc */
|
||||||
|
0x10, /* bcdCDC: spec release number */
|
||||||
|
0x01,
|
||||||
|
|
||||||
|
/*Call Management Functional Descriptor*/
|
||||||
|
0x05, /* bFunctionLength */
|
||||||
|
0x24, /* bDescriptorType: CS_INTERFACE */
|
||||||
|
0x01, /* bDescriptorSubtype: Call Management Func Desc */
|
||||||
|
0x00, /* bmCapabilities: D0+D1 */
|
||||||
|
0x01, /* bDataInterface: 1 */
|
||||||
|
|
||||||
|
/*ACM Functional Descriptor*/
|
||||||
|
0x04, /* bFunctionLength */
|
||||||
|
0x24, /* bDescriptorType: CS_INTERFACE */
|
||||||
|
0x02, /* bDescriptorSubtype: Abstract Control Management desc */
|
||||||
|
0x02, /* bmCapabilities */
|
||||||
|
|
||||||
|
/*Union Functional Descriptor*/
|
||||||
|
0x05, /* bFunctionLength */
|
||||||
|
0x24, /* bDescriptorType: CS_INTERFACE */
|
||||||
|
0x06, /* bDescriptorSubtype: Union func desc */
|
||||||
|
0x00, /* bMasterInterface: Communication class interface */
|
||||||
|
0x01, /* bSlaveInterface0: Data Class Interface */
|
||||||
|
|
||||||
|
/*Endpoint 2 Descriptor*/
|
||||||
|
0x07, /* bLength: Endpoint Descriptor size */
|
||||||
|
USB_DESC_TYPE_ENDPOINT, /* bDescriptorType: Endpoint */
|
||||||
|
CDC_CMD_EP, /* bEndpointAddress */
|
||||||
|
0x03, /* bmAttributes: Interrupt */
|
||||||
|
LOBYTE(CDC_CMD_PACKET_SIZE), /* wMaxPacketSize: */
|
||||||
|
HIBYTE(CDC_CMD_PACKET_SIZE),
|
||||||
|
CDC_FS_BINTERVAL, /* bInterval: */
|
||||||
|
|
||||||
|
/*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
/*Data class interface descriptor*/
|
||||||
|
0x09, /* bLength: Endpoint Descriptor size */
|
||||||
|
USB_DESC_TYPE_INTERFACE, /* bDescriptorType: */
|
||||||
|
0x01, /* bInterfaceNumber: Number of Interface */
|
||||||
|
0x00, /* bAlternateSetting: Alternate setting */
|
||||||
|
0x02, /* bNumEndpoints: Two endpoints used */
|
||||||
|
0x0A, /* bInterfaceClass: CDC */
|
||||||
|
0x00, /* bInterfaceSubClass: */
|
||||||
|
0x00, /* bInterfaceProtocol: */
|
||||||
|
0x00, /* iInterface: */
|
||||||
|
|
||||||
|
/*Endpoint OUT Descriptor*/
|
||||||
|
0x07, /* bLength: Endpoint Descriptor size */
|
||||||
|
USB_DESC_TYPE_ENDPOINT, /* bDescriptorType: Endpoint */
|
||||||
|
CDC_OUT_EP, /* bEndpointAddress */
|
||||||
|
0x02, /* bmAttributes: Bulk */
|
||||||
|
0x40, /* wMaxPacketSize: */
|
||||||
|
0x00,
|
||||||
|
0x00, /* bInterval: ignore for Bulk transfer */
|
||||||
|
|
||||||
|
/*Endpoint IN Descriptor*/
|
||||||
|
0x07, /* bLength: Endpoint Descriptor size */
|
||||||
|
USB_DESC_TYPE_ENDPOINT, /* bDescriptorType: Endpoint */
|
||||||
|
CDC_IN_EP, /* bEndpointAddress */
|
||||||
|
0x02, /* bmAttributes: Bulk */
|
||||||
|
0x40, /* wMaxPacketSize: */
|
||||||
|
0x00,
|
||||||
|
0x00 /* bInterval */
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @defgroup USBD_CDC_Private_Functions
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief USBD_CDC_Init
|
||||||
|
* Initialize the CDC interface
|
||||||
|
* @param pdev: device instance
|
||||||
|
* @param cfgidx: Configuration index
|
||||||
|
* @retval status
|
||||||
|
*/
|
||||||
|
static uint8_t USBD_CDC_Init(USBD_HandleTypeDef *pdev, uint8_t cfgidx)
|
||||||
|
{
|
||||||
|
uint8_t ret = 0U;
|
||||||
|
USBD_CDC_HandleTypeDef *hcdc;
|
||||||
|
|
||||||
|
if (pdev->dev_speed == USBD_SPEED_HIGH)
|
||||||
|
{
|
||||||
|
/* Open EP IN */
|
||||||
|
USBD_LL_OpenEP(pdev, CDC_IN_EP, USBD_EP_TYPE_BULK,
|
||||||
|
CDC_DATA_HS_IN_PACKET_SIZE);
|
||||||
|
|
||||||
|
pdev->ep_in[CDC_IN_EP & 0xFU].is_used = 1U;
|
||||||
|
|
||||||
|
/* Open EP OUT */
|
||||||
|
USBD_LL_OpenEP(pdev, CDC_OUT_EP, USBD_EP_TYPE_BULK,
|
||||||
|
CDC_DATA_HS_OUT_PACKET_SIZE);
|
||||||
|
|
||||||
|
pdev->ep_out[CDC_OUT_EP & 0xFU].is_used = 1U;
|
||||||
|
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* Open EP IN */
|
||||||
|
USBD_LL_OpenEP(pdev, CDC_IN_EP, USBD_EP_TYPE_BULK,
|
||||||
|
CDC_DATA_FS_IN_PACKET_SIZE);
|
||||||
|
|
||||||
|
pdev->ep_in[CDC_IN_EP & 0xFU].is_used = 1U;
|
||||||
|
|
||||||
|
/* Open EP OUT */
|
||||||
|
USBD_LL_OpenEP(pdev, CDC_OUT_EP, USBD_EP_TYPE_BULK,
|
||||||
|
CDC_DATA_FS_OUT_PACKET_SIZE);
|
||||||
|
|
||||||
|
pdev->ep_out[CDC_OUT_EP & 0xFU].is_used = 1U;
|
||||||
|
}
|
||||||
|
/* Open Command IN EP */
|
||||||
|
USBD_LL_OpenEP(pdev, CDC_CMD_EP, USBD_EP_TYPE_INTR, CDC_CMD_PACKET_SIZE);
|
||||||
|
pdev->ep_in[CDC_CMD_EP & 0xFU].is_used = 1U;
|
||||||
|
|
||||||
|
pdev->pClassData = USBD_malloc(sizeof(USBD_CDC_HandleTypeDef));
|
||||||
|
|
||||||
|
if (pdev->pClassData == NULL)
|
||||||
|
{
|
||||||
|
ret = 1U;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
hcdc = (USBD_CDC_HandleTypeDef *) pdev->pClassData;
|
||||||
|
|
||||||
|
/* Init physical Interface components */
|
||||||
|
((USBD_CDC_ItfTypeDef *)pdev->pUserData)->Init();
|
||||||
|
|
||||||
|
/* Init Xfer states */
|
||||||
|
hcdc->TxState = 0U;
|
||||||
|
hcdc->RxState = 0U;
|
||||||
|
|
||||||
|
if (pdev->dev_speed == USBD_SPEED_HIGH)
|
||||||
|
{
|
||||||
|
/* Prepare Out endpoint to receive next packet */
|
||||||
|
USBD_LL_PrepareReceive(pdev, CDC_OUT_EP, hcdc->RxBuffer,
|
||||||
|
CDC_DATA_HS_OUT_PACKET_SIZE);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* Prepare Out endpoint to receive next packet */
|
||||||
|
USBD_LL_PrepareReceive(pdev, CDC_OUT_EP, hcdc->RxBuffer,
|
||||||
|
CDC_DATA_FS_OUT_PACKET_SIZE);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief USBD_CDC_Init
|
||||||
|
* DeInitialize the CDC layer
|
||||||
|
* @param pdev: device instance
|
||||||
|
* @param cfgidx: Configuration index
|
||||||
|
* @retval status
|
||||||
|
*/
|
||||||
|
static uint8_t USBD_CDC_DeInit(USBD_HandleTypeDef *pdev, uint8_t cfgidx)
|
||||||
|
{
|
||||||
|
uint8_t ret = 0U;
|
||||||
|
|
||||||
|
/* Close EP IN */
|
||||||
|
USBD_LL_CloseEP(pdev, CDC_IN_EP);
|
||||||
|
pdev->ep_in[CDC_IN_EP & 0xFU].is_used = 0U;
|
||||||
|
|
||||||
|
/* Close EP OUT */
|
||||||
|
USBD_LL_CloseEP(pdev, CDC_OUT_EP);
|
||||||
|
pdev->ep_out[CDC_OUT_EP & 0xFU].is_used = 0U;
|
||||||
|
|
||||||
|
/* Close Command IN EP */
|
||||||
|
USBD_LL_CloseEP(pdev, CDC_CMD_EP);
|
||||||
|
pdev->ep_in[CDC_CMD_EP & 0xFU].is_used = 0U;
|
||||||
|
|
||||||
|
/* DeInit physical Interface components */
|
||||||
|
if (pdev->pClassData != NULL)
|
||||||
|
{
|
||||||
|
((USBD_CDC_ItfTypeDef *)pdev->pUserData)->DeInit();
|
||||||
|
USBD_free(pdev->pClassData);
|
||||||
|
pdev->pClassData = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief USBD_CDC_Setup
|
||||||
|
* Handle the CDC specific requests
|
||||||
|
* @param pdev: instance
|
||||||
|
* @param req: usb requests
|
||||||
|
* @retval status
|
||||||
|
*/
|
||||||
|
static uint8_t USBD_CDC_Setup(USBD_HandleTypeDef *pdev,
|
||||||
|
USBD_SetupReqTypedef *req)
|
||||||
|
{
|
||||||
|
USBD_CDC_HandleTypeDef *hcdc = (USBD_CDC_HandleTypeDef *) pdev->pClassData;
|
||||||
|
uint8_t ifalt = 0U;
|
||||||
|
uint16_t status_info = 0U;
|
||||||
|
uint8_t ret = USBD_OK;
|
||||||
|
|
||||||
|
switch (req->bmRequest & USB_REQ_TYPE_MASK)
|
||||||
|
{
|
||||||
|
case USB_REQ_TYPE_CLASS :
|
||||||
|
if (req->wLength)
|
||||||
|
{
|
||||||
|
if (req->bmRequest & 0x80U)
|
||||||
|
{
|
||||||
|
((USBD_CDC_ItfTypeDef *)pdev->pUserData)->Control(req->bRequest,
|
||||||
|
(uint8_t *)(void *)hcdc->data,
|
||||||
|
req->wLength);
|
||||||
|
|
||||||
|
USBD_CtlSendData(pdev, (uint8_t *)(void *)hcdc->data, req->wLength);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
hcdc->CmdOpCode = req->bRequest;
|
||||||
|
hcdc->CmdLength = (uint8_t)req->wLength;
|
||||||
|
|
||||||
|
USBD_CtlPrepareRx(pdev, (uint8_t *)(void *)hcdc->data, req->wLength);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
((USBD_CDC_ItfTypeDef *)pdev->pUserData)->Control(req->bRequest,
|
||||||
|
(uint8_t *)(void *)req, 0U);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case USB_REQ_TYPE_STANDARD:
|
||||||
|
switch (req->bRequest)
|
||||||
|
{
|
||||||
|
case USB_REQ_GET_STATUS:
|
||||||
|
if (pdev->dev_state == USBD_STATE_CONFIGURED)
|
||||||
|
{
|
||||||
|
USBD_CtlSendData(pdev, (uint8_t *)(void *)&status_info, 2U);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
USBD_CtlError(pdev, req);
|
||||||
|
ret = USBD_FAIL;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case USB_REQ_GET_INTERFACE:
|
||||||
|
if (pdev->dev_state == USBD_STATE_CONFIGURED)
|
||||||
|
{
|
||||||
|
USBD_CtlSendData(pdev, &ifalt, 1U);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
USBD_CtlError(pdev, req);
|
||||||
|
ret = USBD_FAIL;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case USB_REQ_SET_INTERFACE:
|
||||||
|
if (pdev->dev_state != USBD_STATE_CONFIGURED)
|
||||||
|
{
|
||||||
|
USBD_CtlError(pdev, req);
|
||||||
|
ret = USBD_FAIL;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
USBD_CtlError(pdev, req);
|
||||||
|
ret = USBD_FAIL;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
USBD_CtlError(pdev, req);
|
||||||
|
ret = USBD_FAIL;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief USBD_CDC_DataIn
|
||||||
|
* Data sent on non-control IN endpoint
|
||||||
|
* @param pdev: device instance
|
||||||
|
* @param epnum: endpoint number
|
||||||
|
* @retval status
|
||||||
|
*/
|
||||||
|
static uint8_t USBD_CDC_DataIn(USBD_HandleTypeDef *pdev, uint8_t epnum)
|
||||||
|
{
|
||||||
|
USBD_CDC_HandleTypeDef *hcdc = (USBD_CDC_HandleTypeDef *)pdev->pClassData;
|
||||||
|
PCD_HandleTypeDef *hpcd = pdev->pData;
|
||||||
|
|
||||||
|
if (pdev->pClassData != NULL)
|
||||||
|
{
|
||||||
|
if ((pdev->ep_in[epnum].total_length > 0U) && ((pdev->ep_in[epnum].total_length % hpcd->IN_ep[epnum].maxpacket) == 0U))
|
||||||
|
{
|
||||||
|
/* Update the packet total length */
|
||||||
|
pdev->ep_in[epnum].total_length = 0U;
|
||||||
|
|
||||||
|
/* Send ZLP */
|
||||||
|
USBD_LL_Transmit(pdev, epnum, NULL, 0U);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
hcdc->TxState = 0U;
|
||||||
|
}
|
||||||
|
return USBD_OK;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return USBD_FAIL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief USBD_CDC_DataOut
|
||||||
|
* Data received on non-control Out endpoint
|
||||||
|
* @param pdev: device instance
|
||||||
|
* @param epnum: endpoint number
|
||||||
|
* @retval status
|
||||||
|
*/
|
||||||
|
static uint8_t USBD_CDC_DataOut(USBD_HandleTypeDef *pdev, uint8_t epnum)
|
||||||
|
{
|
||||||
|
USBD_CDC_HandleTypeDef *hcdc = (USBD_CDC_HandleTypeDef *) pdev->pClassData;
|
||||||
|
|
||||||
|
/* Get the received data length */
|
||||||
|
hcdc->RxLength = USBD_LL_GetRxDataSize(pdev, epnum);
|
||||||
|
|
||||||
|
/* USB data will be immediately processed, this allow next USB traffic being
|
||||||
|
NAKed till the end of the application Xfer */
|
||||||
|
if (pdev->pClassData != NULL)
|
||||||
|
{
|
||||||
|
((USBD_CDC_ItfTypeDef *)pdev->pUserData)->Receive(hcdc->RxBuffer, &hcdc->RxLength);
|
||||||
|
|
||||||
|
return USBD_OK;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return USBD_FAIL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief USBD_CDC_EP0_RxReady
|
||||||
|
* Handle EP0 Rx Ready event
|
||||||
|
* @param pdev: device instance
|
||||||
|
* @retval status
|
||||||
|
*/
|
||||||
|
static uint8_t USBD_CDC_EP0_RxReady(USBD_HandleTypeDef *pdev)
|
||||||
|
{
|
||||||
|
USBD_CDC_HandleTypeDef *hcdc = (USBD_CDC_HandleTypeDef *) pdev->pClassData;
|
||||||
|
|
||||||
|
if ((pdev->pUserData != NULL) && (hcdc->CmdOpCode != 0xFFU))
|
||||||
|
{
|
||||||
|
((USBD_CDC_ItfTypeDef *)pdev->pUserData)->Control(hcdc->CmdOpCode,
|
||||||
|
(uint8_t *)(void *)hcdc->data,
|
||||||
|
(uint16_t)hcdc->CmdLength);
|
||||||
|
hcdc->CmdOpCode = 0xFFU;
|
||||||
|
|
||||||
|
}
|
||||||
|
return USBD_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief USBD_CDC_GetFSCfgDesc
|
||||||
|
* Return configuration descriptor
|
||||||
|
* @param speed : current device speed
|
||||||
|
* @param length : pointer data length
|
||||||
|
* @retval pointer to descriptor buffer
|
||||||
|
*/
|
||||||
|
static uint8_t *USBD_CDC_GetFSCfgDesc(uint16_t *length)
|
||||||
|
{
|
||||||
|
*length = sizeof(USBD_CDC_CfgFSDesc);
|
||||||
|
return USBD_CDC_CfgFSDesc;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief USBD_CDC_GetHSCfgDesc
|
||||||
|
* Return configuration descriptor
|
||||||
|
* @param speed : current device speed
|
||||||
|
* @param length : pointer data length
|
||||||
|
* @retval pointer to descriptor buffer
|
||||||
|
*/
|
||||||
|
static uint8_t *USBD_CDC_GetHSCfgDesc(uint16_t *length)
|
||||||
|
{
|
||||||
|
*length = sizeof(USBD_CDC_CfgHSDesc);
|
||||||
|
return USBD_CDC_CfgHSDesc;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief USBD_CDC_GetCfgDesc
|
||||||
|
* Return configuration descriptor
|
||||||
|
* @param speed : current device speed
|
||||||
|
* @param length : pointer data length
|
||||||
|
* @retval pointer to descriptor buffer
|
||||||
|
*/
|
||||||
|
static uint8_t *USBD_CDC_GetOtherSpeedCfgDesc(uint16_t *length)
|
||||||
|
{
|
||||||
|
*length = sizeof(USBD_CDC_OtherSpeedCfgDesc);
|
||||||
|
return USBD_CDC_OtherSpeedCfgDesc;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief DeviceQualifierDescriptor
|
||||||
|
* return Device Qualifier descriptor
|
||||||
|
* @param length : pointer data length
|
||||||
|
* @retval pointer to descriptor buffer
|
||||||
|
*/
|
||||||
|
uint8_t *USBD_CDC_GetDeviceQualifierDescriptor(uint16_t *length)
|
||||||
|
{
|
||||||
|
*length = sizeof(USBD_CDC_DeviceQualifierDesc);
|
||||||
|
return USBD_CDC_DeviceQualifierDesc;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief USBD_CDC_RegisterInterface
|
||||||
|
* @param pdev: device instance
|
||||||
|
* @param fops: CD Interface callback
|
||||||
|
* @retval status
|
||||||
|
*/
|
||||||
|
uint8_t USBD_CDC_RegisterInterface(USBD_HandleTypeDef *pdev,
|
||||||
|
USBD_CDC_ItfTypeDef *fops)
|
||||||
|
{
|
||||||
|
uint8_t ret = USBD_FAIL;
|
||||||
|
|
||||||
|
if (fops != NULL)
|
||||||
|
{
|
||||||
|
pdev->pUserData = fops;
|
||||||
|
ret = USBD_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief USBD_CDC_SetTxBuffer
|
||||||
|
* @param pdev: device instance
|
||||||
|
* @param pbuff: Tx Buffer
|
||||||
|
* @retval status
|
||||||
|
*/
|
||||||
|
uint8_t USBD_CDC_SetTxBuffer(USBD_HandleTypeDef *pdev,
|
||||||
|
uint8_t *pbuff,
|
||||||
|
uint16_t length)
|
||||||
|
{
|
||||||
|
USBD_CDC_HandleTypeDef *hcdc = (USBD_CDC_HandleTypeDef *) pdev->pClassData;
|
||||||
|
|
||||||
|
hcdc->TxBuffer = pbuff;
|
||||||
|
hcdc->TxLength = length;
|
||||||
|
|
||||||
|
return USBD_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief USBD_CDC_SetRxBuffer
|
||||||
|
* @param pdev: device instance
|
||||||
|
* @param pbuff: Rx Buffer
|
||||||
|
* @retval status
|
||||||
|
*/
|
||||||
|
uint8_t USBD_CDC_SetRxBuffer(USBD_HandleTypeDef *pdev,
|
||||||
|
uint8_t *pbuff)
|
||||||
|
{
|
||||||
|
USBD_CDC_HandleTypeDef *hcdc = (USBD_CDC_HandleTypeDef *) pdev->pClassData;
|
||||||
|
|
||||||
|
hcdc->RxBuffer = pbuff;
|
||||||
|
|
||||||
|
return USBD_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief USBD_CDC_TransmitPacket
|
||||||
|
* Transmit packet on IN endpoint
|
||||||
|
* @param pdev: device instance
|
||||||
|
* @retval status
|
||||||
|
*/
|
||||||
|
uint8_t USBD_CDC_TransmitPacket(USBD_HandleTypeDef *pdev)
|
||||||
|
{
|
||||||
|
USBD_CDC_HandleTypeDef *hcdc = (USBD_CDC_HandleTypeDef *) pdev->pClassData;
|
||||||
|
|
||||||
|
if (pdev->pClassData != NULL)
|
||||||
|
{
|
||||||
|
if (hcdc->TxState == 0U)
|
||||||
|
{
|
||||||
|
/* Tx Transfer in progress */
|
||||||
|
hcdc->TxState = 1U;
|
||||||
|
|
||||||
|
/* Update the packet total length */
|
||||||
|
pdev->ep_in[CDC_IN_EP & 0xFU].total_length = hcdc->TxLength;
|
||||||
|
|
||||||
|
/* Transmit next packet */
|
||||||
|
USBD_LL_Transmit(pdev, CDC_IN_EP, hcdc->TxBuffer,
|
||||||
|
(uint16_t)hcdc->TxLength);
|
||||||
|
|
||||||
|
return USBD_OK;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return USBD_BUSY;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return USBD_FAIL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief USBD_CDC_ReceivePacket
|
||||||
|
* prepare OUT Endpoint for reception
|
||||||
|
* @param pdev: device instance
|
||||||
|
* @retval status
|
||||||
|
*/
|
||||||
|
uint8_t USBD_CDC_ReceivePacket(USBD_HandleTypeDef *pdev)
|
||||||
|
{
|
||||||
|
USBD_CDC_HandleTypeDef *hcdc = (USBD_CDC_HandleTypeDef *) pdev->pClassData;
|
||||||
|
|
||||||
|
/* Suspend or Resume USB Out process */
|
||||||
|
if (pdev->pClassData != NULL)
|
||||||
|
{
|
||||||
|
if (pdev->dev_speed == USBD_SPEED_HIGH)
|
||||||
|
{
|
||||||
|
/* Prepare Out endpoint to receive next packet */
|
||||||
|
USBD_LL_PrepareReceive(pdev,
|
||||||
|
CDC_OUT_EP,
|
||||||
|
hcdc->RxBuffer,
|
||||||
|
CDC_DATA_HS_OUT_PACKET_SIZE);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* Prepare Out endpoint to receive next packet */
|
||||||
|
USBD_LL_PrepareReceive(pdev,
|
||||||
|
CDC_OUT_EP,
|
||||||
|
hcdc->RxBuffer,
|
||||||
|
CDC_DATA_FS_OUT_PACKET_SIZE);
|
||||||
|
}
|
||||||
|
return USBD_OK;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return USBD_FAIL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
|
||||||
161
Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_core.h
Normal file
161
Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_core.h
Normal file
@@ -0,0 +1,161 @@
|
|||||||
|
/**
|
||||||
|
******************************************************************************
|
||||||
|
* @file usbd_core.h
|
||||||
|
* @author MCD Application Team
|
||||||
|
* @brief Header file for usbd_core.c file
|
||||||
|
******************************************************************************
|
||||||
|
* @attention
|
||||||
|
*
|
||||||
|
* <h2><center>© Copyright (c) 2015 STMicroelectronics.
|
||||||
|
* All rights reserved.</center></h2>
|
||||||
|
*
|
||||||
|
* This software component is licensed by ST under Ultimate Liberty license
|
||||||
|
* SLA0044, the "License"; You may not use this file except in compliance with
|
||||||
|
* the License. You may obtain a copy of the License at:
|
||||||
|
* www.st.com/SLA0044
|
||||||
|
*
|
||||||
|
******************************************************************************
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Define to prevent recursive inclusion -------------------------------------*/
|
||||||
|
#ifndef __USBD_CORE_H
|
||||||
|
#define __USBD_CORE_H
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Includes ------------------------------------------------------------------*/
|
||||||
|
#include "usbd_conf.h"
|
||||||
|
#include "usbd_def.h"
|
||||||
|
#include "usbd_ioreq.h"
|
||||||
|
#include "usbd_ctlreq.h"
|
||||||
|
|
||||||
|
/** @addtogroup STM32_USB_DEVICE_LIBRARY
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @defgroup USBD_CORE
|
||||||
|
* @brief This file is the Header file for usbd_core.c file
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/** @defgroup USBD_CORE_Exported_Defines
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
#ifndef USBD_DEBUG_LEVEL
|
||||||
|
#define USBD_DEBUG_LEVEL 0U
|
||||||
|
#endif /* USBD_DEBUG_LEVEL */
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/** @defgroup USBD_CORE_Exported_TypesDefinitions
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/** @defgroup USBD_CORE_Exported_Macros
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @defgroup USBD_CORE_Exported_Variables
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
#define USBD_SOF USBD_LL_SOF
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @defgroup USBD_CORE_Exported_FunctionsPrototype
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
USBD_StatusTypeDef USBD_Init(USBD_HandleTypeDef *pdev, USBD_DescriptorsTypeDef *pdesc, uint8_t id);
|
||||||
|
USBD_StatusTypeDef USBD_DeInit(USBD_HandleTypeDef *pdev);
|
||||||
|
USBD_StatusTypeDef USBD_Start(USBD_HandleTypeDef *pdev);
|
||||||
|
USBD_StatusTypeDef USBD_Stop(USBD_HandleTypeDef *pdev);
|
||||||
|
USBD_StatusTypeDef USBD_RegisterClass(USBD_HandleTypeDef *pdev, USBD_ClassTypeDef *pclass);
|
||||||
|
|
||||||
|
USBD_StatusTypeDef USBD_RunTestMode(USBD_HandleTypeDef *pdev);
|
||||||
|
USBD_StatusTypeDef USBD_SetClassConfig(USBD_HandleTypeDef *pdev, uint8_t cfgidx);
|
||||||
|
USBD_StatusTypeDef USBD_ClrClassConfig(USBD_HandleTypeDef *pdev, uint8_t cfgidx);
|
||||||
|
|
||||||
|
USBD_StatusTypeDef USBD_LL_SetupStage(USBD_HandleTypeDef *pdev, uint8_t *psetup);
|
||||||
|
USBD_StatusTypeDef USBD_LL_DataOutStage(USBD_HandleTypeDef *pdev, uint8_t epnum, uint8_t *pdata);
|
||||||
|
USBD_StatusTypeDef USBD_LL_DataInStage(USBD_HandleTypeDef *pdev, uint8_t epnum, uint8_t *pdata);
|
||||||
|
|
||||||
|
USBD_StatusTypeDef USBD_LL_Reset(USBD_HandleTypeDef *pdev);
|
||||||
|
USBD_StatusTypeDef USBD_LL_SetSpeed(USBD_HandleTypeDef *pdev, USBD_SpeedTypeDef speed);
|
||||||
|
USBD_StatusTypeDef USBD_LL_Suspend(USBD_HandleTypeDef *pdev);
|
||||||
|
USBD_StatusTypeDef USBD_LL_Resume(USBD_HandleTypeDef *pdev);
|
||||||
|
|
||||||
|
USBD_StatusTypeDef USBD_LL_SOF(USBD_HandleTypeDef *pdev);
|
||||||
|
USBD_StatusTypeDef USBD_LL_IsoINIncomplete(USBD_HandleTypeDef *pdev, uint8_t epnum);
|
||||||
|
USBD_StatusTypeDef USBD_LL_IsoOUTIncomplete(USBD_HandleTypeDef *pdev, uint8_t epnum);
|
||||||
|
|
||||||
|
USBD_StatusTypeDef USBD_LL_DevConnected(USBD_HandleTypeDef *pdev);
|
||||||
|
USBD_StatusTypeDef USBD_LL_DevDisconnected(USBD_HandleTypeDef *pdev);
|
||||||
|
|
||||||
|
/* USBD Low Level Driver */
|
||||||
|
USBD_StatusTypeDef USBD_LL_Init(USBD_HandleTypeDef *pdev);
|
||||||
|
USBD_StatusTypeDef USBD_LL_DeInit(USBD_HandleTypeDef *pdev);
|
||||||
|
USBD_StatusTypeDef USBD_LL_Start(USBD_HandleTypeDef *pdev);
|
||||||
|
USBD_StatusTypeDef USBD_LL_Stop(USBD_HandleTypeDef *pdev);
|
||||||
|
USBD_StatusTypeDef USBD_LL_OpenEP(USBD_HandleTypeDef *pdev,
|
||||||
|
uint8_t ep_addr,
|
||||||
|
uint8_t ep_type,
|
||||||
|
uint16_t ep_mps);
|
||||||
|
|
||||||
|
USBD_StatusTypeDef USBD_LL_CloseEP(USBD_HandleTypeDef *pdev, uint8_t ep_addr);
|
||||||
|
USBD_StatusTypeDef USBD_LL_FlushEP(USBD_HandleTypeDef *pdev, uint8_t ep_addr);
|
||||||
|
USBD_StatusTypeDef USBD_LL_StallEP(USBD_HandleTypeDef *pdev, uint8_t ep_addr);
|
||||||
|
USBD_StatusTypeDef USBD_LL_ClearStallEP(USBD_HandleTypeDef *pdev, uint8_t ep_addr);
|
||||||
|
uint8_t USBD_LL_IsStallEP(USBD_HandleTypeDef *pdev, uint8_t ep_addr);
|
||||||
|
USBD_StatusTypeDef USBD_LL_SetUSBAddress(USBD_HandleTypeDef *pdev, uint8_t dev_addr);
|
||||||
|
USBD_StatusTypeDef USBD_LL_Transmit(USBD_HandleTypeDef *pdev,
|
||||||
|
uint8_t ep_addr,
|
||||||
|
uint8_t *pbuf,
|
||||||
|
uint16_t size);
|
||||||
|
|
||||||
|
USBD_StatusTypeDef USBD_LL_PrepareReceive(USBD_HandleTypeDef *pdev,
|
||||||
|
uint8_t ep_addr,
|
||||||
|
uint8_t *pbuf,
|
||||||
|
uint16_t size);
|
||||||
|
|
||||||
|
uint32_t USBD_LL_GetRxDataSize(USBD_HandleTypeDef *pdev, uint8_t ep_addr);
|
||||||
|
void USBD_LL_Delay(uint32_t Delay);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif /* __USBD_CORE_H */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
105
Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_ctlreq.h
Normal file
105
Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_ctlreq.h
Normal file
@@ -0,0 +1,105 @@
|
|||||||
|
/**
|
||||||
|
******************************************************************************
|
||||||
|
* @file usbd_req.h
|
||||||
|
* @author MCD Application Team
|
||||||
|
* @brief Header file for the usbd_req.c file
|
||||||
|
******************************************************************************
|
||||||
|
* @attention
|
||||||
|
*
|
||||||
|
* <h2><center>© Copyright (c) 2015 STMicroelectronics.
|
||||||
|
* All rights reserved.</center></h2>
|
||||||
|
*
|
||||||
|
* This software component is licensed by ST under Ultimate Liberty license
|
||||||
|
* SLA0044, the "License"; You may not use this file except in compliance with
|
||||||
|
* the License. You may obtain a copy of the License at:
|
||||||
|
* www.st.com/SLA0044
|
||||||
|
*
|
||||||
|
******************************************************************************
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Define to prevent recursive inclusion -------------------------------------*/
|
||||||
|
#ifndef __USB_REQUEST_H
|
||||||
|
#define __USB_REQUEST_H
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Includes ------------------------------------------------------------------*/
|
||||||
|
#include "usbd_def.h"
|
||||||
|
|
||||||
|
|
||||||
|
/** @addtogroup STM32_USB_DEVICE_LIBRARY
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @defgroup USBD_REQ
|
||||||
|
* @brief header file for the usbd_req.c file
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @defgroup USBD_REQ_Exported_Defines
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/** @defgroup USBD_REQ_Exported_Types
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/** @defgroup USBD_REQ_Exported_Macros
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @defgroup USBD_REQ_Exported_Variables
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @defgroup USBD_REQ_Exported_FunctionsPrototype
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
USBD_StatusTypeDef USBD_StdDevReq(USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req);
|
||||||
|
USBD_StatusTypeDef USBD_StdItfReq(USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req);
|
||||||
|
USBD_StatusTypeDef USBD_StdEPReq(USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req);
|
||||||
|
|
||||||
|
|
||||||
|
void USBD_CtlError(USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req);
|
||||||
|
|
||||||
|
void USBD_ParseSetupRequest(USBD_SetupReqTypedef *req, uint8_t *pdata);
|
||||||
|
|
||||||
|
void USBD_GetString(uint8_t *desc, uint8_t *unicode, uint16_t *len);
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif /* __USB_REQUEST_H */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
|
||||||
348
Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_def.h
Normal file
348
Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_def.h
Normal file
@@ -0,0 +1,348 @@
|
|||||||
|
/**
|
||||||
|
******************************************************************************
|
||||||
|
* @file usbd_def.h
|
||||||
|
* @author MCD Application Team
|
||||||
|
* @brief General defines for the usb device library
|
||||||
|
******************************************************************************
|
||||||
|
* @attention
|
||||||
|
*
|
||||||
|
* <h2><center>© Copyright (c) 2015 STMicroelectronics.
|
||||||
|
* All rights reserved.</center></h2>
|
||||||
|
*
|
||||||
|
* This software component is licensed by ST under Ultimate Liberty license
|
||||||
|
* SLA0044, the "License"; You may not use this file except in compliance with
|
||||||
|
* the License. You may obtain a copy of the License at:
|
||||||
|
* www.st.com/SLA0044
|
||||||
|
*
|
||||||
|
******************************************************************************
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Define to prevent recursive inclusion -------------------------------------*/
|
||||||
|
#ifndef __USBD_DEF_H
|
||||||
|
#define __USBD_DEF_H
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Includes ------------------------------------------------------------------*/
|
||||||
|
#include "usbd_conf.h"
|
||||||
|
|
||||||
|
/** @addtogroup STM32_USBD_DEVICE_LIBRARY
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @defgroup USB_DEF
|
||||||
|
* @brief general defines for the usb device library file
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @defgroup USB_DEF_Exported_Defines
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef NULL
|
||||||
|
#define NULL 0U
|
||||||
|
#endif /* NULL */
|
||||||
|
|
||||||
|
#ifndef USBD_MAX_NUM_INTERFACES
|
||||||
|
#define USBD_MAX_NUM_INTERFACES 1U
|
||||||
|
#endif /* USBD_MAX_NUM_CONFIGURATION */
|
||||||
|
|
||||||
|
#ifndef USBD_MAX_NUM_CONFIGURATION
|
||||||
|
#define USBD_MAX_NUM_CONFIGURATION 1U
|
||||||
|
#endif /* USBD_MAX_NUM_CONFIGURATION */
|
||||||
|
|
||||||
|
#ifndef USBD_LPM_ENABLED
|
||||||
|
#define USBD_LPM_ENABLED 0U
|
||||||
|
#endif /* USBD_LPM_ENABLED */
|
||||||
|
|
||||||
|
#ifndef USBD_SELF_POWERED
|
||||||
|
#define USBD_SELF_POWERED 1U
|
||||||
|
#endif /*USBD_SELF_POWERED */
|
||||||
|
|
||||||
|
#ifndef USBD_SUPPORT_USER_STRING_DESC
|
||||||
|
#define USBD_SUPPORT_USER_STRING_DESC 0U
|
||||||
|
#endif /* USBD_SUPPORT_USER_STRING_DESC */
|
||||||
|
|
||||||
|
#define USB_LEN_DEV_QUALIFIER_DESC 0x0AU
|
||||||
|
#define USB_LEN_DEV_DESC 0x12U
|
||||||
|
#define USB_LEN_CFG_DESC 0x09U
|
||||||
|
#define USB_LEN_IF_DESC 0x09U
|
||||||
|
#define USB_LEN_EP_DESC 0x07U
|
||||||
|
#define USB_LEN_OTG_DESC 0x03U
|
||||||
|
#define USB_LEN_LANGID_STR_DESC 0x04U
|
||||||
|
#define USB_LEN_OTHER_SPEED_DESC_SIZ 0x09U
|
||||||
|
|
||||||
|
#define USBD_IDX_LANGID_STR 0x00U
|
||||||
|
#define USBD_IDX_MFC_STR 0x01U
|
||||||
|
#define USBD_IDX_PRODUCT_STR 0x02U
|
||||||
|
#define USBD_IDX_SERIAL_STR 0x03U
|
||||||
|
#define USBD_IDX_CONFIG_STR 0x04U
|
||||||
|
#define USBD_IDX_INTERFACE_STR 0x05U
|
||||||
|
|
||||||
|
#define USB_REQ_TYPE_STANDARD 0x00U
|
||||||
|
#define USB_REQ_TYPE_CLASS 0x20U
|
||||||
|
#define USB_REQ_TYPE_VENDOR 0x40U
|
||||||
|
#define USB_REQ_TYPE_MASK 0x60U
|
||||||
|
|
||||||
|
#define USB_REQ_RECIPIENT_DEVICE 0x00U
|
||||||
|
#define USB_REQ_RECIPIENT_INTERFACE 0x01U
|
||||||
|
#define USB_REQ_RECIPIENT_ENDPOINT 0x02U
|
||||||
|
#define USB_REQ_RECIPIENT_MASK 0x03U
|
||||||
|
|
||||||
|
#define USB_REQ_GET_STATUS 0x00U
|
||||||
|
#define USB_REQ_CLEAR_FEATURE 0x01U
|
||||||
|
#define USB_REQ_SET_FEATURE 0x03U
|
||||||
|
#define USB_REQ_SET_ADDRESS 0x05U
|
||||||
|
#define USB_REQ_GET_DESCRIPTOR 0x06U
|
||||||
|
#define USB_REQ_SET_DESCRIPTOR 0x07U
|
||||||
|
#define USB_REQ_GET_CONFIGURATION 0x08U
|
||||||
|
#define USB_REQ_SET_CONFIGURATION 0x09U
|
||||||
|
#define USB_REQ_GET_INTERFACE 0x0AU
|
||||||
|
#define USB_REQ_SET_INTERFACE 0x0BU
|
||||||
|
#define USB_REQ_SYNCH_FRAME 0x0CU
|
||||||
|
|
||||||
|
#define USB_DESC_TYPE_DEVICE 0x01U
|
||||||
|
#define USB_DESC_TYPE_CONFIGURATION 0x02U
|
||||||
|
#define USB_DESC_TYPE_STRING 0x03U
|
||||||
|
#define USB_DESC_TYPE_INTERFACE 0x04U
|
||||||
|
#define USB_DESC_TYPE_ENDPOINT 0x05U
|
||||||
|
#define USB_DESC_TYPE_DEVICE_QUALIFIER 0x06U
|
||||||
|
#define USB_DESC_TYPE_OTHER_SPEED_CONFIGURATION 0x07U
|
||||||
|
#define USB_DESC_TYPE_BOS 0x0FU
|
||||||
|
|
||||||
|
#define USB_CONFIG_REMOTE_WAKEUP 0x02U
|
||||||
|
#define USB_CONFIG_SELF_POWERED 0x01U
|
||||||
|
|
||||||
|
#define USB_FEATURE_EP_HALT 0x00U
|
||||||
|
#define USB_FEATURE_REMOTE_WAKEUP 0x01U
|
||||||
|
#define USB_FEATURE_TEST_MODE 0x02U
|
||||||
|
|
||||||
|
#define USB_DEVICE_CAPABITY_TYPE 0x10U
|
||||||
|
|
||||||
|
#define USB_HS_MAX_PACKET_SIZE 512U
|
||||||
|
#define USB_FS_MAX_PACKET_SIZE 64U
|
||||||
|
#define USB_MAX_EP0_SIZE 64U
|
||||||
|
|
||||||
|
/* Device Status */
|
||||||
|
#define USBD_STATE_DEFAULT 0x01U
|
||||||
|
#define USBD_STATE_ADDRESSED 0x02U
|
||||||
|
#define USBD_STATE_CONFIGURED 0x03U
|
||||||
|
#define USBD_STATE_SUSPENDED 0x04U
|
||||||
|
|
||||||
|
|
||||||
|
/* EP0 State */
|
||||||
|
#define USBD_EP0_IDLE 0x00U
|
||||||
|
#define USBD_EP0_SETUP 0x01U
|
||||||
|
#define USBD_EP0_DATA_IN 0x02U
|
||||||
|
#define USBD_EP0_DATA_OUT 0x03U
|
||||||
|
#define USBD_EP0_STATUS_IN 0x04U
|
||||||
|
#define USBD_EP0_STATUS_OUT 0x05U
|
||||||
|
#define USBD_EP0_STALL 0x06U
|
||||||
|
|
||||||
|
#define USBD_EP_TYPE_CTRL 0x00U
|
||||||
|
#define USBD_EP_TYPE_ISOC 0x01U
|
||||||
|
#define USBD_EP_TYPE_BULK 0x02U
|
||||||
|
#define USBD_EP_TYPE_INTR 0x03U
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/** @defgroup USBD_DEF_Exported_TypesDefinitions
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
typedef struct usb_setup_req
|
||||||
|
{
|
||||||
|
uint8_t bmRequest;
|
||||||
|
uint8_t bRequest;
|
||||||
|
uint16_t wValue;
|
||||||
|
uint16_t wIndex;
|
||||||
|
uint16_t wLength;
|
||||||
|
} USBD_SetupReqTypedef;
|
||||||
|
|
||||||
|
struct _USBD_HandleTypeDef;
|
||||||
|
|
||||||
|
typedef struct _Device_cb
|
||||||
|
{
|
||||||
|
uint8_t (*Init)(struct _USBD_HandleTypeDef *pdev, uint8_t cfgidx);
|
||||||
|
uint8_t (*DeInit)(struct _USBD_HandleTypeDef *pdev, uint8_t cfgidx);
|
||||||
|
/* Control Endpoints*/
|
||||||
|
uint8_t (*Setup)(struct _USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req);
|
||||||
|
uint8_t (*EP0_TxSent)(struct _USBD_HandleTypeDef *pdev);
|
||||||
|
uint8_t (*EP0_RxReady)(struct _USBD_HandleTypeDef *pdev);
|
||||||
|
/* Class Specific Endpoints*/
|
||||||
|
uint8_t (*DataIn)(struct _USBD_HandleTypeDef *pdev, uint8_t epnum);
|
||||||
|
uint8_t (*DataOut)(struct _USBD_HandleTypeDef *pdev, uint8_t epnum);
|
||||||
|
uint8_t (*SOF)(struct _USBD_HandleTypeDef *pdev);
|
||||||
|
uint8_t (*IsoINIncomplete)(struct _USBD_HandleTypeDef *pdev, uint8_t epnum);
|
||||||
|
uint8_t (*IsoOUTIncomplete)(struct _USBD_HandleTypeDef *pdev, uint8_t epnum);
|
||||||
|
|
||||||
|
uint8_t *(*GetHSConfigDescriptor)(uint16_t *length);
|
||||||
|
uint8_t *(*GetFSConfigDescriptor)(uint16_t *length);
|
||||||
|
uint8_t *(*GetOtherSpeedConfigDescriptor)(uint16_t *length);
|
||||||
|
uint8_t *(*GetDeviceQualifierDescriptor)(uint16_t *length);
|
||||||
|
#if (USBD_SUPPORT_USER_STRING_DESC == 1U)
|
||||||
|
uint8_t *(*GetUsrStrDescriptor)(struct _USBD_HandleTypeDef *pdev, uint8_t index, uint16_t *length);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
} USBD_ClassTypeDef;
|
||||||
|
|
||||||
|
/* Following USB Device Speed */
|
||||||
|
typedef enum
|
||||||
|
{
|
||||||
|
USBD_SPEED_HIGH = 0U,
|
||||||
|
USBD_SPEED_FULL = 1U,
|
||||||
|
USBD_SPEED_LOW = 2U,
|
||||||
|
} USBD_SpeedTypeDef;
|
||||||
|
|
||||||
|
/* Following USB Device status */
|
||||||
|
typedef enum
|
||||||
|
{
|
||||||
|
USBD_OK = 0U,
|
||||||
|
USBD_BUSY,
|
||||||
|
USBD_FAIL,
|
||||||
|
} USBD_StatusTypeDef;
|
||||||
|
|
||||||
|
/* USB Device descriptors structure */
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
uint8_t *(*GetDeviceDescriptor)(USBD_SpeedTypeDef speed, uint16_t *length);
|
||||||
|
uint8_t *(*GetLangIDStrDescriptor)(USBD_SpeedTypeDef speed, uint16_t *length);
|
||||||
|
uint8_t *(*GetManufacturerStrDescriptor)(USBD_SpeedTypeDef speed, uint16_t *length);
|
||||||
|
uint8_t *(*GetProductStrDescriptor)(USBD_SpeedTypeDef speed, uint16_t *length);
|
||||||
|
uint8_t *(*GetSerialStrDescriptor)(USBD_SpeedTypeDef speed, uint16_t *length);
|
||||||
|
uint8_t *(*GetConfigurationStrDescriptor)(USBD_SpeedTypeDef speed, uint16_t *length);
|
||||||
|
uint8_t *(*GetInterfaceStrDescriptor)(USBD_SpeedTypeDef speed, uint16_t *length);
|
||||||
|
#if (USBD_LPM_ENABLED == 1U)
|
||||||
|
uint8_t *(*GetBOSDescriptor)(USBD_SpeedTypeDef speed, uint16_t *length);
|
||||||
|
#endif
|
||||||
|
} USBD_DescriptorsTypeDef;
|
||||||
|
|
||||||
|
/* USB Device handle structure */
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
uint32_t status;
|
||||||
|
uint32_t is_used;
|
||||||
|
uint32_t total_length;
|
||||||
|
uint32_t rem_length;
|
||||||
|
uint32_t maxpacket;
|
||||||
|
} USBD_EndpointTypeDef;
|
||||||
|
|
||||||
|
/* USB Device handle structure */
|
||||||
|
typedef struct _USBD_HandleTypeDef
|
||||||
|
{
|
||||||
|
uint8_t id;
|
||||||
|
uint32_t dev_config;
|
||||||
|
uint32_t dev_default_config;
|
||||||
|
uint32_t dev_config_status;
|
||||||
|
USBD_SpeedTypeDef dev_speed;
|
||||||
|
USBD_EndpointTypeDef ep_in[16];
|
||||||
|
USBD_EndpointTypeDef ep_out[16];
|
||||||
|
uint32_t ep0_state;
|
||||||
|
uint32_t ep0_data_len;
|
||||||
|
uint8_t dev_state;
|
||||||
|
uint8_t dev_old_state;
|
||||||
|
uint8_t dev_address;
|
||||||
|
uint8_t dev_connection_status;
|
||||||
|
uint8_t dev_test_mode;
|
||||||
|
uint32_t dev_remote_wakeup;
|
||||||
|
|
||||||
|
USBD_SetupReqTypedef request;
|
||||||
|
USBD_DescriptorsTypeDef *pDesc;
|
||||||
|
USBD_ClassTypeDef *pClass;
|
||||||
|
void *pClassData;
|
||||||
|
void *pUserData;
|
||||||
|
void *pData;
|
||||||
|
} USBD_HandleTypeDef;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/** @defgroup USBD_DEF_Exported_Macros
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
#define SWAPBYTE(addr) (((uint16_t)(*((uint8_t *)(addr)))) + \
|
||||||
|
(((uint16_t)(*(((uint8_t *)(addr)) + 1U))) << 8U))
|
||||||
|
|
||||||
|
#define LOBYTE(x) ((uint8_t)((x) & 0x00FFU))
|
||||||
|
#define HIBYTE(x) ((uint8_t)(((x) & 0xFF00U) >> 8U))
|
||||||
|
#define MIN(a, b) (((a) < (b)) ? (a) : (b))
|
||||||
|
#define MAX(a, b) (((a) > (b)) ? (a) : (b))
|
||||||
|
|
||||||
|
|
||||||
|
#if defined ( __GNUC__ )
|
||||||
|
#ifndef __weak
|
||||||
|
#define __weak __attribute__((weak))
|
||||||
|
#endif /* __weak */
|
||||||
|
#ifndef __packed
|
||||||
|
#define __packed __attribute__((__packed__))
|
||||||
|
#endif /* __packed */
|
||||||
|
#endif /* __GNUC__ */
|
||||||
|
|
||||||
|
|
||||||
|
/* In HS mode and when the DMA is used, all variables and data structures dealing
|
||||||
|
with the DMA during the transaction process should be 4-bytes aligned */
|
||||||
|
|
||||||
|
#if defined ( __GNUC__ ) && !defined (__CC_ARM) /* GNU Compiler */
|
||||||
|
#ifndef __ALIGN_END
|
||||||
|
#define __ALIGN_END __attribute__ ((aligned (4U)))
|
||||||
|
#endif /* __ALIGN_END */
|
||||||
|
#ifndef __ALIGN_BEGIN
|
||||||
|
#define __ALIGN_BEGIN
|
||||||
|
#endif /* __ALIGN_BEGIN */
|
||||||
|
#else
|
||||||
|
#ifndef __ALIGN_END
|
||||||
|
#define __ALIGN_END
|
||||||
|
#endif /* __ALIGN_END */
|
||||||
|
#ifndef __ALIGN_BEGIN
|
||||||
|
#if defined (__CC_ARM) /* ARM Compiler */
|
||||||
|
#define __ALIGN_BEGIN __align(4U)
|
||||||
|
#elif defined (__ICCARM__) /* IAR Compiler */
|
||||||
|
#define __ALIGN_BEGIN
|
||||||
|
#endif /* __CC_ARM */
|
||||||
|
#endif /* __ALIGN_BEGIN */
|
||||||
|
#endif /* __GNUC__ */
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @defgroup USBD_DEF_Exported_Variables
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @defgroup USBD_DEF_Exported_FunctionsPrototype
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif /* __USBD_DEF_H */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
|
||||||
119
Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_ioreq.h
Normal file
119
Middlewares/ST/STM32_USB_Device_Library/Core/Inc/usbd_ioreq.h
Normal file
@@ -0,0 +1,119 @@
|
|||||||
|
/**
|
||||||
|
******************************************************************************
|
||||||
|
* @file usbd_ioreq.h
|
||||||
|
* @author MCD Application Team
|
||||||
|
* @brief Header file for the usbd_ioreq.c file
|
||||||
|
******************************************************************************
|
||||||
|
* @attention
|
||||||
|
*
|
||||||
|
* <h2><center>© Copyright (c) 2015 STMicroelectronics.
|
||||||
|
* All rights reserved.</center></h2>
|
||||||
|
*
|
||||||
|
* This software component is licensed by ST under Ultimate Liberty license
|
||||||
|
* SLA0044, the "License"; You may not use this file except in compliance with
|
||||||
|
* the License. You may obtain a copy of the License at:
|
||||||
|
* www.st.com/SLA0044
|
||||||
|
*
|
||||||
|
******************************************************************************
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Define to prevent recursive inclusion -------------------------------------*/
|
||||||
|
#ifndef __USBD_IOREQ_H
|
||||||
|
#define __USBD_IOREQ_H
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Includes ------------------------------------------------------------------*/
|
||||||
|
#include "usbd_def.h"
|
||||||
|
#include "usbd_core.h"
|
||||||
|
|
||||||
|
/** @addtogroup STM32_USB_DEVICE_LIBRARY
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @defgroup USBD_IOREQ
|
||||||
|
* @brief header file for the usbd_ioreq.c file
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @defgroup USBD_IOREQ_Exported_Defines
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/** @defgroup USBD_IOREQ_Exported_Types
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/** @defgroup USBD_IOREQ_Exported_Macros
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @defgroup USBD_IOREQ_Exported_Variables
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @defgroup USBD_IOREQ_Exported_FunctionsPrototype
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
USBD_StatusTypeDef USBD_CtlSendData(USBD_HandleTypeDef *pdev,
|
||||||
|
uint8_t *pbuf,
|
||||||
|
uint16_t len);
|
||||||
|
|
||||||
|
USBD_StatusTypeDef USBD_CtlContinueSendData(USBD_HandleTypeDef *pdev,
|
||||||
|
uint8_t *pbuf,
|
||||||
|
uint16_t len);
|
||||||
|
|
||||||
|
USBD_StatusTypeDef USBD_CtlPrepareRx(USBD_HandleTypeDef *pdev,
|
||||||
|
uint8_t *pbuf,
|
||||||
|
uint16_t len);
|
||||||
|
|
||||||
|
USBD_StatusTypeDef USBD_CtlContinueRx(USBD_HandleTypeDef *pdev,
|
||||||
|
uint8_t *pbuf,
|
||||||
|
uint16_t len);
|
||||||
|
|
||||||
|
USBD_StatusTypeDef USBD_CtlSendStatus(USBD_HandleTypeDef *pdev);
|
||||||
|
|
||||||
|
USBD_StatusTypeDef USBD_CtlReceiveStatus(USBD_HandleTypeDef *pdev);
|
||||||
|
|
||||||
|
uint32_t USBD_GetRxCount(USBD_HandleTypeDef *pdev, uint8_t ep_addr);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif /* __USBD_IOREQ_H */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
|
||||||
611
Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.c
Normal file
611
Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_core.c
Normal file
@@ -0,0 +1,611 @@
|
|||||||
|
/**
|
||||||
|
******************************************************************************
|
||||||
|
* @file usbd_core.c
|
||||||
|
* @author MCD Application Team
|
||||||
|
* @brief This file provides all the USBD core functions.
|
||||||
|
******************************************************************************
|
||||||
|
* @attention
|
||||||
|
*
|
||||||
|
* <h2><center>© Copyright (c) 2015 STMicroelectronics.
|
||||||
|
* All rights reserved.</center></h2>
|
||||||
|
*
|
||||||
|
* This software component is licensed by ST under Ultimate Liberty license
|
||||||
|
* SLA0044, the "License"; You may not use this file except in compliance with
|
||||||
|
* the License. You may obtain a copy of the License at:
|
||||||
|
* www.st.com/SLA0044
|
||||||
|
*
|
||||||
|
******************************************************************************
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Includes ------------------------------------------------------------------*/
|
||||||
|
#include "usbd_core.h"
|
||||||
|
|
||||||
|
/** @addtogroup STM32_USBD_DEVICE_LIBRARY
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/** @defgroup USBD_CORE
|
||||||
|
* @brief usbd core module
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @defgroup USBD_CORE_Private_TypesDefinitions
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/** @defgroup USBD_CORE_Private_Defines
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/** @defgroup USBD_CORE_Private_Macros
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/** @defgroup USBD_CORE_Private_FunctionPrototypes
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @defgroup USBD_CORE_Private_Variables
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/** @defgroup USBD_CORE_Private_Functions
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief USBD_Init
|
||||||
|
* Initializes the device stack and load the class driver
|
||||||
|
* @param pdev: device instance
|
||||||
|
* @param pdesc: Descriptor structure address
|
||||||
|
* @param id: Low level core index
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
USBD_StatusTypeDef USBD_Init(USBD_HandleTypeDef *pdev,
|
||||||
|
USBD_DescriptorsTypeDef *pdesc, uint8_t id)
|
||||||
|
{
|
||||||
|
/* Check whether the USB Host handle is valid */
|
||||||
|
if (pdev == NULL)
|
||||||
|
{
|
||||||
|
#if (USBD_DEBUG_LEVEL > 1U)
|
||||||
|
USBD_ErrLog("Invalid Device handle");
|
||||||
|
#endif
|
||||||
|
return USBD_FAIL;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Unlink previous class*/
|
||||||
|
if (pdev->pClass != NULL)
|
||||||
|
{
|
||||||
|
pdev->pClass = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Assign USBD Descriptors */
|
||||||
|
if (pdesc != NULL)
|
||||||
|
{
|
||||||
|
pdev->pDesc = pdesc;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Set Device initial State */
|
||||||
|
pdev->dev_state = USBD_STATE_DEFAULT;
|
||||||
|
pdev->id = id;
|
||||||
|
/* Initialize low level driver */
|
||||||
|
USBD_LL_Init(pdev);
|
||||||
|
|
||||||
|
return USBD_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief USBD_DeInit
|
||||||
|
* Re-Initialize th device library
|
||||||
|
* @param pdev: device instance
|
||||||
|
* @retval status: status
|
||||||
|
*/
|
||||||
|
USBD_StatusTypeDef USBD_DeInit(USBD_HandleTypeDef *pdev)
|
||||||
|
{
|
||||||
|
/* Set Default State */
|
||||||
|
pdev->dev_state = USBD_STATE_DEFAULT;
|
||||||
|
|
||||||
|
/* Free Class Resources */
|
||||||
|
pdev->pClass->DeInit(pdev, (uint8_t)pdev->dev_config);
|
||||||
|
|
||||||
|
/* Stop the low level driver */
|
||||||
|
USBD_LL_Stop(pdev);
|
||||||
|
|
||||||
|
/* Initialize low level driver */
|
||||||
|
USBD_LL_DeInit(pdev);
|
||||||
|
|
||||||
|
return USBD_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief USBD_RegisterClass
|
||||||
|
* Link class driver to Device Core.
|
||||||
|
* @param pDevice : Device Handle
|
||||||
|
* @param pclass: Class handle
|
||||||
|
* @retval USBD Status
|
||||||
|
*/
|
||||||
|
USBD_StatusTypeDef USBD_RegisterClass(USBD_HandleTypeDef *pdev, USBD_ClassTypeDef *pclass)
|
||||||
|
{
|
||||||
|
USBD_StatusTypeDef status = USBD_OK;
|
||||||
|
if (pclass != NULL)
|
||||||
|
{
|
||||||
|
/* link the class to the USB Device handle */
|
||||||
|
pdev->pClass = pclass;
|
||||||
|
status = USBD_OK;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
#if (USBD_DEBUG_LEVEL > 1U)
|
||||||
|
USBD_ErrLog("Invalid Class handle");
|
||||||
|
#endif
|
||||||
|
status = USBD_FAIL;
|
||||||
|
}
|
||||||
|
|
||||||
|
return status;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief USBD_Start
|
||||||
|
* Start the USB Device Core.
|
||||||
|
* @param pdev: Device Handle
|
||||||
|
* @retval USBD Status
|
||||||
|
*/
|
||||||
|
USBD_StatusTypeDef USBD_Start(USBD_HandleTypeDef *pdev)
|
||||||
|
{
|
||||||
|
/* Start the low level driver */
|
||||||
|
USBD_LL_Start(pdev);
|
||||||
|
|
||||||
|
return USBD_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief USBD_Stop
|
||||||
|
* Stop the USB Device Core.
|
||||||
|
* @param pdev: Device Handle
|
||||||
|
* @retval USBD Status
|
||||||
|
*/
|
||||||
|
USBD_StatusTypeDef USBD_Stop(USBD_HandleTypeDef *pdev)
|
||||||
|
{
|
||||||
|
/* Free Class Resources */
|
||||||
|
pdev->pClass->DeInit(pdev, (uint8_t)pdev->dev_config);
|
||||||
|
|
||||||
|
/* Stop the low level driver */
|
||||||
|
USBD_LL_Stop(pdev);
|
||||||
|
|
||||||
|
return USBD_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief USBD_RunTestMode
|
||||||
|
* Launch test mode process
|
||||||
|
* @param pdev: device instance
|
||||||
|
* @retval status
|
||||||
|
*/
|
||||||
|
USBD_StatusTypeDef USBD_RunTestMode(USBD_HandleTypeDef *pdev)
|
||||||
|
{
|
||||||
|
/* Prevent unused argument compilation warning */
|
||||||
|
UNUSED(pdev);
|
||||||
|
|
||||||
|
return USBD_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief USBD_SetClassConfig
|
||||||
|
* Configure device and start the interface
|
||||||
|
* @param pdev: device instance
|
||||||
|
* @param cfgidx: configuration index
|
||||||
|
* @retval status
|
||||||
|
*/
|
||||||
|
|
||||||
|
USBD_StatusTypeDef USBD_SetClassConfig(USBD_HandleTypeDef *pdev, uint8_t cfgidx)
|
||||||
|
{
|
||||||
|
USBD_StatusTypeDef ret = USBD_FAIL;
|
||||||
|
|
||||||
|
if (pdev->pClass != NULL)
|
||||||
|
{
|
||||||
|
/* Set configuration and Start the Class*/
|
||||||
|
if (pdev->pClass->Init(pdev, cfgidx) == 0U)
|
||||||
|
{
|
||||||
|
ret = USBD_OK;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief USBD_ClrClassConfig
|
||||||
|
* Clear current configuration
|
||||||
|
* @param pdev: device instance
|
||||||
|
* @param cfgidx: configuration index
|
||||||
|
* @retval status: USBD_StatusTypeDef
|
||||||
|
*/
|
||||||
|
USBD_StatusTypeDef USBD_ClrClassConfig(USBD_HandleTypeDef *pdev, uint8_t cfgidx)
|
||||||
|
{
|
||||||
|
/* Clear configuration and De-initialize the Class process*/
|
||||||
|
pdev->pClass->DeInit(pdev, cfgidx);
|
||||||
|
|
||||||
|
return USBD_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief USBD_SetupStage
|
||||||
|
* Handle the setup stage
|
||||||
|
* @param pdev: device instance
|
||||||
|
* @retval status
|
||||||
|
*/
|
||||||
|
USBD_StatusTypeDef USBD_LL_SetupStage(USBD_HandleTypeDef *pdev, uint8_t *psetup)
|
||||||
|
{
|
||||||
|
USBD_ParseSetupRequest(&pdev->request, psetup);
|
||||||
|
|
||||||
|
pdev->ep0_state = USBD_EP0_SETUP;
|
||||||
|
|
||||||
|
pdev->ep0_data_len = pdev->request.wLength;
|
||||||
|
|
||||||
|
switch (pdev->request.bmRequest & 0x1FU)
|
||||||
|
{
|
||||||
|
case USB_REQ_RECIPIENT_DEVICE:
|
||||||
|
USBD_StdDevReq(pdev, &pdev->request);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case USB_REQ_RECIPIENT_INTERFACE:
|
||||||
|
USBD_StdItfReq(pdev, &pdev->request);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case USB_REQ_RECIPIENT_ENDPOINT:
|
||||||
|
USBD_StdEPReq(pdev, &pdev->request);
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
USBD_LL_StallEP(pdev, (pdev->request.bmRequest & 0x80U));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return USBD_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief USBD_DataOutStage
|
||||||
|
* Handle data OUT stage
|
||||||
|
* @param pdev: device instance
|
||||||
|
* @param epnum: endpoint index
|
||||||
|
* @retval status
|
||||||
|
*/
|
||||||
|
USBD_StatusTypeDef USBD_LL_DataOutStage(USBD_HandleTypeDef *pdev,
|
||||||
|
uint8_t epnum, uint8_t *pdata)
|
||||||
|
{
|
||||||
|
USBD_EndpointTypeDef *pep;
|
||||||
|
|
||||||
|
if (epnum == 0U)
|
||||||
|
{
|
||||||
|
pep = &pdev->ep_out[0];
|
||||||
|
|
||||||
|
if (pdev->ep0_state == USBD_EP0_DATA_OUT)
|
||||||
|
{
|
||||||
|
if (pep->rem_length > pep->maxpacket)
|
||||||
|
{
|
||||||
|
pep->rem_length -= pep->maxpacket;
|
||||||
|
|
||||||
|
USBD_CtlContinueRx(pdev, pdata,
|
||||||
|
(uint16_t)MIN(pep->rem_length, pep->maxpacket));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if ((pdev->pClass->EP0_RxReady != NULL) &&
|
||||||
|
(pdev->dev_state == USBD_STATE_CONFIGURED))
|
||||||
|
{
|
||||||
|
pdev->pClass->EP0_RxReady(pdev);
|
||||||
|
}
|
||||||
|
USBD_CtlSendStatus(pdev);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (pdev->ep0_state == USBD_EP0_STATUS_OUT)
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
* STATUS PHASE completed, update ep0_state to idle
|
||||||
|
*/
|
||||||
|
pdev->ep0_state = USBD_EP0_IDLE;
|
||||||
|
USBD_LL_StallEP(pdev, 0U);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if ((pdev->pClass->DataOut != NULL) &&
|
||||||
|
(pdev->dev_state == USBD_STATE_CONFIGURED))
|
||||||
|
{
|
||||||
|
pdev->pClass->DataOut(pdev, epnum);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* should never be in this condition */
|
||||||
|
return USBD_FAIL;
|
||||||
|
}
|
||||||
|
|
||||||
|
return USBD_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief USBD_DataInStage
|
||||||
|
* Handle data in stage
|
||||||
|
* @param pdev: device instance
|
||||||
|
* @param epnum: endpoint index
|
||||||
|
* @retval status
|
||||||
|
*/
|
||||||
|
USBD_StatusTypeDef USBD_LL_DataInStage(USBD_HandleTypeDef *pdev,
|
||||||
|
uint8_t epnum, uint8_t *pdata)
|
||||||
|
{
|
||||||
|
USBD_EndpointTypeDef *pep;
|
||||||
|
|
||||||
|
if (epnum == 0U)
|
||||||
|
{
|
||||||
|
pep = &pdev->ep_in[0];
|
||||||
|
|
||||||
|
if (pdev->ep0_state == USBD_EP0_DATA_IN)
|
||||||
|
{
|
||||||
|
if (pep->rem_length > pep->maxpacket)
|
||||||
|
{
|
||||||
|
pep->rem_length -= pep->maxpacket;
|
||||||
|
|
||||||
|
USBD_CtlContinueSendData(pdev, pdata, (uint16_t)pep->rem_length);
|
||||||
|
|
||||||
|
/* Prepare endpoint for premature end of transfer */
|
||||||
|
USBD_LL_PrepareReceive(pdev, 0U, NULL, 0U);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* last packet is MPS multiple, so send ZLP packet */
|
||||||
|
if ((pep->total_length % pep->maxpacket == 0U) &&
|
||||||
|
(pep->total_length >= pep->maxpacket) &&
|
||||||
|
(pep->total_length < pdev->ep0_data_len))
|
||||||
|
{
|
||||||
|
USBD_CtlContinueSendData(pdev, NULL, 0U);
|
||||||
|
pdev->ep0_data_len = 0U;
|
||||||
|
|
||||||
|
/* Prepare endpoint for premature end of transfer */
|
||||||
|
USBD_LL_PrepareReceive(pdev, 0U, NULL, 0U);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if ((pdev->pClass->EP0_TxSent != NULL) &&
|
||||||
|
(pdev->dev_state == USBD_STATE_CONFIGURED))
|
||||||
|
{
|
||||||
|
pdev->pClass->EP0_TxSent(pdev);
|
||||||
|
}
|
||||||
|
USBD_LL_StallEP(pdev, 0x80U);
|
||||||
|
USBD_CtlReceiveStatus(pdev);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if ((pdev->ep0_state == USBD_EP0_STATUS_IN) ||
|
||||||
|
(pdev->ep0_state == USBD_EP0_IDLE))
|
||||||
|
{
|
||||||
|
USBD_LL_StallEP(pdev, 0x80U);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (pdev->dev_test_mode == 1U)
|
||||||
|
{
|
||||||
|
USBD_RunTestMode(pdev);
|
||||||
|
pdev->dev_test_mode = 0U;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if ((pdev->pClass->DataIn != NULL) &&
|
||||||
|
(pdev->dev_state == USBD_STATE_CONFIGURED))
|
||||||
|
{
|
||||||
|
pdev->pClass->DataIn(pdev, epnum);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* should never be in this condition */
|
||||||
|
return USBD_FAIL;
|
||||||
|
}
|
||||||
|
|
||||||
|
return USBD_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief USBD_LL_Reset
|
||||||
|
* Handle Reset event
|
||||||
|
* @param pdev: device instance
|
||||||
|
* @retval status
|
||||||
|
*/
|
||||||
|
|
||||||
|
USBD_StatusTypeDef USBD_LL_Reset(USBD_HandleTypeDef *pdev)
|
||||||
|
{
|
||||||
|
/* Open EP0 OUT */
|
||||||
|
USBD_LL_OpenEP(pdev, 0x00U, USBD_EP_TYPE_CTRL, USB_MAX_EP0_SIZE);
|
||||||
|
pdev->ep_out[0x00U & 0xFU].is_used = 1U;
|
||||||
|
|
||||||
|
pdev->ep_out[0].maxpacket = USB_MAX_EP0_SIZE;
|
||||||
|
|
||||||
|
/* Open EP0 IN */
|
||||||
|
USBD_LL_OpenEP(pdev, 0x80U, USBD_EP_TYPE_CTRL, USB_MAX_EP0_SIZE);
|
||||||
|
pdev->ep_in[0x80U & 0xFU].is_used = 1U;
|
||||||
|
|
||||||
|
pdev->ep_in[0].maxpacket = USB_MAX_EP0_SIZE;
|
||||||
|
|
||||||
|
/* Upon Reset call user call back */
|
||||||
|
pdev->dev_state = USBD_STATE_DEFAULT;
|
||||||
|
pdev->ep0_state = USBD_EP0_IDLE;
|
||||||
|
pdev->dev_config = 0U;
|
||||||
|
pdev->dev_remote_wakeup = 0U;
|
||||||
|
|
||||||
|
if (pdev->pClassData)
|
||||||
|
{
|
||||||
|
pdev->pClass->DeInit(pdev, (uint8_t)pdev->dev_config);
|
||||||
|
}
|
||||||
|
|
||||||
|
return USBD_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief USBD_LL_Reset
|
||||||
|
* Handle Reset event
|
||||||
|
* @param pdev: device instance
|
||||||
|
* @retval status
|
||||||
|
*/
|
||||||
|
USBD_StatusTypeDef USBD_LL_SetSpeed(USBD_HandleTypeDef *pdev,
|
||||||
|
USBD_SpeedTypeDef speed)
|
||||||
|
{
|
||||||
|
pdev->dev_speed = speed;
|
||||||
|
|
||||||
|
return USBD_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief USBD_Suspend
|
||||||
|
* Handle Suspend event
|
||||||
|
* @param pdev: device instance
|
||||||
|
* @retval status
|
||||||
|
*/
|
||||||
|
|
||||||
|
USBD_StatusTypeDef USBD_LL_Suspend(USBD_HandleTypeDef *pdev)
|
||||||
|
{
|
||||||
|
pdev->dev_old_state = pdev->dev_state;
|
||||||
|
pdev->dev_state = USBD_STATE_SUSPENDED;
|
||||||
|
|
||||||
|
return USBD_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief USBD_Resume
|
||||||
|
* Handle Resume event
|
||||||
|
* @param pdev: device instance
|
||||||
|
* @retval status
|
||||||
|
*/
|
||||||
|
|
||||||
|
USBD_StatusTypeDef USBD_LL_Resume(USBD_HandleTypeDef *pdev)
|
||||||
|
{
|
||||||
|
if (pdev->dev_state == USBD_STATE_SUSPENDED)
|
||||||
|
{
|
||||||
|
pdev->dev_state = pdev->dev_old_state;
|
||||||
|
}
|
||||||
|
|
||||||
|
return USBD_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief USBD_SOF
|
||||||
|
* Handle SOF event
|
||||||
|
* @param pdev: device instance
|
||||||
|
* @retval status
|
||||||
|
*/
|
||||||
|
|
||||||
|
USBD_StatusTypeDef USBD_LL_SOF(USBD_HandleTypeDef *pdev)
|
||||||
|
{
|
||||||
|
if (pdev->dev_state == USBD_STATE_CONFIGURED)
|
||||||
|
{
|
||||||
|
if (pdev->pClass->SOF != NULL)
|
||||||
|
{
|
||||||
|
pdev->pClass->SOF(pdev);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return USBD_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief USBD_IsoINIncomplete
|
||||||
|
* Handle iso in incomplete event
|
||||||
|
* @param pdev: device instance
|
||||||
|
* @retval status
|
||||||
|
*/
|
||||||
|
USBD_StatusTypeDef USBD_LL_IsoINIncomplete(USBD_HandleTypeDef *pdev,
|
||||||
|
uint8_t epnum)
|
||||||
|
{
|
||||||
|
/* Prevent unused arguments compilation warning */
|
||||||
|
UNUSED(pdev);
|
||||||
|
UNUSED(epnum);
|
||||||
|
|
||||||
|
return USBD_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief USBD_IsoOUTIncomplete
|
||||||
|
* Handle iso out incomplete event
|
||||||
|
* @param pdev: device instance
|
||||||
|
* @retval status
|
||||||
|
*/
|
||||||
|
USBD_StatusTypeDef USBD_LL_IsoOUTIncomplete(USBD_HandleTypeDef *pdev,
|
||||||
|
uint8_t epnum)
|
||||||
|
{
|
||||||
|
/* Prevent unused arguments compilation warning */
|
||||||
|
UNUSED(pdev);
|
||||||
|
UNUSED(epnum);
|
||||||
|
|
||||||
|
return USBD_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief USBD_DevConnected
|
||||||
|
* Handle device connection event
|
||||||
|
* @param pdev: device instance
|
||||||
|
* @retval status
|
||||||
|
*/
|
||||||
|
USBD_StatusTypeDef USBD_LL_DevConnected(USBD_HandleTypeDef *pdev)
|
||||||
|
{
|
||||||
|
/* Prevent unused argument compilation warning */
|
||||||
|
UNUSED(pdev);
|
||||||
|
|
||||||
|
return USBD_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief USBD_DevDisconnected
|
||||||
|
* Handle device disconnection event
|
||||||
|
* @param pdev: device instance
|
||||||
|
* @retval status
|
||||||
|
*/
|
||||||
|
USBD_StatusTypeDef USBD_LL_DevDisconnected(USBD_HandleTypeDef *pdev)
|
||||||
|
{
|
||||||
|
/* Free Class Resources */
|
||||||
|
pdev->dev_state = USBD_STATE_DEFAULT;
|
||||||
|
pdev->pClass->DeInit(pdev, (uint8_t)pdev->dev_config);
|
||||||
|
|
||||||
|
return USBD_OK;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
|
||||||
|
|
||||||
918
Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.c
Normal file
918
Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.c
Normal file
@@ -0,0 +1,918 @@
|
|||||||
|
/**
|
||||||
|
******************************************************************************
|
||||||
|
* @file usbd_req.c
|
||||||
|
* @author MCD Application Team
|
||||||
|
* @brief This file provides the standard USB requests following chapter 9.
|
||||||
|
******************************************************************************
|
||||||
|
* @attention
|
||||||
|
*
|
||||||
|
* <h2><center>© Copyright (c) 2015 STMicroelectronics.
|
||||||
|
* All rights reserved.</center></h2>
|
||||||
|
*
|
||||||
|
* This software component is licensed by ST under Ultimate Liberty license
|
||||||
|
* SLA0044, the "License"; You may not use this file except in compliance with
|
||||||
|
* the License. You may obtain a copy of the License at:
|
||||||
|
* www.st.com/SLA0044
|
||||||
|
*
|
||||||
|
******************************************************************************
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Includes ------------------------------------------------------------------*/
|
||||||
|
#include "usbd_ctlreq.h"
|
||||||
|
#include "usbd_ioreq.h"
|
||||||
|
|
||||||
|
|
||||||
|
/** @addtogroup STM32_USBD_STATE_DEVICE_LIBRARY
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/** @defgroup USBD_REQ
|
||||||
|
* @brief USB standard requests module
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @defgroup USBD_REQ_Private_TypesDefinitions
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/** @defgroup USBD_REQ_Private_Defines
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/** @defgroup USBD_REQ_Private_Macros
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/** @defgroup USBD_REQ_Private_Variables
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/** @defgroup USBD_REQ_Private_FunctionPrototypes
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
static void USBD_GetDescriptor(USBD_HandleTypeDef *pdev,
|
||||||
|
USBD_SetupReqTypedef *req);
|
||||||
|
|
||||||
|
static void USBD_SetAddress(USBD_HandleTypeDef *pdev,
|
||||||
|
USBD_SetupReqTypedef *req);
|
||||||
|
|
||||||
|
static void USBD_SetConfig(USBD_HandleTypeDef *pdev,
|
||||||
|
USBD_SetupReqTypedef *req);
|
||||||
|
|
||||||
|
static void USBD_GetConfig(USBD_HandleTypeDef *pdev,
|
||||||
|
USBD_SetupReqTypedef *req);
|
||||||
|
|
||||||
|
static void USBD_GetStatus(USBD_HandleTypeDef *pdev,
|
||||||
|
USBD_SetupReqTypedef *req);
|
||||||
|
|
||||||
|
static void USBD_SetFeature(USBD_HandleTypeDef *pdev,
|
||||||
|
USBD_SetupReqTypedef *req);
|
||||||
|
|
||||||
|
static void USBD_ClrFeature(USBD_HandleTypeDef *pdev,
|
||||||
|
USBD_SetupReqTypedef *req);
|
||||||
|
|
||||||
|
static uint8_t USBD_GetLen(uint8_t *buf);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/** @defgroup USBD_REQ_Private_Functions
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief USBD_StdDevReq
|
||||||
|
* Handle standard usb device requests
|
||||||
|
* @param pdev: device instance
|
||||||
|
* @param req: usb request
|
||||||
|
* @retval status
|
||||||
|
*/
|
||||||
|
USBD_StatusTypeDef USBD_StdDevReq(USBD_HandleTypeDef *pdev,
|
||||||
|
USBD_SetupReqTypedef *req)
|
||||||
|
{
|
||||||
|
USBD_StatusTypeDef ret = USBD_OK;
|
||||||
|
|
||||||
|
switch (req->bmRequest & USB_REQ_TYPE_MASK)
|
||||||
|
{
|
||||||
|
case USB_REQ_TYPE_CLASS:
|
||||||
|
case USB_REQ_TYPE_VENDOR:
|
||||||
|
pdev->pClass->Setup(pdev, req);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case USB_REQ_TYPE_STANDARD:
|
||||||
|
switch (req->bRequest)
|
||||||
|
{
|
||||||
|
case USB_REQ_GET_DESCRIPTOR:
|
||||||
|
USBD_GetDescriptor(pdev, req);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case USB_REQ_SET_ADDRESS:
|
||||||
|
USBD_SetAddress(pdev, req);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case USB_REQ_SET_CONFIGURATION:
|
||||||
|
USBD_SetConfig(pdev, req);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case USB_REQ_GET_CONFIGURATION:
|
||||||
|
USBD_GetConfig(pdev, req);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case USB_REQ_GET_STATUS:
|
||||||
|
USBD_GetStatus(pdev, req);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case USB_REQ_SET_FEATURE:
|
||||||
|
USBD_SetFeature(pdev, req);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case USB_REQ_CLEAR_FEATURE:
|
||||||
|
USBD_ClrFeature(pdev, req);
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
USBD_CtlError(pdev, req);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
USBD_CtlError(pdev, req);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief USBD_StdItfReq
|
||||||
|
* Handle standard usb interface requests
|
||||||
|
* @param pdev: device instance
|
||||||
|
* @param req: usb request
|
||||||
|
* @retval status
|
||||||
|
*/
|
||||||
|
USBD_StatusTypeDef USBD_StdItfReq(USBD_HandleTypeDef *pdev,
|
||||||
|
USBD_SetupReqTypedef *req)
|
||||||
|
{
|
||||||
|
USBD_StatusTypeDef ret = USBD_OK;
|
||||||
|
|
||||||
|
switch (req->bmRequest & USB_REQ_TYPE_MASK)
|
||||||
|
{
|
||||||
|
case USB_REQ_TYPE_CLASS:
|
||||||
|
case USB_REQ_TYPE_VENDOR:
|
||||||
|
case USB_REQ_TYPE_STANDARD:
|
||||||
|
switch (pdev->dev_state)
|
||||||
|
{
|
||||||
|
case USBD_STATE_DEFAULT:
|
||||||
|
case USBD_STATE_ADDRESSED:
|
||||||
|
case USBD_STATE_CONFIGURED:
|
||||||
|
|
||||||
|
if (LOBYTE(req->wIndex) <= USBD_MAX_NUM_INTERFACES)
|
||||||
|
{
|
||||||
|
ret = (USBD_StatusTypeDef)pdev->pClass->Setup(pdev, req);
|
||||||
|
|
||||||
|
if ((req->wLength == 0U) && (ret == USBD_OK))
|
||||||
|
{
|
||||||
|
USBD_CtlSendStatus(pdev);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
USBD_CtlError(pdev, req);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
USBD_CtlError(pdev, req);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
USBD_CtlError(pdev, req);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return USBD_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief USBD_StdEPReq
|
||||||
|
* Handle standard usb endpoint requests
|
||||||
|
* @param pdev: device instance
|
||||||
|
* @param req: usb request
|
||||||
|
* @retval status
|
||||||
|
*/
|
||||||
|
USBD_StatusTypeDef USBD_StdEPReq(USBD_HandleTypeDef *pdev,
|
||||||
|
USBD_SetupReqTypedef *req)
|
||||||
|
{
|
||||||
|
USBD_EndpointTypeDef *pep;
|
||||||
|
uint8_t ep_addr;
|
||||||
|
USBD_StatusTypeDef ret = USBD_OK;
|
||||||
|
ep_addr = LOBYTE(req->wIndex);
|
||||||
|
|
||||||
|
switch (req->bmRequest & USB_REQ_TYPE_MASK)
|
||||||
|
{
|
||||||
|
case USB_REQ_TYPE_CLASS:
|
||||||
|
case USB_REQ_TYPE_VENDOR:
|
||||||
|
pdev->pClass->Setup(pdev, req);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case USB_REQ_TYPE_STANDARD:
|
||||||
|
/* Check if it is a class request */
|
||||||
|
if ((req->bmRequest & 0x60U) == 0x20U)
|
||||||
|
{
|
||||||
|
ret = (USBD_StatusTypeDef)pdev->pClass->Setup(pdev, req);
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
switch (req->bRequest)
|
||||||
|
{
|
||||||
|
case USB_REQ_SET_FEATURE:
|
||||||
|
switch (pdev->dev_state)
|
||||||
|
{
|
||||||
|
case USBD_STATE_ADDRESSED:
|
||||||
|
if ((ep_addr != 0x00U) && (ep_addr != 0x80U))
|
||||||
|
{
|
||||||
|
USBD_LL_StallEP(pdev, ep_addr);
|
||||||
|
USBD_LL_StallEP(pdev, 0x80U);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
USBD_CtlError(pdev, req);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case USBD_STATE_CONFIGURED:
|
||||||
|
if (req->wValue == USB_FEATURE_EP_HALT)
|
||||||
|
{
|
||||||
|
if ((ep_addr != 0x00U) &&
|
||||||
|
(ep_addr != 0x80U) && (req->wLength == 0x00U))
|
||||||
|
{
|
||||||
|
USBD_LL_StallEP(pdev, ep_addr);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
USBD_CtlSendStatus(pdev);
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
USBD_CtlError(pdev, req);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case USB_REQ_CLEAR_FEATURE:
|
||||||
|
|
||||||
|
switch (pdev->dev_state)
|
||||||
|
{
|
||||||
|
case USBD_STATE_ADDRESSED:
|
||||||
|
if ((ep_addr != 0x00U) && (ep_addr != 0x80U))
|
||||||
|
{
|
||||||
|
USBD_LL_StallEP(pdev, ep_addr);
|
||||||
|
USBD_LL_StallEP(pdev, 0x80U);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
USBD_CtlError(pdev, req);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case USBD_STATE_CONFIGURED:
|
||||||
|
if (req->wValue == USB_FEATURE_EP_HALT)
|
||||||
|
{
|
||||||
|
if ((ep_addr & 0x7FU) != 0x00U)
|
||||||
|
{
|
||||||
|
USBD_LL_ClearStallEP(pdev, ep_addr);
|
||||||
|
}
|
||||||
|
USBD_CtlSendStatus(pdev);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
USBD_CtlError(pdev, req);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case USB_REQ_GET_STATUS:
|
||||||
|
switch (pdev->dev_state)
|
||||||
|
{
|
||||||
|
case USBD_STATE_ADDRESSED:
|
||||||
|
if ((ep_addr != 0x00U) && (ep_addr != 0x80U))
|
||||||
|
{
|
||||||
|
USBD_CtlError(pdev, req);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
pep = ((ep_addr & 0x80U) == 0x80U) ? &pdev->ep_in[ep_addr & 0x7FU] : \
|
||||||
|
&pdev->ep_out[ep_addr & 0x7FU];
|
||||||
|
|
||||||
|
pep->status = 0x0000U;
|
||||||
|
|
||||||
|
USBD_CtlSendData(pdev, (uint8_t *)(void *)&pep->status, 2U);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case USBD_STATE_CONFIGURED:
|
||||||
|
if ((ep_addr & 0x80U) == 0x80U)
|
||||||
|
{
|
||||||
|
if (pdev->ep_in[ep_addr & 0xFU].is_used == 0U)
|
||||||
|
{
|
||||||
|
USBD_CtlError(pdev, req);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (pdev->ep_out[ep_addr & 0xFU].is_used == 0U)
|
||||||
|
{
|
||||||
|
USBD_CtlError(pdev, req);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
pep = ((ep_addr & 0x80U) == 0x80U) ? &pdev->ep_in[ep_addr & 0x7FU] : \
|
||||||
|
&pdev->ep_out[ep_addr & 0x7FU];
|
||||||
|
|
||||||
|
if ((ep_addr == 0x00U) || (ep_addr == 0x80U))
|
||||||
|
{
|
||||||
|
pep->status = 0x0000U;
|
||||||
|
}
|
||||||
|
else if (USBD_LL_IsStallEP(pdev, ep_addr))
|
||||||
|
{
|
||||||
|
pep->status = 0x0001U;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
pep->status = 0x0000U;
|
||||||
|
}
|
||||||
|
|
||||||
|
USBD_CtlSendData(pdev, (uint8_t *)(void *)&pep->status, 2U);
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
USBD_CtlError(pdev, req);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
USBD_CtlError(pdev, req);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
USBD_CtlError(pdev, req);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief USBD_GetDescriptor
|
||||||
|
* Handle Get Descriptor requests
|
||||||
|
* @param pdev: device instance
|
||||||
|
* @param req: usb request
|
||||||
|
* @retval status
|
||||||
|
*/
|
||||||
|
static void USBD_GetDescriptor(USBD_HandleTypeDef *pdev,
|
||||||
|
USBD_SetupReqTypedef *req)
|
||||||
|
{
|
||||||
|
uint16_t len = 0U;
|
||||||
|
uint8_t *pbuf = NULL;
|
||||||
|
uint8_t err = 0U;
|
||||||
|
|
||||||
|
switch (req->wValue >> 8)
|
||||||
|
{
|
||||||
|
#if (USBD_LPM_ENABLED == 1U)
|
||||||
|
case USB_DESC_TYPE_BOS:
|
||||||
|
if (pdev->pDesc->GetBOSDescriptor != NULL)
|
||||||
|
{
|
||||||
|
pbuf = pdev->pDesc->GetBOSDescriptor(pdev->dev_speed, &len);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
USBD_CtlError(pdev, req);
|
||||||
|
err++;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
#endif
|
||||||
|
case USB_DESC_TYPE_DEVICE:
|
||||||
|
pbuf = pdev->pDesc->GetDeviceDescriptor(pdev->dev_speed, &len);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case USB_DESC_TYPE_CONFIGURATION:
|
||||||
|
if (pdev->dev_speed == USBD_SPEED_HIGH)
|
||||||
|
{
|
||||||
|
pbuf = pdev->pClass->GetHSConfigDescriptor(&len);
|
||||||
|
pbuf[1] = USB_DESC_TYPE_CONFIGURATION;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
pbuf = pdev->pClass->GetFSConfigDescriptor(&len);
|
||||||
|
pbuf[1] = USB_DESC_TYPE_CONFIGURATION;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case USB_DESC_TYPE_STRING:
|
||||||
|
switch ((uint8_t)(req->wValue))
|
||||||
|
{
|
||||||
|
case USBD_IDX_LANGID_STR:
|
||||||
|
if (pdev->pDesc->GetLangIDStrDescriptor != NULL)
|
||||||
|
{
|
||||||
|
pbuf = pdev->pDesc->GetLangIDStrDescriptor(pdev->dev_speed, &len);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
USBD_CtlError(pdev, req);
|
||||||
|
err++;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case USBD_IDX_MFC_STR:
|
||||||
|
if (pdev->pDesc->GetManufacturerStrDescriptor != NULL)
|
||||||
|
{
|
||||||
|
pbuf = pdev->pDesc->GetManufacturerStrDescriptor(pdev->dev_speed, &len);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
USBD_CtlError(pdev, req);
|
||||||
|
err++;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case USBD_IDX_PRODUCT_STR:
|
||||||
|
if (pdev->pDesc->GetProductStrDescriptor != NULL)
|
||||||
|
{
|
||||||
|
pbuf = pdev->pDesc->GetProductStrDescriptor(pdev->dev_speed, &len);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
USBD_CtlError(pdev, req);
|
||||||
|
err++;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case USBD_IDX_SERIAL_STR:
|
||||||
|
if (pdev->pDesc->GetSerialStrDescriptor != NULL)
|
||||||
|
{
|
||||||
|
pbuf = pdev->pDesc->GetSerialStrDescriptor(pdev->dev_speed, &len);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
USBD_CtlError(pdev, req);
|
||||||
|
err++;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case USBD_IDX_CONFIG_STR:
|
||||||
|
if (pdev->pDesc->GetConfigurationStrDescriptor != NULL)
|
||||||
|
{
|
||||||
|
pbuf = pdev->pDesc->GetConfigurationStrDescriptor(pdev->dev_speed, &len);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
USBD_CtlError(pdev, req);
|
||||||
|
err++;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case USBD_IDX_INTERFACE_STR:
|
||||||
|
if (pdev->pDesc->GetInterfaceStrDescriptor != NULL)
|
||||||
|
{
|
||||||
|
pbuf = pdev->pDesc->GetInterfaceStrDescriptor(pdev->dev_speed, &len);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
USBD_CtlError(pdev, req);
|
||||||
|
err++;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
#if (USBD_SUPPORT_USER_STRING_DESC == 1U)
|
||||||
|
if (pdev->pClass->GetUsrStrDescriptor != NULL)
|
||||||
|
{
|
||||||
|
pbuf = pdev->pClass->GetUsrStrDescriptor(pdev, (req->wValue), &len);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
USBD_CtlError(pdev, req);
|
||||||
|
err++;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
#else
|
||||||
|
USBD_CtlError(pdev, req);
|
||||||
|
err++;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case USB_DESC_TYPE_DEVICE_QUALIFIER:
|
||||||
|
if (pdev->dev_speed == USBD_SPEED_HIGH)
|
||||||
|
{
|
||||||
|
pbuf = pdev->pClass->GetDeviceQualifierDescriptor(&len);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
USBD_CtlError(pdev, req);
|
||||||
|
err++;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case USB_DESC_TYPE_OTHER_SPEED_CONFIGURATION:
|
||||||
|
if (pdev->dev_speed == USBD_SPEED_HIGH)
|
||||||
|
{
|
||||||
|
pbuf = pdev->pClass->GetOtherSpeedConfigDescriptor(&len);
|
||||||
|
pbuf[1] = USB_DESC_TYPE_OTHER_SPEED_CONFIGURATION;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
USBD_CtlError(pdev, req);
|
||||||
|
err++;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
USBD_CtlError(pdev, req);
|
||||||
|
err++;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (err != 0U)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if ((len != 0U) && (req->wLength != 0U))
|
||||||
|
{
|
||||||
|
len = MIN(len, req->wLength);
|
||||||
|
(void)USBD_CtlSendData(pdev, pbuf, len);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (req->wLength == 0U)
|
||||||
|
{
|
||||||
|
(void)USBD_CtlSendStatus(pdev);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief USBD_SetAddress
|
||||||
|
* Set device address
|
||||||
|
* @param pdev: device instance
|
||||||
|
* @param req: usb request
|
||||||
|
* @retval status
|
||||||
|
*/
|
||||||
|
static void USBD_SetAddress(USBD_HandleTypeDef *pdev,
|
||||||
|
USBD_SetupReqTypedef *req)
|
||||||
|
{
|
||||||
|
uint8_t dev_addr;
|
||||||
|
|
||||||
|
if ((req->wIndex == 0U) && (req->wLength == 0U) && (req->wValue < 128U))
|
||||||
|
{
|
||||||
|
dev_addr = (uint8_t)(req->wValue) & 0x7FU;
|
||||||
|
|
||||||
|
if (pdev->dev_state == USBD_STATE_CONFIGURED)
|
||||||
|
{
|
||||||
|
USBD_CtlError(pdev, req);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
pdev->dev_address = dev_addr;
|
||||||
|
USBD_LL_SetUSBAddress(pdev, dev_addr);
|
||||||
|
USBD_CtlSendStatus(pdev);
|
||||||
|
|
||||||
|
if (dev_addr != 0U)
|
||||||
|
{
|
||||||
|
pdev->dev_state = USBD_STATE_ADDRESSED;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
pdev->dev_state = USBD_STATE_DEFAULT;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
USBD_CtlError(pdev, req);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief USBD_SetConfig
|
||||||
|
* Handle Set device configuration request
|
||||||
|
* @param pdev: device instance
|
||||||
|
* @param req: usb request
|
||||||
|
* @retval status
|
||||||
|
*/
|
||||||
|
static void USBD_SetConfig(USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req)
|
||||||
|
{
|
||||||
|
static uint8_t cfgidx;
|
||||||
|
|
||||||
|
cfgidx = (uint8_t)(req->wValue);
|
||||||
|
|
||||||
|
if (cfgidx > USBD_MAX_NUM_CONFIGURATION)
|
||||||
|
{
|
||||||
|
USBD_CtlError(pdev, req);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
switch (pdev->dev_state)
|
||||||
|
{
|
||||||
|
case USBD_STATE_ADDRESSED:
|
||||||
|
if (cfgidx)
|
||||||
|
{
|
||||||
|
pdev->dev_config = cfgidx;
|
||||||
|
pdev->dev_state = USBD_STATE_CONFIGURED;
|
||||||
|
if (USBD_SetClassConfig(pdev, cfgidx) == USBD_FAIL)
|
||||||
|
{
|
||||||
|
USBD_CtlError(pdev, req);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
USBD_CtlSendStatus(pdev);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
USBD_CtlSendStatus(pdev);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case USBD_STATE_CONFIGURED:
|
||||||
|
if (cfgidx == 0U)
|
||||||
|
{
|
||||||
|
pdev->dev_state = USBD_STATE_ADDRESSED;
|
||||||
|
pdev->dev_config = cfgidx;
|
||||||
|
USBD_ClrClassConfig(pdev, cfgidx);
|
||||||
|
USBD_CtlSendStatus(pdev);
|
||||||
|
}
|
||||||
|
else if (cfgidx != pdev->dev_config)
|
||||||
|
{
|
||||||
|
/* Clear old configuration */
|
||||||
|
USBD_ClrClassConfig(pdev, (uint8_t)pdev->dev_config);
|
||||||
|
|
||||||
|
/* set new configuration */
|
||||||
|
pdev->dev_config = cfgidx;
|
||||||
|
if (USBD_SetClassConfig(pdev, cfgidx) == USBD_FAIL)
|
||||||
|
{
|
||||||
|
USBD_CtlError(pdev, req);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
USBD_CtlSendStatus(pdev);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
USBD_CtlSendStatus(pdev);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
USBD_CtlError(pdev, req);
|
||||||
|
USBD_ClrClassConfig(pdev, cfgidx);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief USBD_GetConfig
|
||||||
|
* Handle Get device configuration request
|
||||||
|
* @param pdev: device instance
|
||||||
|
* @param req: usb request
|
||||||
|
* @retval status
|
||||||
|
*/
|
||||||
|
static void USBD_GetConfig(USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req)
|
||||||
|
{
|
||||||
|
if (req->wLength != 1U)
|
||||||
|
{
|
||||||
|
USBD_CtlError(pdev, req);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
switch (pdev->dev_state)
|
||||||
|
{
|
||||||
|
case USBD_STATE_DEFAULT:
|
||||||
|
case USBD_STATE_ADDRESSED:
|
||||||
|
pdev->dev_default_config = 0U;
|
||||||
|
USBD_CtlSendData(pdev, (uint8_t *)(void *)&pdev->dev_default_config, 1U);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case USBD_STATE_CONFIGURED:
|
||||||
|
USBD_CtlSendData(pdev, (uint8_t *)(void *)&pdev->dev_config, 1U);
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
USBD_CtlError(pdev, req);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief USBD_GetStatus
|
||||||
|
* Handle Get Status request
|
||||||
|
* @param pdev: device instance
|
||||||
|
* @param req: usb request
|
||||||
|
* @retval status
|
||||||
|
*/
|
||||||
|
static void USBD_GetStatus(USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req)
|
||||||
|
{
|
||||||
|
switch (pdev->dev_state)
|
||||||
|
{
|
||||||
|
case USBD_STATE_DEFAULT:
|
||||||
|
case USBD_STATE_ADDRESSED:
|
||||||
|
case USBD_STATE_CONFIGURED:
|
||||||
|
if (req->wLength != 0x2U)
|
||||||
|
{
|
||||||
|
USBD_CtlError(pdev, req);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
#if (USBD_SELF_POWERED == 1U)
|
||||||
|
pdev->dev_config_status = USB_CONFIG_SELF_POWERED;
|
||||||
|
#else
|
||||||
|
pdev->dev_config_status = 0U;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
if (pdev->dev_remote_wakeup)
|
||||||
|
{
|
||||||
|
pdev->dev_config_status |= USB_CONFIG_REMOTE_WAKEUP;
|
||||||
|
}
|
||||||
|
|
||||||
|
USBD_CtlSendData(pdev, (uint8_t *)(void *)&pdev->dev_config_status, 2U);
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
USBD_CtlError(pdev, req);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief USBD_SetFeature
|
||||||
|
* Handle Set device feature request
|
||||||
|
* @param pdev: device instance
|
||||||
|
* @param req: usb request
|
||||||
|
* @retval status
|
||||||
|
*/
|
||||||
|
static void USBD_SetFeature(USBD_HandleTypeDef *pdev,
|
||||||
|
USBD_SetupReqTypedef *req)
|
||||||
|
{
|
||||||
|
if (req->wValue == USB_FEATURE_REMOTE_WAKEUP)
|
||||||
|
{
|
||||||
|
pdev->dev_remote_wakeup = 1U;
|
||||||
|
USBD_CtlSendStatus(pdev);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief USBD_ClrFeature
|
||||||
|
* Handle clear device feature request
|
||||||
|
* @param pdev: device instance
|
||||||
|
* @param req: usb request
|
||||||
|
* @retval status
|
||||||
|
*/
|
||||||
|
static void USBD_ClrFeature(USBD_HandleTypeDef *pdev,
|
||||||
|
USBD_SetupReqTypedef *req)
|
||||||
|
{
|
||||||
|
switch (pdev->dev_state)
|
||||||
|
{
|
||||||
|
case USBD_STATE_DEFAULT:
|
||||||
|
case USBD_STATE_ADDRESSED:
|
||||||
|
case USBD_STATE_CONFIGURED:
|
||||||
|
if (req->wValue == USB_FEATURE_REMOTE_WAKEUP)
|
||||||
|
{
|
||||||
|
pdev->dev_remote_wakeup = 0U;
|
||||||
|
USBD_CtlSendStatus(pdev);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
USBD_CtlError(pdev, req);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief USBD_ParseSetupRequest
|
||||||
|
* Copy buffer into setup structure
|
||||||
|
* @param pdev: device instance
|
||||||
|
* @param req: usb request
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
|
||||||
|
void USBD_ParseSetupRequest(USBD_SetupReqTypedef *req, uint8_t *pdata)
|
||||||
|
{
|
||||||
|
req->bmRequest = *(uint8_t *)(pdata);
|
||||||
|
req->bRequest = *(uint8_t *)(pdata + 1U);
|
||||||
|
req->wValue = SWAPBYTE(pdata + 2U);
|
||||||
|
req->wIndex = SWAPBYTE(pdata + 4U);
|
||||||
|
req->wLength = SWAPBYTE(pdata + 6U);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief USBD_CtlError
|
||||||
|
* Handle USB low level Error
|
||||||
|
* @param pdev: device instance
|
||||||
|
* @param req: usb request
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
|
||||||
|
void USBD_CtlError(USBD_HandleTypeDef *pdev,
|
||||||
|
USBD_SetupReqTypedef *req)
|
||||||
|
{
|
||||||
|
USBD_LL_StallEP(pdev, 0x80U);
|
||||||
|
USBD_LL_StallEP(pdev, 0U);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief USBD_GetString
|
||||||
|
* Convert Ascii string into unicode one
|
||||||
|
* @param desc : descriptor buffer
|
||||||
|
* @param unicode : Formatted string buffer (unicode)
|
||||||
|
* @param len : descriptor length
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
void USBD_GetString(uint8_t *desc, uint8_t *unicode, uint16_t *len)
|
||||||
|
{
|
||||||
|
uint8_t idx = 0U;
|
||||||
|
|
||||||
|
if (desc != NULL)
|
||||||
|
{
|
||||||
|
*len = (uint16_t)USBD_GetLen(desc) * 2U + 2U;
|
||||||
|
unicode[idx++] = *(uint8_t *)(void *)len;
|
||||||
|
unicode[idx++] = USB_DESC_TYPE_STRING;
|
||||||
|
|
||||||
|
while (*desc != '\0')
|
||||||
|
{
|
||||||
|
unicode[idx++] = *desc++;
|
||||||
|
unicode[idx++] = 0U;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief USBD_GetLen
|
||||||
|
* return the string length
|
||||||
|
* @param buf : pointer to the ascii string buffer
|
||||||
|
* @retval string length
|
||||||
|
*/
|
||||||
|
static uint8_t USBD_GetLen(uint8_t *buf)
|
||||||
|
{
|
||||||
|
uint8_t len = 0U;
|
||||||
|
|
||||||
|
while (*buf != '\0')
|
||||||
|
{
|
||||||
|
len++;
|
||||||
|
buf++;
|
||||||
|
}
|
||||||
|
|
||||||
|
return len;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
|
||||||
216
Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.c
Normal file
216
Middlewares/ST/STM32_USB_Device_Library/Core/Src/usbd_ioreq.c
Normal file
@@ -0,0 +1,216 @@
|
|||||||
|
/**
|
||||||
|
******************************************************************************
|
||||||
|
* @file usbd_ioreq.c
|
||||||
|
* @author MCD Application Team
|
||||||
|
* @brief This file provides the IO requests APIs for control endpoints.
|
||||||
|
******************************************************************************
|
||||||
|
* @attention
|
||||||
|
*
|
||||||
|
* <h2><center>© Copyright (c) 2015 STMicroelectronics.
|
||||||
|
* All rights reserved.</center></h2>
|
||||||
|
*
|
||||||
|
* This software component is licensed by ST under Ultimate Liberty license
|
||||||
|
* SLA0044, the "License"; You may not use this file except in compliance with
|
||||||
|
* the License. You may obtain a copy of the License at:
|
||||||
|
* www.st.com/SLA0044
|
||||||
|
*
|
||||||
|
******************************************************************************
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Includes ------------------------------------------------------------------*/
|
||||||
|
#include "usbd_ioreq.h"
|
||||||
|
|
||||||
|
/** @addtogroup STM32_USB_DEVICE_LIBRARY
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/** @defgroup USBD_IOREQ
|
||||||
|
* @brief control I/O requests module
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @defgroup USBD_IOREQ_Private_TypesDefinitions
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/** @defgroup USBD_IOREQ_Private_Defines
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/** @defgroup USBD_IOREQ_Private_Macros
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/** @defgroup USBD_IOREQ_Private_Variables
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/** @defgroup USBD_IOREQ_Private_FunctionPrototypes
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/** @defgroup USBD_IOREQ_Private_Functions
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief USBD_CtlSendData
|
||||||
|
* send data on the ctl pipe
|
||||||
|
* @param pdev: device instance
|
||||||
|
* @param buff: pointer to data buffer
|
||||||
|
* @param len: length of data to be sent
|
||||||
|
* @retval status
|
||||||
|
*/
|
||||||
|
USBD_StatusTypeDef USBD_CtlSendData(USBD_HandleTypeDef *pdev,
|
||||||
|
uint8_t *pbuf, uint16_t len)
|
||||||
|
{
|
||||||
|
/* Set EP0 State */
|
||||||
|
pdev->ep0_state = USBD_EP0_DATA_IN;
|
||||||
|
pdev->ep_in[0].total_length = len;
|
||||||
|
pdev->ep_in[0].rem_length = len;
|
||||||
|
|
||||||
|
/* Start the transfer */
|
||||||
|
USBD_LL_Transmit(pdev, 0x00U, pbuf, len);
|
||||||
|
|
||||||
|
return USBD_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief USBD_CtlContinueSendData
|
||||||
|
* continue sending data on the ctl pipe
|
||||||
|
* @param pdev: device instance
|
||||||
|
* @param buff: pointer to data buffer
|
||||||
|
* @param len: length of data to be sent
|
||||||
|
* @retval status
|
||||||
|
*/
|
||||||
|
USBD_StatusTypeDef USBD_CtlContinueSendData(USBD_HandleTypeDef *pdev,
|
||||||
|
uint8_t *pbuf, uint16_t len)
|
||||||
|
{
|
||||||
|
/* Start the next transfer */
|
||||||
|
USBD_LL_Transmit(pdev, 0x00U, pbuf, len);
|
||||||
|
|
||||||
|
return USBD_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief USBD_CtlPrepareRx
|
||||||
|
* receive data on the ctl pipe
|
||||||
|
* @param pdev: device instance
|
||||||
|
* @param buff: pointer to data buffer
|
||||||
|
* @param len: length of data to be received
|
||||||
|
* @retval status
|
||||||
|
*/
|
||||||
|
USBD_StatusTypeDef USBD_CtlPrepareRx(USBD_HandleTypeDef *pdev,
|
||||||
|
uint8_t *pbuf, uint16_t len)
|
||||||
|
{
|
||||||
|
/* Set EP0 State */
|
||||||
|
pdev->ep0_state = USBD_EP0_DATA_OUT;
|
||||||
|
pdev->ep_out[0].total_length = len;
|
||||||
|
pdev->ep_out[0].rem_length = len;
|
||||||
|
|
||||||
|
/* Start the transfer */
|
||||||
|
USBD_LL_PrepareReceive(pdev, 0U, pbuf, len);
|
||||||
|
|
||||||
|
return USBD_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief USBD_CtlContinueRx
|
||||||
|
* continue receive data on the ctl pipe
|
||||||
|
* @param pdev: device instance
|
||||||
|
* @param buff: pointer to data buffer
|
||||||
|
* @param len: length of data to be received
|
||||||
|
* @retval status
|
||||||
|
*/
|
||||||
|
USBD_StatusTypeDef USBD_CtlContinueRx(USBD_HandleTypeDef *pdev,
|
||||||
|
uint8_t *pbuf, uint16_t len)
|
||||||
|
{
|
||||||
|
USBD_LL_PrepareReceive(pdev, 0U, pbuf, len);
|
||||||
|
|
||||||
|
return USBD_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief USBD_CtlSendStatus
|
||||||
|
* send zero lzngth packet on the ctl pipe
|
||||||
|
* @param pdev: device instance
|
||||||
|
* @retval status
|
||||||
|
*/
|
||||||
|
USBD_StatusTypeDef USBD_CtlSendStatus(USBD_HandleTypeDef *pdev)
|
||||||
|
{
|
||||||
|
/* Set EP0 State */
|
||||||
|
pdev->ep0_state = USBD_EP0_STATUS_IN;
|
||||||
|
|
||||||
|
/* Start the transfer */
|
||||||
|
USBD_LL_Transmit(pdev, 0x00U, NULL, 0U);
|
||||||
|
|
||||||
|
return USBD_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief USBD_CtlReceiveStatus
|
||||||
|
* receive zero lzngth packet on the ctl pipe
|
||||||
|
* @param pdev: device instance
|
||||||
|
* @retval status
|
||||||
|
*/
|
||||||
|
USBD_StatusTypeDef USBD_CtlReceiveStatus(USBD_HandleTypeDef *pdev)
|
||||||
|
{
|
||||||
|
/* Set EP0 State */
|
||||||
|
pdev->ep0_state = USBD_EP0_STATUS_OUT;
|
||||||
|
|
||||||
|
/* Start the transfer */
|
||||||
|
USBD_LL_PrepareReceive(pdev, 0U, NULL, 0U);
|
||||||
|
|
||||||
|
return USBD_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief USBD_GetRxCount
|
||||||
|
* returns the received data length
|
||||||
|
* @param pdev: device instance
|
||||||
|
* @param ep_addr: endpoint address
|
||||||
|
* @retval Rx Data blength
|
||||||
|
*/
|
||||||
|
uint32_t USBD_GetRxCount(USBD_HandleTypeDef *pdev, uint8_t ep_addr)
|
||||||
|
{
|
||||||
|
return USBD_LL_GetRxDataSize(pdev, ep_addr);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
|
||||||
100
USB_DEVICE/App/usb_device.c
Normal file
100
USB_DEVICE/App/usb_device.c
Normal file
@@ -0,0 +1,100 @@
|
|||||||
|
/* USER CODE BEGIN Header */
|
||||||
|
/**
|
||||||
|
******************************************************************************
|
||||||
|
* @file : usb_device.c
|
||||||
|
* @version : v2.0_Cube
|
||||||
|
* @brief : This file implements the USB Device
|
||||||
|
******************************************************************************
|
||||||
|
* @attention
|
||||||
|
*
|
||||||
|
* Copyright (c) 2026 STMicroelectronics.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* This software is licensed under terms that can be found in the LICENSE file
|
||||||
|
* in the root directory of this software component.
|
||||||
|
* If no LICENSE file comes with this software, it is provided AS-IS.
|
||||||
|
*
|
||||||
|
******************************************************************************
|
||||||
|
*/
|
||||||
|
/* USER CODE END Header */
|
||||||
|
|
||||||
|
/* Includes ------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
#include "usb_device.h"
|
||||||
|
#include "usbd_core.h"
|
||||||
|
#include "usbd_desc.h"
|
||||||
|
#include "usbd_cdc.h"
|
||||||
|
#include "usbd_cdc_if.h"
|
||||||
|
|
||||||
|
/* USER CODE BEGIN Includes */
|
||||||
|
|
||||||
|
/* USER CODE END Includes */
|
||||||
|
|
||||||
|
/* USER CODE BEGIN PV */
|
||||||
|
/* Private variables ---------------------------------------------------------*/
|
||||||
|
|
||||||
|
/* USER CODE END PV */
|
||||||
|
|
||||||
|
/* USER CODE BEGIN PFP */
|
||||||
|
/* Private function prototypes -----------------------------------------------*/
|
||||||
|
|
||||||
|
/* USER CODE END PFP */
|
||||||
|
|
||||||
|
/* USB Device Core handle declaration. */
|
||||||
|
USBD_HandleTypeDef hUsbDeviceFS;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* -- Insert your variables declaration here --
|
||||||
|
*/
|
||||||
|
/* USER CODE BEGIN 0 */
|
||||||
|
|
||||||
|
/* USER CODE END 0 */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* -- Insert your external function declaration here --
|
||||||
|
*/
|
||||||
|
/* USER CODE BEGIN 1 */
|
||||||
|
|
||||||
|
/* USER CODE END 1 */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Init USB device Library, add supported class and start the library
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
void MX_USB_DEVICE_Init(void)
|
||||||
|
{
|
||||||
|
/* USER CODE BEGIN USB_DEVICE_Init_PreTreatment */
|
||||||
|
|
||||||
|
/* USER CODE END USB_DEVICE_Init_PreTreatment */
|
||||||
|
|
||||||
|
/* Init Device Library, add supported class and start the library. */
|
||||||
|
if (USBD_Init(&hUsbDeviceFS, &FS_Desc, DEVICE_FS) != USBD_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
if (USBD_RegisterClass(&hUsbDeviceFS, &USBD_CDC) != USBD_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
if (USBD_CDC_RegisterInterface(&hUsbDeviceFS, &USBD_Interface_fops_FS) != USBD_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
if (USBD_Start(&hUsbDeviceFS) != USBD_OK)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
|
||||||
|
/* USER CODE BEGIN USB_DEVICE_Init_PostTreatment */
|
||||||
|
|
||||||
|
/* USER CODE END USB_DEVICE_Init_PostTreatment */
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
102
USB_DEVICE/App/usb_device.h
Normal file
102
USB_DEVICE/App/usb_device.h
Normal file
@@ -0,0 +1,102 @@
|
|||||||
|
/* USER CODE BEGIN Header */
|
||||||
|
/**
|
||||||
|
******************************************************************************
|
||||||
|
* @file : usb_device.h
|
||||||
|
* @version : v2.0_Cube
|
||||||
|
* @brief : Header for usb_device.c file.
|
||||||
|
******************************************************************************
|
||||||
|
* @attention
|
||||||
|
*
|
||||||
|
* Copyright (c) 2026 STMicroelectronics.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* This software is licensed under terms that can be found in the LICENSE file
|
||||||
|
* in the root directory of this software component.
|
||||||
|
* If no LICENSE file comes with this software, it is provided AS-IS.
|
||||||
|
*
|
||||||
|
******************************************************************************
|
||||||
|
*/
|
||||||
|
/* USER CODE END Header */
|
||||||
|
|
||||||
|
/* Define to prevent recursive inclusion -------------------------------------*/
|
||||||
|
#ifndef __USB_DEVICE__H__
|
||||||
|
#define __USB_DEVICE__H__
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Includes ------------------------------------------------------------------*/
|
||||||
|
#include "stm32f1xx.h"
|
||||||
|
#include "stm32f1xx_hal.h"
|
||||||
|
#include "usbd_def.h"
|
||||||
|
|
||||||
|
/* USER CODE BEGIN INCLUDE */
|
||||||
|
|
||||||
|
/* USER CODE END INCLUDE */
|
||||||
|
|
||||||
|
/** @addtogroup USBD_OTG_DRIVER
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @defgroup USBD_DEVICE USBD_DEVICE
|
||||||
|
* @brief Device file for Usb otg low level driver.
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @defgroup USBD_DEVICE_Exported_Variables USBD_DEVICE_Exported_Variables
|
||||||
|
* @brief Public variables.
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Private variables ---------------------------------------------------------*/
|
||||||
|
/* USER CODE BEGIN PV */
|
||||||
|
|
||||||
|
/* USER CODE END PV */
|
||||||
|
|
||||||
|
/* Private function prototypes -----------------------------------------------*/
|
||||||
|
/* USER CODE BEGIN PFP */
|
||||||
|
|
||||||
|
/* USER CODE END PFP */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* -- Insert your variables declaration here --
|
||||||
|
*/
|
||||||
|
/* USER CODE BEGIN VARIABLES */
|
||||||
|
|
||||||
|
/* USER CODE END VARIABLES */
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @defgroup USBD_DEVICE_Exported_FunctionsPrototype USBD_DEVICE_Exported_FunctionsPrototype
|
||||||
|
* @brief Declaration of public functions for Usb device.
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** USB Device initialization function. */
|
||||||
|
void MX_USB_DEVICE_Init(void);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* -- Insert functions declaration here --
|
||||||
|
*/
|
||||||
|
/* USER CODE BEGIN FD */
|
||||||
|
|
||||||
|
/* USER CODE END FD */
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif /* __USB_DEVICE__H__ */
|
||||||
313
USB_DEVICE/App/usbd_cdc_if.c
Normal file
313
USB_DEVICE/App/usbd_cdc_if.c
Normal file
@@ -0,0 +1,313 @@
|
|||||||
|
/* USER CODE BEGIN Header */
|
||||||
|
/**
|
||||||
|
******************************************************************************
|
||||||
|
* @file : usbd_cdc_if.c
|
||||||
|
* @version : v2.0_Cube
|
||||||
|
* @brief : Usb device for Virtual Com Port.
|
||||||
|
******************************************************************************
|
||||||
|
* @attention
|
||||||
|
*
|
||||||
|
* Copyright (c) 2026 STMicroelectronics.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* This software is licensed under terms that can be found in the LICENSE file
|
||||||
|
* in the root directory of this software component.
|
||||||
|
* If no LICENSE file comes with this software, it is provided AS-IS.
|
||||||
|
*
|
||||||
|
******************************************************************************
|
||||||
|
*/
|
||||||
|
/* USER CODE END Header */
|
||||||
|
|
||||||
|
/* Includes ------------------------------------------------------------------*/
|
||||||
|
#include "usbd_cdc_if.h"
|
||||||
|
|
||||||
|
/* USER CODE BEGIN INCLUDE */
|
||||||
|
#include "myComms.h"
|
||||||
|
/* USER CODE END INCLUDE */
|
||||||
|
|
||||||
|
/* Private typedef -----------------------------------------------------------*/
|
||||||
|
/* Private define ------------------------------------------------------------*/
|
||||||
|
/* Private macro -------------------------------------------------------------*/
|
||||||
|
|
||||||
|
/* USER CODE BEGIN PV */
|
||||||
|
/* Private variables ---------------------------------------------------------*/
|
||||||
|
|
||||||
|
/* USER CODE END PV */
|
||||||
|
|
||||||
|
/** @addtogroup STM32_USB_OTG_DEVICE_LIBRARY
|
||||||
|
* @brief Usb device library.
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @addtogroup USBD_CDC_IF
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @defgroup USBD_CDC_IF_Private_TypesDefinitions USBD_CDC_IF_Private_TypesDefinitions
|
||||||
|
* @brief Private types.
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* USER CODE BEGIN PRIVATE_TYPES */
|
||||||
|
|
||||||
|
/* USER CODE END PRIVATE_TYPES */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @defgroup USBD_CDC_IF_Private_Defines USBD_CDC_IF_Private_Defines
|
||||||
|
* @brief Private defines.
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* USER CODE BEGIN PRIVATE_DEFINES */
|
||||||
|
/* USER CODE END PRIVATE_DEFINES */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @defgroup USBD_CDC_IF_Private_Macros USBD_CDC_IF_Private_Macros
|
||||||
|
* @brief Private macros.
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* USER CODE BEGIN PRIVATE_MACRO */
|
||||||
|
|
||||||
|
/* USER CODE END PRIVATE_MACRO */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @defgroup USBD_CDC_IF_Private_Variables USBD_CDC_IF_Private_Variables
|
||||||
|
* @brief Private variables.
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
/* Create buffer for reception and transmission */
|
||||||
|
/* It's up to user to redefine and/or remove those define */
|
||||||
|
/** Received data over USB are stored in this buffer */
|
||||||
|
uint8_t UserRxBufferFS[APP_RX_DATA_SIZE];
|
||||||
|
|
||||||
|
/** Data to send over USB CDC are stored in this buffer */
|
||||||
|
uint8_t UserTxBufferFS[APP_TX_DATA_SIZE];
|
||||||
|
|
||||||
|
/* USER CODE BEGIN PRIVATE_VARIABLES */
|
||||||
|
|
||||||
|
/* USER CODE END PRIVATE_VARIABLES */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @defgroup USBD_CDC_IF_Exported_Variables USBD_CDC_IF_Exported_Variables
|
||||||
|
* @brief Public variables.
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
extern USBD_HandleTypeDef hUsbDeviceFS;
|
||||||
|
|
||||||
|
/* USER CODE BEGIN EXPORTED_VARIABLES */
|
||||||
|
|
||||||
|
/* USER CODE END EXPORTED_VARIABLES */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @defgroup USBD_CDC_IF_Private_FunctionPrototypes USBD_CDC_IF_Private_FunctionPrototypes
|
||||||
|
* @brief Private functions declaration.
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
static int8_t CDC_Init_FS(void);
|
||||||
|
static int8_t CDC_DeInit_FS(void);
|
||||||
|
static int8_t CDC_Control_FS(uint8_t cmd, uint8_t* pbuf, uint16_t length);
|
||||||
|
static int8_t CDC_Receive_FS(uint8_t* pbuf, uint32_t *Len);
|
||||||
|
|
||||||
|
/* USER CODE BEGIN PRIVATE_FUNCTIONS_DECLARATION */
|
||||||
|
|
||||||
|
/* USER CODE END PRIVATE_FUNCTIONS_DECLARATION */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
USBD_CDC_ItfTypeDef USBD_Interface_fops_FS =
|
||||||
|
{
|
||||||
|
CDC_Init_FS,
|
||||||
|
CDC_DeInit_FS,
|
||||||
|
CDC_Control_FS,
|
||||||
|
CDC_Receive_FS
|
||||||
|
};
|
||||||
|
|
||||||
|
/* Private functions ---------------------------------------------------------*/
|
||||||
|
/**
|
||||||
|
* @brief Initializes the CDC media low layer over the FS USB IP
|
||||||
|
* @retval USBD_OK if all operations are OK else USBD_FAIL
|
||||||
|
*/
|
||||||
|
static int8_t CDC_Init_FS(void)
|
||||||
|
{
|
||||||
|
/* USER CODE BEGIN 3 */
|
||||||
|
/* Set Application Buffers */
|
||||||
|
USBD_CDC_SetTxBuffer(&hUsbDeviceFS, UserTxBufferFS, 0);
|
||||||
|
USBD_CDC_SetRxBuffer(&hUsbDeviceFS, UserRxBufferFS);
|
||||||
|
return (USBD_OK);
|
||||||
|
/* USER CODE END 3 */
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief DeInitializes the CDC media low layer
|
||||||
|
* @retval USBD_OK if all operations are OK else USBD_FAIL
|
||||||
|
*/
|
||||||
|
static int8_t CDC_DeInit_FS(void)
|
||||||
|
{
|
||||||
|
/* USER CODE BEGIN 4 */
|
||||||
|
return (USBD_OK);
|
||||||
|
/* USER CODE END 4 */
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Manage the CDC class requests
|
||||||
|
* @param cmd: Command code
|
||||||
|
* @param pbuf: Buffer containing command data (request parameters)
|
||||||
|
* @param length: Number of data to be sent (in bytes)
|
||||||
|
* @retval Result of the operation: USBD_OK if all operations are OK else USBD_FAIL
|
||||||
|
*/
|
||||||
|
static int8_t CDC_Control_FS(uint8_t cmd, uint8_t* pbuf, uint16_t length)
|
||||||
|
{
|
||||||
|
/* USER CODE BEGIN 5 */
|
||||||
|
switch(cmd)
|
||||||
|
{
|
||||||
|
case CDC_SEND_ENCAPSULATED_COMMAND:
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
|
case CDC_GET_ENCAPSULATED_RESPONSE:
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
|
case CDC_SET_COMM_FEATURE:
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
|
case CDC_GET_COMM_FEATURE:
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
|
case CDC_CLEAR_COMM_FEATURE:
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
|
/*******************************************************************************/
|
||||||
|
/* Line Coding Structure */
|
||||||
|
/*-----------------------------------------------------------------------------*/
|
||||||
|
/* Offset | Field | Size | Value | Description */
|
||||||
|
/* 0 | dwDTERate | 4 | Number |Data terminal rate, in bits per second*/
|
||||||
|
/* 4 | bCharFormat | 1 | Number | Stop bits */
|
||||||
|
/* 0 - 1 Stop bit */
|
||||||
|
/* 1 - 1.5 Stop bits */
|
||||||
|
/* 2 - 2 Stop bits */
|
||||||
|
/* 5 | bParityType | 1 | Number | Parity */
|
||||||
|
/* 0 - None */
|
||||||
|
/* 1 - Odd */
|
||||||
|
/* 2 - Even */
|
||||||
|
/* 3 - Mark */
|
||||||
|
/* 4 - Space */
|
||||||
|
/* 6 | bDataBits | 1 | Number Data bits (5, 6, 7, 8 or 16). */
|
||||||
|
/*******************************************************************************/
|
||||||
|
case CDC_SET_LINE_CODING:
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
|
case CDC_GET_LINE_CODING:
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
|
case CDC_SET_CONTROL_LINE_STATE:
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
|
case CDC_SEND_BREAK:
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return (USBD_OK);
|
||||||
|
/* USER CODE END 5 */
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Data received over USB OUT endpoint are sent over CDC interface
|
||||||
|
* through this function.
|
||||||
|
*
|
||||||
|
* @note
|
||||||
|
* This function will issue a NAK packet on any OUT packet received on
|
||||||
|
* USB endpoint until exiting this function. If you exit this function
|
||||||
|
* before transfer is complete on CDC interface (ie. using DMA controller)
|
||||||
|
* it will result in receiving more data while previous ones are still
|
||||||
|
* not sent.
|
||||||
|
*
|
||||||
|
* @param Buf: Buffer of data to be received
|
||||||
|
* @param Len: Number of data received (in bytes)
|
||||||
|
* @retval Result of the operation: USBD_OK if all operations are OK else USBD_FAIL
|
||||||
|
*/
|
||||||
|
|
||||||
|
static int8_t CDC_Receive_FS(uint8_t* Buf, uint32_t *Len)
|
||||||
|
{
|
||||||
|
/* USER CODE BEGIN 6 */
|
||||||
|
USBD_CDC_SetRxBuffer(&hUsbDeviceFS, &Buf[0]);
|
||||||
|
USBD_CDC_ReceivePacket(&hUsbDeviceFS);
|
||||||
|
|
||||||
|
|
||||||
|
extern uint8_t UART_RxBuf[6];
|
||||||
|
for(uint8_t i = 0; i < sizeof(UART_RxBuf); i++){
|
||||||
|
UART_RxBuf[i] = *(Buf + i);
|
||||||
|
}
|
||||||
|
|
||||||
|
setRxFlag();
|
||||||
|
|
||||||
|
return (USBD_OK);
|
||||||
|
/* USER CODE END 6 */
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief CDC_Transmit_FS
|
||||||
|
* Data to send over USB IN endpoint are sent over CDC interface
|
||||||
|
* through this function.
|
||||||
|
* @note
|
||||||
|
*
|
||||||
|
*
|
||||||
|
* @param Buf: Buffer of data to be sent
|
||||||
|
* @param Len: Number of data to be sent (in bytes)
|
||||||
|
* @retval USBD_OK if all operations are OK else USBD_FAIL or USBD_BUSY
|
||||||
|
*/
|
||||||
|
uint8_t CDC_Transmit_FS(uint8_t* Buf, uint16_t Len)
|
||||||
|
{
|
||||||
|
uint8_t result = USBD_OK;
|
||||||
|
/* USER CODE BEGIN 7 */
|
||||||
|
USBD_CDC_HandleTypeDef *hcdc = (USBD_CDC_HandleTypeDef*)hUsbDeviceFS.pClassData;
|
||||||
|
if (hcdc->TxState != 0){
|
||||||
|
return USBD_BUSY;
|
||||||
|
}
|
||||||
|
USBD_CDC_SetTxBuffer(&hUsbDeviceFS, Buf, Len);
|
||||||
|
result = USBD_CDC_TransmitPacket(&hUsbDeviceFS);
|
||||||
|
/* USER CODE END 7 */
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* USER CODE BEGIN PRIVATE_FUNCTIONS_IMPLEMENTATION */
|
||||||
|
|
||||||
|
/* USER CODE END PRIVATE_FUNCTIONS_IMPLEMENTATION */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
132
USB_DEVICE/App/usbd_cdc_if.h
Normal file
132
USB_DEVICE/App/usbd_cdc_if.h
Normal file
@@ -0,0 +1,132 @@
|
|||||||
|
/* USER CODE BEGIN Header */
|
||||||
|
/**
|
||||||
|
******************************************************************************
|
||||||
|
* @file : usbd_cdc_if.h
|
||||||
|
* @version : v2.0_Cube
|
||||||
|
* @brief : Header for usbd_cdc_if.c file.
|
||||||
|
******************************************************************************
|
||||||
|
* @attention
|
||||||
|
*
|
||||||
|
* Copyright (c) 2026 STMicroelectronics.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* This software is licensed under terms that can be found in the LICENSE file
|
||||||
|
* in the root directory of this software component.
|
||||||
|
* If no LICENSE file comes with this software, it is provided AS-IS.
|
||||||
|
*
|
||||||
|
******************************************************************************
|
||||||
|
*/
|
||||||
|
/* USER CODE END Header */
|
||||||
|
|
||||||
|
/* Define to prevent recursive inclusion -------------------------------------*/
|
||||||
|
|
||||||
|
#ifndef __USBD_CDC_IF_H__
|
||||||
|
#define __USBD_CDC_IF_H__
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Includes ------------------------------------------------------------------*/
|
||||||
|
#include "usbd_cdc.h"
|
||||||
|
|
||||||
|
/* USER CODE BEGIN INCLUDE */
|
||||||
|
|
||||||
|
/* USER CODE END INCLUDE */
|
||||||
|
|
||||||
|
/** @addtogroup STM32_USB_OTG_DEVICE_LIBRARY
|
||||||
|
* @brief For Usb device.
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @defgroup USBD_CDC_IF USBD_CDC_IF
|
||||||
|
* @brief Usb VCP device module
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @defgroup USBD_CDC_IF_Exported_Defines USBD_CDC_IF_Exported_Defines
|
||||||
|
* @brief Defines.
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
/* Define size for the receive and transmit buffer over CDC */
|
||||||
|
#define APP_RX_DATA_SIZE 128
|
||||||
|
#define APP_TX_DATA_SIZE 128
|
||||||
|
/* USER CODE BEGIN EXPORTED_DEFINES */
|
||||||
|
|
||||||
|
/* USER CODE END EXPORTED_DEFINES */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @defgroup USBD_CDC_IF_Exported_Types USBD_CDC_IF_Exported_Types
|
||||||
|
* @brief Types.
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* USER CODE BEGIN EXPORTED_TYPES */
|
||||||
|
|
||||||
|
/* USER CODE END EXPORTED_TYPES */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @defgroup USBD_CDC_IF_Exported_Macros USBD_CDC_IF_Exported_Macros
|
||||||
|
* @brief Aliases.
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* USER CODE BEGIN EXPORTED_MACRO */
|
||||||
|
|
||||||
|
/* USER CODE END EXPORTED_MACRO */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @defgroup USBD_CDC_IF_Exported_Variables USBD_CDC_IF_Exported_Variables
|
||||||
|
* @brief Public variables.
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** CDC Interface callback. */
|
||||||
|
extern USBD_CDC_ItfTypeDef USBD_Interface_fops_FS;
|
||||||
|
|
||||||
|
/* USER CODE BEGIN EXPORTED_VARIABLES */
|
||||||
|
|
||||||
|
/* USER CODE END EXPORTED_VARIABLES */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @defgroup USBD_CDC_IF_Exported_FunctionsPrototype USBD_CDC_IF_Exported_FunctionsPrototype
|
||||||
|
* @brief Public functions declaration.
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
uint8_t CDC_Transmit_FS(uint8_t* Buf, uint16_t Len);
|
||||||
|
|
||||||
|
/* USER CODE BEGIN EXPORTED_FUNCTIONS */
|
||||||
|
|
||||||
|
/* USER CODE END EXPORTED_FUNCTIONS */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif /* __USBD_CDC_IF_H__ */
|
||||||
|
|
||||||
394
USB_DEVICE/App/usbd_desc.c
Normal file
394
USB_DEVICE/App/usbd_desc.c
Normal file
@@ -0,0 +1,394 @@
|
|||||||
|
/* USER CODE BEGIN Header */
|
||||||
|
/**
|
||||||
|
******************************************************************************
|
||||||
|
* @file : App/usbd_desc.c
|
||||||
|
* @version : v2.0_Cube
|
||||||
|
* @brief : This file implements the USB device descriptors.
|
||||||
|
******************************************************************************
|
||||||
|
* @attention
|
||||||
|
*
|
||||||
|
* Copyright (c) 2026 STMicroelectronics.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* This software is licensed under terms that can be found in the LICENSE file
|
||||||
|
* in the root directory of this software component.
|
||||||
|
* If no LICENSE file comes with this software, it is provided AS-IS.
|
||||||
|
*
|
||||||
|
******************************************************************************
|
||||||
|
*/
|
||||||
|
/* USER CODE END Header */
|
||||||
|
|
||||||
|
/* Includes ------------------------------------------------------------------*/
|
||||||
|
#include "usbd_core.h"
|
||||||
|
#include "usbd_desc.h"
|
||||||
|
#include "usbd_conf.h"
|
||||||
|
|
||||||
|
/* USER CODE BEGIN INCLUDE */
|
||||||
|
|
||||||
|
/* USER CODE END INCLUDE */
|
||||||
|
|
||||||
|
/* Private typedef -----------------------------------------------------------*/
|
||||||
|
/* Private define ------------------------------------------------------------*/
|
||||||
|
/* Private macro -------------------------------------------------------------*/
|
||||||
|
|
||||||
|
/* USER CODE BEGIN PV */
|
||||||
|
/* Private variables ---------------------------------------------------------*/
|
||||||
|
|
||||||
|
/* USER CODE END PV */
|
||||||
|
|
||||||
|
/** @addtogroup STM32_USB_OTG_DEVICE_LIBRARY
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @addtogroup USBD_DESC
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @defgroup USBD_DESC_Private_TypesDefinitions USBD_DESC_Private_TypesDefinitions
|
||||||
|
* @brief Private types.
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* USER CODE BEGIN PRIVATE_TYPES */
|
||||||
|
|
||||||
|
/* USER CODE END PRIVATE_TYPES */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @defgroup USBD_DESC_Private_Defines USBD_DESC_Private_Defines
|
||||||
|
* @brief Private defines.
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define USBD_VID 1155
|
||||||
|
#define USBD_LANGID_STRING 1033
|
||||||
|
#define USBD_MANUFACTURER_STRING "STMicroelectronics"
|
||||||
|
#define USBD_PID_FS 22336
|
||||||
|
#define USBD_PRODUCT_STRING_FS "STM32 Virtual ComPort"
|
||||||
|
#define USBD_CONFIGURATION_STRING_FS "CDC Config"
|
||||||
|
#define USBD_INTERFACE_STRING_FS "CDC Interface"
|
||||||
|
|
||||||
|
/* USER CODE BEGIN PRIVATE_DEFINES */
|
||||||
|
|
||||||
|
/* USER CODE END PRIVATE_DEFINES */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* USER CODE BEGIN 0 */
|
||||||
|
|
||||||
|
/* USER CODE END 0 */
|
||||||
|
|
||||||
|
/** @defgroup USBD_DESC_Private_Macros USBD_DESC_Private_Macros
|
||||||
|
* @brief Private macros.
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* USER CODE BEGIN PRIVATE_MACRO */
|
||||||
|
|
||||||
|
/* USER CODE END PRIVATE_MACRO */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @defgroup USBD_DESC_Private_FunctionPrototypes USBD_DESC_Private_FunctionPrototypes
|
||||||
|
* @brief Private functions declaration.
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
static void Get_SerialNum(void);
|
||||||
|
static void IntToUnicode(uint32_t value, uint8_t * pbuf, uint8_t len);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @defgroup USBD_DESC_Private_FunctionPrototypes USBD_DESC_Private_FunctionPrototypes
|
||||||
|
* @brief Private functions declaration for FS.
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
uint8_t * USBD_FS_DeviceDescriptor(USBD_SpeedTypeDef speed, uint16_t *length);
|
||||||
|
uint8_t * USBD_FS_LangIDStrDescriptor(USBD_SpeedTypeDef speed, uint16_t *length);
|
||||||
|
uint8_t * USBD_FS_ManufacturerStrDescriptor(USBD_SpeedTypeDef speed, uint16_t *length);
|
||||||
|
uint8_t * USBD_FS_ProductStrDescriptor(USBD_SpeedTypeDef speed, uint16_t *length);
|
||||||
|
uint8_t * USBD_FS_SerialStrDescriptor(USBD_SpeedTypeDef speed, uint16_t *length);
|
||||||
|
uint8_t * USBD_FS_ConfigStrDescriptor(USBD_SpeedTypeDef speed, uint16_t *length);
|
||||||
|
uint8_t * USBD_FS_InterfaceStrDescriptor(USBD_SpeedTypeDef speed, uint16_t *length);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @defgroup USBD_DESC_Private_Variables USBD_DESC_Private_Variables
|
||||||
|
* @brief Private variables.
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
USBD_DescriptorsTypeDef FS_Desc =
|
||||||
|
{
|
||||||
|
USBD_FS_DeviceDescriptor
|
||||||
|
, USBD_FS_LangIDStrDescriptor
|
||||||
|
, USBD_FS_ManufacturerStrDescriptor
|
||||||
|
, USBD_FS_ProductStrDescriptor
|
||||||
|
, USBD_FS_SerialStrDescriptor
|
||||||
|
, USBD_FS_ConfigStrDescriptor
|
||||||
|
, USBD_FS_InterfaceStrDescriptor
|
||||||
|
};
|
||||||
|
|
||||||
|
#if defined ( __ICCARM__ ) /* IAR Compiler */
|
||||||
|
#pragma data_alignment=4
|
||||||
|
#endif /* defined ( __ICCARM__ ) */
|
||||||
|
/** USB standard device descriptor. */
|
||||||
|
__ALIGN_BEGIN uint8_t USBD_FS_DeviceDesc[USB_LEN_DEV_DESC] __ALIGN_END =
|
||||||
|
{
|
||||||
|
0x12, /*bLength */
|
||||||
|
USB_DESC_TYPE_DEVICE, /*bDescriptorType*/
|
||||||
|
0x00, /*bcdUSB */
|
||||||
|
0x02,
|
||||||
|
0x02, /*bDeviceClass*/
|
||||||
|
0x02, /*bDeviceSubClass*/
|
||||||
|
0x00, /*bDeviceProtocol*/
|
||||||
|
USB_MAX_EP0_SIZE, /*bMaxPacketSize*/
|
||||||
|
LOBYTE(USBD_VID), /*idVendor*/
|
||||||
|
HIBYTE(USBD_VID), /*idVendor*/
|
||||||
|
LOBYTE(USBD_PID_FS), /*idProduct*/
|
||||||
|
HIBYTE(USBD_PID_FS), /*idProduct*/
|
||||||
|
0x00, /*bcdDevice rel. 2.00*/
|
||||||
|
0x02,
|
||||||
|
USBD_IDX_MFC_STR, /*Index of manufacturer string*/
|
||||||
|
USBD_IDX_PRODUCT_STR, /*Index of product string*/
|
||||||
|
USBD_IDX_SERIAL_STR, /*Index of serial number string*/
|
||||||
|
USBD_MAX_NUM_CONFIGURATION /*bNumConfigurations*/
|
||||||
|
};
|
||||||
|
|
||||||
|
/* USB_DeviceDescriptor */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @defgroup USBD_DESC_Private_Variables USBD_DESC_Private_Variables
|
||||||
|
* @brief Private variables.
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
#if defined ( __ICCARM__ ) /* IAR Compiler */
|
||||||
|
#pragma data_alignment=4
|
||||||
|
#endif /* defined ( __ICCARM__ ) */
|
||||||
|
|
||||||
|
/** USB lang identifier descriptor. */
|
||||||
|
__ALIGN_BEGIN uint8_t USBD_LangIDDesc[USB_LEN_LANGID_STR_DESC] __ALIGN_END =
|
||||||
|
{
|
||||||
|
USB_LEN_LANGID_STR_DESC,
|
||||||
|
USB_DESC_TYPE_STRING,
|
||||||
|
LOBYTE(USBD_LANGID_STRING),
|
||||||
|
HIBYTE(USBD_LANGID_STRING)
|
||||||
|
};
|
||||||
|
|
||||||
|
#if defined ( __ICCARM__ ) /* IAR Compiler */
|
||||||
|
#pragma data_alignment=4
|
||||||
|
#endif /* defined ( __ICCARM__ ) */
|
||||||
|
/* Internal string descriptor. */
|
||||||
|
__ALIGN_BEGIN uint8_t USBD_StrDesc[USBD_MAX_STR_DESC_SIZ] __ALIGN_END;
|
||||||
|
|
||||||
|
#if defined ( __ICCARM__ ) /*!< IAR Compiler */
|
||||||
|
#pragma data_alignment=4
|
||||||
|
#endif
|
||||||
|
__ALIGN_BEGIN uint8_t USBD_StringSerial[USB_SIZ_STRING_SERIAL] __ALIGN_END = {
|
||||||
|
USB_SIZ_STRING_SERIAL,
|
||||||
|
USB_DESC_TYPE_STRING,
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @defgroup USBD_DESC_Private_Functions USBD_DESC_Private_Functions
|
||||||
|
* @brief Private functions.
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Return the device descriptor
|
||||||
|
* @param speed : Current device speed
|
||||||
|
* @param length : Pointer to data length variable
|
||||||
|
* @retval Pointer to descriptor buffer
|
||||||
|
*/
|
||||||
|
uint8_t * USBD_FS_DeviceDescriptor(USBD_SpeedTypeDef speed, uint16_t *length)
|
||||||
|
{
|
||||||
|
UNUSED(speed);
|
||||||
|
*length = sizeof(USBD_FS_DeviceDesc);
|
||||||
|
return USBD_FS_DeviceDesc;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Return the LangID string descriptor
|
||||||
|
* @param speed : Current device speed
|
||||||
|
* @param length : Pointer to data length variable
|
||||||
|
* @retval Pointer to descriptor buffer
|
||||||
|
*/
|
||||||
|
uint8_t * USBD_FS_LangIDStrDescriptor(USBD_SpeedTypeDef speed, uint16_t *length)
|
||||||
|
{
|
||||||
|
UNUSED(speed);
|
||||||
|
*length = sizeof(USBD_LangIDDesc);
|
||||||
|
return USBD_LangIDDesc;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Return the product string descriptor
|
||||||
|
* @param speed : Current device speed
|
||||||
|
* @param length : Pointer to data length variable
|
||||||
|
* @retval Pointer to descriptor buffer
|
||||||
|
*/
|
||||||
|
uint8_t * USBD_FS_ProductStrDescriptor(USBD_SpeedTypeDef speed, uint16_t *length)
|
||||||
|
{
|
||||||
|
if(speed == 0)
|
||||||
|
{
|
||||||
|
USBD_GetString((uint8_t *)USBD_PRODUCT_STRING_FS, USBD_StrDesc, length);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
USBD_GetString((uint8_t *)USBD_PRODUCT_STRING_FS, USBD_StrDesc, length);
|
||||||
|
}
|
||||||
|
return USBD_StrDesc;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Return the manufacturer string descriptor
|
||||||
|
* @param speed : Current device speed
|
||||||
|
* @param length : Pointer to data length variable
|
||||||
|
* @retval Pointer to descriptor buffer
|
||||||
|
*/
|
||||||
|
uint8_t * USBD_FS_ManufacturerStrDescriptor(USBD_SpeedTypeDef speed, uint16_t *length)
|
||||||
|
{
|
||||||
|
UNUSED(speed);
|
||||||
|
USBD_GetString((uint8_t *)USBD_MANUFACTURER_STRING, USBD_StrDesc, length);
|
||||||
|
return USBD_StrDesc;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Return the serial number string descriptor
|
||||||
|
* @param speed : Current device speed
|
||||||
|
* @param length : Pointer to data length variable
|
||||||
|
* @retval Pointer to descriptor buffer
|
||||||
|
*/
|
||||||
|
uint8_t * USBD_FS_SerialStrDescriptor(USBD_SpeedTypeDef speed, uint16_t *length)
|
||||||
|
{
|
||||||
|
UNUSED(speed);
|
||||||
|
*length = USB_SIZ_STRING_SERIAL;
|
||||||
|
|
||||||
|
/* Update the serial number string descriptor with the data from the unique
|
||||||
|
* ID */
|
||||||
|
Get_SerialNum();
|
||||||
|
/* USER CODE BEGIN USBD_FS_SerialStrDescriptor */
|
||||||
|
|
||||||
|
/* USER CODE END USBD_FS_SerialStrDescriptor */
|
||||||
|
return (uint8_t *) USBD_StringSerial;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Return the configuration string descriptor
|
||||||
|
* @param speed : Current device speed
|
||||||
|
* @param length : Pointer to data length variable
|
||||||
|
* @retval Pointer to descriptor buffer
|
||||||
|
*/
|
||||||
|
uint8_t * USBD_FS_ConfigStrDescriptor(USBD_SpeedTypeDef speed, uint16_t *length)
|
||||||
|
{
|
||||||
|
if(speed == USBD_SPEED_HIGH)
|
||||||
|
{
|
||||||
|
USBD_GetString((uint8_t *)USBD_CONFIGURATION_STRING_FS, USBD_StrDesc, length);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
USBD_GetString((uint8_t *)USBD_CONFIGURATION_STRING_FS, USBD_StrDesc, length);
|
||||||
|
}
|
||||||
|
return USBD_StrDesc;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Return the interface string descriptor
|
||||||
|
* @param speed : Current device speed
|
||||||
|
* @param length : Pointer to data length variable
|
||||||
|
* @retval Pointer to descriptor buffer
|
||||||
|
*/
|
||||||
|
uint8_t * USBD_FS_InterfaceStrDescriptor(USBD_SpeedTypeDef speed, uint16_t *length)
|
||||||
|
{
|
||||||
|
if(speed == 0)
|
||||||
|
{
|
||||||
|
USBD_GetString((uint8_t *)USBD_INTERFACE_STRING_FS, USBD_StrDesc, length);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
USBD_GetString((uint8_t *)USBD_INTERFACE_STRING_FS, USBD_StrDesc, length);
|
||||||
|
}
|
||||||
|
return USBD_StrDesc;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Create the serial number string descriptor
|
||||||
|
* @param None
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
static void Get_SerialNum(void)
|
||||||
|
{
|
||||||
|
uint32_t deviceserial0;
|
||||||
|
uint32_t deviceserial1;
|
||||||
|
uint32_t deviceserial2;
|
||||||
|
|
||||||
|
deviceserial0 = *(uint32_t *) DEVICE_ID1;
|
||||||
|
deviceserial1 = *(uint32_t *) DEVICE_ID2;
|
||||||
|
deviceserial2 = *(uint32_t *) DEVICE_ID3;
|
||||||
|
|
||||||
|
deviceserial0 += deviceserial2;
|
||||||
|
|
||||||
|
if (deviceserial0 != 0)
|
||||||
|
{
|
||||||
|
IntToUnicode(deviceserial0, &USBD_StringSerial[2], 8);
|
||||||
|
IntToUnicode(deviceserial1, &USBD_StringSerial[18], 4);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Convert Hex 32Bits value into char
|
||||||
|
* @param value: value to convert
|
||||||
|
* @param pbuf: pointer to the buffer
|
||||||
|
* @param len: buffer length
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
static void IntToUnicode(uint32_t value, uint8_t * pbuf, uint8_t len)
|
||||||
|
{
|
||||||
|
uint8_t idx = 0;
|
||||||
|
|
||||||
|
for (idx = 0; idx < len; idx++)
|
||||||
|
{
|
||||||
|
if (((value >> 28)) < 0xA)
|
||||||
|
{
|
||||||
|
pbuf[2 * idx] = (value >> 28) + '0';
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
pbuf[2 * idx] = (value >> 28) + 'A' - 10;
|
||||||
|
}
|
||||||
|
|
||||||
|
value = value << 4;
|
||||||
|
|
||||||
|
pbuf[2 * idx + 1] = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
143
USB_DEVICE/App/usbd_desc.h
Normal file
143
USB_DEVICE/App/usbd_desc.h
Normal file
@@ -0,0 +1,143 @@
|
|||||||
|
/* USER CODE BEGIN Header */
|
||||||
|
/**
|
||||||
|
******************************************************************************
|
||||||
|
* @file : usbd_desc.c
|
||||||
|
* @version : v2.0_Cube
|
||||||
|
* @brief : Header for usbd_conf.c file.
|
||||||
|
******************************************************************************
|
||||||
|
* @attention
|
||||||
|
*
|
||||||
|
* Copyright (c) 2026 STMicroelectronics.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* This software is licensed under terms that can be found in the LICENSE file
|
||||||
|
* in the root directory of this software component.
|
||||||
|
* If no LICENSE file comes with this software, it is provided AS-IS.
|
||||||
|
*
|
||||||
|
******************************************************************************
|
||||||
|
*/
|
||||||
|
/* USER CODE END Header */
|
||||||
|
/* Define to prevent recursive inclusion -------------------------------------*/
|
||||||
|
#ifndef __USBD_DESC__C__
|
||||||
|
#define __USBD_DESC__C__
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Includes ------------------------------------------------------------------*/
|
||||||
|
#include "usbd_def.h"
|
||||||
|
|
||||||
|
/* USER CODE BEGIN INCLUDE */
|
||||||
|
|
||||||
|
/* USER CODE END INCLUDE */
|
||||||
|
|
||||||
|
/** @addtogroup STM32_USB_OTG_DEVICE_LIBRARY
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @defgroup USBD_DESC USBD_DESC
|
||||||
|
* @brief Usb device descriptors module.
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @defgroup USBD_DESC_Exported_Constants USBD_DESC_Exported_Constants
|
||||||
|
* @brief Constants.
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
#define DEVICE_ID1 (UID_BASE)
|
||||||
|
#define DEVICE_ID2 (UID_BASE + 0x4)
|
||||||
|
#define DEVICE_ID3 (UID_BASE + 0x8)
|
||||||
|
|
||||||
|
#define USB_SIZ_STRING_SERIAL 0x1A
|
||||||
|
|
||||||
|
/* USER CODE BEGIN EXPORTED_CONSTANTS */
|
||||||
|
|
||||||
|
/* USER CODE END EXPORTED_CONSTANTS */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @defgroup USBD_DESC_Exported_Defines USBD_DESC_Exported_Defines
|
||||||
|
* @brief Defines.
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* USER CODE BEGIN EXPORTED_DEFINES */
|
||||||
|
|
||||||
|
/* USER CODE END EXPORTED_DEFINES */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @defgroup USBD_DESC_Exported_TypesDefinitions USBD_DESC_Exported_TypesDefinitions
|
||||||
|
* @brief Types.
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* USER CODE BEGIN EXPORTED_TYPES */
|
||||||
|
|
||||||
|
/* USER CODE END EXPORTED_TYPES */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @defgroup USBD_DESC_Exported_Macros USBD_DESC_Exported_Macros
|
||||||
|
* @brief Aliases.
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* USER CODE BEGIN EXPORTED_MACRO */
|
||||||
|
|
||||||
|
/* USER CODE END EXPORTED_MACRO */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @defgroup USBD_DESC_Exported_Variables USBD_DESC_Exported_Variables
|
||||||
|
* @brief Public variables.
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** Descriptor for the Usb device. */
|
||||||
|
extern USBD_DescriptorsTypeDef FS_Desc;
|
||||||
|
|
||||||
|
/* USER CODE BEGIN EXPORTED_VARIABLES */
|
||||||
|
|
||||||
|
/* USER CODE END EXPORTED_VARIABLES */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @defgroup USBD_DESC_Exported_FunctionsPrototype USBD_DESC_Exported_FunctionsPrototype
|
||||||
|
* @brief Public functions declaration.
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* USER CODE BEGIN EXPORTED_FUNCTIONS */
|
||||||
|
|
||||||
|
/* USER CODE END EXPORTED_FUNCTIONS */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif /* __USBD_DESC__C__ */
|
||||||
|
|
||||||
660
USB_DEVICE/Target/usbd_conf.c
Normal file
660
USB_DEVICE/Target/usbd_conf.c
Normal file
@@ -0,0 +1,660 @@
|
|||||||
|
/* USER CODE BEGIN Header */
|
||||||
|
/**
|
||||||
|
******************************************************************************
|
||||||
|
* @file : Target/usbd_conf.c
|
||||||
|
* @version : v2.0_Cube
|
||||||
|
* @brief : This file implements the board support package for the USB device library
|
||||||
|
******************************************************************************
|
||||||
|
* @attention
|
||||||
|
*
|
||||||
|
* Copyright (c) 2026 STMicroelectronics.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* This software is licensed under terms that can be found in the LICENSE file
|
||||||
|
* in the root directory of this software component.
|
||||||
|
* If no LICENSE file comes with this software, it is provided AS-IS.
|
||||||
|
*
|
||||||
|
******************************************************************************
|
||||||
|
*/
|
||||||
|
/* USER CODE END Header */
|
||||||
|
|
||||||
|
/* Includes ------------------------------------------------------------------*/
|
||||||
|
#include "stm32f1xx.h"
|
||||||
|
#include "stm32f1xx_hal.h"
|
||||||
|
#include "usbd_def.h"
|
||||||
|
#include "usbd_core.h"
|
||||||
|
#include "usbd_cdc.h"
|
||||||
|
|
||||||
|
/* USER CODE BEGIN Includes */
|
||||||
|
|
||||||
|
/* USER CODE END Includes */
|
||||||
|
|
||||||
|
/* Private typedef -----------------------------------------------------------*/
|
||||||
|
/* Private define ------------------------------------------------------------*/
|
||||||
|
/* Private macro -------------------------------------------------------------*/
|
||||||
|
|
||||||
|
/* USER CODE BEGIN PV */
|
||||||
|
/* Private variables ---------------------------------------------------------*/
|
||||||
|
|
||||||
|
/* USER CODE END PV */
|
||||||
|
|
||||||
|
PCD_HandleTypeDef hpcd_USB_FS;
|
||||||
|
void Error_Handler(void);
|
||||||
|
|
||||||
|
/* USER CODE BEGIN 0 */
|
||||||
|
|
||||||
|
/* USER CODE END 0 */
|
||||||
|
|
||||||
|
/* USER CODE BEGIN PFP */
|
||||||
|
/* Private function prototypes -----------------------------------------------*/
|
||||||
|
|
||||||
|
/* USER CODE END PFP */
|
||||||
|
|
||||||
|
/* Private functions ---------------------------------------------------------*/
|
||||||
|
static USBD_StatusTypeDef USBD_Get_USB_Status(HAL_StatusTypeDef hal_status);
|
||||||
|
/* USER CODE BEGIN 1 */
|
||||||
|
|
||||||
|
/* USER CODE END 1 */
|
||||||
|
#if (USE_HAL_PCD_REGISTER_CALLBACKS == 1U)
|
||||||
|
static void PCDEx_SetConnectionState(PCD_HandleTypeDef *hpcd, uint8_t state);
|
||||||
|
#else
|
||||||
|
void HAL_PCDEx_SetConnectionState(PCD_HandleTypeDef *hpcd, uint8_t state);
|
||||||
|
#endif /* USE_HAL_PCD_REGISTER_CALLBACKS */
|
||||||
|
|
||||||
|
/*******************************************************************************
|
||||||
|
LL Driver Callbacks (PCD -> USB Device Library)
|
||||||
|
*******************************************************************************/
|
||||||
|
/* MSP Init */
|
||||||
|
|
||||||
|
void HAL_PCD_MspInit(PCD_HandleTypeDef* pcdHandle)
|
||||||
|
{
|
||||||
|
if(pcdHandle->Instance==USB)
|
||||||
|
{
|
||||||
|
/* USER CODE BEGIN USB_MspInit 0 */
|
||||||
|
|
||||||
|
/* USER CODE END USB_MspInit 0 */
|
||||||
|
/* Peripheral clock enable */
|
||||||
|
__HAL_RCC_USB_CLK_ENABLE();
|
||||||
|
|
||||||
|
/* Peripheral interrupt init */
|
||||||
|
HAL_NVIC_SetPriority(USB_LP_CAN1_RX0_IRQn, 0, 0);
|
||||||
|
HAL_NVIC_EnableIRQ(USB_LP_CAN1_RX0_IRQn);
|
||||||
|
/* USER CODE BEGIN USB_MspInit 1 */
|
||||||
|
|
||||||
|
/* USER CODE END USB_MspInit 1 */
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void HAL_PCD_MspDeInit(PCD_HandleTypeDef* pcdHandle)
|
||||||
|
{
|
||||||
|
if(pcdHandle->Instance==USB)
|
||||||
|
{
|
||||||
|
/* USER CODE BEGIN USB_MspDeInit 0 */
|
||||||
|
|
||||||
|
/* USER CODE END USB_MspDeInit 0 */
|
||||||
|
/* Peripheral clock disable */
|
||||||
|
__HAL_RCC_USB_CLK_DISABLE();
|
||||||
|
|
||||||
|
/* Peripheral interrupt Deinit*/
|
||||||
|
HAL_NVIC_DisableIRQ(USB_LP_CAN1_RX0_IRQn);
|
||||||
|
|
||||||
|
/* USER CODE BEGIN USB_MspDeInit 1 */
|
||||||
|
|
||||||
|
/* USER CODE END USB_MspDeInit 1 */
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Setup stage callback
|
||||||
|
* @param hpcd: PCD handle
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
#if (USE_HAL_PCD_REGISTER_CALLBACKS == 1U)
|
||||||
|
static void PCD_SetupStageCallback(PCD_HandleTypeDef *hpcd)
|
||||||
|
#else
|
||||||
|
void HAL_PCD_SetupStageCallback(PCD_HandleTypeDef *hpcd)
|
||||||
|
#endif /* USE_HAL_PCD_REGISTER_CALLBACKS */
|
||||||
|
{
|
||||||
|
USBD_LL_SetupStage((USBD_HandleTypeDef*)hpcd->pData, (uint8_t *)hpcd->Setup);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Data Out stage callback.
|
||||||
|
* @param hpcd: PCD handle
|
||||||
|
* @param epnum: Endpoint number
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
#if (USE_HAL_PCD_REGISTER_CALLBACKS == 1U)
|
||||||
|
static void PCD_DataOutStageCallback(PCD_HandleTypeDef *hpcd, uint8_t epnum)
|
||||||
|
#else
|
||||||
|
void HAL_PCD_DataOutStageCallback(PCD_HandleTypeDef *hpcd, uint8_t epnum)
|
||||||
|
#endif /* USE_HAL_PCD_REGISTER_CALLBACKS */
|
||||||
|
{
|
||||||
|
USBD_LL_DataOutStage((USBD_HandleTypeDef*)hpcd->pData, epnum, hpcd->OUT_ep[epnum].xfer_buff);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Data In stage callback.
|
||||||
|
* @param hpcd: PCD handle
|
||||||
|
* @param epnum: Endpoint number
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
#if (USE_HAL_PCD_REGISTER_CALLBACKS == 1U)
|
||||||
|
static void PCD_DataInStageCallback(PCD_HandleTypeDef *hpcd, uint8_t epnum)
|
||||||
|
#else
|
||||||
|
void HAL_PCD_DataInStageCallback(PCD_HandleTypeDef *hpcd, uint8_t epnum)
|
||||||
|
#endif /* USE_HAL_PCD_REGISTER_CALLBACKS */
|
||||||
|
{
|
||||||
|
USBD_LL_DataInStage((USBD_HandleTypeDef*)hpcd->pData, epnum, hpcd->IN_ep[epnum].xfer_buff);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief SOF callback.
|
||||||
|
* @param hpcd: PCD handle
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
#if (USE_HAL_PCD_REGISTER_CALLBACKS == 1U)
|
||||||
|
static void PCD_SOFCallback(PCD_HandleTypeDef *hpcd)
|
||||||
|
#else
|
||||||
|
void HAL_PCD_SOFCallback(PCD_HandleTypeDef *hpcd)
|
||||||
|
#endif /* USE_HAL_PCD_REGISTER_CALLBACKS */
|
||||||
|
{
|
||||||
|
USBD_LL_SOF((USBD_HandleTypeDef*)hpcd->pData);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Reset callback.
|
||||||
|
* @param hpcd: PCD handle
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
#if (USE_HAL_PCD_REGISTER_CALLBACKS == 1U)
|
||||||
|
static void PCD_ResetCallback(PCD_HandleTypeDef *hpcd)
|
||||||
|
#else
|
||||||
|
void HAL_PCD_ResetCallback(PCD_HandleTypeDef *hpcd)
|
||||||
|
#endif /* USE_HAL_PCD_REGISTER_CALLBACKS */
|
||||||
|
{
|
||||||
|
USBD_SpeedTypeDef speed = USBD_SPEED_FULL;
|
||||||
|
|
||||||
|
if ( hpcd->Init.speed != PCD_SPEED_FULL)
|
||||||
|
{
|
||||||
|
Error_Handler();
|
||||||
|
}
|
||||||
|
/* Set Speed. */
|
||||||
|
USBD_LL_SetSpeed((USBD_HandleTypeDef*)hpcd->pData, speed);
|
||||||
|
|
||||||
|
/* Reset Device. */
|
||||||
|
USBD_LL_Reset((USBD_HandleTypeDef*)hpcd->pData);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Suspend callback.
|
||||||
|
* When Low power mode is enabled the debug cannot be used (IAR, Keil doesn't support it)
|
||||||
|
* @param hpcd: PCD handle
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
#if (USE_HAL_PCD_REGISTER_CALLBACKS == 1U)
|
||||||
|
static void PCD_SuspendCallback(PCD_HandleTypeDef *hpcd)
|
||||||
|
#else
|
||||||
|
void HAL_PCD_SuspendCallback(PCD_HandleTypeDef *hpcd)
|
||||||
|
#endif /* USE_HAL_PCD_REGISTER_CALLBACKS */
|
||||||
|
{
|
||||||
|
/* Inform USB library that core enters in suspend Mode. */
|
||||||
|
USBD_LL_Suspend((USBD_HandleTypeDef*)hpcd->pData);
|
||||||
|
/* Enter in STOP mode. */
|
||||||
|
/* USER CODE BEGIN 2 */
|
||||||
|
if (hpcd->Init.low_power_enable)
|
||||||
|
{
|
||||||
|
/* Set SLEEPDEEP bit and SleepOnExit of Cortex System Control Register. */
|
||||||
|
SCB->SCR |= (uint32_t)((uint32_t)(SCB_SCR_SLEEPDEEP_Msk | SCB_SCR_SLEEPONEXIT_Msk));
|
||||||
|
}
|
||||||
|
/* USER CODE END 2 */
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Resume callback.
|
||||||
|
* When Low power mode is enabled the debug cannot be used (IAR, Keil doesn't support it)
|
||||||
|
* @param hpcd: PCD handle
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
#if (USE_HAL_PCD_REGISTER_CALLBACKS == 1U)
|
||||||
|
static void PCD_ResumeCallback(PCD_HandleTypeDef *hpcd)
|
||||||
|
#else
|
||||||
|
void HAL_PCD_ResumeCallback(PCD_HandleTypeDef *hpcd)
|
||||||
|
#endif /* USE_HAL_PCD_REGISTER_CALLBACKS */
|
||||||
|
{
|
||||||
|
/* USER CODE BEGIN 3 */
|
||||||
|
|
||||||
|
/* USER CODE END 3 */
|
||||||
|
USBD_LL_Resume((USBD_HandleTypeDef*)hpcd->pData);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief ISOOUTIncomplete callback.
|
||||||
|
* @param hpcd: PCD handle
|
||||||
|
* @param epnum: Endpoint number
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
#if (USE_HAL_PCD_REGISTER_CALLBACKS == 1U)
|
||||||
|
static void PCD_ISOOUTIncompleteCallback(PCD_HandleTypeDef *hpcd, uint8_t epnum)
|
||||||
|
#else
|
||||||
|
void HAL_PCD_ISOOUTIncompleteCallback(PCD_HandleTypeDef *hpcd, uint8_t epnum)
|
||||||
|
#endif /* USE_HAL_PCD_REGISTER_CALLBACKS */
|
||||||
|
{
|
||||||
|
USBD_LL_IsoOUTIncomplete((USBD_HandleTypeDef*)hpcd->pData, epnum);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief ISOINIncomplete callback.
|
||||||
|
* @param hpcd: PCD handle
|
||||||
|
* @param epnum: Endpoint number
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
#if (USE_HAL_PCD_REGISTER_CALLBACKS == 1U)
|
||||||
|
static void PCD_ISOINIncompleteCallback(PCD_HandleTypeDef *hpcd, uint8_t epnum)
|
||||||
|
#else
|
||||||
|
void HAL_PCD_ISOINIncompleteCallback(PCD_HandleTypeDef *hpcd, uint8_t epnum)
|
||||||
|
#endif /* USE_HAL_PCD_REGISTER_CALLBACKS */
|
||||||
|
{
|
||||||
|
USBD_LL_IsoINIncomplete((USBD_HandleTypeDef*)hpcd->pData, epnum);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Connect callback.
|
||||||
|
* @param hpcd: PCD handle
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
#if (USE_HAL_PCD_REGISTER_CALLBACKS == 1U)
|
||||||
|
static void PCD_ConnectCallback(PCD_HandleTypeDef *hpcd)
|
||||||
|
#else
|
||||||
|
void HAL_PCD_ConnectCallback(PCD_HandleTypeDef *hpcd)
|
||||||
|
#endif /* USE_HAL_PCD_REGISTER_CALLBACKS */
|
||||||
|
{
|
||||||
|
USBD_LL_DevConnected((USBD_HandleTypeDef*)hpcd->pData);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Disconnect callback.
|
||||||
|
* @param hpcd: PCD handle
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
#if (USE_HAL_PCD_REGISTER_CALLBACKS == 1U)
|
||||||
|
static void PCD_DisconnectCallback(PCD_HandleTypeDef *hpcd)
|
||||||
|
#else
|
||||||
|
void HAL_PCD_DisconnectCallback(PCD_HandleTypeDef *hpcd)
|
||||||
|
#endif /* USE_HAL_PCD_REGISTER_CALLBACKS */
|
||||||
|
{
|
||||||
|
USBD_LL_DevDisconnected((USBD_HandleTypeDef*)hpcd->pData);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*******************************************************************************
|
||||||
|
LL Driver Interface (USB Device Library --> PCD)
|
||||||
|
*******************************************************************************/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Initializes the low level portion of the device driver.
|
||||||
|
* @param pdev: Device handle
|
||||||
|
* @retval USBD status
|
||||||
|
*/
|
||||||
|
USBD_StatusTypeDef USBD_LL_Init(USBD_HandleTypeDef *pdev)
|
||||||
|
{
|
||||||
|
/* Init USB Ip. */
|
||||||
|
/* Link the driver to the stack. */
|
||||||
|
hpcd_USB_FS.pData = pdev;
|
||||||
|
pdev->pData = &hpcd_USB_FS;
|
||||||
|
|
||||||
|
hpcd_USB_FS.Instance = USB;
|
||||||
|
hpcd_USB_FS.Init.dev_endpoints = 8;
|
||||||
|
hpcd_USB_FS.Init.speed = PCD_SPEED_FULL;
|
||||||
|
hpcd_USB_FS.Init.low_power_enable = DISABLE;
|
||||||
|
hpcd_USB_FS.Init.lpm_enable = DISABLE;
|
||||||
|
hpcd_USB_FS.Init.battery_charging_enable = DISABLE;
|
||||||
|
if (HAL_PCD_Init(&hpcd_USB_FS) != HAL_OK)
|
||||||
|
{
|
||||||
|
Error_Handler( );
|
||||||
|
}
|
||||||
|
|
||||||
|
#if (USE_HAL_PCD_REGISTER_CALLBACKS == 1U)
|
||||||
|
/* Register USB PCD CallBacks */
|
||||||
|
HAL_PCD_RegisterCallback(&hpcd_USB_FS, HAL_PCD_SOF_CB_ID, PCD_SOFCallback);
|
||||||
|
HAL_PCD_RegisterCallback(&hpcd_USB_FS, HAL_PCD_SETUPSTAGE_CB_ID, PCD_SetupStageCallback);
|
||||||
|
HAL_PCD_RegisterCallback(&hpcd_USB_FS, HAL_PCD_RESET_CB_ID, PCD_ResetCallback);
|
||||||
|
HAL_PCD_RegisterCallback(&hpcd_USB_FS, HAL_PCD_SUSPEND_CB_ID, PCD_SuspendCallback);
|
||||||
|
HAL_PCD_RegisterCallback(&hpcd_USB_FS, HAL_PCD_RESUME_CB_ID, PCD_ResumeCallback);
|
||||||
|
HAL_PCD_RegisterCallback(&hpcd_USB_FS, HAL_PCD_CONNECT_CB_ID, PCD_ConnectCallback);
|
||||||
|
HAL_PCD_RegisterCallback(&hpcd_USB_FS, HAL_PCD_DISCONNECT_CB_ID, PCD_DisconnectCallback);
|
||||||
|
|
||||||
|
HAL_PCD_RegisterDataOutStageCallback(&hpcd_USB_FS, PCD_DataOutStageCallback);
|
||||||
|
HAL_PCD_RegisterDataInStageCallback(&hpcd_USB_FS, PCD_DataInStageCallback);
|
||||||
|
HAL_PCD_RegisterIsoOutIncpltCallback(&hpcd_USB_FS, PCD_ISOOUTIncompleteCallback);
|
||||||
|
HAL_PCD_RegisterIsoInIncpltCallback(&hpcd_USB_FS, PCD_ISOINIncompleteCallback);
|
||||||
|
#endif /* USE_HAL_PCD_REGISTER_CALLBACKS */
|
||||||
|
/* USER CODE BEGIN EndPoint_Configuration */
|
||||||
|
HAL_PCDEx_PMAConfig((PCD_HandleTypeDef*)pdev->pData , 0x00 , PCD_SNG_BUF, 0x18);
|
||||||
|
HAL_PCDEx_PMAConfig((PCD_HandleTypeDef*)pdev->pData , 0x80 , PCD_SNG_BUF, 0x58);
|
||||||
|
/* USER CODE END EndPoint_Configuration */
|
||||||
|
/* USER CODE BEGIN EndPoint_Configuration_CDC */
|
||||||
|
HAL_PCDEx_PMAConfig((PCD_HandleTypeDef*)pdev->pData , 0x81 , PCD_SNG_BUF, 0xC0);
|
||||||
|
HAL_PCDEx_PMAConfig((PCD_HandleTypeDef*)pdev->pData , 0x01 , PCD_SNG_BUF, 0x110);
|
||||||
|
HAL_PCDEx_PMAConfig((PCD_HandleTypeDef*)pdev->pData , 0x82 , PCD_SNG_BUF, 0x100);
|
||||||
|
/* USER CODE END EndPoint_Configuration_CDC */
|
||||||
|
return USBD_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief De-Initializes the low level portion of the device driver.
|
||||||
|
* @param pdev: Device handle
|
||||||
|
* @retval USBD status
|
||||||
|
*/
|
||||||
|
USBD_StatusTypeDef USBD_LL_DeInit(USBD_HandleTypeDef *pdev)
|
||||||
|
{
|
||||||
|
HAL_StatusTypeDef hal_status = HAL_OK;
|
||||||
|
USBD_StatusTypeDef usb_status = USBD_OK;
|
||||||
|
|
||||||
|
hal_status = HAL_PCD_DeInit(pdev->pData);
|
||||||
|
|
||||||
|
usb_status = USBD_Get_USB_Status(hal_status);
|
||||||
|
|
||||||
|
return usb_status;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Starts the low level portion of the device driver.
|
||||||
|
* @param pdev: Device handle
|
||||||
|
* @retval USBD status
|
||||||
|
*/
|
||||||
|
USBD_StatusTypeDef USBD_LL_Start(USBD_HandleTypeDef *pdev)
|
||||||
|
{
|
||||||
|
HAL_StatusTypeDef hal_status = HAL_OK;
|
||||||
|
USBD_StatusTypeDef usb_status = USBD_OK;
|
||||||
|
|
||||||
|
hal_status = HAL_PCD_Start(pdev->pData);
|
||||||
|
|
||||||
|
usb_status = USBD_Get_USB_Status(hal_status);
|
||||||
|
|
||||||
|
return usb_status;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Stops the low level portion of the device driver.
|
||||||
|
* @param pdev: Device handle
|
||||||
|
* @retval USBD status
|
||||||
|
*/
|
||||||
|
USBD_StatusTypeDef USBD_LL_Stop(USBD_HandleTypeDef *pdev)
|
||||||
|
{
|
||||||
|
HAL_StatusTypeDef hal_status = HAL_OK;
|
||||||
|
USBD_StatusTypeDef usb_status = USBD_OK;
|
||||||
|
|
||||||
|
hal_status = HAL_PCD_Stop(pdev->pData);
|
||||||
|
|
||||||
|
usb_status = USBD_Get_USB_Status(hal_status);
|
||||||
|
|
||||||
|
return usb_status;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Opens an endpoint of the low level driver.
|
||||||
|
* @param pdev: Device handle
|
||||||
|
* @param ep_addr: Endpoint number
|
||||||
|
* @param ep_type: Endpoint type
|
||||||
|
* @param ep_mps: Endpoint max packet size
|
||||||
|
* @retval USBD status
|
||||||
|
*/
|
||||||
|
USBD_StatusTypeDef USBD_LL_OpenEP(USBD_HandleTypeDef *pdev, uint8_t ep_addr, uint8_t ep_type, uint16_t ep_mps)
|
||||||
|
{
|
||||||
|
HAL_StatusTypeDef hal_status = HAL_OK;
|
||||||
|
USBD_StatusTypeDef usb_status = USBD_OK;
|
||||||
|
|
||||||
|
hal_status = HAL_PCD_EP_Open(pdev->pData, ep_addr, ep_mps, ep_type);
|
||||||
|
|
||||||
|
usb_status = USBD_Get_USB_Status(hal_status);
|
||||||
|
|
||||||
|
return usb_status;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Closes an endpoint of the low level driver.
|
||||||
|
* @param pdev: Device handle
|
||||||
|
* @param ep_addr: Endpoint number
|
||||||
|
* @retval USBD status
|
||||||
|
*/
|
||||||
|
USBD_StatusTypeDef USBD_LL_CloseEP(USBD_HandleTypeDef *pdev, uint8_t ep_addr)
|
||||||
|
{
|
||||||
|
HAL_StatusTypeDef hal_status = HAL_OK;
|
||||||
|
USBD_StatusTypeDef usb_status = USBD_OK;
|
||||||
|
|
||||||
|
hal_status = HAL_PCD_EP_Close(pdev->pData, ep_addr);
|
||||||
|
|
||||||
|
usb_status = USBD_Get_USB_Status(hal_status);
|
||||||
|
|
||||||
|
return usb_status;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Flushes an endpoint of the Low Level Driver.
|
||||||
|
* @param pdev: Device handle
|
||||||
|
* @param ep_addr: Endpoint number
|
||||||
|
* @retval USBD status
|
||||||
|
*/
|
||||||
|
USBD_StatusTypeDef USBD_LL_FlushEP(USBD_HandleTypeDef *pdev, uint8_t ep_addr)
|
||||||
|
{
|
||||||
|
HAL_StatusTypeDef hal_status = HAL_OK;
|
||||||
|
USBD_StatusTypeDef usb_status = USBD_OK;
|
||||||
|
|
||||||
|
hal_status = HAL_PCD_EP_Flush(pdev->pData, ep_addr);
|
||||||
|
|
||||||
|
usb_status = USBD_Get_USB_Status(hal_status);
|
||||||
|
|
||||||
|
return usb_status;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Sets a Stall condition on an endpoint of the Low Level Driver.
|
||||||
|
* @param pdev: Device handle
|
||||||
|
* @param ep_addr: Endpoint number
|
||||||
|
* @retval USBD status
|
||||||
|
*/
|
||||||
|
USBD_StatusTypeDef USBD_LL_StallEP(USBD_HandleTypeDef *pdev, uint8_t ep_addr)
|
||||||
|
{
|
||||||
|
HAL_StatusTypeDef hal_status = HAL_OK;
|
||||||
|
USBD_StatusTypeDef usb_status = USBD_OK;
|
||||||
|
|
||||||
|
hal_status = HAL_PCD_EP_SetStall(pdev->pData, ep_addr);
|
||||||
|
|
||||||
|
usb_status = USBD_Get_USB_Status(hal_status);
|
||||||
|
|
||||||
|
return usb_status;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Clears a Stall condition on an endpoint of the Low Level Driver.
|
||||||
|
* @param pdev: Device handle
|
||||||
|
* @param ep_addr: Endpoint number
|
||||||
|
* @retval USBD status
|
||||||
|
*/
|
||||||
|
USBD_StatusTypeDef USBD_LL_ClearStallEP(USBD_HandleTypeDef *pdev, uint8_t ep_addr)
|
||||||
|
{
|
||||||
|
HAL_StatusTypeDef hal_status = HAL_OK;
|
||||||
|
USBD_StatusTypeDef usb_status = USBD_OK;
|
||||||
|
|
||||||
|
hal_status = HAL_PCD_EP_ClrStall(pdev->pData, ep_addr);
|
||||||
|
|
||||||
|
usb_status = USBD_Get_USB_Status(hal_status);
|
||||||
|
|
||||||
|
return usb_status;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Returns Stall condition.
|
||||||
|
* @param pdev: Device handle
|
||||||
|
* @param ep_addr: Endpoint number
|
||||||
|
* @retval Stall (1: Yes, 0: No)
|
||||||
|
*/
|
||||||
|
uint8_t USBD_LL_IsStallEP(USBD_HandleTypeDef *pdev, uint8_t ep_addr)
|
||||||
|
{
|
||||||
|
PCD_HandleTypeDef *hpcd = (PCD_HandleTypeDef*) pdev->pData;
|
||||||
|
|
||||||
|
if((ep_addr & 0x80) == 0x80)
|
||||||
|
{
|
||||||
|
return hpcd->IN_ep[ep_addr & 0x7F].is_stall;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return hpcd->OUT_ep[ep_addr & 0x7F].is_stall;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Assigns a USB address to the device.
|
||||||
|
* @param pdev: Device handle
|
||||||
|
* @param dev_addr: Device address
|
||||||
|
* @retval USBD status
|
||||||
|
*/
|
||||||
|
USBD_StatusTypeDef USBD_LL_SetUSBAddress(USBD_HandleTypeDef *pdev, uint8_t dev_addr)
|
||||||
|
{
|
||||||
|
HAL_StatusTypeDef hal_status = HAL_OK;
|
||||||
|
USBD_StatusTypeDef usb_status = USBD_OK;
|
||||||
|
|
||||||
|
hal_status = HAL_PCD_SetAddress(pdev->pData, dev_addr);
|
||||||
|
|
||||||
|
usb_status = USBD_Get_USB_Status(hal_status);
|
||||||
|
|
||||||
|
return usb_status;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Transmits data over an endpoint.
|
||||||
|
* @param pdev: Device handle
|
||||||
|
* @param ep_addr: Endpoint number
|
||||||
|
* @param pbuf: Pointer to data to be sent
|
||||||
|
* @param size: Data size
|
||||||
|
* @retval USBD status
|
||||||
|
*/
|
||||||
|
USBD_StatusTypeDef USBD_LL_Transmit(USBD_HandleTypeDef *pdev, uint8_t ep_addr, uint8_t *pbuf, uint16_t size)
|
||||||
|
{
|
||||||
|
HAL_StatusTypeDef hal_status = HAL_OK;
|
||||||
|
USBD_StatusTypeDef usb_status = USBD_OK;
|
||||||
|
|
||||||
|
hal_status = HAL_PCD_EP_Transmit(pdev->pData, ep_addr, pbuf, size);
|
||||||
|
|
||||||
|
usb_status = USBD_Get_USB_Status(hal_status);
|
||||||
|
|
||||||
|
return usb_status;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Prepares an endpoint for reception.
|
||||||
|
* @param pdev: Device handle
|
||||||
|
* @param ep_addr: Endpoint number
|
||||||
|
* @param pbuf: Pointer to data to be received
|
||||||
|
* @param size: Data size
|
||||||
|
* @retval USBD status
|
||||||
|
*/
|
||||||
|
USBD_StatusTypeDef USBD_LL_PrepareReceive(USBD_HandleTypeDef *pdev, uint8_t ep_addr, uint8_t *pbuf, uint16_t size)
|
||||||
|
{
|
||||||
|
HAL_StatusTypeDef hal_status = HAL_OK;
|
||||||
|
USBD_StatusTypeDef usb_status = USBD_OK;
|
||||||
|
|
||||||
|
hal_status = HAL_PCD_EP_Receive(pdev->pData, ep_addr, pbuf, size);
|
||||||
|
|
||||||
|
usb_status = USBD_Get_USB_Status(hal_status);
|
||||||
|
|
||||||
|
return usb_status;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Returns the last transferred packet size.
|
||||||
|
* @param pdev: Device handle
|
||||||
|
* @param ep_addr: Endpoint number
|
||||||
|
* @retval Received Data Size
|
||||||
|
*/
|
||||||
|
uint32_t USBD_LL_GetRxDataSize(USBD_HandleTypeDef *pdev, uint8_t ep_addr)
|
||||||
|
{
|
||||||
|
return HAL_PCD_EP_GetRxCount((PCD_HandleTypeDef*) pdev->pData, ep_addr);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Delays routine for the USB device library.
|
||||||
|
* @param Delay: Delay in ms
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
void USBD_LL_Delay(uint32_t Delay)
|
||||||
|
{
|
||||||
|
HAL_Delay(Delay);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Static single allocation.
|
||||||
|
* @param size: Size of allocated memory
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
void *USBD_static_malloc(uint32_t size)
|
||||||
|
{
|
||||||
|
static uint32_t mem[(sizeof(USBD_CDC_HandleTypeDef)/4)+1];/* On 32-bit boundary */
|
||||||
|
return mem;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Dummy memory free
|
||||||
|
* @param p: Pointer to allocated memory address
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
void USBD_static_free(void *p)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Software Device Connection
|
||||||
|
* @param hpcd: PCD handle
|
||||||
|
* @param state: Connection state (0: disconnected / 1: connected)
|
||||||
|
* @retval None
|
||||||
|
*/
|
||||||
|
#if (USE_HAL_PCD_REGISTER_CALLBACKS == 1U)
|
||||||
|
static void PCDEx_SetConnectionState(PCD_HandleTypeDef *hpcd, uint8_t state)
|
||||||
|
#else
|
||||||
|
void HAL_PCDEx_SetConnectionState(PCD_HandleTypeDef *hpcd, uint8_t state)
|
||||||
|
#endif /* USE_HAL_PCD_REGISTER_CALLBACKS */
|
||||||
|
{
|
||||||
|
/* USER CODE BEGIN 6 */
|
||||||
|
if (state == 1)
|
||||||
|
{
|
||||||
|
/* Configure Low connection state. */
|
||||||
|
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* Configure High connection state. */
|
||||||
|
|
||||||
|
}
|
||||||
|
/* USER CODE END 6 */
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Returns the USB status depending on the HAL status:
|
||||||
|
* @param hal_status: HAL status
|
||||||
|
* @retval USB status
|
||||||
|
*/
|
||||||
|
USBD_StatusTypeDef USBD_Get_USB_Status(HAL_StatusTypeDef hal_status)
|
||||||
|
{
|
||||||
|
USBD_StatusTypeDef usb_status = USBD_OK;
|
||||||
|
|
||||||
|
switch (hal_status)
|
||||||
|
{
|
||||||
|
case HAL_OK :
|
||||||
|
usb_status = USBD_OK;
|
||||||
|
break;
|
||||||
|
case HAL_ERROR :
|
||||||
|
usb_status = USBD_FAIL;
|
||||||
|
break;
|
||||||
|
case HAL_BUSY :
|
||||||
|
usb_status = USBD_BUSY;
|
||||||
|
break;
|
||||||
|
case HAL_TIMEOUT :
|
||||||
|
usb_status = USBD_FAIL;
|
||||||
|
break;
|
||||||
|
default :
|
||||||
|
usb_status = USBD_FAIL;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return usb_status;
|
||||||
|
}
|
||||||
175
USB_DEVICE/Target/usbd_conf.h
Normal file
175
USB_DEVICE/Target/usbd_conf.h
Normal file
@@ -0,0 +1,175 @@
|
|||||||
|
/* USER CODE BEGIN Header */
|
||||||
|
/**
|
||||||
|
******************************************************************************
|
||||||
|
* @file : usbd_conf.h
|
||||||
|
* @version : v2.0_Cube
|
||||||
|
* @brief : Header for usbd_conf.c file.
|
||||||
|
******************************************************************************
|
||||||
|
* @attention
|
||||||
|
*
|
||||||
|
* Copyright (c) 2026 STMicroelectronics.
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* This software is licensed under terms that can be found in the LICENSE file
|
||||||
|
* in the root directory of this software component.
|
||||||
|
* If no LICENSE file comes with this software, it is provided AS-IS.
|
||||||
|
*
|
||||||
|
******************************************************************************
|
||||||
|
*/
|
||||||
|
/* USER CODE END Header */
|
||||||
|
|
||||||
|
/* Define to prevent recursive inclusion -------------------------------------*/
|
||||||
|
#ifndef __USBD_CONF__H__
|
||||||
|
#define __USBD_CONF__H__
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Includes ------------------------------------------------------------------*/
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include "main.h"
|
||||||
|
#include "stm32f1xx.h"
|
||||||
|
#include "stm32f1xx_hal.h"
|
||||||
|
|
||||||
|
/* USER CODE BEGIN INCLUDE */
|
||||||
|
|
||||||
|
/* USER CODE END INCLUDE */
|
||||||
|
|
||||||
|
/** @addtogroup USBD_OTG_DRIVER
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @defgroup USBD_CONF USBD_CONF
|
||||||
|
* @brief Configuration file for Usb otg low level driver.
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @defgroup USBD_CONF_Exported_Variables USBD_CONF_Exported_Variables
|
||||||
|
* @brief Public variables.
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @defgroup USBD_CONF_Exported_Defines USBD_CONF_Exported_Defines
|
||||||
|
* @brief Defines for configuration of the Usb device.
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*---------- -----------*/
|
||||||
|
#define USBD_MAX_NUM_INTERFACES 1
|
||||||
|
/*---------- -----------*/
|
||||||
|
#define USBD_MAX_NUM_CONFIGURATION 1
|
||||||
|
/*---------- -----------*/
|
||||||
|
#define USBD_MAX_STR_DESC_SIZ 128
|
||||||
|
/*---------- -----------*/
|
||||||
|
#define USBD_DEBUG_LEVEL 0
|
||||||
|
/*---------- -----------*/
|
||||||
|
#define USBD_SELF_POWERED 1
|
||||||
|
/*---------- -----------*/
|
||||||
|
#define MAX_STATIC_ALLOC_SIZE 512
|
||||||
|
|
||||||
|
/****************************************/
|
||||||
|
/* #define for FS and HS identification */
|
||||||
|
#define DEVICE_FS 0
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @defgroup USBD_CONF_Exported_Macros USBD_CONF_Exported_Macros
|
||||||
|
* @brief Aliases.
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Memory management macros */
|
||||||
|
|
||||||
|
/** Alias for memory allocation. */
|
||||||
|
#define USBD_malloc (uint32_t *)USBD_static_malloc
|
||||||
|
|
||||||
|
/** Alias for memory release. */
|
||||||
|
#define USBD_free USBD_static_free
|
||||||
|
|
||||||
|
/** Alias for memory set. */
|
||||||
|
#define USBD_memset /* Not used */
|
||||||
|
|
||||||
|
/** Alias for memory copy. */
|
||||||
|
#define USBD_memcpy /* Not used */
|
||||||
|
|
||||||
|
/** Alias for delay. */
|
||||||
|
#define USBD_Delay HAL_Delay
|
||||||
|
|
||||||
|
/* For footprint reasons and since only one allocation is handled in the HID class
|
||||||
|
driver, the malloc/free is changed into a static allocation method */
|
||||||
|
void *USBD_static_malloc(uint32_t size);
|
||||||
|
void USBD_static_free(void *p);
|
||||||
|
|
||||||
|
/* DEBUG macros */
|
||||||
|
|
||||||
|
#if (USBD_DEBUG_LEVEL > 0)
|
||||||
|
#define USBD_UsrLog(...) printf(__VA_ARGS__);\
|
||||||
|
printf("\n");
|
||||||
|
#else
|
||||||
|
#define USBD_UsrLog(...)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if (USBD_DEBUG_LEVEL > 1)
|
||||||
|
|
||||||
|
#define USBD_ErrLog(...) printf("ERROR: ") ;\
|
||||||
|
printf(__VA_ARGS__);\
|
||||||
|
printf("\n");
|
||||||
|
#else
|
||||||
|
#define USBD_ErrLog(...)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if (USBD_DEBUG_LEVEL > 2)
|
||||||
|
#define USBD_DbgLog(...) printf("DEBUG : ") ;\
|
||||||
|
printf(__VA_ARGS__);\
|
||||||
|
printf("\n");
|
||||||
|
#else
|
||||||
|
#define USBD_DbgLog(...)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @defgroup USBD_CONF_Exported_Types USBD_CONF_Exported_Types
|
||||||
|
* @brief Types.
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/** @defgroup USBD_CONF_Exported_FunctionsPrototype USBD_CONF_Exported_FunctionsPrototype
|
||||||
|
* @brief Declaration of public functions for Usb device.
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Exported functions -------------------------------------------------------*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @}
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif /* __USBD_CONF__H__ */
|
||||||
|
|
||||||
Reference in New Issue
Block a user