add G431-blink

This commit is contained in:
Edward Emelianov
2026-06-24 22:56:04 +03:00
parent 1f79a43326
commit 852d34204f
52 changed files with 187042 additions and 0 deletions

9
G4:G431/blink/Makefile Normal file
View File

@@ -0,0 +1,9 @@
BINARY := blink
# MCU code
MCU := G431xx
# change this linking script depending on particular MCU model,
LDSCRIPT := stm32g431xb.ld
include ../makefile.g4
include ../../makefile.stm32

3
G4:G431/blink/README Normal file
View File

@@ -0,0 +1,3 @@
Toggle LED on STM32G431-pill depending on user button:
- pressed - 'SOS' in Morze
- not pressed - blink with period of 1 second

BIN
G4:G431/blink/blink.bin Executable file

Binary file not shown.

View File

@@ -0,0 +1 @@
-std=c17

View File

@@ -0,0 +1,3 @@
#define EBUG
#define STM32G4
#define STM32G431xx

View File

@@ -0,0 +1 @@
[General]

View File

@@ -0,0 +1,216 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE QtCreatorProject>
<!-- Written by QtCreator 19.0.2, 2026-06-24T22:54:50. -->
<qtcreator>
<data>
<variable>EnvironmentId</variable>
<value type="QByteArray">{7bd84e39-ca37-46d3-be9d-99ebea85bc0d}</value>
</data>
<data>
<variable>ProjectExplorer.Project.ActiveTarget</variable>
<value type="qlonglong">0</value>
</data>
<data>
<variable>ProjectExplorer.Project.EditorSettings</variable>
<valuemap type="QVariantMap">
<value type="bool" key="EditorConfiguration.AutoDetect">true</value>
<value type="bool" key="EditorConfiguration.AutoIndent">true</value>
<value type="bool" key="EditorConfiguration.CamelCaseNavigation">true</value>
<valuemap type="QVariantMap" key="EditorConfiguration.CodeStyle.0">
<value type="QString" key="language">Cpp</value>
<valuemap type="QVariantMap" key="value">
<value type="QByteArray" key="CurrentPreferences">CppGlobal</value>
</valuemap>
</valuemap>
<valuemap type="QVariantMap" key="EditorConfiguration.CodeStyle.1">
<value type="QString" key="language">QmlJS</value>
<valuemap type="QVariantMap" key="value">
<value type="QByteArray" key="CurrentPreferences">QmlJSGlobal</value>
</valuemap>
</valuemap>
<value type="qlonglong" key="EditorConfiguration.CodeStyle.Count">2</value>
<value type="QByteArray" key="EditorConfiguration.Codec">KOI8-R</value>
<value type="bool" key="EditorConfiguration.ConstrainTooltips">false</value>
<value type="int" key="EditorConfiguration.IndentSize">4</value>
<value type="bool" key="EditorConfiguration.KeyboardTooltips">false</value>
<value type="int" key="EditorConfiguration.LineEndingBehavior">0</value>
<value type="int" key="EditorConfiguration.MarginColumn">80</value>
<value type="bool" key="EditorConfiguration.MouseHiding">true</value>
<value type="bool" key="EditorConfiguration.MouseNavigation">true</value>
<value type="int" key="EditorConfiguration.PaddingMode">1</value>
<value type="int" key="EditorConfiguration.PreferAfterWhitespaceComments">0</value>
<value type="bool" key="EditorConfiguration.PreferSingleLineComments">false</value>
<value type="bool" key="EditorConfiguration.ScrollWheelZooming">true</value>
<value type="bool" key="EditorConfiguration.ShowMargin">false</value>
<value type="int" key="EditorConfiguration.SmartBackspaceBehavior">0</value>
<value type="bool" key="EditorConfiguration.SmartSelectionChanging">true</value>
<value type="bool" key="EditorConfiguration.SpacesForTabs">true</value>
<value type="int" key="EditorConfiguration.TabKeyBehavior">0</value>
<value type="int" key="EditorConfiguration.TabSize">8</value>
<value type="bool" key="EditorConfiguration.UseGlobal">true</value>
<value type="bool" key="EditorConfiguration.UseIndenter">false</value>
<value type="int" key="EditorConfiguration.Utf8BomBehavior">1</value>
<value type="bool" key="EditorConfiguration.addFinalNewLine">true</value>
<value type="bool" key="EditorConfiguration.cleanIndentation">false</value>
<value type="bool" key="EditorConfiguration.cleanWhitespace">true</value>
<value type="QString" key="EditorConfiguration.ignoreFileTypes">*.md, *.MD, Makefile</value>
<value type="bool" key="EditorConfiguration.inEntireDocument">false</value>
<value type="bool" key="EditorConfiguration.skipTrailingWhitespace">true</value>
<value type="bool" key="EditorConfiguration.tintMarginArea">true</value>
</valuemap>
</data>
<data>
<variable>ProjectExplorer.Project.PluginSettings</variable>
<valuemap type="QVariantMap">
<valuemap type="QVariantMap" key="AutoTest.ActiveFrameworks">
<value type="bool" key="AutoTest.Framework.Boost">true</value>
<value type="bool" key="AutoTest.Framework.CTest">false</value>
<value type="bool" key="AutoTest.Framework.Catch">true</value>
<value type="bool" key="AutoTest.Framework.GTest">true</value>
<value type="bool" key="AutoTest.Framework.QtQuickTest">true</value>
<value type="bool" key="AutoTest.Framework.QtTest">true</value>
</valuemap>
<value type="bool" key="AutoTest.ApplyFilter">false</value>
<valuemap type="QVariantMap" key="AutoTest.CheckStates"/>
<valuelist type="QVariantList" key="AutoTest.PathFilters"/>
<value type="int" key="AutoTest.RunAfterBuild">0</value>
<value type="bool" key="AutoTest.UseGlobal">true</value>
<valuemap type="QVariantMap" key="ClangTools">
<value type="bool" key="ClangTools.AnalyzeOpenFiles">true</value>
<value type="bool" key="ClangTools.BuildBeforeAnalysis">true</value>
<value type="QString" key="ClangTools.DiagnosticConfig">Builtin.DefaultTidyAndClazy</value>
<value type="int" key="ClangTools.ParallelJobs">2</value>
<value type="bool" key="ClangTools.PreferConfigFile">false</value>
<valuelist type="QVariantList" key="ClangTools.SelectedDirs"/>
<valuelist type="QVariantList" key="ClangTools.SelectedFiles"/>
<valuelist type="QVariantList" key="ClangTools.SuppressedDiagnostics"/>
<value type="bool" key="ClangTools.UseGlobalSettings">true</value>
</valuemap>
<value type="int" key="RcSync">0</value>
</valuemap>
</data>
<data>
<variable>ProjectExplorer.Project.Target.0</variable>
<valuemap type="QVariantMap">
<value type="QString" key="DeviceType">Desktop</value>
<value type="bool" key="HasPerBcDcs">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Desktop</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Desktop</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">{65a14f9e-e008-4c1b-89df-4eaa4774b6e3}</value>
<value type="qlonglong" key="ProjectExplorer.Target.ActiveBuildConfiguration">0</value>
<value type="qlonglong" key="ProjectExplorer.Target.ActiveDeployConfiguration">0</value>
<value type="qlonglong" key="ProjectExplorer.Target.ActiveRunConfiguration">0</value>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.BuildConfiguration.0">
<value type="QString" key="ProjectExplorer.BuildConfiguration.BuildDirectory">/Big/Data/00__Electronics/STM32/G0-nolib/blink</value>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<valuelist type="QVariantList" key="GenericProjectManager.GenericMakeStep.BuildTargets">
<value type="QString">all</value>
</valuelist>
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">GenericProjectManager.GenericMakeStep</value>
</valuemap>
<value type="qlonglong" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Build</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Build</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Build</value>
</valuemap>
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.1">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildStepList.Step.0">
<valuelist type="QVariantList" key="GenericProjectManager.GenericMakeStep.BuildTargets">
<value type="QString">clean</value>
</valuelist>
<value type="bool" key="ProjectExplorer.BuildStep.Enabled">true</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">GenericProjectManager.GenericMakeStep</value>
</valuemap>
<value type="qlonglong" key="ProjectExplorer.BuildStepList.StepsCount">1</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Clean</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Clean</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Clean</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">2</value>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ClearSystemEnvironment">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.CustomParsers"/>
<value type="bool" key="ProjectExplorer.BuildConfiguration.ParseStandardOutput">false</value>
<valuelist type="QVariantList" key="ProjectExplorer.BuildConfiguration.UserEnvironmentChanges"/>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">По умолчанию</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">GenericProjectManager.GenericBuildConfiguration</value>
<value type="qlonglong" key="ProjectExplorer.Target.ActiveDeployConfiguration">0</value>
<value type="qlonglong" key="ProjectExplorer.Target.ActiveRunConfiguration">0</value>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.DeployConfiguration.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<value type="qlonglong" key="ProjectExplorer.BuildStepList.StepsCount">0</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Deploy</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Deploy</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Deploy</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">1</value>
<valuemap type="QVariantMap" key="ProjectExplorer.DeployConfiguration.CustomData"/>
<value type="bool" key="ProjectExplorer.DeployConfiguration.CustomDataEnabled">false</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.DefaultDeployConfiguration</value>
</valuemap>
<value type="qlonglong" key="ProjectExplorer.Target.DeployConfigurationCount">1</value>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.RunConfiguration.0">
<value type="bool" key="Analyzer.Perf.Settings.UseGlobalSettings">true</value>
<value type="bool" key="Analyzer.QmlProfiler.Settings.UseGlobalSettings">true</value>
<value type="bool" key="Analyzer.Valgrind.Settings.UseGlobalSettings">true</value>
<valuelist type="QVariantList" key="Analyzer.Valgrind.SuppressionFiles"/>
<valuelist type="QVariantList" key="CustomOutputParsers"/>
<value type="int" key="PE.EnvironmentAspect.Base">2</value>
<valuelist type="QVariantList" key="PE.EnvironmentAspect.Changes"/>
<value type="bool" key="PE.EnvironmentAspect.PrintOnRun">false</value>
<value type="QString" key="PerfRecordArgsId">-e cpu-cycles --call-graph dwarf,4096 -F 250</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.CustomExecutableRunConfiguration</value>
<value type="QString" key="ProjectExplorer.RunConfiguration.BuildKey"></value>
<value type="bool" key="ProjectExplorer.RunConfiguration.Customized">false</value>
<value type="QString" key="ProjectExplorer.RunConfiguration.UniqueId"></value>
<value type="bool" key="RunConfiguration.UseCppDebuggerAuto">true</value>
<value type="bool" key="RunConfiguration.UseQmlDebuggerAuto">true</value>
</valuemap>
<value type="qlonglong" key="ProjectExplorer.Target.RunConfigurationCount">1</value>
</valuemap>
<value type="qlonglong" key="ProjectExplorer.Target.BuildConfigurationCount">1</value>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.DeployConfiguration.0">
<valuemap type="QVariantMap" key="ProjectExplorer.BuildConfiguration.BuildStepList.0">
<value type="qlonglong" key="ProjectExplorer.BuildStepList.StepsCount">0</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DefaultDisplayName">Deploy</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName">Deploy</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.BuildSteps.Deploy</value>
</valuemap>
<value type="int" key="ProjectExplorer.BuildConfiguration.BuildStepListCount">1</value>
<valuemap type="QVariantMap" key="ProjectExplorer.DeployConfiguration.CustomData"/>
<value type="bool" key="ProjectExplorer.DeployConfiguration.CustomDataEnabled">false</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.DefaultDeployConfiguration</value>
</valuemap>
<value type="qlonglong" key="ProjectExplorer.Target.DeployConfigurationCount">1</value>
<valuemap type="QVariantMap" key="ProjectExplorer.Target.RunConfiguration.0">
<value type="bool" key="Analyzer.Perf.Settings.UseGlobalSettings">true</value>
<value type="bool" key="Analyzer.QmlProfiler.Settings.UseGlobalSettings">true</value>
<value type="bool" key="Analyzer.Valgrind.Settings.UseGlobalSettings">true</value>
<valuelist type="QVariantList" key="Analyzer.Valgrind.SuppressionFiles"/>
<valuelist type="QVariantList" key="CustomOutputParsers"/>
<value type="int" key="PE.EnvironmentAspect.Base">2</value>
<valuelist type="QVariantList" key="PE.EnvironmentAspect.Changes"/>
<value type="bool" key="PE.EnvironmentAspect.PrintOnRun">false</value>
<value type="QString" key="PerfRecordArgsId">-e cpu-cycles --call-graph dwarf,4096 -F 250</value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.DisplayName"></value>
<value type="QString" key="ProjectExplorer.ProjectConfiguration.Id">ProjectExplorer.CustomExecutableRunConfiguration</value>
<value type="QString" key="ProjectExplorer.RunConfiguration.BuildKey"></value>
<value type="bool" key="ProjectExplorer.RunConfiguration.Customized">false</value>
<value type="QString" key="ProjectExplorer.RunConfiguration.UniqueId"></value>
<value type="bool" key="RunConfiguration.UseCppDebuggerAuto">true</value>
<value type="bool" key="RunConfiguration.UseQmlDebuggerAuto">true</value>
</valuemap>
<value type="qlonglong" key="ProjectExplorer.Target.RunConfigurationCount">1</value>
</valuemap>
</data>
<data>
<variable>ProjectExplorer.Project.TargetCount</variable>
<value type="qlonglong">1</value>
</data>
<data>
<variable>Version</variable>
<value type="int">22</value>
</data>
</qtcreator>

