Compare commits
3 Commits
81c4eb79c4
...
aad3bc2280
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
aad3bc2280 | ||
|
|
58bd75f00f | ||
|
|
c28827a71f |
176
.cproject
Normal file
176
.cproject
Normal file
@ -0,0 +1,176 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<?fileVersion 4.0.0?><cproject storage_type_id="org.eclipse.cdt.core.XmlProjectDescriptionStorage">
|
||||||
|
<storageModule moduleId="org.eclipse.cdt.core.settings">
|
||||||
|
<cconfiguration id="com.st.stm32cube.ide.mcu.gnu.managedbuild.config.exe.debug.1565123513">
|
||||||
|
<storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="com.st.stm32cube.ide.mcu.gnu.managedbuild.config.exe.debug.1565123513" moduleId="org.eclipse.cdt.core.settings" name="Debug">
|
||||||
|
<externalSettings/>
|
||||||
|
<extensions>
|
||||||
|
<extension id="org.eclipse.cdt.core.ELF" point="org.eclipse.cdt.core.BinaryParser"/>
|
||||||
|
<extension id="org.eclipse.cdt.core.GASErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
|
||||||
|
<extension id="org.eclipse.cdt.core.GmakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
|
||||||
|
<extension id="org.eclipse.cdt.core.GLDErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
|
||||||
|
<extension id="org.eclipse.cdt.core.CWDLocator" point="org.eclipse.cdt.core.ErrorParser"/>
|
||||||
|
<extension id="org.eclipse.cdt.core.GCCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
|
||||||
|
</extensions>
|
||||||
|
</storageModule>
|
||||||
|
<storageModule moduleId="cdtBuildSystem" version="4.0.0">
|
||||||
|
<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.1565123513" 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.1565123513." name="/" resourcePath="">
|
||||||
|
<toolChain id="com.st.stm32cube.ide.mcu.gnu.managedbuild.toolchain.exe.debug.1682233806" 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.377797577" name="MCU" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.target_mcu" useByScannerDiscovery="true" value="STM32F103CBTx" valueType="string"/>
|
||||||
|
<option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.target_cpuid.946879396" 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.565286878" 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.37600117" 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.1822215885" 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 || STM32F103CBTx || 0 || 0 || arm-none-eabi- || ${gnu_tools_for_stm32_compiler_path} || ../Core/Inc | /Users/clement/STM32Cube/Repository/STM32Cube_FW_F1_V1.8.6/Drivers/STM32F1xx_HAL_Driver/Inc | /Users/clement/STM32Cube/Repository/STM32Cube_FW_F1_V1.8.6/Drivers/STM32F1xx_HAL_Driver/Inc/Legacy | /Users/clement/STM32Cube/Repository/STM32Cube_FW_F1_V1.8.6/Drivers/CMSIS/Device/ST/STM32F1xx/Include | /Users/clement/STM32Cube/Repository/STM32Cube_FW_F1_V1.8.6/Drivers/CMSIS/Include || || || USE_HAL_DRIVER | STM32F103xB || || Drivers | Core/Startup | Core || || || ${workspace_loc:/${ProjName}/STM32F103CBTX_FLASH.ld} || true || NonSecure || || secure_nsclib.o || || None || || || " valueType="string"/>
|
||||||
|
<option id="com.st.stm32cube.ide.mcu.debug.option.cpuclock.1725797747" superClass="com.st.stm32cube.ide.mcu.debug.option.cpuclock" useByScannerDiscovery="false" value="64" valueType="string"/>
|
||||||
|
<targetPlatform archList="all" binaryParser="org.eclipse.cdt.core.ELF" id="com.st.stm32cube.ide.mcu.gnu.managedbuild.targetplatform.2106904101" isAbstract="false" osList="all" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.targetplatform"/>
|
||||||
|
<builder buildPath="${workspace_loc:/ow-dash-cube}/Debug" id="com.st.stm32cube.ide.mcu.gnu.managedbuild.builder.1958807577" 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.909874354" 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.1942889835" 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.g3" valueType="enumerated"/>
|
||||||
|
<option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.assembler.option.definedsymbols.1372869988" name="Define symbols (-D)" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.assembler.option.definedsymbols" valueType="definedSymbols">
|
||||||
|
<listOptionValue builtIn="false" value="DEBUG"/>
|
||||||
|
</option>
|
||||||
|
<inputType id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.assembler.input.684650402" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.assembler.input"/>
|
||||||
|
</tool>
|
||||||
|
<tool id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.1505672245" 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.358589622" 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.646593921" name="Optimization level" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.option.optimization.level" useByScannerDiscovery="false"/>
|
||||||
|
<option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.option.definedsymbols.1821810106" 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="USE_HAL_DRIVER"/>
|
||||||
|
<listOptionValue builtIn="false" value="STM32F103xB"/>
|
||||||
|
</option>
|
||||||
|
<option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.option.includepaths.543946164" 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="/Users/clement/STM32Cube/Repository/STM32Cube_FW_F1_V1.8.6/Drivers/STM32F1xx_HAL_Driver/Inc"/>
|
||||||
|
<listOptionValue builtIn="false" value="/Users/clement/STM32Cube/Repository/STM32Cube_FW_F1_V1.8.6/Drivers/STM32F1xx_HAL_Driver/Inc/Legacy"/>
|
||||||
|
<listOptionValue builtIn="false" value="/Users/clement/STM32Cube/Repository/STM32Cube_FW_F1_V1.8.6/Drivers/CMSIS/Device/ST/STM32F1xx/Include"/>
|
||||||
|
<listOptionValue builtIn="false" value="/Users/clement/STM32Cube/Repository/STM32Cube_FW_F1_V1.8.6/Drivers/CMSIS/Include"/>
|
||||||
|
</option>
|
||||||
|
<inputType id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.input.c.681460478" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.input.c"/>
|
||||||
|
</tool>
|
||||||
|
<tool id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.cpp.compiler.1583192378" 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.450991185" 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.344780574" name="Optimization level" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.cpp.compiler.option.optimization.level" useByScannerDiscovery="false"/>
|
||||||
|
</tool>
|
||||||
|
<tool id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.linker.629385687" 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.1808646108" name="Linker Script (-T)" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.linker.option.script" value="${workspace_loc:/${ProjName}/STM32F103CBTX_FLASH.ld}" valueType="string"/>
|
||||||
|
<inputType id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.linker.input.1543509652" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.linker.input">
|
||||||
|
<additionalInput kind="additionalinputdependency" paths="$(USER_OBJS)"/>
|
||||||
|
<additionalInput kind="additionalinput" paths="$(LIBS)"/>
|
||||||
|
</inputType>
|
||||||
|
</tool>
|
||||||
|
<tool id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.cpp.linker.712206492" name="MCU/MPU G++ Linker" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.cpp.linker"/>
|
||||||
|
<tool id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.archiver.1408736742" name="MCU/MPU GCC Archiver" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.archiver"/>
|
||||||
|
<tool id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.size.939336466" name="MCU Size" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.size"/>
|
||||||
|
<tool id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.objdump.listfile.829977769" name="MCU Output Converter list file" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.objdump.listfile"/>
|
||||||
|
<tool id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.objcopy.hex.1367919544" name="MCU Output Converter Hex" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.objcopy.hex"/>
|
||||||
|
<tool id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.objcopy.binary.1500475366" name="MCU Output Converter Binary" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.objcopy.binary"/>
|
||||||
|
<tool id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.objcopy.verilog.1796006548" name="MCU Output Converter Verilog" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.objcopy.verilog"/>
|
||||||
|
<tool id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.objcopy.srec.2041626736" name="MCU Output Converter Motorola S-rec" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.objcopy.srec"/>
|
||||||
|
<tool id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.objcopy.symbolsrec.664120032" name="MCU Output Converter Motorola S-rec with symbols" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.objcopy.symbolsrec"/>
|
||||||
|
</toolChain>
|
||||||
|
</folderInfo>
|
||||||
|
<sourceEntries>
|
||||||
|
<entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="Core"/>
|
||||||
|
<entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="Drivers"/>
|
||||||
|
</sourceEntries>
|
||||||
|
</configuration>
|
||||||
|
</storageModule>
|
||||||
|
<storageModule moduleId="org.eclipse.cdt.core.externalSettings"/>
|
||||||
|
</cconfiguration>
|
||||||
|
<cconfiguration id="com.st.stm32cube.ide.mcu.gnu.managedbuild.config.exe.release.2010124864">
|
||||||
|
<storageModule buildSystemId="org.eclipse.cdt.managedbuilder.core.configurationDataProvider" id="com.st.stm32cube.ide.mcu.gnu.managedbuild.config.exe.release.2010124864" moduleId="org.eclipse.cdt.core.settings" name="Release">
|
||||||
|
<externalSettings/>
|
||||||
|
<extensions>
|
||||||
|
<extension id="org.eclipse.cdt.core.ELF" point="org.eclipse.cdt.core.BinaryParser"/>
|
||||||
|
<extension id="org.eclipse.cdt.core.GASErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
|
||||||
|
<extension id="org.eclipse.cdt.core.GmakeErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
|
||||||
|
<extension id="org.eclipse.cdt.core.GLDErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
|
||||||
|
<extension id="org.eclipse.cdt.core.CWDLocator" point="org.eclipse.cdt.core.ErrorParser"/>
|
||||||
|
<extension id="org.eclipse.cdt.core.GCCErrorParser" point="org.eclipse.cdt.core.ErrorParser"/>
|
||||||
|
</extensions>
|
||||||
|
</storageModule>
|
||||||
|
<storageModule moduleId="cdtBuildSystem" version="4.0.0">
|
||||||
|
<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.2010124864" 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.2010124864." name="/" resourcePath="">
|
||||||
|
<toolChain id="com.st.stm32cube.ide.mcu.gnu.managedbuild.toolchain.exe.release.1996682977" 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.1015202491" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.target_mcu" useByScannerDiscovery="true" value="STM32F103CBTx" valueType="string"/>
|
||||||
|
<option id="com.st.stm32cube.ide.mcu.gnu.managedbuild.option.target_cpuid.1177527638" 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.41017139" 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.346353224" 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.204008112" 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 || STM32F103CBTx || 0 || 0 || arm-none-eabi- || ${gnu_tools_for_stm32_compiler_path} || ../Core/Inc | /Users/clement/STM32Cube/Repository/STM32Cube_FW_F1_V1.8.6/Drivers/STM32F1xx_HAL_Driver/Inc | /Users/clement/STM32Cube/Repository/STM32Cube_FW_F1_V1.8.6/Drivers/STM32F1xx_HAL_Driver/Inc/Legacy | /Users/clement/STM32Cube/Repository/STM32Cube_FW_F1_V1.8.6/Drivers/CMSIS/Device/ST/STM32F1xx/Include | /Users/clement/STM32Cube/Repository/STM32Cube_FW_F1_V1.8.6/Drivers/CMSIS/Include || || || USE_HAL_DRIVER | STM32F103xB || || Drivers | Core/Startup | Core || || || ${workspace_loc:/${ProjName}/STM32F103CBTX_FLASH.ld} || true || NonSecure || || secure_nsclib.o || || None || || || " valueType="string"/>
|
||||||
|
<option id="com.st.stm32cube.ide.mcu.debug.option.cpuclock.1851993780" superClass="com.st.stm32cube.ide.mcu.debug.option.cpuclock" useByScannerDiscovery="false" value="64" valueType="string"/>
|
||||||
|
<targetPlatform archList="all" binaryParser="org.eclipse.cdt.core.ELF" id="com.st.stm32cube.ide.mcu.gnu.managedbuild.targetplatform.423977139" isAbstract="false" osList="all" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.targetplatform"/>
|
||||||
|
<builder buildPath="${workspace_loc:/ow-dash-cube}/Release" id="com.st.stm32cube.ide.mcu.gnu.managedbuild.builder.12974942" managedBuildOn="true" name="Gnu Make Builder.Release" parallelBuildOn="true" parallelizationNumber="optimal" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.builder"/>
|
||||||
|
<tool id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.assembler.147359294" 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.184360309" 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.1802112648" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.assembler.input"/>
|
||||||
|
</tool>
|
||||||
|
<tool id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.1995662216" 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.1591594808" 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.5550489" 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.729264445" 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="STM32F103xB"/>
|
||||||
|
</option>
|
||||||
|
<option IS_BUILTIN_EMPTY="false" IS_VALUE_EMPTY="false" id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.option.includepaths.877492354" 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="/Users/clement/STM32Cube/Repository/STM32Cube_FW_F1_V1.8.6/Drivers/STM32F1xx_HAL_Driver/Inc"/>
|
||||||
|
<listOptionValue builtIn="false" value="/Users/clement/STM32Cube/Repository/STM32Cube_FW_F1_V1.8.6/Drivers/STM32F1xx_HAL_Driver/Inc/Legacy"/>
|
||||||
|
<listOptionValue builtIn="false" value="/Users/clement/STM32Cube/Repository/STM32Cube_FW_F1_V1.8.6/Drivers/CMSIS/Device/ST/STM32F1xx/Include"/>
|
||||||
|
<listOptionValue builtIn="false" value="/Users/clement/STM32Cube/Repository/STM32Cube_FW_F1_V1.8.6/Drivers/CMSIS/Include"/>
|
||||||
|
</option>
|
||||||
|
<inputType id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.input.c.648640408" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.input.c"/>
|
||||||
|
</tool>
|
||||||
|
<tool id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.cpp.compiler.30520216" 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.94668465" 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.1491875658" 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 id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.linker.69987060" 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.1678081859" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.linker.option.script" value="${workspace_loc:/${ProjName}/STM32F103CBTX_FLASH.ld}" valueType="string"/>
|
||||||
|
<inputType id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.linker.input.1983013067" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.linker.input">
|
||||||
|
<additionalInput kind="additionalinputdependency" paths="$(USER_OBJS)"/>
|
||||||
|
<additionalInput kind="additionalinput" paths="$(LIBS)"/>
|
||||||
|
</inputType>
|
||||||
|
</tool>
|
||||||
|
<tool id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.cpp.linker.118066555" name="MCU/MPU G++ Linker" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.cpp.linker"/>
|
||||||
|
<tool id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.archiver.730565657" name="MCU/MPU GCC Archiver" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.archiver"/>
|
||||||
|
<tool id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.size.1241518625" name="MCU Size" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.size"/>
|
||||||
|
<tool id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.objdump.listfile.549240701" name="MCU Output Converter list file" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.objdump.listfile"/>
|
||||||
|
<tool id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.objcopy.hex.623840433" name="MCU Output Converter Hex" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.objcopy.hex"/>
|
||||||
|
<tool id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.objcopy.binary.580579964" name="MCU Output Converter Binary" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.objcopy.binary"/>
|
||||||
|
<tool id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.objcopy.verilog.475775050" name="MCU Output Converter Verilog" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.objcopy.verilog"/>
|
||||||
|
<tool id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.objcopy.srec.622748416" name="MCU Output Converter Motorola S-rec" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.objcopy.srec"/>
|
||||||
|
<tool id="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.objcopy.symbolsrec.550040700" name="MCU Output Converter Motorola S-rec with symbols" superClass="com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.objcopy.symbolsrec"/>
|
||||||
|
</toolChain>
|
||||||
|
</folderInfo>
|
||||||
|
<sourceEntries>
|
||||||
|
<entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="Core"/>
|
||||||
|
<entry flags="VALUE_WORKSPACE_PATH|RESOLVED" kind="sourcePath" name="Drivers"/>
|
||||||
|
</sourceEntries>
|
||||||
|
</configuration>
|
||||||
|
</storageModule>
|
||||||
|
<storageModule moduleId="org.eclipse.cdt.core.externalSettings"/>
|
||||||
|
</cconfiguration>
|
||||||
|
</storageModule>
|
||||||
|
<storageModule moduleId="cdtBuildSystem" version="4.0.0">
|
||||||
|
<project id="ow-dash-cube.null.1250130553" name="ow-dash-cube"/>
|
||||||
|
</storageModule>
|
||||||
|
<storageModule moduleId="org.eclipse.cdt.core.LanguageSettingsProviders"/>
|
||||||
|
<storageModule moduleId="scannerConfiguration">
|
||||||
|
<autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId=""/>
|
||||||
|
<scannerConfigBuildInfo instanceId="com.st.stm32cube.ide.mcu.gnu.managedbuild.config.exe.release.2010124864;com.st.stm32cube.ide.mcu.gnu.managedbuild.config.exe.release.2010124864.;com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.1995662216;com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.input.c.648640408">
|
||||||
|
<autodiscovery enabled="false" problemReportingEnabled="true" selectedProfileId=""/>
|
||||||
|
</scannerConfigBuildInfo>
|
||||||
|
<scannerConfigBuildInfo instanceId="com.st.stm32cube.ide.mcu.gnu.managedbuild.config.exe.release.1974040388;com.st.stm32cube.ide.mcu.gnu.managedbuild.config.exe.release.1974040388.;com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.1164461866;com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.input.c.612795553">
|
||||||
|
<autodiscovery enabled="false" problemReportingEnabled="true" selectedProfileId=""/>
|
||||||
|
</scannerConfigBuildInfo>
|
||||||
|
<scannerConfigBuildInfo instanceId="com.st.stm32cube.ide.mcu.gnu.managedbuild.config.exe.debug.1821865840;com.st.stm32cube.ide.mcu.gnu.managedbuild.config.exe.debug.1821865840.;com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.1799147452;com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.input.c.1891004943">
|
||||||
|
<autodiscovery enabled="false" problemReportingEnabled="true" selectedProfileId=""/>
|
||||||
|
</scannerConfigBuildInfo>
|
||||||
|
<scannerConfigBuildInfo instanceId="com.st.stm32cube.ide.mcu.gnu.managedbuild.config.exe.debug.1565123513;com.st.stm32cube.ide.mcu.gnu.managedbuild.config.exe.debug.1565123513.;com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.1505672245;com.st.stm32cube.ide.mcu.gnu.managedbuild.tool.c.compiler.input.c.681460478">
|
||||||
|
<autodiscovery enabled="false" problemReportingEnabled="true" selectedProfileId=""/>
|
||||||
|
</scannerConfigBuildInfo>
|
||||||
|
</storageModule>
|
||||||
|
</cproject>
|
||||||
@ -1,6 +1,6 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
<project>
|
<project>
|
||||||
<configuration id="com.st.stm32cube.ide.mcu.gnu.managedbuild.config.exe.debug.1821865840" name="Debug">
|
<configuration id="com.st.stm32cube.ide.mcu.gnu.managedbuild.config.exe.debug.1565123513" name="Debug">
|
||||||
<extension point="org.eclipse.cdt.core.LanguageSettingsProvider">
|
<extension point="org.eclipse.cdt.core.LanguageSettingsProvider">
|
||||||
<provider copy-of="extension" id="org.eclipse.cdt.ui.UserLanguageSettingsProvider"/>
|
<provider copy-of="extension" id="org.eclipse.cdt.ui.UserLanguageSettingsProvider"/>
|
||||||
<provider-reference id="org.eclipse.cdt.core.ReferencedProjectsLanguageSettingsProvider" ref="shared-provider"/>
|
<provider-reference id="org.eclipse.cdt.core.ReferencedProjectsLanguageSettingsProvider" ref="shared-provider"/>
|
||||||
@ -11,7 +11,7 @@
|
|||||||
</provider>
|
</provider>
|
||||||
</extension>
|
</extension>
|
||||||
</configuration>
|
</configuration>
|
||||||
<configuration id="com.st.stm32cube.ide.mcu.gnu.managedbuild.config.exe.release.1974040388" name="Release">
|
<configuration id="com.st.stm32cube.ide.mcu.gnu.managedbuild.config.exe.release.2010124864" name="Release">
|
||||||
<extension point="org.eclipse.cdt.core.LanguageSettingsProvider">
|
<extension point="org.eclipse.cdt.core.LanguageSettingsProvider">
|
||||||
<provider copy-of="extension" id="org.eclipse.cdt.ui.UserLanguageSettingsProvider"/>
|
<provider copy-of="extension" id="org.eclipse.cdt.ui.UserLanguageSettingsProvider"/>
|
||||||
<provider-reference id="org.eclipse.cdt.core.ReferencedProjectsLanguageSettingsProvider" ref="shared-provider"/>
|
<provider-reference id="org.eclipse.cdt.core.ReferencedProjectsLanguageSettingsProvider" ref="shared-provider"/>
|
||||||
|
|||||||
@ -28,8 +28,8 @@
|
|||||||
|
|
||||||
#define SPI1_BASEDR_ADR SPI1_BASE //adresse du reg SPI3 DR pour acces 8 bits (defs std permet accès 16bits seulement)
|
#define SPI1_BASEDR_ADR SPI1_BASE //adresse du reg SPI3 DR pour acces 8 bits (defs std permet accès 16bits seulement)
|
||||||
|
|
||||||
#define LCD_SCREEN_HEIGHT 320
|
#define LCD_SCREEN_HEIGHT 282 // ST7365 is 320 (centered, offset = 19)
|
||||||
#define LCD_SCREEN_WIDTH 480
|
#define LCD_SCREEN_WIDTH 470 // ST7365 is 480 (aligned at the left, offset = 10)
|
||||||
|
|
||||||
//CHIP SELECT PIN AND PORT, STANDARD GPIO
|
//CHIP SELECT PIN AND PORT, STANDARD GPIO
|
||||||
#define LCD_CS_PIN (1<<8)
|
#define LCD_CS_PIN (1<<8)
|
||||||
|
|||||||
@ -31,7 +31,6 @@ extern "C" {
|
|||||||
|
|
||||||
/* Private includes ----------------------------------------------------------*/
|
/* Private includes ----------------------------------------------------------*/
|
||||||
/* USER CODE BEGIN Includes */
|
/* USER CODE BEGIN Includes */
|
||||||
#include "LCD_driver.h"
|
|
||||||
|
|
||||||
/* USER CODE END Includes */
|
/* USER CODE END Includes */
|
||||||
|
|
||||||
|
|||||||
@ -65,47 +65,41 @@ volatile uint16_t LCD_WIDTH = LCD_SCREEN_WIDTH;
|
|||||||
// SPI3->CR1 |= SPI_CR1_SPE;
|
// SPI3->CR1 |= SPI_CR1_SPE;
|
||||||
//
|
//
|
||||||
//}
|
//}
|
||||||
|
|
||||||
/* Send command (char) to LCD via SPI bus */
|
/* Send command (char) to LCD via SPI bus */
|
||||||
void LCD_Write_Command(uint8_t Command) {
|
void LCD_Write_Command(uint8_t Command) {
|
||||||
|
while ((SPI1->SR & SPI_SR_BSY) != 0);
|
||||||
CMD
|
CMD
|
||||||
;
|
;
|
||||||
//CS_ON;
|
while ((SPI1->SR & SPI_SR_TXE) == 0);
|
||||||
while ((SPI1->SR & SPI_SR_TXE) == 0);// Waiting for TX register to be available.
|
|
||||||
SPI1->DR = Command;// Cast sur pointeur, pour ecriture 8 bits. Sinon l'acces 16 bits provoque un tfert 16 bits
|
SPI1->DR = Command;// Cast sur pointeur, pour ecriture 8 bits. Sinon l'acces 16 bits provoque un tfert 16 bits
|
||||||
//while ((SPI1->SR & SPI_SR_BSY) != 0); //Attendre fin envoi trame (cf RM P1289)
|
|
||||||
//CS_OFF;
|
|
||||||
}
|
}
|
||||||
/* Send Data (char) to LCD via SPI bus */
|
/* Send Data (char) to LCD via SPI bus */
|
||||||
void LCD_Write_Data(uint8_t Data) {
|
void LCD_Write_Data(uint8_t Data) {
|
||||||
|
while ((SPI1->SR & SPI_SR_BSY) != 0);//Attendre fin envoi trame
|
||||||
DATA
|
DATA
|
||||||
;
|
;
|
||||||
//CS_ON;
|
|
||||||
while ((SPI1->SR & SPI_SR_TXE) == 0);// Waiting for TX register to be available.
|
while ((SPI1->SR & SPI_SR_TXE) == 0);// Waiting for TX register to be available.
|
||||||
SPI1->DR = Data;
|
SPI1->DR = Data;
|
||||||
//while ((SPI1->SR & SPI_SR_BSY) != 0); //Attendre fin envoi trame (cf RM P1289)
|
|
||||||
//CS_OFF;
|
|
||||||
}
|
}
|
||||||
/* Send Data (char) to LCD via SPI bus */
|
void LCD_Write_Data16(uint16_t data) {
|
||||||
void LCD_Write_Data16(uint16_t Data) {
|
while ((SPI1->SR & SPI_SR_BSY) != 0);// Wait until SPI is not busy
|
||||||
DATA
|
DATA
|
||||||
;
|
;
|
||||||
//CS_ON;
|
while ((SPI1->SR & SPI_SR_TXE) == 0);// Wait for TX buffer empty
|
||||||
while ((SPI1->SR & SPI_SR_TXE) == 0);// Waiting for TX register to be available.
|
SPI1->DR = (data >> 8) & 0xFF;// Send MSB
|
||||||
SPI1->DR = Data;
|
while ((SPI1->SR & SPI_SR_TXE) == 0);// Wait for TX buffer empty
|
||||||
//while ((SPI1->SR & SPI_SR_BSY) != 0); //Attendre fin envoi trame (cf RM P1289)
|
SPI1->DR = data & 0xFF;// Send LSB
|
||||||
//CS_OFF;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Set the frame to draw into and sends a write into frame command */
|
/* Set the frame to draw into and sends a write into frame command */
|
||||||
void LCD_Set_Address(uint16_t X1, uint16_t Y1, uint16_t X2, uint16_t Y2) {
|
void LCD_Set_Address(uint16_t X1, uint16_t Y1, uint16_t X2, uint16_t Y2) {
|
||||||
LCD_Write_Command(0x2A);
|
LCD_Write_Command(0x2A);
|
||||||
LCD_Write_Data(X1);
|
LCD_Write_Data16(X1 + 10);
|
||||||
LCD_Write_Data(X2);
|
LCD_Write_Data16(X2 + 10);
|
||||||
|
|
||||||
LCD_Write_Command(0x2B);
|
LCD_Write_Command(0x2B);
|
||||||
LCD_Write_Data(Y1);
|
LCD_Write_Data16(Y1 + 19);
|
||||||
LCD_Write_Data(Y2);
|
LCD_Write_Data16(Y2 + 19);
|
||||||
|
|
||||||
LCD_Write_Command(0x2C);
|
LCD_Write_Command(0x2C);
|
||||||
}
|
}
|
||||||
@ -152,12 +146,10 @@ void LCD_HardwareReset() {
|
|||||||
|
|
||||||
void LCD_Init(void) {
|
void LCD_Init(void) {
|
||||||
|
|
||||||
//LCD_SPI_Init();
|
|
||||||
|
|
||||||
LCD_HardwareReset();
|
LCD_HardwareReset();
|
||||||
|
|
||||||
// enable spi1
|
// enable spi1
|
||||||
SPI1->CR1 |= SPI_CR1_SPE; // NSS (CS) pin is automatically pulled low
|
SPI1->CR1 |= SPI_CR1_SPE;// NSS (CS) pin is automatically pulled low
|
||||||
HAL_Delay(300);
|
HAL_Delay(300);
|
||||||
|
|
||||||
// Software reset
|
// Software reset
|
||||||
@ -169,6 +161,14 @@ void LCD_Init(void) {
|
|||||||
LCD_Write_Data(0x55);
|
LCD_Write_Data(0x55);
|
||||||
HAL_Delay(150);
|
HAL_Delay(150);
|
||||||
|
|
||||||
|
// Enable color inversion (INVON)
|
||||||
|
LCD_Write_Command(0x21);
|
||||||
|
|
||||||
|
// Configure orientation stuff
|
||||||
|
LCD_Write_Command(0x36);
|
||||||
|
LCD_Write_Data(0b10110100);
|
||||||
|
|
||||||
|
|
||||||
// Exit sleep
|
// Exit sleep
|
||||||
LCD_Write_Command(0x11);
|
LCD_Write_Command(0x11);
|
||||||
HAL_Delay(150);
|
HAL_Delay(150);
|
||||||
@ -177,9 +177,25 @@ void LCD_Init(void) {
|
|||||||
LCD_Write_Command(0x29);
|
LCD_Write_Command(0x29);
|
||||||
HAL_Delay(400);
|
HAL_Delay(400);
|
||||||
|
|
||||||
|
// Fill white
|
||||||
LCD_Fill_Screen(WHITE);
|
LCD_Fill_Screen(WHITE);
|
||||||
|
|
||||||
//LCD_Draw_Rectangle(0, 0, 10, 10, RED);
|
// Draw colors columns
|
||||||
|
LCD_Set_Address(30, 30, LCD_SCREEN_WIDTH - 30, LCD_SCREEN_HEIGHT - 30);
|
||||||
|
uint32_t size = (LCD_SCREEN_WIDTH - 59) * 20;
|
||||||
|
LCD_Draw_Colour_Burst(BLACK, size);
|
||||||
|
LCD_Draw_Colour_Burst(WHITE, size);
|
||||||
|
LCD_Draw_Colour_Burst(BLUE, size);
|
||||||
|
LCD_Draw_Colour_Burst(GREEN, size);
|
||||||
|
LCD_Draw_Colour_Burst(RED, size);
|
||||||
|
LCD_Draw_Colour_Burst(BLACK, 4 * size);
|
||||||
|
|
||||||
|
// Draw rectangles in the angles
|
||||||
|
LCD_Draw_Rectangle(1, 1, 20, 20, RED);
|
||||||
|
LCD_Draw_Rectangle(LCD_SCREEN_WIDTH - 21, 1, 20, 20, GREEN);
|
||||||
|
LCD_Draw_Rectangle(LCD_SCREEN_WIDTH - 21, LCD_SCREEN_HEIGHT - 21, 20, 20,
|
||||||
|
MAGENTA);
|
||||||
|
LCD_Draw_Rectangle(1, LCD_SCREEN_HEIGHT - 21, 20, 20, BLUE);
|
||||||
|
|
||||||
// STARTING ROTATION
|
// STARTING ROTATION
|
||||||
//LCD_Set_Rotation(SCREEN_HORIZONTAL_1);
|
//LCD_Set_Rotation(SCREEN_HORIZONTAL_1);
|
||||||
@ -187,28 +203,22 @@ void LCD_Init(void) {
|
|||||||
|
|
||||||
//INTERNAL FUNCTION OF LIBRARY
|
//INTERNAL FUNCTION OF LIBRARY
|
||||||
/*Sends block colour information to LCD*/
|
/*Sends block colour information to LCD*/
|
||||||
void LCD_Draw_Colour_Burst(uint16_t Colour, uint32_t Size) {
|
void LCD_Draw_Colour_Burst(uint16_t color, uint32_t size) {
|
||||||
short bufColour;
|
while ((SPI1->SR & SPI_SR_BSY) != 0);// Wait until SPI is not busy
|
||||||
// On envoie la même couleur sur Size pixels
|
|
||||||
bufColour = Colour >> 8;// pour le tfert dans DR en 1 seul write mais
|
|
||||||
bufColour |= Colour << 8;// en mode 8 bits, il faut inverser les octets MSB/LSB
|
|
||||||
DATA
|
DATA
|
||||||
;
|
;
|
||||||
//CS_ON;
|
for (uint32_t j = 0; j < size; j++) {
|
||||||
for (uint32_t j = 0; j < Size; j++) {
|
|
||||||
while ((SPI1->SR & SPI_SR_TXE) == 0);// Waiting for TX register to be available.
|
while ((SPI1->SR & SPI_SR_TXE) == 0);// Waiting for TX register to be available.
|
||||||
//while ((SPI3->SR & SPI_SR_TXE) == 0);//Si FIFO full (TX buffer Empty=0), on attend
|
SPI1->DR = (color >> 8) & 0xFF;
|
||||||
SPI1->DR = Colour; //bufColour;
|
while ((SPI1->SR & SPI_SR_TXE) == 0);// Waiting for TX register to be available.
|
||||||
|
SPI1->DR = color & 0xFF;
|
||||||
}
|
}
|
||||||
//while ((SPI3->SR & SPI_SR_BSY) != 0);//Attendre fin envoi trame
|
|
||||||
//CS_OFF;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//FILL THE ENTIRE SCREEN WITH SELECTED COLOUR (either #define-d ones or custom 16bit)
|
//FILL THE ENTIRE SCREEN WITH SELECTED COLOUR (either #define-d ones or custom 16bit)
|
||||||
/*Sets address (entire screen) and Sends Height*Width ammount of colour information to LCD*/
|
/*Sets address (entire screen) and Sends Height*Width ammount of colour information to LCD*/
|
||||||
void LCD_Fill_Screen(uint16_t Colour) {
|
void LCD_Fill_Screen(uint16_t color) {
|
||||||
LCD_Set_Address(0, 0, LCD_WIDTH, LCD_HEIGHT);
|
LCD_Draw_Rectangle(0, 0, LCD_WIDTH, LCD_HEIGHT, color);
|
||||||
LCD_Draw_Colour_Burst(Colour, LCD_WIDTH * LCD_HEIGHT);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//DRAW PIXEL AT XY POSITION WITH SELECTED COLOUR
|
//DRAW PIXEL AT XY POSITION WITH SELECTED COLOUR
|
||||||
@ -551,7 +561,6 @@ void LCD_Draw_Text(
|
|||||||
// while ((SPI3->SR & SPI_SR_BSY) != 0);//Attendre fin envoi trame
|
// while ((SPI3->SR & SPI_SR_BSY) != 0);//Attendre fin envoi trame
|
||||||
// CS_OFF;
|
// CS_OFF;
|
||||||
//}
|
//}
|
||||||
|
|
||||||
/*Draws a full screen picture from flash. Image converted from RGB .jpeg/other to C array using online converter*/
|
/*Draws a full screen picture from flash. Image converted from RGB .jpeg/other to C array using online converter*/
|
||||||
//USING CONVERTER: http://www.digole.com/tools/PicturetoC_Hex_converter.php
|
//USING CONVERTER: http://www.digole.com/tools/PicturetoC_Hex_converter.php
|
||||||
//65K colour (2Bytes / Pixel)
|
//65K colour (2Bytes / Pixel)
|
||||||
@ -592,4 +601,3 @@ void LCD_Draw_Text(
|
|||||||
// while ((SPI3->SR & SPI_SR_BSY) != 0);//Attendre fin envoi trame
|
// while ((SPI3->SR & SPI_SR_BSY) != 0);//Attendre fin envoi trame
|
||||||
// CS_OFF;
|
// CS_OFF;
|
||||||
//}
|
//}
|
||||||
|
|
||||||
|
|||||||
@ -21,9 +21,7 @@
|
|||||||
|
|
||||||
/* Private includes ----------------------------------------------------------*/
|
/* Private includes ----------------------------------------------------------*/
|
||||||
/* USER CODE BEGIN Includes */
|
/* USER CODE BEGIN Includes */
|
||||||
#include "LCD_driver.h"
|
|
||||||
#include "5x5_font.h"
|
|
||||||
#include "LogoIUT.h"
|
|
||||||
/* USER CODE END Includes */
|
/* USER CODE END Includes */
|
||||||
|
|
||||||
/* Private typedef -----------------------------------------------------------*/
|
/* Private typedef -----------------------------------------------------------*/
|
||||||
@ -97,16 +95,16 @@ int main(void)
|
|||||||
MX_USART1_UART_Init();
|
MX_USART1_UART_Init();
|
||||||
/* USER CODE BEGIN 2 */
|
/* USER CODE BEGIN 2 */
|
||||||
|
|
||||||
LCD_Init();
|
|
||||||
|
|
||||||
/* USER CODE END 2 */
|
/* USER CODE END 2 */
|
||||||
|
|
||||||
/* Infinite loop */
|
/* Infinite loop */
|
||||||
/* USER CODE BEGIN WHILE */
|
/* USER CODE BEGIN WHILE */
|
||||||
while (1) {
|
while (1)
|
||||||
|
{
|
||||||
HAL_Delay(1000);
|
|
||||||
LCD_Init();
|
LCD_Init();
|
||||||
|
HAL_Delay(10000);
|
||||||
|
HAL_Delay(10);
|
||||||
|
|
||||||
/* USER CODE END WHILE */
|
/* USER CODE END WHILE */
|
||||||
|
|
||||||
/* USER CODE BEGIN 3 */
|
/* USER CODE BEGIN 3 */
|
||||||
@ -171,11 +169,11 @@ static void MX_SPI1_Init(void)
|
|||||||
hspi1.Instance = SPI1;
|
hspi1.Instance = SPI1;
|
||||||
hspi1.Init.Mode = SPI_MODE_MASTER;
|
hspi1.Init.Mode = SPI_MODE_MASTER;
|
||||||
hspi1.Init.Direction = SPI_DIRECTION_2LINES;
|
hspi1.Init.Direction = SPI_DIRECTION_2LINES;
|
||||||
hspi1.Init.DataSize = SPI_DATASIZE_16BIT;
|
hspi1.Init.DataSize = SPI_DATASIZE_8BIT;
|
||||||
hspi1.Init.CLKPolarity = SPI_POLARITY_LOW;
|
hspi1.Init.CLKPolarity = SPI_POLARITY_LOW;
|
||||||
hspi1.Init.CLKPhase = SPI_PHASE_1EDGE;
|
hspi1.Init.CLKPhase = SPI_PHASE_1EDGE;
|
||||||
hspi1.Init.NSS = SPI_NSS_HARD_OUTPUT;
|
hspi1.Init.NSS = SPI_NSS_HARD_OUTPUT;
|
||||||
hspi1.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_16;
|
hspi1.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_4;
|
||||||
hspi1.Init.FirstBit = SPI_FIRSTBIT_MSB;
|
hspi1.Init.FirstBit = SPI_FIRSTBIT_MSB;
|
||||||
hspi1.Init.TIMode = SPI_TIMODE_DISABLE;
|
hspi1.Init.TIMode = SPI_TIMODE_DISABLE;
|
||||||
hspi1.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE;
|
hspi1.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE;
|
||||||
@ -322,7 +320,8 @@ void Error_Handler(void)
|
|||||||
/* USER CODE BEGIN Error_Handler_Debug */
|
/* USER CODE BEGIN Error_Handler_Debug */
|
||||||
/* User can add his own implementation to report the HAL error return state */
|
/* User can add his own implementation to report the HAL error return state */
|
||||||
__disable_irq();
|
__disable_irq();
|
||||||
while (1) {
|
while (1)
|
||||||
|
{
|
||||||
}
|
}
|
||||||
/* USER CODE END Error_Handler_Debug */
|
/* USER CODE END Error_Handler_Debug */
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,4 +1,4 @@
|
|||||||
/* USER CODE BEGIN Header */
|
/* USER CODE BEGIN */
|
||||||
/**
|
/**
|
||||||
******************************************************************************
|
******************************************************************************
|
||||||
* @file stm32f1xx_hal_msp.c
|
* @file stm32f1xx_hal_msp.c
|
||||||
@ -16,69 +16,69 @@
|
|||||||
*
|
*
|
||||||
******************************************************************************
|
******************************************************************************
|
||||||
*/
|
*/
|
||||||
/* USER CODE END Header */
|
/* USER CODE END */
|
||||||
|
|
||||||
/* Includes ------------------------------------------------------------------*/
|
/* Includes ------------------------------------------------------------------*/
|
||||||
#include "main.h"
|
#include "main.h"
|
||||||
/* USER CODE BEGIN Includes */
|
/* USER CODE BEGIN */
|
||||||
|
|
||||||
/* USER CODE END Includes */
|
/* USER CODE END */
|
||||||
|
|
||||||
/* Private typedef -----------------------------------------------------------*/
|
/* Private typedef -----------------------------------------------------------*/
|
||||||
/* USER CODE BEGIN TD */
|
/* USER CODE BEGIN */
|
||||||
|
|
||||||
/* USER CODE END TD */
|
/* USER CODE END */
|
||||||
|
|
||||||
/* Private define ------------------------------------------------------------*/
|
/* Private define ------------------------------------------------------------*/
|
||||||
/* USER CODE BEGIN Define */
|
/* USER CODE BEGIN */
|
||||||
|
|
||||||
/* USER CODE END Define */
|
/* USER CODE END */
|
||||||
|
|
||||||
/* Private macro -------------------------------------------------------------*/
|
/* Private macro -------------------------------------------------------------*/
|
||||||
/* USER CODE BEGIN Macro */
|
/* USER CODE BEGIN */
|
||||||
|
|
||||||
/* USER CODE END Macro */
|
/* USER CODE END */
|
||||||
|
|
||||||
/* Private variables ---------------------------------------------------------*/
|
/* Private variables ---------------------------------------------------------*/
|
||||||
/* USER CODE BEGIN PV */
|
/* USER CODE BEGIN */
|
||||||
|
|
||||||
/* USER CODE END PV */
|
/* USER CODE END */
|
||||||
|
|
||||||
/* Private function prototypes -----------------------------------------------*/
|
/* Private function prototypes -----------------------------------------------*/
|
||||||
/* USER CODE BEGIN PFP */
|
/* USER CODE BEGIN */
|
||||||
|
|
||||||
/* USER CODE END PFP */
|
/* USER CODE END */
|
||||||
|
|
||||||
/* External functions --------------------------------------------------------*/
|
/* External functions --------------------------------------------------------*/
|
||||||
/* USER CODE BEGIN ExternalFunctions */
|
/* USER CODE BEGIN */
|
||||||
|
|
||||||
/* USER CODE END ExternalFunctions */
|
/* USER CODE END */
|
||||||
|
|
||||||
/* USER CODE BEGIN 0 */
|
/* USER CODE BEGIN */
|
||||||
|
|
||||||
/* USER CODE END 0 */
|
/* USER CODE END */
|
||||||
/**
|
/**
|
||||||
* Initializes the Global MSP.
|
* Initializes the Global MSP.
|
||||||
*/
|
*/
|
||||||
void HAL_MspInit(void)
|
void HAL_MspInit(void)
|
||||||
{
|
{
|
||||||
|
|
||||||
/* USER CODE BEGIN MspInit 0 */
|
/* USER CODE BEGIN */
|
||||||
|
|
||||||
/* USER CODE END MspInit 0 */
|
/* USER CODE END */
|
||||||
|
|
||||||
__HAL_RCC_AFIO_CLK_ENABLE();
|
__HAL_RCC_AFIO_CLK_ENABLE();
|
||||||
__HAL_RCC_PWR_CLK_ENABLE();
|
__HAL_RCC_PWR_CLK_ENABLE();
|
||||||
|
|
||||||
/* System interrupt init*/
|
/* System interrupt init*/
|
||||||
|
|
||||||
/** DISABLE: JTAG-DP Disabled and SW-DP Disabled
|
/** NOJTAG: JTAG-DP Disabled and SW-DP Enabled
|
||||||
*/
|
*/
|
||||||
//__HAL_AFIO_REMAP_SWJ_DISABLE();
|
__HAL_AFIO_REMAP_SWJ_NOJTAG();
|
||||||
|
|
||||||
/* USER CODE BEGIN MspInit 1 */
|
/* USER CODE BEGIN */
|
||||||
|
|
||||||
/* USER CODE END MspInit 1 */
|
/* USER CODE END */
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -92,9 +92,9 @@ void HAL_SPI_MspInit(SPI_HandleTypeDef* hspi)
|
|||||||
GPIO_InitTypeDef GPIO_InitStruct = {0};
|
GPIO_InitTypeDef GPIO_InitStruct = {0};
|
||||||
if(hspi->Instance==SPI1)
|
if(hspi->Instance==SPI1)
|
||||||
{
|
{
|
||||||
/* USER CODE BEGIN SPI1_MspInit 0 */
|
/* USER CODE BEGIN */
|
||||||
|
|
||||||
/* USER CODE END SPI1_MspInit 0 */
|
/* USER CODE END */
|
||||||
/* Peripheral clock enable */
|
/* Peripheral clock enable */
|
||||||
__HAL_RCC_SPI1_CLK_ENABLE();
|
__HAL_RCC_SPI1_CLK_ENABLE();
|
||||||
|
|
||||||
@ -115,9 +115,9 @@ void HAL_SPI_MspInit(SPI_HandleTypeDef* hspi)
|
|||||||
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
GPIO_InitStruct.Pull = GPIO_NOPULL;
|
||||||
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
|
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
|
||||||
|
|
||||||
/* USER CODE BEGIN SPI1_MspInit 1 */
|
/* USER CODE BEGIN */
|
||||||
|
|
||||||
/* USER CODE END SPI1_MspInit 1 */
|
/* USER CODE END */
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -133,9 +133,9 @@ void HAL_SPI_MspDeInit(SPI_HandleTypeDef* hspi)
|
|||||||
{
|
{
|
||||||
if(hspi->Instance==SPI1)
|
if(hspi->Instance==SPI1)
|
||||||
{
|
{
|
||||||
/* USER CODE BEGIN SPI1_MspDeInit 0 */
|
/* USER CODE BEGIN */
|
||||||
|
|
||||||
/* USER CODE END SPI1_MspDeInit 0 */
|
/* USER CODE END */
|
||||||
/* Peripheral clock disable */
|
/* Peripheral clock disable */
|
||||||
__HAL_RCC_SPI1_CLK_DISABLE();
|
__HAL_RCC_SPI1_CLK_DISABLE();
|
||||||
|
|
||||||
@ -147,9 +147,9 @@ void HAL_SPI_MspDeInit(SPI_HandleTypeDef* hspi)
|
|||||||
*/
|
*/
|
||||||
HAL_GPIO_DeInit(GPIOA, GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7);
|
HAL_GPIO_DeInit(GPIOA, GPIO_PIN_4|GPIO_PIN_5|GPIO_PIN_6|GPIO_PIN_7);
|
||||||
|
|
||||||
/* USER CODE BEGIN SPI1_MspDeInit 1 */
|
/* USER CODE BEGIN */
|
||||||
|
|
||||||
/* USER CODE END SPI1_MspDeInit 1 */
|
/* USER CODE END */
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -165,9 +165,9 @@ void HAL_UART_MspInit(UART_HandleTypeDef* huart)
|
|||||||
GPIO_InitTypeDef GPIO_InitStruct = {0};
|
GPIO_InitTypeDef GPIO_InitStruct = {0};
|
||||||
if(huart->Instance==USART1)
|
if(huart->Instance==USART1)
|
||||||
{
|
{
|
||||||
/* USER CODE BEGIN USART1_MspInit 0 */
|
/* USER CODE BEGIN */
|
||||||
|
|
||||||
/* USER CODE END USART1_MspInit 0 */
|
/* USER CODE END */
|
||||||
/* Peripheral clock enable */
|
/* Peripheral clock enable */
|
||||||
__HAL_RCC_USART1_CLK_ENABLE();
|
__HAL_RCC_USART1_CLK_ENABLE();
|
||||||
|
|
||||||
@ -188,9 +188,9 @@ void HAL_UART_MspInit(UART_HandleTypeDef* huart)
|
|||||||
|
|
||||||
__HAL_AFIO_REMAP_USART1_ENABLE();
|
__HAL_AFIO_REMAP_USART1_ENABLE();
|
||||||
|
|
||||||
/* USER CODE BEGIN USART1_MspInit 1 */
|
/* USER CODE BEGIN */
|
||||||
|
|
||||||
/* USER CODE END USART1_MspInit 1 */
|
/* USER CODE END */
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -206,9 +206,9 @@ void HAL_UART_MspDeInit(UART_HandleTypeDef* huart)
|
|||||||
{
|
{
|
||||||
if(huart->Instance==USART1)
|
if(huart->Instance==USART1)
|
||||||
{
|
{
|
||||||
/* USER CODE BEGIN USART1_MspDeInit 0 */
|
/* USER CODE BEGIN */
|
||||||
|
|
||||||
/* USER CODE END USART1_MspDeInit 0 */
|
/* USER CODE END */
|
||||||
/* Peripheral clock disable */
|
/* Peripheral clock disable */
|
||||||
__HAL_RCC_USART1_CLK_DISABLE();
|
__HAL_RCC_USART1_CLK_DISABLE();
|
||||||
|
|
||||||
@ -218,13 +218,13 @@ void HAL_UART_MspDeInit(UART_HandleTypeDef* huart)
|
|||||||
*/
|
*/
|
||||||
HAL_GPIO_DeInit(GPIOB, GPIO_PIN_6|GPIO_PIN_7);
|
HAL_GPIO_DeInit(GPIOB, GPIO_PIN_6|GPIO_PIN_7);
|
||||||
|
|
||||||
/* USER CODE BEGIN USART1_MspDeInit 1 */
|
/* USER CODE BEGIN */
|
||||||
|
|
||||||
/* USER CODE END USART1_MspDeInit 1 */
|
/* USER CODE END */
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* USER CODE BEGIN 1 */
|
/* USER CODE BEGIN */
|
||||||
|
|
||||||
/* USER CODE END 1 */
|
/* USER CODE END */
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
#MicroXplorer Configuration settings - do not modify
|
#MicroXplorer Configuration settings - do not modify
|
||||||
CAD.formats=[]
|
CAD.formats=[]
|
||||||
CAD.pinconfig=Dual
|
CAD.pinconfig=Project naming
|
||||||
CAD.provider=
|
CAD.provider=
|
||||||
File.Version=6
|
File.Version=6
|
||||||
GPIO.groupedBy=Group By Peripherals
|
GPIO.groupedBy=Group By Peripherals
|
||||||
@ -43,15 +43,14 @@ Mcu.Pin30=PB5
|
|||||||
Mcu.Pin31=PB6
|
Mcu.Pin31=PB6
|
||||||
Mcu.Pin32=PB7
|
Mcu.Pin32=PB7
|
||||||
Mcu.Pin33=PB9
|
Mcu.Pin33=PB9
|
||||||
Mcu.Pin34=VP_SYS_VS_ND
|
Mcu.Pin34=VP_SYS_VS_Systick
|
||||||
Mcu.Pin35=VP_SYS_VS_Systick
|
|
||||||
Mcu.Pin4=PD1-OSC_OUT
|
Mcu.Pin4=PD1-OSC_OUT
|
||||||
Mcu.Pin5=PA0-WKUP
|
Mcu.Pin5=PA0-WKUP
|
||||||
Mcu.Pin6=PA1
|
Mcu.Pin6=PA1
|
||||||
Mcu.Pin7=PA2
|
Mcu.Pin7=PA2
|
||||||
Mcu.Pin8=PA3
|
Mcu.Pin8=PA3
|
||||||
Mcu.Pin9=PA4
|
Mcu.Pin9=PA4
|
||||||
Mcu.PinsNb=36
|
Mcu.PinsNb=35
|
||||||
Mcu.ThirdPartyNb=0
|
Mcu.ThirdPartyNb=0
|
||||||
Mcu.UserConstants=
|
Mcu.UserConstants=
|
||||||
Mcu.UserName=STM32F103CBTx
|
Mcu.UserName=STM32F103CBTx
|
||||||
@ -89,8 +88,10 @@ PA12.GPIO_Label=A12
|
|||||||
PA12.Locked=true
|
PA12.Locked=true
|
||||||
PA12.Signal=GPIO_Input
|
PA12.Signal=GPIO_Input
|
||||||
PA13.Locked=true
|
PA13.Locked=true
|
||||||
|
PA13.Mode=Serial_Wire
|
||||||
PA13.Signal=SYS_JTMS-SWDIO
|
PA13.Signal=SYS_JTMS-SWDIO
|
||||||
PA14.Locked=true
|
PA14.Locked=true
|
||||||
|
PA14.Mode=Serial_Wire
|
||||||
PA14.Signal=SYS_JTCK-SWCLK
|
PA14.Signal=SYS_JTCK-SWCLK
|
||||||
PA2.GPIOParameters=GPIO_Label
|
PA2.GPIOParameters=GPIO_Label
|
||||||
PA2.GPIO_Label=DTE
|
PA2.GPIO_Label=DTE
|
||||||
@ -249,9 +250,9 @@ RCC.SYSCLKFreq_VALUE=64000000
|
|||||||
RCC.SYSCLKSource=RCC_SYSCLKSOURCE_PLLCLK
|
RCC.SYSCLKSource=RCC_SYSCLKSOURCE_PLLCLK
|
||||||
RCC.TimSysFreq_Value=64000000
|
RCC.TimSysFreq_Value=64000000
|
||||||
RCC.USBFreq_Value=64000000
|
RCC.USBFreq_Value=64000000
|
||||||
SPI1.BaudRatePrescaler=SPI_BAUDRATEPRESCALER_16
|
SPI1.BaudRatePrescaler=SPI_BAUDRATEPRESCALER_4
|
||||||
SPI1.CalculateBaudRate=4.0 MBits/s
|
SPI1.CalculateBaudRate=16.0 MBits/s
|
||||||
SPI1.DataSize=SPI_DATASIZE_16BIT
|
SPI1.DataSize=SPI_DATASIZE_8BIT
|
||||||
SPI1.Direction=SPI_DIRECTION_2LINES
|
SPI1.Direction=SPI_DIRECTION_2LINES
|
||||||
SPI1.IPParameters=VirtualType,Mode,Direction,CalculateBaudRate,VirtualNSS,BaudRatePrescaler,DataSize
|
SPI1.IPParameters=VirtualType,Mode,Direction,CalculateBaudRate,VirtualNSS,BaudRatePrescaler,DataSize
|
||||||
SPI1.Mode=SPI_MODE_MASTER
|
SPI1.Mode=SPI_MODE_MASTER
|
||||||
@ -259,8 +260,6 @@ SPI1.VirtualNSS=VM_NSSHARD
|
|||||||
SPI1.VirtualType=VM_MASTER
|
SPI1.VirtualType=VM_MASTER
|
||||||
USART1.IPParameters=VirtualMode
|
USART1.IPParameters=VirtualMode
|
||||||
USART1.VirtualMode=VM_ASYNC
|
USART1.VirtualMode=VM_ASYNC
|
||||||
VP_SYS_VS_ND.Mode=No_Debug
|
|
||||||
VP_SYS_VS_ND.Signal=SYS_VS_ND
|
|
||||||
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
|
||||||
board=custom
|
board=custom
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user