diff --git a/Core/Inc/main.h b/Core/Inc/main.h
index 07c7ba7..5a9f639 100644
--- a/Core/Inc/main.h
+++ b/Core/Inc/main.h
@@ -49,7 +49,6 @@ extern "C"
#include "lib.h"
#include "bsp.h"
-#include "board.h"
/* USER CODE END Includes */
@@ -78,6 +77,10 @@ extern "C"
/* Private defines -----------------------------------------------------------*/
#define LED_BLUE_Pin LL_GPIO_PIN_13
#define LED_BLUE_GPIO_Port GPIOC
+#define OLED_SDA_Pin LL_GPIO_PIN_12
+#define OLED_SDA_GPIO_Port GPIOB
+#define OLDE_SCK_Pin LL_GPIO_PIN_13
+#define OLDE_SCK_GPIO_Port GPIOB
#ifndef NVIC_PRIORITYGROUP_0
#define NVIC_PRIORITYGROUP_0 ((uint32_t)0x00000007) /*!< 0 bit for pre-emption priority, \
4 bits for subpriority */
diff --git a/Core/Src/gpio.c b/Core/Src/gpio.c
index afe6aef..863da5b 100644
--- a/Core/Src/gpio.c
+++ b/Core/Src/gpio.c
@@ -55,6 +55,9 @@ void MX_GPIO_Init(void)
/**/
LL_GPIO_ResetOutputPin(LED_BLUE_GPIO_Port, LED_BLUE_Pin);
+ /**/
+ LL_GPIO_ResetOutputPin(GPIOB, OLED_SDA_Pin|OLDE_SCK_Pin);
+
/**/
GPIO_InitStruct.Pin = LED_BLUE_Pin;
GPIO_InitStruct.Mode = LL_GPIO_MODE_OUTPUT;
@@ -76,12 +79,19 @@ void MX_GPIO_Init(void)
/**/
GPIO_InitStruct.Pin = LL_GPIO_PIN_0|LL_GPIO_PIN_1|LL_GPIO_PIN_2|LL_GPIO_PIN_10
- |LL_GPIO_PIN_11|LL_GPIO_PIN_12|LL_GPIO_PIN_13|LL_GPIO_PIN_14
- |LL_GPIO_PIN_15|LL_GPIO_PIN_3|LL_GPIO_PIN_4|LL_GPIO_PIN_5
- |LL_GPIO_PIN_6|LL_GPIO_PIN_7|LL_GPIO_PIN_8|LL_GPIO_PIN_9;
+ |LL_GPIO_PIN_11|LL_GPIO_PIN_14|LL_GPIO_PIN_15|LL_GPIO_PIN_3
+ |LL_GPIO_PIN_4|LL_GPIO_PIN_5|LL_GPIO_PIN_6|LL_GPIO_PIN_7
+ |LL_GPIO_PIN_8|LL_GPIO_PIN_9;
GPIO_InitStruct.Mode = LL_GPIO_MODE_ANALOG;
LL_GPIO_Init(GPIOB, &GPIO_InitStruct);
+ /**/
+ GPIO_InitStruct.Pin = OLED_SDA_Pin|OLDE_SCK_Pin;
+ GPIO_InitStruct.Mode = LL_GPIO_MODE_OUTPUT;
+ GPIO_InitStruct.Speed = LL_GPIO_SPEED_FREQ_LOW;
+ GPIO_InitStruct.OutputType = LL_GPIO_OUTPUT_PUSHPULL;
+ LL_GPIO_Init(GPIOB, &GPIO_InitStruct);
+
}
/* USER CODE BEGIN 2 */
diff --git a/Core/Src/main.c b/Core/Src/main.c
index ce57922..3e6d19d 100644
--- a/Core/Src/main.c
+++ b/Core/Src/main.c
@@ -24,6 +24,7 @@
/* Private includes ----------------------------------------------------------*/
/* USER CODE BEGIN Includes */
+#include "board.h"
#include "app.h"
/* USER CODE END Includes */
@@ -103,6 +104,7 @@ int main(void)
MX_DMA_Init();
MX_USART1_UART_Init();
/* USER CODE BEGIN 2 */
+ my_mem_init(SRAMIN); // Initialize internal memory pool 1
board_init();
app_init();
/* USER CODE END 2 */
diff --git a/MDK-ARM/motor.uvoptx b/MDK-ARM/motor.uvoptx
index 2db6974..e037c0c 100644
--- a/MDK-ARM/motor.uvoptx
+++ b/MDK-ARM/motor.uvoptx
@@ -103,7 +103,7 @@
1
0
0
- 0
+ 3
@@ -114,7 +114,7 @@
- BIN\UL2CM3.DLL
+ BIN\CMSIS_AGDI.dll
@@ -125,7 +125,7 @@
0
CMSIS_AGDI
- UL2CM3(-S0 -C0 -P0 ) -FN1 -FC1000 -FD20000000 -FF0STM32F10x_128 -FL020000 -FS08000000 -FP0($$Device:STM32F103C8$Flash\STM32F10x_128.FLM)
+ -X"Any" -UAny -O206 -S0 -C0 -P00000000 -N00("ARM CoreSight SW-DP") -D00(1BA01477) -L00(0) -TO65554 -TC10000000 -TT10000000 -TP20 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO15 -FD20000000 -FC1000 -FN1 -FF0STM32F10x_128.FLM -FS08000000 -FL020000 -FP0($$Device:STM32F103C8$Flash\STM32F10x_128.FLM)
0
@@ -324,7 +324,7 @@
User/system
- 0
+ 1
0
0
0
@@ -412,6 +412,18 @@
0
0
+
+ 5
+ 16
+ 1
+ 0
+ 0
+ 0
+ ..\User\system\bsp\i2cs.c
+ i2cs.c
+ 0
+ 0
+
@@ -422,7 +434,7 @@
0
6
- 16
+ 17
1
0
0
@@ -434,7 +446,7 @@
6
- 17
+ 18
1
0
0
@@ -446,7 +458,7 @@
6
- 18
+ 19
1
0
0
@@ -458,7 +470,7 @@
6
- 19
+ 20
1
0
0
@@ -470,7 +482,7 @@
6
- 20
+ 21
1
0
0
@@ -482,7 +494,7 @@
6
- 21
+ 22
1
0
0
@@ -494,7 +506,7 @@
6
- 22
+ 23
1
0
0
@@ -506,7 +518,7 @@
6
- 23
+ 24
1
0
0
@@ -518,7 +530,7 @@
6
- 24
+ 25
1
0
0
@@ -530,7 +542,7 @@
6
- 25
+ 26
1
0
0
@@ -542,7 +554,7 @@
6
- 26
+ 27
1
0
0
@@ -554,7 +566,7 @@
6
- 27
+ 28
1
0
0
@@ -566,7 +578,7 @@
6
- 28
+ 29
1
0
0
@@ -578,7 +590,7 @@
6
- 29
+ 30
1
0
0
@@ -590,7 +602,7 @@
6
- 30
+ 31
1
0
0
@@ -610,7 +622,7 @@
0
7
- 31
+ 32
1
0
0
@@ -622,7 +634,7 @@
7
- 32
+ 33
1
0
0
@@ -634,7 +646,7 @@
7
- 33
+ 34
1
0
0
@@ -646,7 +658,7 @@
7
- 34
+ 35
1
0
0
@@ -658,7 +670,7 @@
7
- 35
+ 36
1
0
0
@@ -670,7 +682,7 @@
7
- 36
+ 37
1
0
0
@@ -682,7 +694,7 @@
7
- 37
+ 38
1
0
0
@@ -702,7 +714,7 @@
0
8
- 38
+ 39
1
0
0
@@ -712,6 +724,18 @@
0
0
+
+ 8
+ 40
+ 1
+ 0
+ 0
+ 0
+ ..\User\board\ssd1306_oled.c
+ ssd1306_oled.c
+ 0
+ 0
+
diff --git a/MDK-ARM/motor.uvprojx b/MDK-ARM/motor.uvprojx
index d317b46..1f5c832 100644
--- a/MDK-ARM/motor.uvprojx
+++ b/MDK-ARM/motor.uvprojx
@@ -580,6 +580,11 @@
1
..\User\system\bsp\uarts.c
+
+ i2cs.c
+ 1
+ ..\User\system\bsp\i2cs.c
+
@@ -1136,6 +1141,11 @@
1
..\User\board\board.c
+
+ ssd1306_oled.c
+ 1
+ ..\User\board\ssd1306_oled.c
+
diff --git a/MDK-ARM/motor/motor.hex b/MDK-ARM/motor/motor.hex
index 2a4c28d..24ec225 100644
--- a/MDK-ARM/motor/motor.hex
+++ b/MDK-ARM/motor/motor.hex
@@ -1,217 +1,361 @@
:020000040800F2
-:100000002804002005010008210800087B010008E1
-:100010001D080008710100085D0A000800000000CA
-:10002000000000000000000000000000650900085A
-:10003000790100080000000067080008670900084F
-:100040001F010008650800081F0100081F010008C3
+:100000006018002005010008690800089701000831
+:100010006508000871010008A50A0008000000003A
+:10002000000000000000000000000000AD09000812
+:100030009501000800000000AF080008AF090008A3
+:100040001F010008AD0800081F0100081F0100087B
:100050001F0100081F0100081F0100081F01000800
:100060001F0100081F0100081F0100081F010008F0
-:100070001F0100081F010008750100087701000832
+:100070001F0100081F0100089101000893010008FA
:100080001F0100081F0100081F0100081F010008D0
:100090001F0100081F0100081F0100081F010008C0
:1000A0001F0100081F0100081F0100081F010008B0
:1000B0001F0100081F0100081F0100081F010008A0
:1000C0001F0100081F0100081F0100081F01000890
-:1000D0001F0100085B0A00081F0100081F0100083B
+:1000D0001F010008A30A00081F0100081F010008F3
:1000E0001F0100081F0100081F010008DFF810D0E1
-:1000F00000F02CF800480047A10B0008AFF3008087
-:10010000280400200648804706480047FEE7FEE72F
+:1000F00000F02CF8004800475D110008AFF30080C5
+:10010000601800200648804706480047FEE7FEE7E3
:10011000FEE7FEE7FEE7FEE7FEE7FEE7FEE7FEE7B7
-:10012000590A0008ED000008D2B201E000F8012BE6
+:10012000A10A0008ED000008D2B201E000F8012B9E
:10013000491EFBD270470022F6E710B513460A4667
:1001400004461946FFF7F0FF204610BD064C074D48
:1001500006E0E06840F0010394E807009847103497
-:10016000AC42F6D3FFF7C6FF0C0D00082C0D0008BB
-:1001700000BFFEE770477047704700BFFEE7000012
-:1001800008B5054989690143034A916111468969A6
-:100190000140009100BF08BD0010024008B50549AC
+:10016000AC42F6D3FFF7C6FFE815000808160008F2
+:1001700000BFFEE770B504460D4600BF2CB901F084
+:10018000E9F901E000BF00BFFCE700BF012070BD3E
+:1001900070477047704700BFFEE7000008B505498B
:1001A00089690143034A91611146896901400091BF
-:1001B00000BF08BD0010024030B54B1E054CE35C8B
-:1001C000C35823F4405313434C1E024D2C5D03517E
-:1001D00030BD0000D40C000830B54B1E054CE35C6C
-:1001E000C35844F21004A34313434C1E014D2C5D2D
-:1001F000035130BDD40C000830B54B1E054CE35CF8
-:10020000C35823F0800313434C1E024D2C5D035151
-:1002100030BD0000D40C000830B54B1E054CE35C2B
-:10022000C35823F4406313434C1E024D2C5D03510D
-:1002300030BD0000D40C000830B54B1E054CE35C0B
-:10024000C35823F0200313434C1E024D2C5D035171
-:1002500030BD0000D40C000830B54B1E054CE35CEB
-:10026000C35823F0400313434C1E024D2C5D035131
-:1002700030BD0000D40C000830B54B1E054CE35CCB
-:10028000C35823F4407313434C1E024D2C5D03519D
-:1002900030BD0000D40C00082DE9F04102460B46A9
-:1002A0001868C0F30F2595FAA5F0B0FA80F480E045
-:1002B0000120A040284000287AD0082C04D240F227
-:1002C000011000FA04F106E0A4F108004FF0011655
-:1002D000864046F08061586808280ED11869D668B3
-:1002E00026EA11260F0A97FAA7F7B7FA87F700FA56
-:1002F00007F73E43D66000BF00BF586802EB1166A7
-:1003000091FAA1FCBCFA8CFC4FEA8C084FF00F0C60
-:100310000CFA08FC376827EA0C0791FAA1FCBCFA32
-:100320008CFC4FEA8C0C00FA0CFC47EA0C07376097
-:1003300000BF5868012802D05868092838D1986849
-:1003400002EB116691FAA1FCBCFA8CFC4FEA8C0816
-:100350004FF0030C0CFA08FC376827EA0C0791FAF7
-:10036000A1FCBCFA8CFC4FEA8C0C00FA0CFC47EAAE
-:100370000C07376000BFD86802EB116691FAA1FC48
-:10038000BCFA8CFC4FEA8C084FF0040C0CFA08FC09
-:10039000376827EA0C0791FAA1FCBCFA8CFC4FEAFB
-:1003A0008C0C00FA0CFC47EA0C07376000BF00BF5A
-:1003B000641C25FA04F000287FF47AAFBDE8F081D0
-:1003C0004FF47A71B0FBF1F2521E4FF0E0235A6104
-:1003D00000229A6105221A6100BF704710B50446D9
-:1003E00000F076FA2060206800F03EFA60606068F5
-:1003F00000F04AFAA060606800F058FAE06010BDB2
-:100400000149086070470000000000202DE9FF410D
-:1004100004460D4601270026204600F041F800283A
-:1004200033D1E9686868084329690843E16841F203
-:100430000C6291430843E060A868216921F44051AF
-:100440000143216100BF6869616921F44071014382
-:10045000616100BF6846FFF7C1FF0E48844201D1C9
-:10046000039E08E00C48844201D1029E03E00B4841
-:10047000844200D1029E46B1286830B1002731463F
-:1004800020462A6800F011F800BF384604B0BDE8E5
-:10049000F081000000380140004400400048004066
-:1004A0000146C868C0F34030704770B501EBC10326
-:1004B00003EB01139400B3FBF4F301EBC10404EB71
-:1004C00001149500B4FBF5F46425B4FBF5F404EBDA
-:1004D000C40505EB0414A3EB8403322404EB0313DB
-:1004E0006424B3FBF4F303F0F00301EBC10404EB69
-:1004F00001149500B4FBF5F46425B4FBF5F403EBAB
-:10050000041401EBC10303EB01139500B3FBF5F3F6
-:1005100001EBC10505EB01159600B5FBF6F5642668
-:10052000B5FBF6F505EBC50606EB0515A3EB850354
-:10053000322505EB03136425B3FBF5F303F00F033A
-:1005400023449BB2836070BD38B5012014494969CA
-:100550000143134A5161114649690140009100BFAE
-:1005600000BF00F08BFA05460022114600F05AF950
-:10057000044621460E2000F089FA0E2000F070FAA1
-:1005800000F07CFA05460022114600F04BF90446C3
-:1005900021460F2000F07AFA0F2000F061FA38BDF2
-:1005A0000010024000B585B014216846FFF7C3FD76
-:1005B0001020FFF7E5FD2020FFF7E2FD0420FFF704
-:1005C000DFFD0820FFF7DCFD1548C0F30F21154AB9
-:1005D000516100BF00900120019002200290002094
-:1005E000039069461046FFF757FE0F480090002021
-:1005F000019069460B48FFF74FFE0C480090002021
-:10060000019069460A48FFF747FE6FF07B40009073
-:100610000020019069460748FFF73EFE05B000BD87
-:100620002000200400100140C000C004FFFF990416
-:1006300000080140000C01402DE9F0418CB01C2164
-:1006400005A8FFF778FD14216846FFF774FD4FF405
-:100650008040FFF7A3FD0420FFF7A0FD684800904D
-:10066000092001900320029000200390694665480C
-:10067000FFF712FE6448009004200190694661482B
-:10068000FFF70AFE002205216048FFF7A5FD0022C2
-:1006900005215E48FFF790FD002205215B48FFF72A
-:1006A000CBFD002205215948FFF7D6FD8022052108
-:1006B0005648FFF7A1FD002205215448FFF7DCFD55
-:1006C000002205215148FFF7A7FD102204214F48C1
-:1006D000FFF782FD002204214C48FFF76DFD002248
-:1006E00004214A48FFF7A8FD002204214748FFF7EC
-:1006F000B3FD802204214548FFF77EFD002204213E
-:100700004248FFF7B9FD002204214048FFF784FD6D
-:1007100025213F4B1B68C3F30220002425460346D6
-:10072000C3F1070CBCF1040F02D94FF0040C01E037
-:10073000C3F1070C674603F1040CBCF1070F02D2AA
-:100740004FF0000C01E0A3F1030C66464FF0010CE2
-:100750000CFA07FCACF1010C0CEA040C0CFA06FCD8
-:100760004FF0010808FA06F8A8F1010808EA0508A0
-:100770004CEA080200BF002904DB1007030E2548DD
-:10078000435407E01007040E21480C3001F00F031A
-:100790001B1FC45400BF2520002809DB00F01F02E6
-:1007A000012191404209920002F1E022C2F80011B9
-:1007B00000BF4FF4E13005900020069007900890AC
-:1007C0000C20099000200A900B9005A91248FFF711
-:1007D0001DFE00BF1048006920F490400E490861DA
-:1007E0000846406920F02A00486100BF00BF084663
-:1007F000C06840F40050C86000BF0CB0BDE8F08194
-:100800000200020400080140040004040000024049
-:100810000CED00E000E400E00038014000BFFEE71E
-:1008200000BFFEE7F0B503460C4603F00701C1F137
-:100830000700042801D9042001E0C1F107000646A1
-:10084000081D072801D2002000E0C81E054601202F
-:10085000B040401E2040A8400127AF407F1E1740F7
-:100860003843F0BD70477047014600BF04484068F8
-:1008700000F0F0000009034A125C21FA02F0704710
-:1008800000100240DB0C0008014600BF054840682C
-:1008900000F4E060044A02EB1020027821FA02F032
-:1008A0007047000000100240EB0C0008014600BF3A
-:1008B0000548406800F46050044A02EBD0200278FA
-:1008C00021FA02F07047000000100240EB0C000813
-:1008D00010B5002400BF0B48406800F00C0020B1A8
-:1008E000042804D0082808D103E0074C07E0064C90
-:1008F00005E000F00BF8044601E0034C00BF00BF28
-:10090000204610BD0010024000127A000021002293
-:1009100000BF1148406800F4803002461AB1B2F5B9
-:10092000803F0CD101E00D490BE000BF0A48406850
-:10093000C0F34040401C0A4BB3FBF0F101E0074913
-:1009400000BF00BF00BF0448406800F470100223DD
-:1009500003EB9040484370470010024000093D00FF
-:1009600000127A007047704710B5022037490968B5
-:1009700021F007010143354A116000BF00BF00BFED
-:100980003248006800F007000228F8D100BF304864
-:10099000006840F480302E49086000BF00BF00BFEF
-:1009A0002B480068C0F340400028F8D04FF4803056
-:1009B0004FF4E011264A526822F47C1200F44033CE
-:1009C0000B431A43224B5A6000BF00BF1846006811
-:1009D00040F080701946086000BF00BF00BF1C488F
-:1009E0000068C0F340600028F8D00020184949682A
-:1009F00021F0F0010143164A516000BF1015114665
-:100A0000496821F4E0610143516000BF00201146B4
-:100A1000496821F460510143516000BF0220114632
-:100A2000496821F003010143516000BF00BF00BFCE
-:100A30000748406800F00C000828F8D10548FFF787
-:100A4000BFFC0448FFF7DCFC10BD000000200240A2
-:100A50000010024000A24A047047704700BFFEE742
-:100A6000002809DB00F01F02012191404209920099
-:100A700002F1E022C2F8001170470000024800684D
-:100A8000C0F30220704700000CED00E010B5002814
-:100A900004DB0A07130E054A135406E00A07140E76
-:100AA000034A00F00F031B1FD45410BD00E400E004
-:100AB00018ED00E002E008C8121F08C1002AFAD1B0
-:100AC00070477047002001E001C1121F002AFBD1CE
-:100AD00070470000014601F1100000E0001D0268AF
-:100AE0001AB9024A12689042F8D3704710000020E9
-:100AF00010B50648046803E02046FFF7EBFF044604
-:100B0000034800688442F7D310BD00000C000020A9
-:100B100010000020002001490860704704000020F8
-:100B200010B5024800F006F810BD000004000020D7
-:100B30007047000038B5014600200090086810B1E9
-:100B4000142821D116E000BF124B134CE068C3F308
-:100B50000F2222EA000400EA020544EA05440E4D91
-:100B60002C6100BF00BF0D480068486000BF142022
-:100B7000086000BF094A48681268101A642801D248
-:100B8000002038BD00BFDFE7002008600090032090
-:100B9000F7E70000200020040010014014000020AE
-:100BA00008B50120464989690143454A91611146CA
-:100BB00089690140009100BF00BF00071146C96963
-:100BC0000143D1611146C9690140009100BF00BFD6
-:100BD000032002463B4B19684FF6FF0319403A4B7E
-:100BE0000B4343EA0221374B196000BF01211B6808
-:100BF000C3F30220002425460346C3F1070CBCF1D1
-:100C0000040F02D94FF0040C01E0C3F1070C674652
-:100C100003F1040CBCF1070F02D24FF0000C01E00D
-:100C2000A3F1030C66464FF0010C0CFA07FCACF183
-:100C3000010C0CEA040C0CFA06FC4FF0010808FA4F
-:100C400006F8A8F1010808EA05084CEA080200BF06
-:100C5000002904DB1007030E1C48435407E010076B
-:100C6000040E18480C3001F00F031B1FC45400BFC2
-:100C70000120002809DB00F01F02012191404209F8
-:100C8000920002F1E022C2F8001100BF00BF10483C
-:100C9000406820F0E06040F000700D49486000BFFF
-:100CA000FFF762FEFFF77EFCFFF74EFCFFF7C4FC88
-:100CB000FFF73EFFFFF72EFF01E0FFF731FFFCE7F4
-:100CC000001002400CED00E00000FA0500E400E036
-:100CD00000000140081C3044586C800000000000F7
-:100CE00000000001020304060708090000000001DB
-:100CF0000203045F6C697374006C69737420616C27
-:100D00006C20636F6D6D616E640000002C0D000837
-:100D10000000002028000000B40A0008540D00085C
-:100D20002800002000040000C40A00080024F40089
-:100D300000000000000000000000000000000000B3
-:100D400000000000F30C0008F90C0008C6E533B4FD
-:040D5000F10A00089C
+:1001B00000BF08BD0010024008B505498969014328
+:1001C000034A9161114689690140009100BF08BD51
+:1001D0000010024030B54B1E054CE35CC35823F4BD
+:1001E000405313434C1E024D2C5D035130BD0000A3
+:1001F0009815000830B54B1E054CE35CC35844F21B
+:100200001004A34313434C1E014D2C5D035130BD1C
+:100210009815000830B54B1E054CE35CC35823F01D
+:10022000800313434C1E024D2C5D035130BD000072
+:100230009815000830B54B1E054CE35CC35823F4F9
+:10024000406313434C1E024D2C5D035130BD000032
+:100250009815000830B54B1E054CE35CC35823F0DD
+:10026000200313434C1E024D2C5D035130BD000092
+:100270009815000830B54B1E054CE35CC35823F0BD
+:10028000400313434C1E024D2C5D035130BD000052
+:100290009815000830B54B1E054CE35CC35823F499
+:1002A000407313434C1E024D2C5D035130BD0000C2
+:1002B000981500082DE9F04102460B461868C0F376
+:1002C0000F2595FAA5F0B0FA80F480E00120A04057
+:1002D000284000287AD0082C04D240F2011000FAFD
+:1002E00004F106E0A4F108004FF00116864046F044
+:1002F0008061586808280ED11869D66826EA112648
+:100300000F0A97FAA7F7B7FA87F700FA07F73E43FD
+:10031000D66000BF00BF586802EB116691FAA1FCDD
+:10032000BCFA8CFC4FEA8C084FF00F0C0CFA08FC5E
+:10033000376827EA0C0791FAA1FCBCFA8CFC4FEA5B
+:100340008C0C00FA0CFC47EA0C07376000BF5868B9
+:10035000012802D05868092838D1986802EB116644
+:1003600091FAA1FCBCFA8CFC4FEA8C084FF0030C0C
+:100370000CFA08FC376827EA0C0791FAA1FCBCFAD2
+:100380008CFC4FEA8C0C00FA0CFC47EA0C07376037
+:1003900000BFD86802EB116691FAA1FCBCFA8CFC94
+:1003A0004FEA8C084FF0040C0CFA08FC376827EA77
+:1003B0000C0791FAA1FCBCFA8CFC4FEA8C0C00FAF9
+:1003C0000CFC47EA0C07376000BF00BF641C25FA2D
+:1003D00004F000287FF47AAFBDE8F081C1F30F226A
+:1003E000426170474FF47A71B0FBF1F2521E4FF048
+:1003F000E0235A6100229A6105221A6100BF70470A
+:1004000010B5044600F088FA2060206800F050FA29
+:100410006060606800F05CFAA060606800F06AFAF2
+:10042000E06010BD01490860704700000000002036
+:100430002DE9FF4104460D4601270026204600F025
+:1004400041F8002833D1E9686868084329690843FE
+:10045000E16841F20C6291430843E060A8682169B9
+:1004600021F440510143216100BF6869616921F4B1
+:1004700040710143616100BF6846FFF7C1FF0E484C
+:10048000844201D1039E08E00C48844201D1029EBF
+:1004900003E00B48844200D1029E46B1286830B187
+:1004A0000027314620462A6800F011F800BF384680
+:1004B00004B0BDE8F0810000003801400044004075
+:1004C000004800400146C868C0F34030704770B52E
+:1004D00001EBC10303EB01139400B3FBF4F301EB55
+:1004E000C10404EB01149500B4FBF5F46425B4FBDE
+:1004F000F5F404EBC40505EB0414A3EB84033224E8
+:1005000004EB03136424B3FBF4F303F0F00301EBF7
+:10051000C10404EB01149500B4FBF5F46425B4FBAD
+:10052000F5F403EB041401EBC10303EB0113950095
+:10053000B3FBF5F301EBC10505EB01159600B5FB27
+:10054000F6F56426B5FBF6F505EBC50606EB0515D5
+:10055000A3EB8503322505EB03136425B3FBF5F309
+:1005600003F00F0323449BB2836070BD38B50120B4
+:10057000144949690143134A5161114649690140CF
+:10058000009100BF00BF00F09DFA05460022114611
+:1005900000F06CF9044621460E2000F09BFA0E2074
+:1005A00000F082FA00F08EFA05460022114600F0B3
+:1005B0005DF9044621460F2000F08CFA0F2000F070
+:1005C00073FA38BD0010024000B585B014216846AA
+:1005D000FFF7B1FD1020FFF7E1FD2020FFF7DEFD62
+:1005E0000420FFF7DBFD0820FFF7D8FD1C491D485C
+:1005F000FFF7F4FE1C491D48FFF7F0FE1848009075
+:1006000001200190022002900020039069461548C5
+:10061000FFF750FE164800900020019069461148EF
+:10062000FFF748FE134800900020019069461248E9
+:10063000FFF740FE114800900020019069460B48EA
+:10064000FFF738FE08480090012001900220029038
+:100650000020039069460548FFF72CFE05B000BD59
+:10066000200020040010014030003004000C014044
+:10067000C000C004FFFF990400080140FFFFCF0441
+:100680002DE9F0418CB01C2105A8FFF754FD142181
+:100690006846FFF750FD4FF48040FFF78DFD0420C2
+:1006A000FFF78AFD6848009009200190032002901E
+:1006B0000020039069466548FFF7FCFD6448009000
+:1006C0000420019069466148FFF7F4FD00220521EE
+:1006D0006048FFF78FFD002205215E48FFF77AFD95
+:1006E000002205215B48FFF7B5FD0022052159488E
+:1006F000FFF7C0FD802205215648FFF78BFD002241
+:1007000005215448FFF7C6FD002205215148FFF797
+:1007100091FD102204214F48FFF76CFD00220421B7
+:100720004C48FFF757FD002204214A48FFF792FD8D
+:10073000002204214748FFF79DFD802204214548FF
+:10074000FFF768FD002204214248FFF7A3FD0022C5
+:1007500004214048FFF76EFD25213F4B1B68C3F382
+:100760000220002425460346C3F1070CBCF1040F08
+:1007700002D94FF0040C01E0C3F1070C674603F106
+:10078000040CBCF1070F02D24FF0000C01E0A3F102
+:10079000030C66464FF0010C0CFA07FCACF1010C9F
+:1007A0000CEA040C0CFA06FC4FF0010808FA06F8F3
+:1007B000A8F1010808EA05084CEA080200BF002970
+:1007C00004DB1007030E2548435407E01007040E0E
+:1007D00021480C3001F00F031B1FC45400BF25201B
+:1007E000002809DB00F01F0201219140420992001C
+:1007F00002F1E022C2F8001100BF4FF4E130059091
+:1008000000200690079008900C20099000200A9084
+:100810000B9005A91248FFF70BFE00BF10480069B6
+:1008200020F490400E4908610846406920F02A00F3
+:10083000486100BF00BF0846C06840F40050C8606F
+:1008400000BF0CB0BDE8F0810200020400080140C6
+:1008500004000404000002400CED00E000E400E0AD
+:100860000038014000BFFEE700BFFEE7F0B50346D9
+:100870000C4603F00701C1F10700042801D9042048
+:1008800001E0C1F107000646081D072801D200203B
+:1008900000E0C81E05460120B040401E2040A84090
+:1008A0000127AF407F1E17403843F0BD70477047A7
+:1008B000014600BF0448406800F0F0000009034A08
+:1008C000125C21FA02F07047001002409F150008E8
+:1008D000014600BF0548406800F4E060044A02EBAE
+:1008E0001020027821FA02F0704700000010024048
+:1008F000AF150008014600BF0548406800F460508D
+:10090000044A02EBD020027821FA02F0704700007E
+:1009100000100240AF15000810B5002400BF0B48BE
+:10092000406800F00C0020B1042804D0082808D149
+:1009300003E0074C07E0064C05E000F00BF8044626
+:1009400001E0034C00BF00BF204610BD0010024074
+:1009500000127A000021002200BF1148406800F414
+:10096000803002461AB1B2F5803F0CD101E00D494A
+:100970000BE000BF0A484068C0F34040401C0A4BEF
+:10098000B3FBF0F101E0074900BF00BF00BF04481E
+:10099000406800F47010022303EB90404843704716
+:1009A0000010024000093D0000127A0070477047B5
+:1009B00010B502203749096821F007010143354A83
+:1009C000116000BF00BF00BF3248006800F00700A0
+:1009D0000228F8D100BF3048006840F480302E492A
+:1009E000086000BF00BF00BF2B480068C0F3404054
+:1009F0000028F8D04FF480304FF4E011264A5268B6
+:100A000022F47C1200F440330B431A43224B5A6009
+:100A100000BF00BF1846006840F0807019460860AB
+:100A200000BF00BF00BF1C480068C0F34060002842
+:100A3000F8D000201849496821F0F0010143164A16
+:100A4000516000BF10151146496821F4E06101436F
+:100A5000516000BF00201146496821F460510143F4
+:100A6000516000BF02201146496821F00301014393
+:100A7000516000BF00BF00BF0748406800F00C0095
+:100A80000828F8D10548FFF7ADFC0448FFF7CAFC79
+:100A900010BD0000002002400010024000A24A04E5
+:100AA0007047704700BFFEE7002809DB00F01F0217
+:100AB000012191404209920002F1E022C2F80011A6
+:100AC0007047000002480068C0F302207047000031
+:100AD0000CED00E010B5002804DB0A07130E054AF0
+:100AE000135406E00A07140E034A00F00F031B1FFD
+:100AF000D45410BD00E400E018ED00E002E008C8A6
+:100B0000121F08C1002AFAD170477047002001E087
+:100B100001C1121F002AFBD170472DE9FC41044698
+:100B20000CB1012100E00021084640F26F21FFF7DF
+:100B300021FB25462C462E686F68D7E90401CDE9D4
+:100B400000016868D0F80CC097E80F00E047204625
+:100B500000F05CFAD6E90401CDE900012868D0F87C
+:100B600008C096E80F00E047204600F04FFAD6E9AB
+:100B70000401CDE900012868D0F80CC096E80F0008
+:100B8000E047BDE8FC810000014601F1100000E0F3
+:100B9000001D02681AB9024A12689042F8D37047E1
+:100BA0001000002010B50648046803E02046FFF757
+:100BB000EBFF0446034800688442F7D310BD0000F1
+:100BC0000C000020100000202DE9FC4104460CB16F
+:100BD000012100E00021084640F28B21FFF7CAFA0C
+:100BE00025462C462E686F68D7E90401CDE900013F
+:100BF0006868D0F808C097E80F00E047204600F08A
+:100C000005FAD6E90401CDE900012868D0F808C04A
+:100C100096E80F00E047204600F0F8F9D6E9040115
+:100C2000CDE900012868D0F80CC096E80F00E04735
+:100C3000BDE8FC810FB4DDE900108A68C0F30F2322
+:100C40001A40C0F30F239A4201D1012200E0002292
+:100C5000D0B204B070472DE9FC47054689460DB176
+:100C6000012100E0002108465F21FFF783FA4FF0E1
+:100C7000000AD0462C462668676800BF3AE0D7E9EC
+:100C80000401CDE900016068D0F808C097E80F00C2
+:100C9000E047D6E90401CDE900012068D0F808C09A
+:100CA00096E80F00E0474FEA48604FEA1068284690
+:100CB00000F0ACF9D7E90401CDE900016068D0F893
+:100CC00014C097E80F00E04718B108F1010000F0E8
+:100CD000FF08D6E90401CDE900012068D0F80CC076
+:100CE00096E80F00E047284600F090F90AF101006D
+:100CF00000F0FF0ABAF1080FC1DBB9F1010F03D10F
+:100D00002846FFF70AFF02E02846FFF75DFF40464E
+:100D1000BDE8FC870FB4DDE90001C1F30F22426199
+:100D200000BF04B070470FB4DDE90001C1F30F222A
+:100D3000026100BF04B070472DE9FC4104460CB1CC
+:100D4000012100E0002108460F21FFF713FA254694
+:100D50002C462E686F68D7E90401CDE90001686868
+:100D6000D0F808C097E80F00E047D6E90401CDE9C4
+:100D700000012868D0F808C096E80F00E047204638
+:100D800000F044F9D7E90401CDE900016868D0F822
+:100D90000CC097E80F00E047204600F037F9D6E98D
+:100DA0000401CDE900012868D0F80CC096E80F00D6
+:100DB000E047204600F02AF9BDE8FC812DE9FC411E
+:100DC00004460CB1012100E0002108462D21FFF767
+:100DD000D1F925462C462E686F68D6E90401CDE985
+:100DE00000012868D0F80CC096E80F00E047D7E96A
+:100DF0000401CDE900016868D0F80CC097E80F0045
+:100E0000E047204600F002F9D6E90401CDE90001EF
+:100E10002868D0F808C096E80F00E047D7E9040139
+:100E2000CDE900016868D0F808C097E80F00E047F6
+:100E3000204600F0EBF8BDE8FC810FB430B5DDE9E9
+:100E40000301C268C1F30F2323EA020402EA030587
+:100E500044EA0544046100BF30BC5DF814FB2DE991
+:100E6000FC4104460CB1012100E00021084640216C
+:100E7000FFF780F94FF0000825462C462E686F6872
+:100E8000D7E90401CDE900016868D0F808C097E807
+:100E90000F00E047D6E90401CDE900012868D0F849
+:100EA00008C096E80F00E047204600F0AFF80CE0DD
+:100EB00008F1010000F0FF08B8F1FA0F05DD204647
+:100EC000FFF77CFF0020BDE8FC81D7E90401CDE9F4
+:100ED00000016868D0F814C097E80F00E0470028C8
+:100EE000E6D1D6E90401CDE900012868D0F80CC0AC
+:100EF00096E80F00E047204600F088F80120E2E77E
+:100F00002DE9FC47064688464FF000090EB1012145
+:100F100000E0002108468821FFF72CF934462768B5
+:100F200065684FF0000946E008F0800050B1D5E94F
+:100F30000401CDE900016068D0F808C095E80F0011
+:100F4000E04709E0D5E90401CDE900016068D0F887
+:100F50000CC095E80F00E047D7E90401CDE9000196
+:100F60002068D0F808C097E80F00E047304600F04E
+:100F70004DF84FEA48604FEA1068D7E90401CDE91F
+:100F800000012068D0F80CC097E80F00E047304619
+:100F900000F03CF8B9F1070F09D1D5E90401CDE91A
+:100FA00000016068D0F808C095E80F00E04709F13B
+:100FB000010000F0FF09B9F1080FB5DBBDE8FC87BF
+:100FC00070B506460D4600240BE0E00045FA00F03F
+:100FD000C1B23046FFF794FF3046FFF740FF601C78
+:100FE000C4B2022CF1DB70BD0020014908607047DB
+:100FF0000400002010B5024800F07AF810BD00008F
+:101000000400002010B500F0FBF910BD70B50446D7
+:101010000CB1012100E00021084640F25921FFF700
+:10102000A9F80025258900E000BF281EA5F10101CF
+:101030008DB2F9D170BD00002DE9F04105460E4694
+:1010400018273946002000F0BDF904460CB10121F3
+:1010500000E0002108463621FFF78CF82560666025
+:101060000548A0600548E0600548206105486061CA
+:101070002046BDE8F0810000270D0008150D00088E
+:101080003B0E0008350C0008F7B515465C263146C6
+:10109000002000F097F9044620466946082203E044
+:1010A00011F8013B00F8013B131EA2F10106B2B298
+:1010B000F6D100BF25810848A0630849E1630849CB
+:1010C00021640849A164084961640849E164002079
+:1010D000A4F858002046FEBD390D0008BD0D0008DB
+:1010E0005F0E0008570C0008010F0008C10F000830
+:1010F00038B5014600200090086810B1142821D1AD
+:1011000016E000BF124B134CE068C3F30F2222EA33
+:10111000000400EA020544EA05440E4D2C6100BFBC
+:1011200000BF0D480068486000BF1420086000BF81
+:10113000094A48681268101A642801D2002038BD94
+:1011400000BFDFE70020086000900320F7E7000001
+:1011500020002004001001404000002008B50120BC
+:10116000484989690143474A9161114689690140AB
+:10117000009100BF00BF00071146C9690143D1615A
+:101180001146C9690140009100BF00BF032002461B
+:101190003D4B19684FF6FF0319403C4B0B4343EAA4
+:1011A0000221394B196000BF01211B68C3F30220E3
+:1011B000002425460346C3F1070CBCF1040F02D9F5
+:1011C0004FF0040C01E0C3F1070C674603F1040C77
+:1011D000BCF1070F02D24FF0000C01E0A3F1030CA9
+:1011E00066464FF0010C0CFA07FCACF1010C0CEA5E
+:1011F000040C0CFA06FC4FF0010808FA06F8A8F1F6
+:10120000010808EA05084CEA080200BF002904DBCF
+:101210001007030E1E48435407E01007040E1A4837
+:101220000C3001F00F031B1FC45400BF0120002825
+:1012300009DB00F01F02012191404209920002F1F6
+:10124000E022C2F8001100BF00BF1248406820F041
+:10125000E06040F000700F49486000BFFFF7A8FB56
+:10126000FFF7B2F9FFF782F9FFF70AFA002000F062
+:1012700013F8FFF7C7FEFFF7B7FE01E0FFF7BAFE6E
+:10128000FCE70000001002400CED00E00000FA0551
+:1012900000E400E00000014010B504460C4951F89C
+:1012A00024104A000B4951F82400002100F09EF858
+:1012B000094951F824200749083951F82400002130
+:1012C00000F094F8012103480830015510BD0000DA
+:1012D000D015000834000020E01500082DE9F04783
+:1012E00004460F460025A9462348005D20B9224840
+:1012F00018380168204688471FB94FF0FF30BDE815
+:10130000F0871E4850F82400B7FBF0F61B4850F851
+:101310002400B7FBF0F100FB117000B1761C1848F7
+:1013200050F82400451E22E01348083850F82400E5
+:1013300030F8150010B909F1010901E04FF000097A
+:10134000B14513D14FF0000809E00B48083850F8B8
+:10135000240005EB080220F8126008F10108B045EE
+:10136000F3D3064850F824006843C8E76D1E002DEB
+:10137000DADA4FF0FF30C2E73C000020D815000851
+:10138000D015000810B501460023002207E00B48E5
+:1013900050F8210030F8120000B15B1C521C0848C4
+:1013A00050F821009042F2D864205843044C54F87D
+:1013B0002140B0FBF4F0C0B210BD000034000020AA
+:1013C000D015000870B504460E4631462046FFF79A
+:1013D00085FF0546681C08B9002070BD024850F81A
+:1013E00024002844F9E700002C00002030B5034613
+:1013F00001E003F8011B141EA2F10102F9D130BD76
+:101400001CB52F492F48FFF717FE00902E492D4895
+:10141000FFF712FE01900022DDE90001FFF734FE24
+:101420002A490860AE2000F055F8D52000F052F8A7
+:10143000802000F04FF8A82000F04CF83F2000F08A
+:1014400049F8D32000F046F8002000F043F840208F
+:1014500000F040F88D2000F03DF8142000F03AF83C
+:10146000202000F037F8002000F034F8A12000F030
+:1014700031F8C82000F02EF8DA2000F02BF8122006
+:1014800000F028F8812000F025F8CF2000F022F8A5
+:10149000D92000F01FF8F12000F01CF8DB2000F04C
+:1014A00019F8402000F016F8A42000F013F8A62048
+:1014B00000F010F8AF2000F00DF800F009F81CBDA6
+:1014C00020002004000C0140100010044400002003
+:1014D0007047000038B5044600208DF800008DF8F4
+:1014E00001401B480068816B19480068884718480C
+:1014F00000687821426C16480068904714480068DC
+:10150000016C1348006888479DF800101048006877
+:10151000426C0F48006890470D480068016C0C4809
+:10152000006888479DF8011009480068426C084827
+:101530000068904706480068016C054800688847C5
+:1015400003480068C16B02480068884738BD000046
+:101550004400002000BF00BF00BF00BF00BFBFF3BA
+:101560004F8F00BF00BF00BF0948006800F4E06073
+:1015700008490843001D0649086000BF00BF00BFBE
+:10158000BFF34F8F00BF00BF00BF00BF00BFFDE72C
+:101590000CED00E00000FA05081C3044586C800097
+:1015A0000000000000000001020304060708090013
+:1015B000000000010203045F6C697374006C6973BE
+:1015C0007420616C6C20636F6D6D616E640000004F
+:1015D00000020000000000000800000008000000F9
+:1015E00000100000000000000816000800000020A5
+:1015F00058000000FC0A000860160008580000208F
+:10160000081800000C0B00080024F4000000000083
+:1016100000000000000000000000000000000000CA
+:101620000000000000000000000000009912000807
+:1016300085130008600000202000002060100020BA
+:101640002200002000000000000000000000000058
+:10165000B7150008BD150008C6E533B4A50B000892
:04000005080000ED02
:00000001FF
diff --git a/User/board/board.c b/User/board/board.c
index 45f62eb..af0387a 100644
--- a/User/board/board.c
+++ b/User/board/board.c
@@ -1,2 +1,9 @@
#include "board.h"
-void board_init(void) {}
+/**
+ * @brief 初始化显示板
+ *
+ */
+void board_init(void)
+{
+ ssd1306_init();
+}
diff --git a/User/board/board.h b/User/board/board.h
index bd2032b..ab03acd 100644
--- a/User/board/board.h
+++ b/User/board/board.h
@@ -1,5 +1,6 @@
#ifndef __BOARD_H__
#define __BOARD_H__
#include "lib.h"
+#include "ssd1306_oled.h"
void board_init(void);
#endif
diff --git a/User/board/ssd1306_oled.c b/User/board/ssd1306_oled.c
new file mode 100644
index 0000000..061d4ec
--- /dev/null
+++ b/User/board/ssd1306_oled.c
@@ -0,0 +1,155 @@
+/**
+ * @file ssd1306_oled.c
+ * @author xushenghao
+ * @brief SSD1306 OLED display driver
+ * @version 0.1
+ * @note PB13-SCK PB12-SDA
+ */
+#include "ssd1306_oled.h"
+
+#include "ssd1306_oled.h"
+
+static i2c_t *ssd1306_oled;
+static uint8_t buffer[SSD1306_WIDTH * SSD1306_HEIGHT / 8]; // 定义屏幕缓冲区
+
+static void ssd1306_write_command(uint8_t command)
+{
+ uint8_t data[2];
+ data[0] = SSD1306_CMD_SET_LOW_COLUMN; // Co = 0, D/C# = 0
+ data[1] = command;
+ ssd1306_oled->interface.start(ssd1306_oled);
+ ssd1306_oled->interface.write_byte(ssd1306_oled, SSD1306_I2C_ADDRESS);
+ ssd1306_oled->interface.wait_ack(ssd1306_oled);
+ ssd1306_oled->interface.write_byte(ssd1306_oled, data[0]);
+ ssd1306_oled->interface.wait_ack(ssd1306_oled);
+ ssd1306_oled->interface.write_byte(ssd1306_oled, data[1]);
+ ssd1306_oled->interface.wait_ack(ssd1306_oled);
+ ssd1306_oled->interface.stop(ssd1306_oled);
+}
+
+static void ssd1306_write_data(uint8_t data)
+{
+ uint8_t buffer[2];
+ buffer[0] = SSD1306_CMD_SET_START_LINE; // Co = 0, D/C# = 1
+ buffer[1] = data;
+ ssd1306_oled->interface.start(ssd1306_oled);
+ ssd1306_oled->interface.write_byte(ssd1306_oled, SSD1306_I2C_ADDRESS);
+ ssd1306_oled->interface.wait_ack(ssd1306_oled);
+ ssd1306_oled->interface.write_byte(ssd1306_oled, buffer[0]);
+ ssd1306_oled->interface.wait_ack(ssd1306_oled);
+ ssd1306_oled->interface.write_byte(ssd1306_oled, buffer[1]);
+ ssd1306_oled->interface.wait_ack(ssd1306_oled);
+ ssd1306_oled->interface.stop(ssd1306_oled);
+}
+
+static void ssd1306_test(void)
+{
+}
+
+void ssd1306_init(void)
+{
+ i2c_gpio_group_t gpios;
+ gpios.scl = gpio_create(SSD1306_SCK_PORT, SSD1306_SCK_PIN);
+ gpios.sda = gpio_create(SSD1306_SDA_PORT, SSD1306_SDA_PIN);
+
+ ssd1306_oled = i2c_create(gpios, 0);
+
+ ssd1306_write_command(SSD1306_CMD_DISPLAY_OFF);
+ ssd1306_write_command(SSD1306_CMD_SET_DISPLAY_CLOCK_DIV);
+ ssd1306_write_command(0x80);
+ ssd1306_write_command(SSD1306_CMD_SET_MULTIPLEX);
+ ssd1306_write_command(SSD1306_HEIGHT - 1);
+ ssd1306_write_command(SSD1306_CMD_SET_DISPLAY_OFFSET);
+ ssd1306_write_command(0x00);
+ ssd1306_write_command(SSD1306_CMD_SET_START_LINE | 0x00);
+ ssd1306_write_command(SSD1306_CMD_CHARGE_PUMP);
+ ssd1306_write_command(0x14);
+ ssd1306_write_command(SSD1306_CMD_MEMORY_MODE);
+ ssd1306_write_command(0x00);
+ ssd1306_write_command(SSD1306_CMD_SEG_REMAP | 0x01);
+ ssd1306_write_command(SSD1306_CMD_COM_SCAN_DEC);
+ ssd1306_write_command(SSD1306_CMD_SET_COM_PINS);
+ ssd1306_write_command(0x12);
+ ssd1306_write_command(SSD1306_CMD_SET_CONTRAST);
+ ssd1306_write_command(0xCF);
+ ssd1306_write_command(SSD1306_CMD_SET_PRECHARGE);
+ ssd1306_write_command(0xF1);
+ ssd1306_write_command(SSD1306_CMD_SET_VCOM_DETECT);
+ ssd1306_write_command(0x40);
+ ssd1306_write_command(SSD1306_CMD_DISPLAY_ALL_ON_RESUME);
+ ssd1306_write_command(SSD1306_CMD_NORMAL_DISPLAY);
+ ssd1306_write_command(SSD1306_CMD_DISPLAY_ON);
+
+ ssd1306_test();
+}
+
+void ssd1306_display_on(void)
+{
+ ssd1306_write_command(SSD1306_CMD_DISPLAY_ON);
+}
+
+void ssd1306_display_off(void)
+{
+ ssd1306_write_command(SSD1306_CMD_DISPLAY_OFF);
+}
+
+void ssd1306_clear(void)
+{
+ for (uint16_t i = 0; i < SSD1306_WIDTH * SSD1306_HEIGHT / 8; i++)
+ {
+ ssd1306_write_data(0x00);
+ }
+}
+
+/**
+ * @brief 在SSD1306屏幕上绘制一个像素点
+ *
+ * 在SSD1306 OLED显示屏上绘制一个像素点,如果指定位置超出屏幕范围,则不执行任何操作。
+ *
+ * @param x 像素点的x坐标
+ * @param y 像素点的y坐标
+ * @param color 像素点的颜色,非零值表示绘制像素点,零值表示清除像素点
+ */
+void ssd1306_draw_pixel(uint8_t x, uint8_t y, uint8_t color)
+{
+ if (x >= SSD1306_WIDTH || y >= SSD1306_HEIGHT)
+ {
+ return;
+ }
+
+ if (color)
+ {
+ buffer[x + (y / 8) * SSD1306_WIDTH] |= (1 << (y % 8));
+ }
+ else
+ {
+ buffer[x + (y / 8) * SSD1306_WIDTH] &= ~(1 << (y % 8));
+ }
+}
+
+/**
+ * @brief 更新SSD1306 OLED显示屏的内容
+ *
+ * 此函数将缓冲区中的数据写入SSD1306 OLED显示屏,从而更新显示内容。
+ *
+ * 首先,通过发送命令设置列地址和页地址,然后将缓冲区中的数据逐行写入显示屏。
+ *
+ * @note 在调用此函数之前,需要将需要显示的数据写入缓冲区。
+ */
+void ssd1306_update_screen(void)
+{
+ for (uint8_t i = 0; i < SSD1306_HEIGHT / 8; i++)
+ {
+ ssd1306_write_command(SSD1306_CMD_COLUMN_ADDR);
+ ssd1306_write_command(0);
+ ssd1306_write_command(SSD1306_WIDTH - 1);
+ ssd1306_write_command(SSD1306_CMD_PAGE_ADDR);
+ ssd1306_write_command(i);
+ ssd1306_write_command(i);
+
+ for (uint8_t j = 0; j < SSD1306_WIDTH; j++)
+ {
+ ssd1306_write_data(buffer[j + i * SSD1306_WIDTH]);
+ }
+ }
+}
diff --git a/User/board/ssd1306_oled.h b/User/board/ssd1306_oled.h
new file mode 100644
index 0000000..cb59bc8
--- /dev/null
+++ b/User/board/ssd1306_oled.h
@@ -0,0 +1,51 @@
+#ifndef __SSD1306_OLED_H
+#define __SSD1306_OLED_H
+
+#include "main.h"
+
+// OLED引脚定义
+#define SSD1306_SDA_PORT OLED_SDA_GPIO_Port
+#define SSD1306_SDA_PIN OLED_SDA_Pin
+#define SSD1306_SCK_PORT OLDE_SCK_GPIO_Port
+#define SSD1306_SCK_PIN OLDE_SCK_Pin
+
+// I2C地址
+#define SSD1306_I2C_ADDRESS 0x78
+// OLED显示参数
+#define SSD1306_WIDTH 128
+#define SSD1306_HEIGHT 64
+
+// OLED命令定义
+#define SSD1306_CMD_DISPLAY_OFF 0xAE
+#define SSD1306_CMD_DISPLAY_ON 0xAF
+#define SSD1306_CMD_SET_CONTRAST 0x81
+#define SSD1306_CMD_DISPLAY_ALL_ON_RESUME 0xA4
+#define SSD1306_CMD_DISPLAY_ALL_ON 0xA5
+#define SSD1306_CMD_NORMAL_DISPLAY 0xA6
+#define SSD1306_CMD_INVERT_DISPLAY 0xA7
+#define SSD1306_CMD_SET_DISPLAY_OFFSET 0xD3
+#define SSD1306_CMD_SET_COM_PINS 0xDA
+#define SSD1306_CMD_SET_VCOM_DETECT 0xDB
+#define SSD1306_CMD_SET_DISPLAY_CLOCK_DIV 0xD5
+#define SSD1306_CMD_SET_PRECHARGE 0xD9
+#define SSD1306_CMD_SET_MULTIPLEX 0xA8
+#define SSD1306_CMD_SET_LOW_COLUMN 0x00
+#define SSD1306_CMD_SET_HIGH_COLUMN 0x10
+#define SSD1306_CMD_SET_START_LINE 0x40
+#define SSD1306_CMD_MEMORY_MODE 0x20
+#define SSD1306_CMD_COLUMN_ADDR 0x21
+#define SSD1306_CMD_PAGE_ADDR 0x22
+#define SSD1306_CMD_COM_SCAN_INC 0xC0
+#define SSD1306_CMD_COM_SCAN_DEC 0xC8
+#define SSD1306_CMD_SEG_REMAP 0xA0
+#define SSD1306_CMD_CHARGE_PUMP 0x8D
+
+// 函数声明
+void ssd1306_init(void);
+void ssd1306_display_on(void);
+void ssd1306_display_off(void);
+void ssd1306_clear(void);
+void ssd1306_draw_pixel(uint8_t x, uint8_t y, uint8_t color);
+void ssd1306_update_screen(void);
+
+#endif // __SSD1306_OLED_H
diff --git a/User/lib/inc/malloc.h b/User/lib/inc/malloc.h
index 9b4b8f8..dcf09f1 100644
--- a/User/lib/inc/malloc.h
+++ b/User/lib/inc/malloc.h
@@ -15,12 +15,12 @@
// mem1内存参数设定.mem1完全处于内部SRAM里面.(设置内部SARM的内存池和内存表的参数)
#define MEM1_BLOCK_SIZE 8 // 一个内存块大小为32字节
-#define MEM1_MAX_SIZE 25 * 1024 // 最大管理内存 1K (我们这个内存管理系统的内部SRAM可控制的内存大小)
+#define MEM1_MAX_SIZE 4 * 1024 // 最大管理内存 1K (我们这个内存管理系统的内部SRAM可控制的内存大小)
#define MEM1_ALLOC_TABLE_SIZE MEM1_MAX_SIZE / MEM1_BLOCK_SIZE // 内存表大小(有多少块内存块)
// mem2内存参数设定.mem2的内存池处于外部SRAM里面
#define MEM2_BLOCK_SIZE 8 // 一个内存块大小为32字节
-#define MEM2_MAX_SIZE 20 * 1024 // 因为精英版没有外扩内存,故这里设置一个最小值
+#define MEM2_MAX_SIZE 0 * 1024 // 因为精英版没有外扩内存,故这里设置一个最小值
#define MEM2_ALLOC_TABLE_SIZE MEM2_MAX_SIZE / MEM2_BLOCK_SIZE // 内存表大小
// 内存管理控制器结构体
diff --git a/User/lib/src/malloc.c b/User/lib/src/malloc.c
index 0acb00d..77b07d4 100644
--- a/User/lib/src/malloc.c
+++ b/User/lib/src/malloc.c
@@ -47,7 +47,7 @@ sizeof(B) = 8(内存空间大小8个字节)
// 内存池(32字节对齐)
// 可控制的内存大小
__attribute__((aligned(32))) uint8_t mem1base[MEM1_MAX_SIZE]; // 内部SRAM内存池
-__attribute__((aligned(32))) uint8_t mem2base[MEM2_MAX_SIZE] __attribute__((section(".sram2")));
+__attribute__((aligned(32))) uint8_t mem2base[MEM2_MAX_SIZE];
// __attribute__((aligned(32))) uint8_t mem2base[MEM2_MAX_SIZE] __attribute__((at(0X68000000))); // 外部SRAM内存池
// 内存管理表
// 可控制的内存控制块个数(每个内存块大小为32字节)
diff --git a/User/system/bsp/bsp.h b/User/system/bsp/bsp.h
index e7971ea..a1fc982 100644
--- a/User/system/bsp/bsp.h
+++ b/User/system/bsp/bsp.h
@@ -21,7 +21,7 @@
#include "uarts.h"
// #include "eeprom.h"
// #include "spis.h"
-// #include "i2cs.h"
+#include "i2cs.h"
///< 定义回调函数类型
typedef void (*pvd_irq_handle_cb)(void);
diff --git a/User/system/bsp/gpios.c b/User/system/bsp/gpios.c
index cb59b80..38abf89 100644
--- a/User/system/bsp/gpios.c
+++ b/User/system/bsp/gpios.c
@@ -44,11 +44,11 @@ static uint8_t _read(gpio_t gpio)
/**
* @brief 创建GPIO对象
* @param {GPIO_TypeDef} *port - GPIO寄存器指针
- * @param {uint16_t} pin - 引脚号
+ * @param {uint32_t} pin - 引脚号
* @return {gpio_t *} - 创建的GPIO对象指针
* @note: 用于创建一个GPIO对象,用于操作特定端口和引脚的GPIO功能。
*/
-gpio_t *gpio_create(GPIO_TypeDef *port, uint16_t pin)
+gpio_t *gpio_create(GPIO_TypeDef *port, uint32_t pin)
{
gpio_t *gpio = (gpio_t *)osel_mem_alloc(sizeof(gpio_t));
DBG_ASSERT(gpio != NULL __DBG_LINE);
diff --git a/User/system/bsp/gpios.h b/User/system/bsp/gpios.h
index 35b86fc..c7ca144 100644
--- a/User/system/bsp/gpios.h
+++ b/User/system/bsp/gpios.h
@@ -93,7 +93,7 @@
typedef struct GPIO
{
GPIO_TypeDef *port; ///< The GPIO port.
- uint16_t pin; ///< The GPIO pin.
+ uint32_t pin; ///< The GPIO pin.
/**
* @brief Set the GPIO pin to high.
@@ -132,7 +132,7 @@ typedef struct GPIO
* @param pin The GPIO pin.
* @return The created GPIO pin.
*/
-extern gpio_t *gpio_create(GPIO_TypeDef *port, uint16_t pin);
+extern gpio_t *gpio_create(GPIO_TypeDef *port, uint32_t pin);
/**
* @brief Free the memory allocated for a GPIO pin.
diff --git a/motor.ioc b/motor.ioc
index 15c7f91..c1af37c 100644
--- a/motor.ioc
+++ b/motor.ioc
@@ -39,12 +39,14 @@ Mcu.Package=LQFP48
Mcu.Pin0=PC13-TAMPER-RTC
Mcu.Pin1=PD0-OSC_IN
Mcu.Pin2=PD1-OSC_OUT
-Mcu.Pin3=PA9
-Mcu.Pin4=PA10
-Mcu.Pin5=PA13
-Mcu.Pin6=PA14
-Mcu.Pin7=VP_SYS_VS_Systick
-Mcu.PinsNb=8
+Mcu.Pin3=PB12
+Mcu.Pin4=PB13
+Mcu.Pin5=PA9
+Mcu.Pin6=PA10
+Mcu.Pin7=PA13
+Mcu.Pin8=PA14
+Mcu.Pin9=VP_SYS_VS_Systick
+Mcu.PinsNb=10
Mcu.ThirdParty0=RealThread.RT-Thread.3.1.5
Mcu.ThirdPartyNb=1
Mcu.UserConstants=
@@ -74,6 +76,12 @@ PA14.Mode=Serial_Wire
PA14.Signal=SYS_JTCK-SWCLK
PA9.Mode=Asynchronous
PA9.Signal=USART1_TX
+PB12.GPIOParameters=GPIO_Label
+PB12.GPIO_Label=OLED_SDA
+PB12.Signal=GPIO_Output
+PB13.GPIOParameters=GPIO_Label
+PB13.GPIO_Label=OLDE_SCK
+PB13.Signal=GPIO_Output
PC13-TAMPER-RTC.GPIOParameters=GPIO_Label
PC13-TAMPER-RTC.GPIO_Label=LED_BLUE
PC13-TAMPER-RTC.Signal=GPIO_Output