View File

@@ -0,0 +1 @@
-std=c++17

31
G4:G431/blink/blink.files Normal file
View File

@@ -0,0 +1,31 @@
../inc/Fx/common_macros.h
../inc/Fx/flash_size_reg.h
../inc/Fx/stm32g4.h
../inc/Fx/stm32g411xb.h
../inc/Fx/stm32g411xc.h
../inc/Fx/stm32g414xx.h
../inc/Fx/stm32g431xx.h
../inc/Fx/stm32g441xx.h
../inc/Fx/stm32g471xx.h
../inc/Fx/stm32g473xx.h
../inc/Fx/stm32g474xx.h
../inc/Fx/stm32g483xx.h
../inc/Fx/stm32g484xx.h
../inc/Fx/stm32g491xx.h
../inc/Fx/stm32g4a1xx.h
../inc/Fx/stm32g4xx.h
../inc/Fx/vector.h
../inc/cm/core_cm0.h
../inc/cm/core_cm0plus.h
../inc/cm/core_cm3.h
../inc/cm/core_cm4.h
../inc/cm/core_cm7.h
../inc/cm/core_cmFunc.h
../inc/cm/core_cmInstr.h
../inc/cm/core_cmSimd.h
../inc/cm/core_sc000.h
../inc/cm/core_sc300.h
../inc/ld/stm32.ld
../inc/ld/stm32g431xb.ld
../inc/startup/vector.c
systick_blink.c

