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