View File

@@ -0,0 +1,4 @@
.
../inc
../inc/Fx
../inc/cm

1
G4:G431/blink/mk/TARGET Normal file
View File

@@ -0,0 +1 @@
RELEASE

BIN
G4:G431/blink/mk/blink.elf Executable file

Binary file not shown.

252
G4:G431/blink/mk/blink.list Normal file
View File

@@ -0,0 +1,252 @@
mk/blink.elf: file format elf32-littlearm
Disassembly of section .text:
080001d8 <adc12_isr>:
80001d8: e7fe b.n 80001d8 <adc12_isr>
80001da: bf00 nop
080001dc <reset_handler>:
80001dc: 4915 ldr r1, [pc, #84] ; (8000234 <reset_handler+0x58>)
80001de: 4b16 ldr r3, [pc, #88] ; (8000238 <reset_handler+0x5c>)
80001e0: 4299 cmp r1, r3
80001e2: d20c bcs.n 80001fe <reset_handler+0x22>
80001e4: 3b01 subs r3, #1
80001e6: 1a5b subs r3, r3, r1
80001e8: 4a14 ldr r2, [pc, #80] ; (800023c <reset_handler+0x60>)
80001ea: f023 0303 bic.w r3, r3, #3
80001ee: 3304 adds r3, #4
80001f0: 4413 add r3, r2
80001f2: f852 0b04 ldr.w r0, [r2], #4
80001f6: f841 0b04 str.w r0, [r1], #4
80001fa: 429a cmp r2, r3
80001fc: d1f9 bne.n 80001f2 <reset_handler+0x16>
80001fe: 4a10 ldr r2, [pc, #64] ; (8000240 <reset_handler+0x64>)
8000200: 4b10 ldr r3, [pc, #64] ; (8000244 <reset_handler+0x68>)
8000202: 429a cmp r2, r3
8000204: d20a bcs.n 800021c <reset_handler+0x40>
8000206: 3b01 subs r3, #1
8000208: 1a9b subs r3, r3, r2
800020a: f023 0303 bic.w r3, r3, #3
800020e: 3304 adds r3, #4
8000210: 4413 add r3, r2
8000212: 2100 movs r1, #0
8000214: f842 1b04 str.w r1, [r2], #4
8000218: 429a cmp r2, r3
800021a: d1fb bne.n 8000214 <reset_handler+0x38>
800021c: 4b0a ldr r3, [pc, #40] ; (8000248 <reset_handler+0x6c>)
800021e: f44f 0270 mov.w r2, #15728640 ; 0xf00000
8000222: f8c3 2088 str.w r2, [r3, #136] ; 0x88
8000226: bf00 nop
8000228: f3bf 8f4f dsb sy
800022c: f3bf 8f6f isb sy
8000230: f000 f814 bl 800025c <main>
8000234: 20000000 .word 0x20000000
8000238: 20000000 .word 0x20000000
800023c: 08000474 .word 0x08000474
8000240: 20000000 .word 0x20000000
8000244: 20000004 .word 0x20000004
8000248: e000ed00 .word 0xe000ed00
0800024c <sys_tick_handler>:
800024c: 4a02 ldr r2, [pc, #8] ; (8000258 <sys_tick_handler+0xc>)
800024e: 6813 ldr r3, [r2, #0]
8000250: 3301 adds r3, #1
8000252: 6013 str r3, [r2, #0]
8000254: 4770 bx lr
8000256: bf00 nop
8000258: 20000000 .word 0x20000000
0800025c <main>:
800025c: 4b65 ldr r3, [pc, #404] ; (80003f4 <main+0x198>)
800025e: 681a ldr r2, [r3, #0]
8000260: f022 7280 bic.w r2, r2, #16777216 ; 0x1000000
8000264: b480 push {r7}
8000266: 601a str r2, [r3, #0]
8000268: 681a ldr r2, [r3, #0]
800026a: 0196 lsls r6, r2, #6
800026c: d507 bpl.n 800027e <main+0x22>
800026e: 4a62 ldr r2, [pc, #392] ; (80003f8 <main+0x19c>)
8000270: e001 b.n 8000276 <main+0x1a>
8000272: 3a01 subs r2, #1
8000274: d003 beq.n 800027e <main+0x22>
8000276: bf00 nop
8000278: 6819 ldr r1, [r3, #0]
800027a: 018c lsls r4, r1, #6
800027c: d4f9 bmi.n 8000272 <main+0x16>
800027e: 4b5d ldr r3, [pc, #372] ; (80003f4 <main+0x198>)
8000280: 681a ldr r2, [r3, #0]
8000282: f442 3280 orr.w r2, r2, #65536 ; 0x10000
8000286: 601a str r2, [r3, #0]
8000288: 681a ldr r2, [r3, #0]
800028a: 0395 lsls r5, r2, #14
800028c: d407 bmi.n 800029e <main+0x42>
800028e: 4a5a ldr r2, [pc, #360] ; (80003f8 <main+0x19c>)
8000290: e001 b.n 8000296 <main+0x3a>
8000292: 3a01 subs r2, #1
8000294: d003 beq.n 800029e <main+0x42>
8000296: bf00 nop
8000298: 6819 ldr r1, [r3, #0]
800029a: 0389 lsls r1, r1, #14
800029c: d5f9 bpl.n 8000292 <main+0x36>
800029e: 4955 ldr r1, [pc, #340] ; (80003f4 <main+0x198>)
80002a0: 4b56 ldr r3, [pc, #344] ; (80003fc <main+0x1a0>)
80002a2: 6d8a ldr r2, [r1, #88] ; 0x58
80002a4: f042 5280 orr.w r2, r2, #268435456 ; 0x10000000
80002a8: 658a str r2, [r1, #88] ; 0x58
80002aa: 681a ldr r2, [r3, #0]
80002ac: f422 62c0 bic.w r2, r2, #1536 ; 0x600
80002b0: 601a str r2, [r3, #0]
80002b2: 695a ldr r2, [r3, #20]
80002b4: 0550 lsls r0, r2, #21
80002b6: d507 bpl.n 80002c8 <main+0x6c>
80002b8: 4a4f ldr r2, [pc, #316] ; (80003f8 <main+0x19c>)
80002ba: e001 b.n 80002c0 <main+0x64>
80002bc: 3a01 subs r2, #1
80002be: d003 beq.n 80002c8 <main+0x6c>
80002c0: bf00 nop
80002c2: 6959 ldr r1, [r3, #20]
80002c4: 054f lsls r7, r1, #21
80002c6: d4f9 bmi.n 80002bc <main+0x60>
80002c8: 4b4a ldr r3, [pc, #296] ; (80003f4 <main+0x198>)
80002ca: 4a4d ldr r2, [pc, #308] ; (8000400 <main+0x1a4>)
80002cc: 60da str r2, [r3, #12]
80002ce: 681a ldr r2, [r3, #0]
80002d0: f042 7280 orr.w r2, r2, #16777216 ; 0x1000000
80002d4: 601a str r2, [r3, #0]
80002d6: 681a ldr r2, [r3, #0]
80002d8: 0192 lsls r2, r2, #6
80002da: d407 bmi.n 80002ec <main+0x90>
80002dc: 4a46 ldr r2, [pc, #280] ; (80003f8 <main+0x19c>)
80002de: e001 b.n 80002e4 <main+0x88>
80002e0: 3a01 subs r2, #1
80002e2: d003 beq.n 80002ec <main+0x90>
80002e4: bf00 nop
80002e6: 6819 ldr r1, [r3, #0]
80002e8: 018d lsls r5, r1, #6
80002ea: d5f9 bpl.n 80002e0 <main+0x84>
80002ec: 4945 ldr r1, [pc, #276] ; (8000404 <main+0x1a8>)
80002ee: 4b41 ldr r3, [pc, #260] ; (80003f4 <main+0x198>)
80002f0: 680a ldr r2, [r1, #0]
80002f2: f442 62e0 orr.w r2, r2, #1792 ; 0x700
80002f6: f042 0204 orr.w r2, r2, #4
80002fa: 600a str r2, [r1, #0]
80002fc: 689a ldr r2, [r3, #8]
80002fe: f042 0203 orr.w r2, r2, #3
8000302: 609a str r2, [r3, #8]
8000304: f8d3 2098 ldr.w r2, [r3, #152] ; 0x98
8000308: f042 0201 orr.w r2, r2, #1
800030c: f8c3 2098 str.w r2, [r3, #152] ; 0x98
8000310: f8d3 2098 ldr.w r2, [r3, #152] ; 0x98
8000314: 0796 lsls r6, r2, #30
8000316: d408 bmi.n 800032a <main+0xce>
8000318: 4a37 ldr r2, [pc, #220] ; (80003f8 <main+0x19c>)
800031a: e001 b.n 8000320 <main+0xc4>
800031c: 3a01 subs r2, #1
800031e: d004 beq.n 800032a <main+0xce>
8000320: bf00 nop
8000322: f8d3 1098 ldr.w r1, [r3, #152] ; 0x98
8000326: 078c lsls r4, r1, #30
8000328: d5f8 bpl.n 800031c <main+0xc0>
800032a: 4a32 ldr r2, [pc, #200] ; (80003f4 <main+0x198>)
800032c: 4b36 ldr r3, [pc, #216] ; (8000408 <main+0x1ac>)
800032e: 6d91 ldr r1, [r2, #88] ; 0x58
8000330: 4d36 ldr r5, [pc, #216] ; (800040c <main+0x1b0>)
8000332: 4837 ldr r0, [pc, #220] ; (8000410 <main+0x1b4>)
8000334: 4c37 ldr r4, [pc, #220] ; (8000414 <main+0x1b8>)
8000336: f8df c0ec ldr.w ip, [pc, #236] ; 8000424 <main+0x1c8>
800033a: 4f37 ldr r7, [pc, #220] ; (8000418 <main+0x1bc>)
800033c: 4e37 ldr r6, [pc, #220] ; (800041c <main+0x1c0>)
800033e: f441 7180 orr.w r1, r1, #256 ; 0x100
8000342: 6591 str r1, [r2, #88] ; 0x58
8000344: 6819 ldr r1, [r3, #0]
8000346: f021 01e0 bic.w r1, r1, #224 ; 0xe0
800034a: 6019 str r1, [r3, #0]
800034c: 6859 ldr r1, [r3, #4]
800034e: f021 61e0 bic.w r1, r1, #117440512 ; 0x7000000
8000352: 6059 str r1, [r3, #4]
8000354: 6859 ldr r1, [r3, #4]
8000356: f021 5140 bic.w r1, r1, #805306368 ; 0x30000000
800035a: f041 5180 orr.w r1, r1, #268435456 ; 0x10000000
800035e: 6059 str r1, [r3, #4]
8000360: 6859 ldr r1, [r3, #4]
8000362: f021 61e0 bic.w r1, r1, #117440512 ; 0x7000000
8000366: 6059 str r1, [r3, #4]
8000368: 6819 ldr r1, [r3, #0]
800036a: f041 0160 orr.w r1, r1, #96 ; 0x60
800036e: 6019 str r1, [r3, #0]
8000370: f8d2 3088 ldr.w r3, [r2, #136] ; 0x88
8000374: f023 6340 bic.w r3, r3, #201326592 ; 0xc000000
8000378: f8c2 3088 str.w r3, [r2, #136] ; 0x88
800037c: 2304 movs r3, #4
800037e: 64d3 str r3, [r2, #76] ; 0x4c
8000380: 2300 movs r3, #0
8000382: f04f 6200 mov.w r2, #134217728 ; 0x8000000
8000386: f8c5 c000 str.w ip, [r5]
800038a: 21f0 movs r1, #240 ; 0xf0
800038c: 60ea str r2, [r5, #12]
800038e: 606b str r3, [r5, #4]
8000390: 6047 str r7, [r0, #4]
8000392: 2707 movs r7, #7
8000394: f884 1023 strb.w r1, [r4, #35] ; 0x23
8000398: 6083 str r3, [r0, #8]
800039a: 6007 str r7, [r0, #0]
800039c: 461a mov r2, r3
800039e: 461c mov r4, r3
80003a0: 692b ldr r3, [r5, #16]
80003a2: 491f ldr r1, [pc, #124] ; (8000420 <main+0x1c4>)
80003a4: 0498 lsls r0, r3, #18
80003a6: f44f 0c80 mov.w ip, #4194304 ; 0x400000
80003aa: f04f 0740 mov.w r7, #64 ; 0x40
80003ae: d512 bpl.n 80003d6 <main+0x17a>
80003b0: 07e3 lsls r3, r4, #31
80003b2: f856 0024 ldr.w r0, [r6, r4, lsl #2]
80003b6: bf4c ite mi
80003b8: 61af strmi r7, [r5, #24]
80003ba: f8c5 c018 strpl.w ip, [r5, #24]
80003be: 680b ldr r3, [r1, #0]
80003c0: 1a9b subs r3, r3, r2
80003c2: 4283 cmp r3, r0
80003c4: d3fb bcc.n 80003be <main+0x162>
80003c6: 3401 adds r4, #1
80003c8: 2c13 cmp r4, #19
80003ca: bf08 it eq
80003cc: 2400 moveq r4, #0
80003ce: 680a ldr r2, [r1, #0]
80003d0: 692b ldr r3, [r5, #16]
80003d2: 0498 lsls r0, r3, #18
80003d4: d4ec bmi.n 80003b0 <main+0x154>
80003d6: 696b ldr r3, [r5, #20]
80003d8: 0418 lsls r0, r3, #16
80003da: 43db mvns r3, r3
80003dc: f400 0080 and.w r0, r0, #4194304 ; 0x400000
80003e0: f003 0340 and.w r3, r3, #64 ; 0x40
80003e4: 4303 orrs r3, r0
80003e6: 61ab str r3, [r5, #24]
80003e8: 680b ldr r3, [r1, #0]
80003ea: 1a9b subs r3, r3, r2
80003ec: f5b3 7ffa cmp.w r3, #500 ; 0x1f4
80003f0: d3fa bcc.n 80003e8 <main+0x18c>
80003f2: e7ec b.n 80003ce <main+0x172>
80003f4: 40021000 .word 0x40021000
80003f8: 000ffffe .word 0x000ffffe
80003fc: 40007000 .word 0x40007000
8000400: 01005513 .word 0x01005513
8000404: 40022000 .word 0x40022000
8000408: 40002000 .word 0x40002000
800040c: 48000800 .word 0x48000800
8000410: e000e010 .word 0xe000e010
8000414: e000ed00 .word 0xe000ed00
8000418: 0002980f .word 0x0002980f
800041c: 08000428 .word 0x08000428
8000420: 20000000 .word 0x20000000
8000424: f3ffdfff .word 0xf3ffdfff
08000428 <L>:
8000428: 0000012c 0000007d 00000064 0000007d ,...}...d...}...
8000438: 00000064 0000007d 000000c8 0000015e d...}.......^...
8000448: 00000064 0000015e 00000064 0000015e d...^...d...^...
8000458: 000000c8 0000007d 00000064 0000007d ....}...d...}...
8000468: 00000064 0000007d 000003e8 d...}.......

255
G4:G431/blink/mk/blink.map Normal file
View File

@@ -0,0 +1,255 @@
Discarded input sections
.data 0x0000000000000000 0x0 /tmp/blink.elf.OW8sUI.ltrans0.ltrans.o
Memory Configuration
Name Origin Length Attributes
rom 0x0000000008000000 0x0000000000020000 xr
ram 0x0000000020000000 0x0000000000008000 xrw
*default* 0x0000000000000000 0xffffffffffffffff
Linker script and memory map
LOAD mk/systick_blink.o
LOAD /tmp/blink.elf.OW8sUI.ltrans0.ltrans.o
LOAD mk/startup.o
LOAD /opt/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a
LOAD /opt/bin/../lib/gcc/arm-none-eabi/9.3.1/thumb/v7e-m+fp/hard/libgcc.a
START GROUP
LOAD /opt/bin/../lib/gcc/arm-none-eabi/9.3.1/thumb/v7e-m+fp/hard/libgcc.a
LOAD /opt/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a
END GROUP
START GROUP
LOAD /opt/bin/../lib/gcc/arm-none-eabi/9.3.1/thumb/v7e-m+fp/hard/libgcc.a
LOAD /opt/bin/../lib/gcc/arm-none-eabi/9.3.1/../../../../arm-none-eabi/lib/thumb/v7e-m+fp/hard/libc_nano.a
END GROUP
0x0000000000000800 PROVIDE (_BLOCKSIZE = 0x800)
.vector_table 0x0000000008000000 0x1d8
0x0000000008000000 _sisrvectors = .
*(.vector_table)
.vector_table 0x0000000008000000 0x1d8 /tmp/blink.elf.OW8sUI.ltrans0.ltrans.o
0x0000000008000000 vector_table
0x00000000080001d8 _eisrvectors = .
.text 0x00000000080001d8 0x29c
0x00000000080001d8 . = ALIGN (0x4)
0x00000000080001d8 _stext = .
*(.text*)
.text 0x00000000080001d8 0x84 /tmp/blink.elf.OW8sUI.ltrans0.ltrans.o
0x00000000080001dc reset_handler
.text.startup 0x000000000800025c 0x1cc /tmp/blink.elf.OW8sUI.ltrans0.ltrans.o
*(.rodata*)
.rodata 0x0000000008000428 0x4c /tmp/blink.elf.OW8sUI.ltrans0.ltrans.o
0x0000000008000474 . = ALIGN (0x4)
0x0000000008000474 _etext = .
.glue_7 0x0000000008000474 0x0
.glue_7 0x0000000008000474 0x0 linker stubs
.glue_7t 0x0000000008000474 0x0
.glue_7t 0x0000000008000474 0x0 linker stubs
.vfp11_veneer 0x0000000008000474 0x0
.vfp11_veneer 0x0000000008000474 0x0 linker stubs
.v4_bx 0x0000000008000474 0x0
.v4_bx 0x0000000008000474 0x0 linker stubs
.iplt 0x0000000008000474 0x0
.iplt 0x0000000008000474 0x0 /tmp/blink.elf.OW8sUI.ltrans0.ltrans.o
.rel.dyn 0x0000000008000474 0x0
.rel.iplt 0x0000000008000474 0x0 /tmp/blink.elf.OW8sUI.ltrans0.ltrans.o
.ARM.extab
*(.ARM.extab* .gnu.linkonce.armextab.*)
.ARM
*(.ARM.exidx*)
.data 0x0000000020000000 0x0 load address 0x0000000008000474
0x0000000020000000 . = ALIGN (0x4)
0x0000000020000000 _sdata = .
*(.data*)
0x0000000020000000 . = ALIGN (0x4)
0x0000000020000000 _edata = .
.igot.plt 0x0000000020000000 0x0 load address 0x0000000008000474
.igot.plt 0x0000000020000000 0x0 /tmp/blink.elf.OW8sUI.ltrans0.ltrans.o
.myvars 0x0000000008000474 0x38c
0x0000000008000800 . = ALIGN (_BLOCKSIZE)
*fill* 0x0000000008000474 0x38c
0x0000000008000800 __varsstart = ABSOLUTE (.)
*(.myvars)
0x0000000008000474 _ldata = LOADADDR (.data)
.bss 0x0000000020000000 0x4
0x0000000020000000 . = ALIGN (0x4)
0x0000000020000000 _sbss = .
*(.bss*)
.bss 0x0000000020000000 0x4 /tmp/blink.elf.OW8sUI.ltrans0.ltrans.o
*(COMMON)
0x0000000020000004 . = ALIGN (0x4)
0x0000000020000004 _ebss = .
0x0000000020008000 PROVIDE (_stack = (ORIGIN (ram) + LENGTH (ram)))
OUTPUT(mk/blink.elf elf32-littlearm)
LOAD linker stubs
.comment 0x0000000000000000 0x4c
.comment 0x0000000000000000 0x4c /tmp/blink.elf.OW8sUI.ltrans0.ltrans.o
0x4d (size before relaxing)
.ARM.attributes
0x0000000000000000 0x32
.ARM.attributes
0x0000000000000000 0x32 /tmp/blink.elf.OW8sUI.ltrans0.ltrans.o
Cross Reference Table
Symbol File
SysFreq mk/startup.o (symbol from plugin)
mk/systick_blink.o (symbol from plugin)
_ebss /tmp/blink.elf.OW8sUI.ltrans0.ltrans.o
mk/startup.o (symbol from plugin)
_edata /tmp/blink.elf.OW8sUI.ltrans0.ltrans.o
mk/startup.o (symbol from plugin)
_ldata /tmp/blink.elf.OW8sUI.ltrans0.ltrans.o
mk/startup.o (symbol from plugin)
_sbss /tmp/blink.elf.OW8sUI.ltrans0.ltrans.o
mk/startup.o (symbol from plugin)
_sdata /tmp/blink.elf.OW8sUI.ltrans0.ltrans.o
mk/startup.o (symbol from plugin)
_stack /tmp/blink.elf.OW8sUI.ltrans0.ltrans.o
mk/startup.o (symbol from plugin)
adc12_isr mk/startup.o (symbol from plugin)
adc3_isr mk/startup.o (symbol from plugin)
adc4_isr mk/startup.o (symbol from plugin)
adc5_isr mk/startup.o (symbol from plugin)
aes_isr mk/startup.o (symbol from plugin)
blocking_handler mk/startup.o (symbol from plugin)
bus_fault_handler /tmp/blink.elf.OW8sUI.ltrans0.ltrans.o
mk/startup.o (symbol from plugin)
comp123_isr mk/startup.o (symbol from plugin)
comp456_isr mk/startup.o (symbol from plugin)
comp7_isr mk/startup.o (symbol from plugin)
cordic_isr mk/startup.o (symbol from plugin)
crs_isr mk/startup.o (symbol from plugin)
debug_monitor_handler /tmp/blink.elf.OW8sUI.ltrans0.ltrans.o
mk/startup.o (symbol from plugin)
dma1_channel1_isr mk/startup.o (symbol from plugin)
dma1_channel2_isr mk/startup.o (symbol from plugin)
dma1_channel3_isr mk/startup.o (symbol from plugin)
dma1_channel4_isr mk/startup.o (symbol from plugin)
dma1_channel5_isr mk/startup.o (symbol from plugin)
dma1_channel6_isr mk/startup.o (symbol from plugin)
dma1_channel7_isr mk/startup.o (symbol from plugin)
dma1_channel8_isr mk/startup.o (symbol from plugin)
dma2_channel1_isr mk/startup.o (symbol from plugin)
dma2_channel2_isr mk/startup.o (symbol from plugin)
dma2_channel3_isr mk/startup.o (symbol from plugin)
dma2_channel4_isr mk/startup.o (symbol from plugin)
dma2_channel5_isr mk/startup.o (symbol from plugin)
dma2_channel6_isr mk/startup.o (symbol from plugin)
dma2_channel7_isr mk/startup.o (symbol from plugin)
dma2_channel8_isr mk/startup.o (symbol from plugin)
dmamux_ovr_isr mk/startup.o (symbol from plugin)
exti0_isr mk/startup.o (symbol from plugin)
exti15_10_isr mk/startup.o (symbol from plugin)
exti1_isr mk/startup.o (symbol from plugin)
exti2_isr mk/startup.o (symbol from plugin)
exti3_isr mk/startup.o (symbol from plugin)
exti4_isr mk/startup.o (symbol from plugin)
exti9_5_isr mk/startup.o (symbol from plugin)
fdcan1_it0_isr mk/startup.o (symbol from plugin)
fdcan1_it1_isr mk/startup.o (symbol from plugin)
fdcan2_it0_isr mk/startup.o (symbol from plugin)
fdcan2_it1_isr mk/startup.o (symbol from plugin)
fdcan3_it0_isr mk/startup.o (symbol from plugin)
fdcan3_it1_isr mk/startup.o (symbol from plugin)
flash_isr mk/startup.o (symbol from plugin)
fmac_isr mk/startup.o (symbol from plugin)
fpu_isr mk/startup.o (symbol from plugin)
fsmc_isr mk/startup.o (symbol from plugin)
hard_fault_handler /tmp/blink.elf.OW8sUI.ltrans0.ltrans.o
mk/startup.o (symbol from plugin)
hrtim_fault_isr mk/startup.o (symbol from plugin)
hrtim_master_isr mk/startup.o (symbol from plugin)
hrtim_tima_isr mk/startup.o (symbol from plugin)
hrtim_timb_isr mk/startup.o (symbol from plugin)
hrtim_timc_isr mk/startup.o (symbol from plugin)
hrtim_timd_isr mk/startup.o (symbol from plugin)
hrtim_time_isr mk/startup.o (symbol from plugin)
hrtim_timf_isr mk/startup.o (symbol from plugin)
i2c1_er_isr mk/startup.o (symbol from plugin)
i2c1_ev_isr mk/startup.o (symbol from plugin)
i2c2_er_isr mk/startup.o (symbol from plugin)
i2c2_ev_isr mk/startup.o (symbol from plugin)
i2c3_er_isr mk/startup.o (symbol from plugin)
i2c3_ev_isr mk/startup.o (symbol from plugin)
i2c4_er_isr mk/startup.o (symbol from plugin)
i2c4_ev_isr mk/startup.o (symbol from plugin)
lptim1_isr mk/startup.o (symbol from plugin)
lpuart_isr mk/startup.o (symbol from plugin)
main mk/systick_blink.o (symbol from plugin)
mk/startup.o (symbol from plugin)
mem_manage_handler /tmp/blink.elf.OW8sUI.ltrans0.ltrans.o
mk/startup.o (symbol from plugin)
nmi_handler /tmp/blink.elf.OW8sUI.ltrans0.ltrans.o
mk/startup.o (symbol from plugin)
null_handler mk/startup.o (symbol from plugin)
pend_sv_handler /tmp/blink.elf.OW8sUI.ltrans0.ltrans.o
mk/startup.o (symbol from plugin)
pvd_isr mk/startup.o (symbol from plugin)
quadspi_isr mk/startup.o (symbol from plugin)
rcc_isr mk/startup.o (symbol from plugin)
reset_handler /tmp/blink.elf.OW8sUI.ltrans0.ltrans.o
mk/startup.o (symbol from plugin)
rng_isr mk/startup.o (symbol from plugin)
rtc_alarm_isr mk/startup.o (symbol from plugin)
rtc_tamp_css_isr mk/startup.o (symbol from plugin)
rtc_wkup_isr mk/startup.o (symbol from plugin)
sai_isr mk/startup.o (symbol from plugin)
spi1_isr mk/startup.o (symbol from plugin)
spi2_isr mk/startup.o (symbol from plugin)
spi3_isr mk/startup.o (symbol from plugin)
spi4_isr mk/startup.o (symbol from plugin)
sv_call_handler /tmp/blink.elf.OW8sUI.ltrans0.ltrans.o
mk/startup.o (symbol from plugin)
sys_tick_handler mk/systick_blink.o (symbol from plugin)
mk/startup.o (symbol from plugin)
tim1_brk_tim15_isr mk/startup.o (symbol from plugin)
tim1_cc_isr mk/startup.o (symbol from plugin)
tim1_trg_tim17_isr mk/startup.o (symbol from plugin)
tim1_up_tim16_isr mk/startup.o (symbol from plugin)
tim20_brk_isr mk/startup.o (symbol from plugin)
tim20_cc_isr mk/startup.o (symbol from plugin)
tim20_trg_isr mk/startup.o (symbol from plugin)
tim20_up_isr mk/startup.o (symbol from plugin)
tim2_isr mk/startup.o (symbol from plugin)
tim3_isr mk/startup.o (symbol from plugin)
tim4_isr mk/startup.o (symbol from plugin)
tim5_isr mk/startup.o (symbol from plugin)
tim6_dac13under_isr mk/startup.o (symbol from plugin)
tim7_dac24under_isr mk/startup.o (symbol from plugin)
tim8_brk_isr mk/startup.o (symbol from plugin)
tim8_cc_isr mk/startup.o (symbol from plugin)
tim8_trg_isr mk/startup.o (symbol from plugin)
tim8_up_isr mk/startup.o (symbol from plugin)
uart4_isr mk/startup.o (symbol from plugin)
uart5_isr mk/startup.o (symbol from plugin)
ucpd1_isr mk/startup.o (symbol from plugin)
usage_fault_handler /tmp/blink.elf.OW8sUI.ltrans0.ltrans.o
mk/startup.o (symbol from plugin)
usart1_isr mk/startup.o (symbol from plugin)
usart2_isr mk/startup.o (symbol from plugin)
usart3_isr mk/startup.o (symbol from plugin)
usb_hp_isr mk/startup.o (symbol from plugin)
usb_lp_isr mk/startup.o (symbol from plugin)
usb_wakeup_isr mk/startup.o (symbol from plugin)
vector_table /tmp/blink.elf.OW8sUI.ltrans0.ltrans.o
mk/startup.o (symbol from plugin)
wwdg_isr mk/startup.o (symbol from plugin)

View File

@@ -0,0 +1,10 @@
mk/startup.o: ../inc/startup/vector.c ../inc/Fx/vector.h \
/opt/lib/gcc/arm-none-eabi/9.3.1/include/stdint.h \
/opt/arm-none-eabi/include/stdint.h \
/opt/arm-none-eabi/include/machine/_default_types.h \
/opt/arm-none-eabi/include/sys/features.h \
/opt/arm-none-eabi/include/_newlib_version.h \
/opt/arm-none-eabi/include/sys/_intsup.h \
/opt/arm-none-eabi/include/sys/_stdint.h ../inc/Fx/common_macros.h \
../inc/Fx/stm32g4xx.h ../inc/Fx/stm32g431xx.h ../inc/cm/core_cm4.h \
../inc/cm/core_cmInstr.h ../inc/cm/core_cmFunc.h ../inc/cm/core_cmSimd.h

BIN
G4:G431/blink/mk/startup.o Normal file

Binary file not shown.

View File

@@ -0,0 +1,11 @@
mk/systick_blink.o: systick_blink.c ../inc/Fx/stm32g4.h \
../inc/Fx/vector.h /opt/lib/gcc/arm-none-eabi/9.3.1/include/stdint.h \
/opt/arm-none-eabi/include/stdint.h \
/opt/arm-none-eabi/include/machine/_default_types.h \
/opt/arm-none-eabi/include/sys/features.h \
/opt/arm-none-eabi/include/_newlib_version.h \
/opt/arm-none-eabi/include/sys/_intsup.h \
/opt/arm-none-eabi/include/sys/_stdint.h ../inc/Fx/stm32g4xx.h \
../inc/Fx/stm32g431xx.h ../inc/cm/core_cm4.h ../inc/cm/core_cmInstr.h \
../inc/cm/core_cmFunc.h ../inc/cm/core_cmSimd.h \
../inc/Fx/common_macros.h

Binary file not shown.

View File

@@ -0,0 +1,4 @@
set FLASH_SIZE 0x20000
source [find interface/stlink-v2-1.cfg]
source [find target/stm32g4x.cfg]

View File

@@ -0,0 +1,73 @@
/*
* This file is part of the blink project.
* Copyright 2023 Edward V. Emelianov <edward.emelianoff@gmail.com>.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#include "stm32g4.h"
// KEY (intpullup->0) - PC13
// LED - PC6
#define KEY_PORT GPIOC
#define KEY_PIN (1<<13)
#define LED_PORT GPIOC
#define LED_PIN (1<<6)
#define KEY_PRESSED() (pin_read(KEY_PORT, KEY_PIN) == 1)
#define LED_ON() do{pin_set(LED_PORT, LED_PIN);}while(0)
#define LED_OFF() do{pin_clear(LED_PORT, LED_PIN);}while(0)
#define LED_TOGG() do{pin_toggle(LED_PORT, LED_PIN);}while(0)
static volatile uint32_t Tms = 0;
/* Called when systick fires */
void sys_tick_handler(void){
++Tms;
}
static void gpio_setup(void){
RCC->AHB2ENR = RCC_AHB2ENR_GPIOCEN; // enable PC
// set PC6 as push-pull output, PC13 is pulldown input, other as default (AIN)
GPIOC->MODER = (0xffffffff & ~(GPIO_MODER_MODE6 | GPIO_MODER_MODE13)) | MODER_O(6) | MODER_I(13);
GPIOC->PUPDR = PUPD_PD(13); // pulldown
GPIOC->OTYPER = OTYPER_PP(6); // push-pull (default)
// count milliseconds
SysTick_Config(SysFreq / 1000); // arg should be < 0xffffff
}
static const uint32_t L[] = {300, 125,100,125,100,125,200, 350,100,350,100,350,200, 125,100,125,100,125, 1000};
int main(void){
StartHSE();
gpio_setup();
uint32_t idx = 0, Told = 0;
int pressed = 0;
/* Do nothing in main loop */
while (1){
if(KEY_PRESSED()){ // key not pressed - 'sos'
if(idx & 1) LED_ON();
else LED_OFF();
while(Tms - Told < L[idx]);
if(++idx == 19) idx = 0;
}else{ // key pressed - blink with period of 1s
if(pressed){
idx = 0;
pressed = 0;
}
LED_TOGG();
while(Tms - Told < 500);
}
Told = Tms;
}
}