diff --git a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_GCC/Boot/bin/openblt_stm32f746.elf b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_GCC/Boot/bin/openblt_stm32f746.elf
index 9b4c9467..a2e62627 100755
Binary files a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_GCC/Boot/bin/openblt_stm32f746.elf and b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_GCC/Boot/bin/openblt_stm32f746.elf differ
diff --git a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_GCC/Boot/bin/openblt_stm32f746.srec b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_GCC/Boot/bin/openblt_stm32f746.srec
index 3657589b..f2744acd 100755
--- a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_GCC/Boot/bin/openblt_stm32f746.srec
+++ b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_GCC/Boot/bin/openblt_stm32f746.srec
@@ -2,7 +2,7 @@ S01D000062696E2F6F70656E626C745F73746D3332663734362E737265638C
S31508000000000005203503000885030008850300085D
S315080000108503000885030008850300080000000022
S315080000200000000000000000000000008503000832
-S31508000030850300080000000085030008A94500089C
+S315080000308503000800000000850300086D460008D7
S315080000408503000885030008850300088503000862
S315080000508503000885030008850300088503000852
S315080000608503000885030008850300088503000842
@@ -30,18 +30,18 @@ S315080001B085030008850300088503000885030008F1
S30D080001C0850300088503000809
S315080001C810B5054C237833B9044B13B10448AFF37B
S315080001D800800123237010BDEC04002000000000F5
-S315080001E8C050000808B5034B1BB103490348AFF3D1
-S315080001F8008008BD00000000F0040020C050000878
+S315080001E88451000808B5034B1BB103490348AFF30C
+S315080001F8008008BD00000000F004002084510008B3
S3150800020870B50D4E0D4D761BB61006D00024013478
S3150800021855F8043B9847A642F9D1094E094D761B6D
-S3150800022804F04AFFB61006D00024013455F8043BFA
-S315080002389847A642F9D170BD4452000844520008AE
-S315080002484C52000844520008024B13B1024800F009
+S3150800022804F0ACFFB61006D00024013455F8043B98
+S315080002389847A642F9D170BD085300080853000824
+S315080002481053000808530008024B13B1024800F07F
S3150800025805B870470000000071020008002301462F
S315080002681A46184600F01EB838B50A4C0A4D641BDB
S31508000278A4100AD004F18043013B05EB8305013C31
S3150800028855F804399847002CF9D1BDE8384004F0E8
-S3150800029819BF00BF505200084C520008704700BFEB
+S315080002987BBF00BF1453000810530008704700BFFF
S315080002A8704700BF2DE9F0411E4C05462068904668
S315080002B81F460E46FFF7F2FF1B4B1A68D2F848315D
S315080002C833B35A6820681F2A27DC4DB9911C0132B6
@@ -50,1351 +50,1364 @@ S315080002E803EB82010124C1F8888004FA02FED3F8D8
S315080002F88841022D44EA0E0CC3F888C1C1F8087172
S31508000308E4D1D3F88C114EEA0104C3F88C41DDE731
S3150800031802F5A673C2F84831D3E7FFF7C1FF4FF0D5
-S31508000328FF30DBE728040020D8500008DFF834D06F
+S31508000328FF30DBE7280400209C510008DFF834D0AA
S31508000338002103E00C4B5B58435004310B480C4B27
S3150800034842189A42F6D30B4A02E0002342F8043BC5
-S31508000358094B9A42F9D300F007FDFFF751FF03F05E
-S315080003683DFB704700000520505200080000002099
-S31508000378EC040020EC0400208C140020FEE710B5DD
-S3150800038813460222C0F86C22C36103620A4600219A
-S3150800039803F0BAFD002010BD08B513460A46002129
-S315080003A803F0B2FD002008BD08B513460A46002129
-S315080003B803F0B2FD002008BD08B50423C0F86C3266
-S315080003C800231A46194603F09FFD002008BD08B504
-S315080003D80523C0F86C3200231A46194603F09CFD1B
+S31508000358094B9A42F9D300F045FDFFF751FF03F020
+S315080003689FFB704700000520145300080000002072
+S31508000378EC040020EC040020C0140020FEE710B5A9
+S3150800038813460222C0F894228361C3610A460021F3
+S3150800039803F01CFE002010BD08B513460A460021C6
+S315080003A803F014FE002008BD08B513460A460021C6
+S315080003B803F014FE002008BD08B50423C0F89432DB
+S315080003C800231A46194603F001FE002008BD08B5A1
+S315080003D80523C0F8943200231A46194603F0FEFD91
S315080003E8002008BD002302781AB10133DBB20130B8
S315080003F8F9E71846704708B54B88012B00D008BDA1
-S31508000408C0F87C32FFF7D8FFF9E70B7803704B780A
-S3150800041843708B78CA7803EB022343800B794A79B1
-S3150800042803EB022383808B79CA7903EB0223C38003
-S31508000438704710B50446802103F04EFD002120467A
-S3150800044803F04AFD10BD30B583B005460C464A8808
-S31508000458130A013B062B00F28480DFE803F0041632
-S315080004682A8282667300D0F888321B680DF1060165
-S31508000478007C9847BDF8062012B1E388002B74D192
-S31508000488E388002B7BD003B030BD037C43B9D0F892
-S315080004988C329B6A0DF10600984702234370E9E7F8
-S315080004A8D0F88C32DB6A0DF10600984702234370B0
-S315080004B8E0E7D2B2052A34D8DFE802F0030B131BAB
-S315080004C8232BD0F888325B680DF10601007C984723
-S315080004D8D0E7D0F888329B680DF10601007C98476A
-S315080004E8C8E7D0F88832DB680DF10601007C984722
-S315080004F8C0E7D0F888321B690DF10601007C9847D9
-S31508000508B8E7D0F888325B690DF10601007C984790
-S31508000518B0E7D0F888329B690DF10601007C984748
-S31508000528A8E72146FFF785FFADE7037C33B9D0F87E
-S315080005388C325B6B0DF1060098479BE72146FFF75F
-S3150800054878FFA0E7037C43B9D0F88C321B6B0DF112
-S3150800055806009847072343708CE72146FFF769FF8B
-S3150800056891E72146FFF765FF8DE79A4228BF1A46A5
-S31508000578ADF8062001462846FFF701FF80E728461A
-S31508000588FFF71AFF7FE738B504468B88F3B9CB8897
-S31508000598E3B94B887F2B19D803F07F0590F8743296
-S315080005A8032B0CD080F87652294603F0A5FC204682
-S315080005B8FFF702FF35B1022384F8743209E0FFF722
-S315080005C838FF06E0012384F8743202E02046FFF774
-S315080005D830FF38BD38B504460D468978284B19705A
-S315080005E801290ED890F87432022B0ED0032B21D08D
-S315080005F82946FFF71EFF224B1978204600F070FAA5
-S3150800060802E02946FFF715FF38BD81B1416003238B
-S3150800061880F8743200F057FA022803D02046FFF70C
-S31508000628CBFEF1E729462046FFF703FFECE7FFF77D
-S31508000638C3FEE9E789B1436899421DD0D9B200F0EB
-S315080006484FFA0F4B19786160204600F03CFA0228E9
-S315080006580DD02046FFF7B0FED6E7022380F874329D
-S31508000668416000F03DFA2046FFF7A6FECCE729468A
-S315080006782046FFF7DEFEC7E7FFF79EFEC4E700BF82
-S315080006880805002008B5CB88012B0CD190F87432E0
-S315080006985AB29AB1022B09D9032B0FD10122011D8F
-S315080006A8FFF76DFE01E0FFF7C4FE08BD014600230B
-S315080006B841F8083F0122FFF762FEF6E7FFF7B9FEA1
-S315080006C8F3E708B590F87432013B022B12D8CB88A9
-S315080006D8022B0CD10123C360D0F87C320BB103235B
-S315080006E8C360022200F10C01FFF749FE08BDFFF7B7
-S315080006F8A0FEFBE7FFF79DFEF8E708B590F8743209
-S31508000708013B022B09D84B88012B00D008BD0023D2
-S31508000718C0F87C32FFF750FEF8E7FFF78AFEF5E7E0
-S3150800072808B50B7803F06003202B05D0402B03D0BF
-S3150800073843B1FFF77EFE03E0D0F88C329B689847F2
-S31508000748002008BD4B78092B1BD8DFE803F01117E2
-S315080007581A141A08051A0E0BFFF775FEF0E7FFF7C5
-S3150800076812FFEDE7FFF736FFEAE7FFF78BFFE7E744
-S31508000778FFF7A7FFE4E7FFF73EFEE1E7FFF7BDFF50
-S31508000788DEE7FFF756FEDBE738B505460C460B7875
-S3150800079803F06003202B06D0402B04D01BB1FFF7CB
-S315080007A848FE002038BD95F87432013B022B16D84E
-S315080007B82379012B0ED8D5F88C329B682146284612
-S315080007C89847E388002BECD10028EAD12846FFF79A
-S315080007D8F3FDE6E721462846FFF72BFEE1E7214623
-S315080007E82846FFF726FEDCE738B504468A880B78DC
-S315080007F803F06003202B08D0D0B2402B05D05BB19C
-S315080008082046FFF716FE002005E0D4F88C329B68D0
-S3150800081820469847002038BD202B13D04B78012B4B
-S3150800082843D05DB2002D73D0032B40F0F58094F8C1
-S315080008387432022B0CD0032B21D02046FFF7F9FD82
-S315080008480020E8E7D4F88C329B6820469847E2E708
-S31508000858B0F1800318BF0123002808BF00234BB155
-S315080008680146204603F038FB8021204603F034FB76
-S315080008780020D0E72046FFF7DCFD0020CBE74B88B1
-S315080008884BB9B0F1800318BF0123002808BF00231D
-S315080008980BB1CB8823B12046FFF78EFD0020BAE7B7
-S315080008A80146204603F018FBF5E794F87432022B44
-S315080008B806D0032B1BD02046FFF7BBFD0020AAE76E
-S315080008C8B0F1800318BF0123002808BF00234BB1E5
-S315080008D80146204603F000FB8021204603F0FCFA77
-S315080008E8002098E72046FFF7A4FD002093E74B88E9
-S315080008F8002B40F0968010F07F0F04D12046FFF7B2
-S315080009085BFD002087E70146204603F0EDFAF5E788
-S3150800091894F87432022B06D0032B2ED02046FFF704
-S3150800092888FD002077E7B0F1800318BF0123002867
-S3150800093808BF002393B912F0800F14D100F07F0086
-S3150800094800EB8000830003F5A073E11800250D600D
-S3150800095802222046FFF713FD28465CE72046FFF7E4
-S3150800096868FD002057E700F07F0000EB8000830051
-S3150800097803F1100121440431E8E752B2002A23DBC7
-S3150800098800F00F0303EB83039D002544D5F8443193
-S3150800099843B3002A2BDB00F07F0202EB82029300A6
-S315080009A803F5A073E518802814BF0023012300283F
-S315080009B808BF01232BB300232B60022229462046B1
-S315080009C8FFF7DDFC002026E700F00F0303EB83039F
-S315080009D89D002544AB69002BDBD12046FFF729FD8E
-S315080009E8002018E72046FFF724FD002013E700F04B
-S315080009F87F0202EB8202930003F1100525440435B1
-S31508000A08D1E70146204603F013FA10B101232B60FB
-S31508000A18D3E700232B60D0E72046FFF70AFD00201E
-S31508000A28F9E60020F7E6C0B170B50D461646044645
-S31508000A38FFF7D8FC013040003080287003236B701C
-S31508000A480223217841B101345A1CD2B2E95402333F
-S31508000A58DBB20021A954F4E770BD704798B108B510
-S31508000A680346D0F88C0210B10020C3F88C0209B1ED
-S31508000A78C3F888121846012380F87432027003F006
-S31508000A889DF9002008BD0220704710B504460123C9
-S31508000A9880F87432D0F88C325B680179984720461A
-S31508000AA803F0FFF9204603F0ECF9002010BD19B150
-S31508000AB8C0F88C12002070470220704708B503F06A
-S31508000AC8E8F9002008BD08B5D0F88C3233B11B68A0
-S31508000AD8984708B9002008BD0220FCE70220FAE773
-S31508000AE808B5D0F88C325B689847002008BD38B539
-S31508000AF8044600F520752846FFF787FC0123C4F845
-S31508000B086C32B4F88632C4F8703294F8801201F060
-S31508000B181F03012B0FD05AB23AB1022B10D001F09D
-S31508000B288001204603F0D8F903E029462046FFF756
-S31508000B38F7FD002038BD29462046FFF725FEF8E7C9
-S31508000B4829462046FFF750FEF3E738B50446A9BB01
-S31508000B581046D4F86C32032B03D0052B25D0002079
-S31508000B6838E0D4F84C31D4F8502193420DD99B1A61
-S31508000B78C4F84C319A4206D99AB201462046FFF77C
-S31508000B8813FC002026E092B2F7E7D4F88C321B69EA
-S31508000B981BB194F87422032A04D02046FFF70CFCEC
-S31508000BA8002017E020469847F7E70025C4F86C5256
-S31508000BB82946204603F090F928460BE00A46D0F85D
-S31508000BC88C329B693BB190F87412032905D11146FA
-S31508000BD89847002038BD0220FCE70220FAE710B53E
-S31508000BE80446002956D11046D4F86C32022B09D08F
-S31508000BF8002B18BF042B44D094F87832012B45D023
-S31508000C08002010BD236A626A93421BD8E169B1FBCA
-S31508000C18F2F302FB13132BB98A4203D8D4F87032BD
-S31508000C2899421DD3D4F88C32DB681BB194F8742228
-S31508000C38032A23D08021204603F04EF92046FFF7E1
-S31508000C48C6FBD9E79A1A226292B201462046FFF7EE
-S31508000C58A3FB00231A461946204603F05DF9CBE79D
-S31508000C68002211462046FFF797FB0021C4F87012A8
-S31508000C780B460A46204603F04FF9BDE72046984733
-S31508000C88D8E78021204603F027F9B5E7002084F83D
-S31508000C987802B6E70A46D0F88C325B693BB190F819
-S31508000CA87412032905D1114698470020A9E702209E
-S31508000CB8A7E70220A5E770B5044640230022114697
-S31508000CC803F0F7F80125C4F844514026C4F85061E2
-S31508000CD8334600228021204603F0EBF8A5616662B8
-S31508000CE884F874520023C4F86C326360C4F87C3202
-S31508000CF8D4F890322BB1D4F88C325B6800212046A0
-S31508000D089847002070BD01740020704790F8743227
-S31508000D1880F87532042380F874320020704790F8FA
-S31508000D28753280F874320020704708B590F8743226
-S31508000D38032B01D0002008BDD0F88C32DB69002BC4
-S31508000D48F8D09847F6E7002070470020704700203B
-S31508000D58704708B5012280F87422D0F88C225268A8
-S31508000D6801799047002008BD10B40F4AD2F8883098
-S31508000D7843F47003C2F888300C4B196841F0010136
-S31508000D881960002098601C680949214019600949BA
-S31508000D985960196821F480211960D8604FF00063FA
-S31508000DA893605DF8044B704700ED00E00038024098
-S31508000DB8FFFFF6FE1030002410B5094B4FF0FF323E
-S31508000DC81A6200241C625A625C621A611C615A61C2
-S31508000DD85C619A619C6102F0AFFE204610BD00BFB7
-S31508000DE80038024010B504460E4B18784FF47A734B
-S31508000DF8B3FBF0F30C4A1068B0FBF3F001F054FEAD
-S31508000E0868B90F2C01D901200AE0002221464FF0C3
-S31508000E18FF3001F017FE054B1C60002000E001209A
-S31508000E2810BD00BF300400202C0400203404002024
-S31508000E3808B5032001F0F4FD0020FFF7D3FF02F000
-S31508000E48D5FD002008BD000038B5044603F0A4FB0C
-S31508000E580546B4F1FF3F02D0044B1B781C4403F047
-S31508000E689BFB401BA042FAD338BD00BF30040020C4
-S31508000E782DE9F04782B0D0F80080CA00521A9300CC
-S31508000E8803445A6D1B6D9A4255D8C1469B1AC1EB45
-S31508000E98C104A2000244526C9A4200D31A460C4670
-S31508000EA8074602F1030A4FEA9A0A15E006F1030A09
-S31508000EB84FEA9A0AE3001B1B9D003D44A96C3B7C3C
-S31508000EC80093B3B2E2B2404602F024F9AB6C33445D
-S31508000ED8AB646B6D1E446E6509EB441303F510632A
-S31508000EE89B699BB2534512D3E3001B1B9A003A44ED
-S31508000EF8516D136D99420AD24BB15B1AC4EBC40102
-S31508000F088A003A44566C9E42D0D31E46CEE7E30082
-S31508000F181B1B980007443A6D7B6D9A420FD804F05C
-S31508000F280F040123A340D8F8344824EA0304C8F870
-S31508000F383448002000E0012002B0BDE8F087002010
-S31508000F48FAE77047F0B58BB0002800F08A800446A7
-S31508000F5890F8BD33F3B1032384F8BD33206801F054
-S31508000F6891FE254655F8107B6E460FCD0FC60FCD58
-S31508000F780FC695E8030086E80300231D0ECB3846FE
-S31508000F8801F0C6FD58B1022384F8BD330125284669
-S31508000F980BB0F0BD80F8BC33FFF7D3FFDBE70021C1
-S31508000FA8206801F075FE00236568AB4216D2D900A1
-S31508000FB8C81A82002244012082F83D0082F83C3093
-S31508000FC8A2F84230002082F83F0050649064CA1A9A
-S31508000FD89100214408650133DBB2E5E700239D4209
-S31508000FE816D9D800C11A8A002244002182F8FD11B0
-S31508000FF882F8FC3182F8FF11C2F80412C2F8081206
-S31508001008C21A90002044C0F810120133DBB2E6E792
-S31508001018254655F8107B6E460FCD0FC60FCD0FC661
-S3150800102895E8030086E80300231D0ECB384601F031
-S3150800103875FE054660B9002384F83830012384F81C
-S31508001048BD33636A012B08D0206802F018FA9EE7B8
-S31508001058022384F8BD33012599E7204602F04EFBA2
-S31508001068F2E7012593E7704790F8BC33012B0ED0B9
-S3150800107810B50446012380F8BC33006802F0F3F97A
-S31508001088206801F0F9FD002084F8BC0310BD022091
-S31508001098704738B590F8BC33012B18D0044601239D
-S315080010A880F8BC33006801F0EDFD206802F0A7F966
-S315080010B8054628B1002384F8BC330125284638BDDF
-S315080010C8206802F0DCF9002384F8BC33F6E7022529
-S315080010D8F4E768B110B50446032380F8BD33FFF773
-S315080010E8D8FF2046FFF7BFFF002084F8BD0310BDD0
-S315080010F80120704770B505460E460368196C03EB60
-S31508001108461303F53064A3680269012A09D0354AEB
-S31508001118914261D113F4004F54D04FF40043A360B1
-S315080011285DE013F0080F14D02F4A914205D913F43D
-S31508001138004F02D04FF40043A360284602F0BAFDD8
-S3150800114805F571720121286802F0F6F90823A360EB
-S3150800115845E013F0200F02D02023A3603FE013F0E8
-S31508001168280F3CD1204A914206D913F4004F03D0E0
-S315080011784FF40043A36032E0F200921B93002B441D
-S31508001188D3F804222169C1F31201521AC3F81422AA
-S31508001198D3F80412D3F808220A44C3F80822F1B28D
-S315080011A8284602F08FFDD6B9C6EBC606B3002B440F
-S315080011B8D3F810329BB905F571720121286802F037
-S315080011C8BBF90CE013F0200F01D02023A360F1B27D
-S315080011D8284602F077FD02E0F1B202F073FD00201E
-S315080011E870BD00BF0A31544F0A30544F38B504460B
-S315080011F803681D6C03EB411101F530618A680369C0
-S31508001208012B0DD0124B9D4214D0204602F052FDF8
-S31508001218104B9D4202D92369012B12D0002038BDF4
-S315080012280C4B9D42F1D912F4004FEED04FF400430F
-S315080012388B60EAE712F4004FE7D04FF400438B605F
-S31508001248E3E704F571720121206802F075F9E5E70C
-S315080012580A31544F0A30544F2DE9F84F04460568A9
-S31508001268284602F049F908B1BDE8F88FA8460746A6
-S31508001278206802F010F90028F6D0206802F00BF969
-S3150800128810F0020F04D02268536903F00203536171
-S31508001298206802F000F910F4002F40F092803E46CC
-S315080012A8206802F0F8F810F4802F40F0DC802068F7
-S315080012B802F0F1F80028C0F24A81206802F0EBF83B
-S315080012C810F4006F0AD0D5F8083813F0010F40F06B
-S315080012D858812268536903F400635361206802F051
-S315080012E8DAF810F0006F15D02268536903F0006326
-S315080012F8536194F8F433002B40F04781012184F8B0
-S31508001308F41323685B6DC3F38303C4F8F8332046E4
-S3150800131802F008FA206802F0BEF810F4805F40F080
-S315080013283881206802F0B7F810F4005F40F08A8127
-S31508001338206802F0B0F810F0100F14D022689369EC
-S3150800134823F0100393612F6A07F00F08C7F3434386
-S31508001358022B00F08F81062B00F0AD812268936975
-S3150800136843F010039361206802F095F810F0080F0F
-S3150800137840F0B581206802F08EF810F4801F40F01E
-S31508001388B781206802F087F810F4001F40F0BA8188
-S31508001398206802F080F810F0804F40F0BD81206880
-S315080013A802F079F810F0040F3FF45EAF23685D6821
-S315080013B815F0040F40F0B981226853682B4353602F
-S315080013C852E7206802F06BF881463E4624E008EBAF
-S315080013D846130122C3F8082B31462046FFF78AFE32
-S315080013E829E031462046FFF701FF08EB4613082295
-S315080013F8C3F8082B22E008EB46132022C3F8082B6B
-S315080014081AF4005F05D008EB46134FF40052C3F8E8
-S31508001418082B01364FEA5909B9F1000F3FF440AFD6
-S3150800142819F0010FF5D0F1B2206802F048F88246A3
-S3150800143810F0010FCBD11AF0080FD2D11AF0100FFD
-S3150800144804D008EB46131022C3F8082B1AF0200F0D
-S31508001458D6D02369012BCED104F5717201212068F3
-S3150800146802F06AF8C7E7206802F021F881463E4686
-S315080014782EE0F200921B93002344596C9A6C0A4496
-S315080014889A6448E01AF0080F04D008EB46130822B5
-S31508001498C3F808291AF0100F04D008EB46131022CF
-S315080014A8C3F808291AF0400F04D008EB461340225F
-S315080014B8C3F808291AF0020F04D008EB46130222CB
-S315080014C8C3F808291AF0800F3CD101364FEA5909A2
-S315080014D8B9F1000F3FF4EBAE19F0010FF5D05FFA3A
-S315080014E886FB5946206801F0F3FF824610F0010F83
-S315080014F8C8D006F00F03012101FA03F2D8F83438E8
-S3150800150823EA0203C8F8343808EB4613C3F808195F
-S3150800151823698B42ADD05946204602F0DFFB236982
-S31508001528012BAFD1002EADD1C6EBC60293002344DA
-S315080015381B6D002BA6D104F571720121206801F0F4
-S31508001548FBFF9FE731462046FFF792FCBDE7D5F833
-S31508001558043823F00103C5F8043894F8F433012B4A
-S3150800156808D0204602F000FC2268536903F00043BD
-S315080015785361A2E6002184F8F413204602F0D2F853
-S31508001588F2E7204602F0D6FBA3E6204602F0D2FB95
-S31508001598C0E605F50069D9F8043023F00103C9F84F
-S315080015A804301021206801F08BFB14E008EB471380
-S315080015B84FF67F31C3F80819D3F8002922F4001228
-S315080015C8C3F80029C3F8081BD3F8002B22F4001225
-S315080015D8C3F8002B01376368BB42E7D8D9F81C3033
-S315080015E843F00113C9F81C30236BEBB1D9F88430E2
-S315080015F843F00B03C9F88430D9F8443043F00B0399
-S31508001608C9F84430D5F8003823F4FE63C5F800381D
-S3150800161804F57172217C206801F08EFF22685369EF
-S3150800162803F4805353617CE6D9F8142042F22B035D
-S315080016381343C9F81430D9F8103043F00B03C9F826
-S315080016481030DFE7206801F05BFF206801F03EFCF8
-S31508001658E060276800F06EFC227B0146384601F0F8
-S3150800166895FA204602F04CFB2268536903F40053A6
-S3150800167853615DE647F6F0731F423FF46FAE3F09C4
-S315080016884FEAC80AAAEB08034FEA8309A144C7F335
-S315080016980A02D9F80812284601F042FEC7F30A07D3
-S315080016A8D9F808323B44C9F80832D9F814321F4425
-S315080016B8C9F8147252E6082204F57171284601F031
-S315080016C82FFEC7F30A174FEAC803A3EB08018A00D7
-S315080016D82244D2F814321F44C2F814723EE6204651
-S315080016E802F007FB2268536903F00803536141E6D1
-S315080016F8F1B2204602F047FB2268536903F48013C7
-S3150800170853613EE6F1B2204602F037FB2268536978
-S3150800171803F4001353613BE6204602F03AFB2268BD
-S31508001728536903F08043536139E6204602F03BFBD0
-S3150800173842E690F8BC33012B0BD010B504460123BA
-S3150800174880F8BC33006801F08EFE002084F8BC03DC
-S3150800175810BD0220704790F8BC33012B0BD010B58A
-S315080017680446012380F8BC33006801F088FE00208F
-S3150800177884F8BC0310BD0220704790F8BC33012BCF
-S315080017880DD010B50446012380F8BC3380F838100C
-S31508001798006801F058FE002084F8BC0310BD02203A
-S315080017A87047F8B511F0800F27D101F00F05EE0044
-S315080017B8771BBC00274604F5FC7404440434074424
-S315080017C8002587F8FD5101F00F012170A260E3702A
-S315080017D8627802B1E180022B1ED090F8BC33012B47
-S315080017E81DD00546012380F8BC332146006801F060
-S315080017F87DFB002085F8BC03F8BD01F00F06F5004F
-S31508001808AF1BBC0027463834044404343E46064415
-S31508001818012586F83D50D6E700232371DDE7022027
-S31508001828EAE738B511F0800F20D101F00F04E2007D
-S31508001838151BAB001D4603F5FC7303440433054426
-S31508001848002285F8FD2101F00F01197090F8BC23D4
-S31508001858012A1AD00446012280F8BC2319460068D2
-S3150800186801F08CFB002084F8BC0338BD01F00F0496
-S31508001878E200151BAB001D463833034404332C46D7
-S315080018880444012284F83D20DDE70220EDE770B51F
-S3150800189801F00F05EE00711B8C0004F5FC74044476
-S315080018A8211D761BB4000444C4F80822C4F8103273
-S315080018B80023C4F8143284F8FD3184F8FC5103690E
-S315080018C8012B06D065B9DAB2006801F09FFB002043
-S315080018D870BDC5EBC506B4000444C4F80C22F1E78C
-S315080018E8DAB2006801F02AFCF1E701F00F01C1EB52
-S315080018F8C1018B001844D0F81402704770B501F07E
-S315080019080F05EE00711B8C0038340444211D761B24
-S31508001918B4000444A264236500236365012384F89C
-S315080019283D3084F83C500369012B06D05DB9DAB21C
-S31508001938006801F06BFB002070BDC5EBC506B40056
-S315080019480444E264F2E7DAB2006801F0F7FBF2E76A
-S3150800195838B501F00F0543689D4236D811F0800F57
-S3150800196820D1CA00541AA3001C4603F5FC73034485
-S31508001978043322460244002182F8FD1101229A7096
-S315080019881D7090F8BC23012A21D00446012280F84C
-S31508001998BC231946006801F0D7FC7DB1002084F8FD
-S315080019A8BC0338BDEA00511B8B001946383303447B
-S315080019B804330144012281F83D20DFE704F57172FA
-S315080019C8217C206801F0B8FDE8E70120E9E7022054
-S315080019D8E7E710B501F00F0443689C422CD811F0CC
-S315080019E8800F1DD1E3001A1B91000A4601F5FC7108
-S315080019F8014404310244002382F8FD3100238B7028
-S31508001A080C7090F8BC33012B18D00446012380F8D3
-S31508001A18BC33006801F0C5FC002084F8BC0310BD7F
-S31508001A28E3001A1B91000A4638310144043102447E
-S31508001A38012382F83D30E1E70120F0E70220EEE7CE
-S31508001A48534B98421FD0534B984228D0524B984232
-S31508001A5831D0524B98423AD0514B984243D0514BC9
-S31508001A6898424CD0504B984255D0504B98425ED02D
-S31508001A784F4B984267D04F4B984270D04E4B98427E
-S31508001A8879D00120704703F560531A6942F00102BC
-S31508001A981A611A6922F001021A610020704703F5D3
-S31508001AA850531A6942F002021A611A6922F00202B0
-S31508001AB81A610020704703F540531A6942F0040278
-S31508001AC81A611A6922F004021A610020704703F5A0
-S31508001AD830531A6942F008021A611A6922F0080294
-S31508001AE81A610020704703F520531A6942F010025C
-S31508001AF81A611A6922F010021A610020704703F564
-S31508001B0810531A6942F020021A611A6922F0200253
-S31508001B181A610020704703F500531A6942F040021B
-S31508001B281A611A6922F040021A610020704703F503
-S31508001B38E0531A6942F080021A611A6922F0800293
-S31508001B481A610020704703F5C0531A6942F4807277
-S31508001B581A611A6922F480721A610020704703F51F
-S31508001B68A0531A6942F400721A611A6922F40072BB
-S31508001B781A610020704703F580531A6942F4806297
-S31508001B881A611A6922F480621A610020704700BF38
-S31508001B98000002400004024000080240000C02400F
-S31508001BA8001002400014024000180240001C0240BF
-S31508001BB8002002400024024000280240F0B40C68C5
-S31508001BC894FAA4F4B4FA84F42CE08E68826893FA3A
-S31508001BD8A3F5B5FA85F56D0007FA05F522EA0502B3
-S31508001BE893FAA3F5B5FA85F56D0006FA05F52A43BD
-S31508001BF882600E69C26893FAA3F5B5FA85F56D0091
-S31508001C08032707FA05F522EA050293FAA3F5B5FAB2
-S31508001C1885F56D0006FA05F52A43C2604A68022A60
-S31508001C2822D001340B6833FA04F250D00122A240BC
-S31508001C381340F6D04E68026893FAA3F5B5FA85F507
-S31508001C486D00032707FA05F522EA050293FAA3F5B4
-S31508001C58B5FA85F56D0006FA05F52A4302604A685D
-S31508001C68013A012AC5D8B0E793FAA3F2B2FA82F282
-S31508001C78072A15D84D69026A93FAA3F6B6FA86F6BC
-S31508001C88B6000F2707FA06F622EA060293FAA3F31E
-S31508001C98B3FA83F39B0005FA03F313430362C0E719
-S31508001CA84A69456A1B0A93FAA3F6B6FA86F6B6008F
-S31508001CB80F2707FA06F625EA060593FAA3F3B3FAF1
-S31508001CC883F39B0002FA03F32B434362A9E74A68A6
-S31508001CD8013A012A02D90020F0BC7047C96842684F
-S31508001CE822EA030201FB03F313434360F3E7000008
-S31508001CF810B40A490C6924F440740C610C6944F45C
-S31508001D0840740C610C6944F001040C61026043607C
-S31508001D18BFF34F8F5DF8044B704700BF003C024085
-S31508001D28084B1A6922F440721A611A6942F4007259
-S31508001D381A611A6942F001021A610160BFF34F8FEE
-S31508001D48704700BF003C0240084B1A6922F44072EB
-S31508001D581A611A6942F480721A611A6942F0010214
-S31508001D681A610180BFF34F8F704700BF003C0240DD
-S31508001D78074B1A6922F440721A611A691A611A69B4
-S31508001D8842F001021A610170BFF34F8F704700BF16
-S31508001D98003C02401A4BDB6813F0020F04D0194ABC
-S31508001DA8936943F020039361154BDB6813F0100F12
-S31508001DB804D0144A936943F010039361104BDB6807
-S31508001DC813F0200F04D00F4A936943F00803936170
-S31508001DD80B4BDB6813F0400F04D00A4A936943F0AB
-S31508001DE804039361064BDB6813F0800F04D0054A99
-S31508001DF8936943F002039361014BF222DA60704754
-S31508001E08003C02402C0E0020094B1B69002B01DB05
-S31508001E1800207047064B074A5A6002F188325A6012
-S31508001E281B69002B01DB002070470120704700BFA3
-S31508001E38003C024023016745034A136943F00043FF
-S31508001E4813610020704700BF003C024038B50446BD
-S31508001E58154B00229A6102F09FFB0546134BDB6877
-S31508001E6813F4803F0AD0B4F1FF3FF7D024B102F04B
-S31508001E7893FB401BA042F1D903200DE00B4BDB680E
-S31508001E8813F0F20F09D1094BDB6813F0010F08D0DC
-S31508001E98064B0122DA60002038BDFFF77BFF0120D8
-S31508001EA8FAE70020F8E700BF2C0E0020003C0240A5
-S31508001EB8F8B51E4C247D012C35D01F4616460D460E
-S31508001EC804461A4B01221A754CF25030FFF7BEFF2A
-S31508001ED8014698B9032C07D8DFE804F002151A1F3B
-S31508001EE8F1B22846FFF744FF4CF25030FFF7AEFF31
-S31508001EF801460F4A136923F0010313610B4B0022AD
-S31508001F081A750846F8BDB1B22846FFF71DFFEBE774
-S31508001F1831462846FFF704FFE6E732463B46284699
-S31508001F28FFF7E6FEE0E70221EBE700BF2C0E0020EC
-S31508001F38003C0240014B1868704700BF2C0400207B
-S31508001F487047002800F0A18038B5044690F820307C
-S31508001F58D3B12268136823F00203136002F01CFB4E
-S31508001F68054623685A6812F0020F10D002F014FBCF
-S31508001F78401B0A28F5D9636A43F4003363620523CC
-S31508001F8884F82030012038BDFFF7DAFFE1E71A6840
-S31508001F9842F001021A6002F0FFFA054623685A68F9
-S31508001FA812F0010F0DD102F0F7FA401B0A28F5D9ED
-S31508001FB8636A43F400336362052384F820300120FA
-S31508001FC8E1E7227E012A3DD01A6822F080021A60CB
-S31508001FD8637E012B3BD02268136823F04003136005
-S31508001FE8A37E012B39D02268136823F020031360D7
-S31508001FF8E37E012B37D02268136843F01003136079
-S31508002008237F012B35D02268136823F00803136051
-S31508002018637F012B33D02268136823F00403136007
-S31508002028A368E26813432269134362691343626823
-S31508002038013A21681343CB6100206062012384F8C2
-S315080020482030A0E71A6842F080021A60C0E72268C2
-S31508002058136843F040031360C2E72268136843F025
-S3150800206820031360C4E72268136823F0100313607B
-S31508002078C6E72268136843F008031360C8E72268AE
-S31508002088136843F004031360CAE701207047000089
-S3150800209890F82030013BDBB2012B05D9436A43F49B
-S315080020A8802343620120704770B4434BD3F800225B
-S315080020B842F00102C3F80022D3F8002222F47C5227
-S315080020C8C3F80022D3F80022486A42EA0022C3F875
-S315080020D800224A6902F01F02012000FA02F2D3F828
-S315080020E81C42D0430440C3F81C42CB69B3B9324BEF
-S315080020F8D3F80C420440C3F80C42CE688D884C6964
-S3150800210845EA0645483443F834508E680C884D69C4
-S3150800211844EA0644483503EBC5035C60CB69012BE2
-S315080021281DD08B69002B32D1234CD4F804320340D6
-S31508002138C4F804320B698BBB1F4BD3F814422040F2
-S31508002148C3F814020B6A012B2FD01B4AD2F80032A7
-S3150800215823F00103C2F80032002070BC7047164B02
-S31508002168D3F80C421443C3F80C420E688D884C69A0
-S3150800217845EA0645483443F834508E688C894D69D3
-S3150800218844EA0644483503EBC5035C60C9E70A4CCC
-S31508002198D4F804321343C4F80432CBE70648D0F817
-S315080021A814321343C0F81432CCE70349D1F81C3269
-S315080021B81A43C1F81C22C8E70064004038B590F8ED
-S315080021C82030DBB2012B05D0436A43F4002343626F
-S315080021D8012038BD0446022380F8203002681368B7
-S315080021E823F00103136002F0D7F9054623685B68F4
-S315080021F813F0010F0DD002F0CFF9401B0A28F5D9C4
-S31508002208636A43F400336362052384F820300120A7
-S31508002218DFE700206062DCE770B490F820400568C4
-S31508002228AD68013CE4B2012C65D815F0E05F5CD0D6
-S31508002238C5F30165022D05D9436A43F400034362D1
-S3150800224801205DE00124AC401C608B68002B39D165
-S315080022580E68CB68046843EA465605F118031B015D
-S31508002268E65003680C6905F1180603EB06135C606B
-S315080022780B7D012B31D0D17993791B0443EA01638D
-S31508002288517943EA01231479016823432C0121442F
-S31508002298C1F88C31D17893781B0443EA01635178E5
-S315080022A843EA0123117802680B432244C2F88831AD
-S315080022B8016805F118031B01CA5842F00102CA5001
-S315080022C800201DE04C6843EAC403CC68066823432B
-S315080022D805F1180424013351C3E7036803EB061311
-S315080022E8596841F480715960C5E7436A43F4001395
-S315080022F84362012004E0436A43F4802343620120D1
-S3150800230870BC704790F82030013BDBB2012B01D92D
-S315080023180020704703689B68890631EA030301D0E1
-S31508002328012070470020704730B490F82040013CDF
-S31508002338E4B2012C00F28A8051B90468E46814F002
-S31508002348030F10D1436A43F400134362012082E065
-S315080023580468246914F0030F05D1436A43F400138B
-S315080023684362012077E0056801F11B0424012C5912
-S3150800237804F004049460002C5AD1056801F11B0482
-S3150800238824012C59640D1460056801F11B04240105
-S315080023982D59C5F34005D560056825446D6805F0CF
-S315080023A80F051561056825446D68C5F30725956108
-S315080023B805682C446468240C546104680A011444AA
-S315080023C8D4F8B8411C7004681444D4F8B841C4F366
-S315080023D807245C7004681444D4F8B841C4F3074465
-S315080023E89C7004681444D4F8B841240EDC70046858
-S315080023F81444D4F8BC411C7104681444D4F8BC418C
-S31508002408C4F307245C7104681444D4F8BC41C4F3C3
-S3150800241807449C7104682244D2F8BC21120EDA716A
-S3150800242871B90268D36843F02003D360002012E02C
-S31508002438056801F11B0424012C59E4085460A3E734
-S315080024480268136943F020031361EFE7436A43F40C
-S3150800245880234362012030BC70470000014B186096
-S31508002468704700BF2C04002038B5036813F0010F25
-S3150800247875D10D46044603683C4A1A404B68C96834
-S315080024880B4329690B43A9690B4313430360AB68DC
-S31508002498426822F44052134343606B69826822F407
-S315080024A8407213438360324B984216D0314B984298
-S315080024B827D0314B984228D0304B984229D0304BF8
-S315080024C898422AD02F4B98422CD02F4B98422ED080
-S315080024D82E4B984230D0012042E0032000F008F93C
-S315080024E800283ED02B68002B3DD0AA69B2F5004FCC
-S315080024F827D000EB5300B0FBF3F080B2E060002071
-S315080025082EE00C2000F0F4F8EAE7302000F0F0F8A6
-S31508002518E6E7C02000F0B6F9E2E74FF4407000F0AD
-S31508002528B1F9DDE74FF4406000F0E2F8D8E74FF478
-S31508002538405000F0A7F9D3E74FF4404000F0A2F95D
-S31508002548CEE75A0802EB4000B0FBF3F04FF6F073FB
-S315080025580340C0F342001843E060002000E0012071
-S3150800256838BD0120FCE70120FAE700BFF369FFEF51
-S31508002578001001400044004000480040004C00405C
-S31508002588005000400014014000780040007C0040DC
-S315080025981E4A136843F0010313601C4B1B6813F0AB
-S315080025A8020FFAD0194A00239360194B136013686F
-S315080025B823F0F80343F080031360144B1B6813F0E9
-S315080025C8007FFAD1114B1B6813F0006FFAD10F4B35
-S315080025D81B6813F0005FFAD10C4B0E4A5A60103A82
-S315080025E8C3F88420C3F88820DA6822F4FE42DA6041
-S315080025F8DA6842F47F02DA605A6F22F001025A67F3
-S315080026085A6F42F080725A670020704700380240B5
-S31508002618FFFFF2EA10300024034B9B68C3F3031349
-S31508002628024AD35CD840704700380240DC5000089C
-S31508002638034B9B68C3F38223024AD35CD84070478E
-S3150800264800380240EC500008034B9B68C3F342333A
-S31508002658024AD35CD840704700380240EC5000085C
-S315080026680D4B5B6803F480039BB90C480A4B5A6800
-S3150800267802F03F02B0FBF2F25868C0F3881000FB7C
-S3150800268802F05B68C3F3014301335B00B0FBF3F068
-S3150800269870470348EAE700BF003802400024F40000
-S315080026A800127A0008B5074B9B6803F00C03042B45
-S315080026B804D0082B04D1FFF7D3FF02E0024800E054
-S315080026C8024808BD0038024000127A000024F400C7
-S315080026D810B50446FFF7E6FF2060FFF79DFF606028
-S315080026E8FFF7A6FFA0606068FFF7AEFFE06010BDC1
-S315080026F808B5032808D00C282DD0B0F5406F51D05E
-S31508002708302877D0002008BD584BD3F890300340BE
-S3150800271843EA0040564B98420FD0B0F1031F13D036
-S31508002728013B984206D0FFF7BDFFFFF775FFFFF795
-S315080027388BFFE8E7FFF7B6FFE5E74C4B1B6813F096
-S31508002748020F7ED10020DEE7484B1B6F13F0020FFD
-S3150800275879D10020D7E7454BD3F89030034043EAB0
-S315080027680040444B98420FD0B0F10C1F13D0043BDD
-S31508002778984206D0FFF796FFFFF74EFFFFF758FF78
-S31508002788C1E7FFF78FFFBEE7384B1B6813F0020F48
-S315080027985CD10020B7E7354B1B6F13F0020F57D1F2
-S315080027A80020B0E7314BD3F89030034043EA0040A5
-S315080027B8314B984210D0B0F10C2F14D0A3F5806392
-S315080027C8984206D0FFF76EFFFFF726FFFFF73CFF94
-S315080027D899E7FFF767FF96E7244B1B6813F0020F84
-S315080027E839D100208FE7214B1B6F13F0020F34D124
-S315080027F8002088E71D4BD3F89030034043EA004091
-S315080028081E4B98420FD0B0F1301F13D0103B984298
-S3150800281806D0FFF747FFFFF7FFFEFFF709FF72E746
-S31508002828FFF740FF6FE7114B1B6813F0020F17D12C
-S31508002838002068E70D4B1B6F13F0020F12D100201A
-S3150800284861E70F485FE74FF400405CE70C485AE732
-S315080028584FF4004057E70A4855E74FF4004052E757
-S31508002868074850E74FF400404DE700BF00380240DC
-S315080028780200030008000C000008000C20003000C5
-S315080028880024F40008B5C0280AD0B0F5407F2FD038
-S31508002898B0F5405F54D0B0F5404F79D0002008BD58
-S315080028A8594BD3F89030034043EA0040574B9842B7
-S315080028B80FD0B0F1C01F14D0403B984206D0FFF79E
-S315080028C8F1FEFFF7A9FEFFF7B3FEE8E7FFF7EAFE12
-S315080028D8E5E74D4B1B6813F0020F40F08180002096
-S315080028E8DDE7494B1B6F13F0020F7BD10020D6E7B3
-S315080028F8454BD3F89030034043EA0040444B98428E
-S3150800290810D0B0F1032F14D0A3F58073984206D0DF
-S31508002918FFF7C8FEFFF780FEFFF78AFEBFE7FFF757
-S31508002928C1FEBCE7384B1B6813F0020F5DD10020C7
-S31508002938B5E7354B1B6F13F0020F58D10020AEE7E9
-S31508002948314BD3F89030034043EA0040314B984264
-S3150800295810D0B0F1302F14D0A3F58053984206D082
-S31508002968FFF7A0FEFFF758FEFFF762FE97E7FFF7A7
-S3150800297899FE94E7244B1B6813F0020F3AD10020FE
-S315080029888DE7214B1B6F13F0020F35D1002086E720
-S315080029981D4BD3F89030034043EA00401E4B98423B
-S315080029A810D0B0F1C02F14D0A3F58043984206D0B2
-S315080029B8FFF778FEFFF730FEFFF73AFE6FE7FFF7F7
-S315080029C871FE6CE7104B1B6813F0020F17D1002035
-S315080029D865E70D4B1B6F13F0020F12D100205EE757
-S315080029E80E485CE74FF4004059E70C4857E74FF4A0
-S315080029F8004054E7094852E74FF400404FE70748B4
-S31508002A084DE74FF400404AE7003802408000C0000E
-S31508002A180002000300200030008000C00024F400F3
-S31508002A280649CB6823F4E0631B041B0C000200F478
-S31508002A38E0600343024A1A43CA60704700ED00E0A3
-S31508002A480000FA0530B4154BDB68C3F30223C3F15B
-S31508002A580704042C28BF04241D1D062D01D9033B91
-S31508002A6800E000234FF0FF3505FA04F421EA0401D3
-S31508002A78994005FA03F322EA03031943002805DBFC
-S31508002A880901C9B2064B195430BC704700F00F004B
-S31508002A980901C9B2034B1954F6E700BF00ED00E077
-S31508002AA800E400E014ED00E00138B0F1807F0AD2B6
-S31508002AB8064B5860064AF02182F8231000209860D1
-S31508002AC807221A6070470120704700BF10E000E02F
-S31508002AD800ED00E0002301330C4A934211D802693D
-S31508002AE8002AF8DA036943F0010303610023013376
-S31508002AF8064A934207D8026912F0010FF7D1002057
-S31508002B087047032070470320704700BF400D030035
-S31508002B1884B010B5044603A880E80E00089B012B6C
-S31508002B281DD1A36B23F48033A363E268164B1340C5
-S31508002B38E360E36823F44013E3600F9B012B09D095
-S31508002B482046FFF7C7FF069B012B14D0BDE81040A7
-S31508002B5804B07047E36843F48013E360F0E7E3687A
-S31508002B6843F04003E3602046FFF7B4FFA36B43F442
-S31508002B788033A363E7E7A36843F00603A360A36863
-S31508002B8843F02003A360E1E7BFFFBDFF022A0AD08E
-S31508002B980921C26822F47052C260C36843EA8123D5
-S31508002BA8C36000207047274B0B44274A934237D9FE
-S31508002BB8264B0B44264A934234D9264B0B44264ABD
-S31508002BC8934231D9254B0B4402F5C332A0329342BE
-S31508002BD82CD9234B0B44234A934229D9224B0B441D
-S31508002BE802F5922202F57872934223D91F4B0B44B9
-S31508002BF802F5C32202F5207293421DD91C4B0B44D9
-S31508002C0802F5B71202F55872934217D9194B0B44B5
-S31508002C1802F5122202F5F862934211D80721B8E79D
-S31508002C280F21B6E70E21B4E70D21B2E70C21B0E76C
-S31508002C380B21AEE70A21ACE70921AAE70821A8E78C
-S31508002C480621A6E7405327FFFF340C00401E1BFF4A
-S31508002C583F420F0000DC0BFF7F4F1200808CF9FE05
-S31508002C6860B6E5FE5FE3160000D3CEFEC05BB3FE92
-S31508002C7800CA91FEE05459FE836843F00103836055
-S31508002C8800207047836823F001038360002070479B
-S31508002C9808B5C36823F0C043C360012909D069B9D8
-S31508002CA8C36843F08043C3603220FEF7CDF800209E
-S31508002CB808BDC36843F00053C360F5E70120F7E78A
-S31508002CC8890141F02001016100230133054A934235
-S31508002CD805D8026912F0200FF7D1002070470320A3
-S31508002CE8704700BF400D030010230361002301331A
-S31508002CF8054A934205D8026912F0100FF7D1002049
-S31508002D0870470320704700BF400D0300D0F800380D
-S31508002D181943C0F8001800207047000084B0F8B5B9
-S31508002D28044607A880E80E00254600230E2B07D878
-S31508002D3803F1400204EB8202002151600133F5E7F2
-S31508002D48119B03BBA36B23F40013A363236843F007
-S31508002D5840032360236843F0800323600023C4F8F4
-S31508002D68003E04F50066D4F80038C4F800380C9B11
-S31508002D78012B0DD0032B1CD1099BABB9002120468A
-S31508002D88FFF7C4FF19E0A36B43F40013A363E5E751
-S31508002D98099B23B900212046FFF7B8FF0DE001215A
-S31508002DA82046FFF7B3FF08E001212046FFF7AEFFEC
-S31508002DB803E003212046FFF7A9FF10212046FFF765
-S31508002DC87FFF074600B101272046FFF78DFF00B1B0
-S31508002DD80127002333617361F3610AE0C3B94FF031
-S31508002DE80060C2F8000900220A614FF67F328A603D
-S31508002DF80133079A9A4210D905EB431202F5106176
-S31508002E08D2F800090028E9DB0020C2F80009EAE739
-S31508002E184FF09040C2F80009E5E700230AE0C3B975
-S31508002E284FF00060C2F8000B00220A614FF67F32A5
-S31508002E388A600133079A9A4210D905EB431202F5BC
-S31508002E483061D2F8000B0028E9DB0020C2F8000B35
-S31508002E58EAE74FF09040C2F8000BE5E7336923F438
-S31508002E68807333610A9B012B1BD00022A2616FF085
-S31508002E78804262611BB9A36943F01003A361A26982
-S31508002E880E4B1343A3610D9B1BB1A36943F00803BB
-S31508002E98A361119B012B0BD03846BDE8F84004B056
-S31508002EA87047074A3263316B064A0A433263DCE7DE
-S31508002EB8A269054B1343A361EEE700BF00383C80BF
-S31508002EC8000180000300010004000040D0F808381B
-S31508002ED813F0060307D0062B18BF022B01D00020D3
-S31508002EE870470220704700207047000070B40B78BE
-S31508002EF84A78012A20D0D0F81C2803F00F060124A6
-S31508002F08B44042EA0442C0F81C2800EB4310D0F843
-S31508002F18003B13F4004F0CD1D0F8002B8B68C3F391
-S31508002F280A03C97843EA81431343134A1A43C0F884
-S31508002F38002B002070BC7047D0F81C4803F00F0619
-S31508002F48B24092B22243C0F81C2800EB4310D0F8CE
-S31508002F58002912F4004FECD1D0F800498A68C2F368
-S31508002F680A02C97842EA814242EA8353234302495C
-S31508002F781943C0F80019DCE70080001070B40B7814
-S31508002F884A78012A1FD0D0F83C5803F00F060124C6
-S31508002F9804FA06F625EA0645C0F83C58D0F81C583F
-S31508002FA8097801F00F018C4025EA0444C0F81C484A
-S31508002FB800EB4310D0F8002B124B1340C0F8003B27
-S31508002FC8002070BC7047D0F83C6803F00F0402FA7A
-S31508002FD804F4A4B226EA0404C0F83C48D0F81C480D
-S31508002FE8097801F00F018A4092B224EA0202C0F871
-S31508002FF81C2800EB4310D0F80039034A1A40C0F8D9
-S315080030080029DDE70078F3EF007833EC70B40B7825
-S315080030184C78012C24D000EB431000F530631D6969
-S315080030283A4C2C401C611D69394C2C401C614C6972
-S315080030380CB18C684C611C6944F400241C611C6939
-S315080030488D68C5F312052C431C61012A59D0D0F89E
-S31508003058003B43F00443C0F8003B002070BC7047AF
-S315080030684C6954BB00EB4314D4F81069284D354015
-S31508003078C4F81059D4F8105945F40025C4F810595D
-S31508003088D4F81069214D3540C4F81059012A30D0B2
-S315080030984A694AB1D0F83428097801F00F040121A1
-S315080030A8A1400A43C0F8342800EB4310D0F8002999
-S315080030B842F00442C0F80029CFE700EB431404F5B0
-S315080030C810642669114D354025612669104D35402D
-S315080030D825614E698D68AE4200D94D61256945F46A
-S315080030E80025256125694E69C6F31206354325610B
-S315080030F8CCE70A69002AD7D000EB4311C1F814298E
-S31508003108D2E7CA68002AA2D05A61A0E70000F8FFE9
-S31508003118FFFF07E070B49DF80C4064B903339E08B6
-S31508003128B44208D200EB023303F5805351F8045B26
-S315080031381D600134F4E7002070BC7047F0B583B011
-S315080031480B784C78012C29D000EB431303F530642F
-S315080031582669704D3540256126696F4D35402561CC
-S315080031684D69002D40F0A88025698E68C6F31206B9
-S3150800317835432561256945F400252561012A00F0AE
-S31508003188B080CA78012A00F0B280D3F8002B42F042
-S315080031980442C3F8002B002003B0F0BD4C69002C8C
-S315080031A839D100EB4314D4F810695B4D3540C4F89F
-S315080031B81059D4F8105945F40025C4F81059D4F80C
-S315080031C81069544D3540C4F81059012A55D0CC78A1
-S315080031D8012C0BD04C694CB1D0F834480D7805F061
-S315080031E80F060125B5402C43C0F83448CC78012C85
-S315080031F84BD000EB4313D3F8004944F00444C3F812
-S315080032080049CB78012BC6D100928B8A0A78C968FF
-S31508003218FFF780FFBFE700EB4314D4F810693D4D6C
-S315080032283540C4F81059D4F810693B4D3540C4F8F0
-S315080032381059D4F810694D698F683D44013DB5FBAE
-S31508003248F7F5364F07EAC5453543C4F81059D4F893
-S3150800325810594E69C6F312063543C4F8105904F5D1
-S315080032681064CD78012DB0D1256925F0C0452561B2
-S31508003278256945F000552561A7E70C69002CB5D0E6
-S3150800328800EB4315C5F81449B0E7D0F8084814F414
-S31508003298807F08D100EB4315D5F8004944F000545F
-S315080032A8C5F80049A5E700EB4315D5F8004944F0E9
-S315080032B88054C5F800499CE78E683544013DB5FB3E
-S315080032C8F6F52669154F07EAC5473E432661276975
-S315080032D88E68ADB206FB05F5C5F312053D432561B3
-S315080032E84CE7CA68002A3FF44CAF626149E7D0F850
-S315080032F8082812F4807F06D1D3F8002B42F0005232
-S31508003308C3F8002B41E7D3F8002B42F08052C3F8E4
-S31508003318002B3AE70000F8FFFFFF07E00000F81F58
-S3150800332803329208002393420CD210B400F5805455
-S31508003338246841F8044B01339342F7D308465DF8ED
-S31508003348044B7047084670470B784A78012A14D008
-S3150800335800EB4310D0F8002B002A06DB2BB1D0F877
-S31508003368003B23F08043C0F8003BD0F8003B43F409
-S315080033780013C0F8003B0020704700EB4310D0F854
-S315080033880029002A06DB2BB1D0F8003923F0804340
-S31508003398C0F80039D0F8003943F40013C0F80039EA
-S315080033A8E9E70B784A78012A0ED000EB4310D0F8E3
-S315080033B8003B23F40013C0F8003BCB78023BDBB292
-S315080033C8012B15D90020704700EB4310D0F80039B7
-S315080033D823F40013C0F80039CB78023BDBB2012B83
-S315080033E8F0D8D0F8003943F08053C0F80039E9E737
-S315080033F8D0F8003B43F08053C0F8003BE2E738B505
-S315080034080546044600220E2A09D804EB42134FF64D
-S315080034187F31C3F80819C3F8081B0132F3E70022FD
-S31508003428C5F81028C5F81428C5F81C282846FFF733
-S315080034385BFC034608B1184638BD10212846FFF735
-S315080034483FFC0346F7E7D0F8003823F4FE63C0F8D4
-S315080034580038D0F80038090101F4FE610B43C0F8BA
-S3150800346800380020704708B5D0F8043823F002035E
-S31508003478C0F804380320FDF7E7FC002008BD08B5A6
-S31508003488D0F8043843F00203C0F804380320FDF7DF
-S31508003498DBFC002008BD4269806910407047D0F8F7
-S315080034A8183800F50060C0691840000C7047D0F855
-S315080034B8183800F50060C069184080B2704700EBFC
-S315080034C84111D1F8082B00F5006040691040704793
-S315080034D810B4D0F81048D0F8343801F00F02D340A9
-S315080034E8DB01DBB2234300EB411000F5106080686E
-S315080034F818405DF8044B7047406900F001007047B2
-S31508003508D0F800290B4B1340C0F8003900F50063C2
-S315080035189A6802F00602042A05D05A6842F48072AC
-S315080035285A6000207047D0F8002942F00302C0F814
-S315080035380029F2E700F8FFFF10B4046C154B9C420B
-S3150800354803D9D0F8003B002B16DB0024C0F8104B33
-S31508003558D0F8104B44F40024C0F8104BD0F8104BA0
-S3150800356844F01804C0F8104BD0F8104B44F0C04487
-S31508003578C0F8104B012903D000205DF8044B7047AA
-S31508003588C0F8142BD0F8003B43F08023C0F8003B62
-S31508003598F2E700BF0A30544F084B1A6922F4407202
-S315080035A81A611A6942F004021A611A6942EA002085
-S315080035B840F480301861BFF34F8F7047003C0240D3
-S315080035C810B449B1012923D0022902D04FF4407218
-S315080035D803E04FF4007200E000220F4B1C6924F444
-S315080035E840741C61196911431961196921F0F801B8
-S315080035F819611A6942EAC00242F002021A611A6996
-S3150800360842F480321A61BFF34F8F5DF8044B704756
-S315080036184FF48072E1E700BF003C0240214B1B7D56
-S31508003628012B3CD070B50E4604461E4B01221A756E
-S315080036384CF25030FEF70AFC014658BB4FF0FF33F0
-S3150800364833602368012B16D06568A368626813443B
-S31508003658AB421FD9217B2846FFF7B2FF4CF2503000
-S31508003668FEF7F4FB104A136923F07A03136101463F
-S3150800367878B90135E9E7207BFFF78EFF4CF2503021
-S31508003688FEF7E4FB0146084A136923F004031361AD
-S3150800369800E03560034B00221A75084670BD022102
-S315080036A8084670472C0E0020003C024030B40468D7
-S315080036B8606A29B940EA0240A062002030BC704717
-S315080036C80D46A36A00EB13400023691E8B4209D2F4
-S315080036D803F1400104EB8101496800EB114001330D
-S315080036E8DBB2F2E740EA024005F13F0104EB81014B
-S315080036F84860E2E703685962002070470246036893
-S315080037080121C0F8FC13002082F8F4039A6942F0F4
-S3150800371800629A61596D024A0A435A65704700BFA2
-S31508003728030000107047000012230B8000487047FA
-S315080037385404002004230B800048704768040020BE
-S315080037480023934216D230B40BE0373401F81340FD
-S3150800375800015C00013400250D550133DBB29342A4
-S3150800376806D2040F092CF0D8303401F81340EFE7D5
-S3150800377830BC70477047000038B50A4B18680433E0
-S315080037881C6804331B68C01800D138BD064D0822CA
-S31508003798A91CFFF7D5FF042205F112012046FFF7F9
-S315080037A8CFFFF2E720F4F01F6C04002008B51A23AF
-S315080037B80B80FFF7E1FF014808BD00BF6C04002035
-S315080037C808B50A4628B905490548FDF72CF90348F6
-S315080037D808BD02490248FDF726F9F8E7480E002011
-S315080037E82451000810B5044C0A4621460348FDF73B
-S315080037F81AF9204610BD00BF480E002014510008CB
-S3150800380808B50A4628B905490548FDF70CF90348D5
-S3150800381808BD02490248FDF706F9F8E7480E0020F0
-S31508003828F450000808B50A4628B905490548FDF7B9
-S31508003838FAF8034808BD02490248FDF7F4F8F8E71C
-S31508003848480E0020FC500008014B1880704700BF3E
-S315080038580A05002008B500F097FE0E4B1B6898422B
-S315080038680FD30D4B1B786BB90B4B01221A700B4BF8
-S3150800387880229A6100F088FE094B1B881844054B7C
-S31508003888186008BD044B00221A70044B4FF4000256
-S315080038989A61EFE7100500200C0500200004024095
-S315080038A80A050020024B4FF400029A61704700BFD0
-S315080038B80004024008B5054B1B6913F4005F01D0E4
-S315080038C8002008BDFFF7EEFF0120FAE700080240CE
-S315080038D808B56420FFF7B8FF08BD08B5FFF7BAFFB3
-S315080038E808BD70477047704708B5304A136823F013
-S315080038F80F0343F007031360136803F00F03072B3E
-S315080039084ED12B4B1A6842F440421A601A6842F4A0
-S3150800391880321A6003F5E4331A6842F480221A6082
-S315080039281A6842F480321A60224B1B6813F4003F67
-S31508003938FAD0204B5A6820491140204A0A435A604F
-S315080039485A681F4911401F4A0A435A601A6842F0C2
-S3150800395880721A60174B1B6813F0007FFAD0154B54
-S315080039689A6822F0F0029A609A6822F4E05242F4C1
-S31508003978A0529A609A6822F4604242F400429A6019
-S315080039889A6822F0030242F002029A60094B9B6881
-S3150800399803F00C03082BF9D10B48FEF75FFD08BDA9
-S315080039A86A210A4800F0C0FAABE700BF003C0240AB
-S315080039B800700040003802400080BCFF086C4000D8
-S315080039C80080BFF0086C400900E6DF0C3851000893
-S315080039D808B5FDF72DFAFFF787FF08BD08B5FFF705
-S315080039E8F7FF00F0ADFA00F0B9FAFCE72DE9F04365
-S315080039F891B04C4C636C43F480436364636C03F482
-S31508003A0880430993099B236C43F080532364236CF2
-S31508003A1803F080530893089B236B43F00103236341
-S31508003A28236B03F001030793079B236B43F00203F9
-S31508003A382363236B03F002030693069B236B43F069
-S31508003A4804032363236B03F004030593059B236B85
-S31508003A5843F008032363236B03F008030493049BCA
-S31508003A68236C43F480232364236C03F48023039391
-S31508003A78039B236C43F000732364236C03F00073E1
-S31508003A880293029B80230A9301230B9300250C9526
-S31508003A980D950E95DFF89C800AA94046FEF78EF824
-S31508003AA84FF40003C8F818304FF400530A930B95DF
-S31508003AB80E950AA91C48FEF781F84FF44079CDF807
-S31508003AC8289002270B9703260C960D950E95072323
-S31508003AD80F930AA91548FEF771F8CDF828900B97A1
-S31508003AE80C960D950E9509230F930AA94046FEF7DD
-S31508003AF865F84FF4C0530A930B970C960D950E95D7
-S31508003B080A230F930AA90A48FEF758F8636B43F085
-S31508003B1880036363636B03F080030193019B11B011
-S31508003B28BDE8F0830038024000080240000C024055
-S31508003B38000002400004024010B5FEF729FD1B4CA0
-S31508003B484FF40003A3611A48FDF77AFF1948FDF7F1
-S31508003B5877FF2046FDF774FF1748FDF771FF174BE7
-S31508003B685A6B22F080025A631A6C22F000721A64A1
-S31508003B781A6C22F480221A641A6B22F008021A6355
-S31508003B881A6B22F004021A631A6B22F002021A63ED
-S31508003B981A6B22F001021A631A6C22F080521A6410
-S31508003BA85A6C22F480425A6410BD00BF00040240D1
-S31508003BB8000C02400008024000000240003802409B
-S31508003BC82023038000487047C00400200A23038086
-S31508003BD800487047E004002008B590F87432032BB3
-S31508003BE801D0002008BD01F0E3F9FAE708B501F0AD
-S31508003BF8DFF9002008BD08B5084601F00DFA0020CF
-S31508003C0808BD000008B50B7813F0600F06D14B788D
-S31508003C180A2B14D00B2B17D0062B01D0002008BD71
-S31508003C284B881B0A212B04D00B491722FCF7A7FB44
-S31508003C38F4E7CA88172A28BF17220849F6E701228F
-S31508003C480749FCF79CFBE9E78B7813B9044A136024
-S31508003C58E4E7FCF7EEFBE1E7C9040020D2040020FC
-S31508003C681405002010B50446812100F02DF901211C
-S31508003C78204600F029F9002010BD000010B50446BA
-S31508003C8840230222812100F014F94023022201214F
-S31508003C98204600F00EF94023034A0121204600F089
-S31508003CA83BF9002010BD00BF4810002000487047A7
-S31508003CB84810002008B500F57171D0F80004FCF723
-S31508003CC816FF08BD08B5C1EBC10293000344D3F833
-S31508003CD80822D0F80004FCF738FF08BD08B5C1EB80
-S31508003CE8C102930003449A6CD0F80004FCF777FFE6
-S31508003CF808BD08B5D0F80004FDF717F808BD000098
-S31508003D0810B50446C3684BB1022B01D1012106E060
-S31508003D189121074800F008F9012100E00021D4F8AC
-S31508003D280004FCF7F0FFD4F80004FCF7C4FF10BD44
-S31508003D384051000810B50446D0F80004FCF7E6FF21
-S31508003D482268D2F8003E43F00103C2F8003E236A0F
-S31508003D5823B1044A136943F006031361FFF7C2FD4A
-S31508003D6810BD00BF00ED00E010B50446FFF7BBFD27
-S31508003D78D4F80004FCF7D3FF10BD08B5D0F8000442
-S31508003D88FCF7E3FF08BD08B5D0F80004FCF7DBFF2D
-S31508003D9808BD10B504460120FFF7A3FDD4F80004B2
-S31508003DA8FCF7D5FF10BD10B504460020FFF799FDAE
-S31508003DB8D4F80004FCF7CDFF10BD000003780BB15A
-S31508003DC80020704710B503461748C0F80034C3F8F2
-S31508003DD898024FF0A0430360062343600222C2609C
-S31508003DE80023036182610122C26103624362C362DE
-S31508003DF80363FDF7A7F880B90B4C80212046FFF727
-S31508003E0879FC402200212046FFF750FC8022012138
-S31508003E182046FFF74BFC002010BD40F22511034849
-S31508003E2800F082F8E8E700BF881000204051000833
-S31508003E38D0F8983211F0800F08D101F07F01C1EB54
-S31508003E48C1018A00134493F8FE01704701F07F0107
-S31508003E58C1EBC1018A00134493F83E00704708B5C0
-S31508003E68D0F89802FDF741FD08BD022807D8DFE813
-S31508003E7800F002060400002070470120704702205F
-S31508003E88704708B5D0F89802FDF723F9FFF7EDFF54
-S31508003E9808BD08B5D0F89802FDF7E6F8FFF7E5FF7C
-S31508003EA808BD08B5D0F89802FDF7F3F8FFF7DDFF67
-S31508003EB808BD10B51C4613462246D0F89802FDF7E9
-S31508003EC870FCFFF7D2FF10BD08B5D0F89802FDF7C9
-S31508003ED8A8FCFFF7CAFF08BD08B5D0F89802FDF791
-S31508003EE837FDFFF7C2FF08BD08B5D0F89802FDF7F9
-S31508003EF870FDFFF7BAFF08BD08B5D0F89802FDF7B8
-S31508003F083CFCFFF7B2FF08BD08B5D0F89802FDF7E4
-S31508003F18F5FCFFF7AAFF08BD08B5D0F89802FDF723
-S31508003F28B6FCFFF7A2FF08BD08B500F005F8FCE7E0
-S31508003F3808B5FFF7CDFC08BD08B5FFF7CEFC08BDE8
-S31508003F4808B500F07BFEFFF7F3FF00F0FBFA01F077
-S31508003F588FF800F057F800F049F808BD08B5FFF7DC
-S31508003F68EBFF00F003FB00F061F800F001F808BD6C
-S31508003F7808B500F0DFF8012803D00B4B1B78012B96
-S31508003F8800D008BD00F000FB084B1B68084A1268F9
-S31508003F98134403F5FA739842F3D3034B00221A70B5
-S31508003FA800F050FEEDE700BF1C05002018050020AC
-S31508003FB820050020014B1860704700BF180500202F
-S31508003FC8014B1868704700BF1805002008B5054B4F
-S31508003FD81B78012B00D008BD00F0D6FA024B1860F2
-S31508003FE8F9E700BF1C0500202005002008B5044B8A
-S31508003FF801221A70FFF7EAFFFFF7BAFF08BD00BFEC
-S315080040081C05002010B500F005FA00F0B7FB064CB1
-S315080040180123237000F0EAFA0023237000F0FEFE5D
-S315080040280223237010BD00BFEA04002000B583B040
-S315080040380DF10701184800F01DFC012810D00DF1F4
-S315080040480701154800F008FB012812D00DF10701F1
-S31508004058114800F061FF012814D003B05DF804FB8D
-S315080040680E4B01221A709DF807100B4800F0F2F95A
-S31508004078E5E70A4B00221A709DF80710064800F073
-S31508004088E9F9E3E7054B02221A709DF8071002487A
-S3150800409800F0E0F9E1E700BF24050020EA04002063
-S315080040A808B500F0FFFE08BD38B504460D460E4BA8
-S315080040B81B78012B09D00C4B1B7853B10A4B1B787C
-S315080040C8022B0BD000F0BEF938BDC9B200F0ACFB24
-S315080040D8F1E7E9B2204600F0A3FAEFE7E9B220468D
-S315080040E800F0F0FEEEE700BFEA040020074B1B7855
-S315080040F8022B05D0032B05D0012B05D0402070478D
-S315080041083F2070470020704708207047EA040020BF
-S31508004118074B1B78022B05D0032B05D0012B05D09E
-S31508004128402070473F207047002070470820704796
-S31508004138EA04002008B500F07BF9034600B101231C
-S31508004148184608BD014B00225A70704764050020BE
-S31508004158034BFE22DA7018710222A3F8442070472E
-S315080041686405002010B5054C00232370FFF7EAFF05
-S31508004178FF23E3700123A4F8443010BD640500202A
-S31508004188064BFF22DA7000221A71597859719A710A
-S31508004198DA711A720622A3F84420704764050020CB
-S315080041A808B50020FFF7D4FF08BD0000074BFF221B
-S315080041B8DA70074A9A6400221A715A719A710722A4
-S315080041C8C3F807200822A3F844207047640500208E
-S315080041D84C510008044BFF22DA7042689A6401229F
-S315080041E8A3F84420704700BF6405002008B53120AD
-S315080041F8FFF7AEFF08BD000038B5084CFF23E3708B
-S31508004208002525716571FFF771FFA071E5712572A3
-S3150800421865720723A4F8443038BD00BF640500203A
-S3150800422838B5FFF78FFF0E4C01252570FF23E3707D
-S315080042381023237100236371FFF758FFA071FFF756
-S3150800424867FFE071FFF764FFC0F307202072657205
-S31508004258A5720823A4F8443000F00AFF38BD00BF49
-S315080042686405002038B50546FFF740FF6A7890428E
-S315080042780FD90A4CA16C201D00F004FDFF23E3703A
-S315080042886A78A36C1344A3646B780133A4F84430A2
-S3150800429838BD2220FFF75CFFFAE700BF6405002057
-S315080042A838B50446FFF722FF6378984211D9616842
-S315080042B80A4DA9646278281D00F0E4FCFF23EB7018
-S315080042C86278AB6C1344AB6463780133A5F8443061
-S315080042D838BD2220FFF73CFFFAE700BF6405002037
-S315080042E8F8B50546174600244E1E39B115F8013BA0
-S315080042F81C44E4B2FFF720FE3146F5E73C6001208E
-S31508004308F8BD000010B5084CFF23E370E21D4168AC
-S31508004318A06CFFF7E5FF207100236371A3710823DA
-S31508004328A4F8443010BD00BF6405002038B505461A
-S315080043380D4B9C6CFFF7DAFE6A1C411E204600F0FE
-S315080043489BFE60B1084CFF23E370FFF7CFFE0138E8
-S31508004358A36C0344A3640123A4F8443038BD312070
-S31508004368FFF7F6FEFAE700BF6405002010B5044615
-S31508004378FFF7BCFE01386378984213DD114BFF221C
-S31508004388DA700122A3F84420617879B1A21C0D4B92
-S31508004398986C00F071FE88B161780A4A936C0B44F0
-S315080043A8936410BD2220FFF7D3FEFAE700F074FEE7
-S315080043B80028F6D13120FFF7CBFEF2E73120FFF7C8
-S315080043C8C7FEEEE76405002008B54168074B986CF8
-S315080043D800F056FE30B1054BFF22DA700122A3F829
-S315080043E8442008BD3120FFF7B3FEFAE7640500202C
-S315080043F808B500F027FC034BFF22DA700122A3F860
-S31508004408442008BD6405002008B589B2FFF74CFEAC
-S3150800441808BD0000054B00221A709A6483F84320E9
-S31508004428A3F844209A705A70704700BF64050020A4
-S31508004438034B1B780BB1012070470020704700BF5B
-S3150800444864050020024B002283F84320704700BF0A
-S315080044586405002008B50378FF2B23D0354A12785F
-S31508004468012A2BD1C93B352B53D8DFE803F0405234
-S31508004478524F52524C434946525252525252525233
-S3150800448852525252525252525252525252525252F6
-S315080044985252525252525252312B282E525252349A
-S315080044A852373A3DFFF7BCFE224B93F84330012BAF
-S315080044B833D0204BB3F94410002932DC08BDFFF786
-S315080044C8D1FEF1E7FFF7ECFEEEE7FFF783FEEBE731
-S315080044D8FFF718FFE8E7FFF769FEE5E7FFF760FE6D
-S315080044E8E2E7FFF74DFEDFE7FFF73CFEDCE7FFF7FD
-S315080044F81DFFD9E7FFF73AFFD6E7FFF77DFED3E7B3
-S31508004508FFF762FFD0E7FFF773FFCDE7FFF76EFE09
-S31508004518CAE72020FFF71CFEC6E71020FFF718FE9B
-S31508004528C7E71846012380F843300330FFF76CFFC6
-S31508004538C4E700BF64050020014B00221A607047D3
-S3150800454810E000E008B5FFF7F7FF054B054A5A6083
-S3150800455800229A6005211960034B1A6008BD00BF3E
-S3150800456810E000E0BF4B0300B0050020044B1B68B1
-S3150800457813F4803F03D0034A136801331360704766
-S3150800458810E000E0B005002008B5FFF7EFFF014B83
-S31508004598186808BDB005002008B5FFF7F5FF08BD7F
-S315080045A870470000054BDB6913F0200F04D0034B56
-S315080045B85B6A037001207047002070470048004076
-S315080045C810B5094B9862FFF7DFFF00F10A04064B9E
-S315080045D8DB6913F0800F05D1FFF7AEFCFFF7D4FFB0
-S315080045E8A042F4D910BD00BF0048004010B588B0F5
-S315080045F84FF46143019300230293039304930C2217
-S31508004608059206930793054C01A92046FDF72CFF4A
-S31508004618236843F00103236008B010BD0048004032
-S3150800462870B506460D4640290ED82846FFF7C8FF36
-S315080046380024ABB2A3420CD9FFF77EFC305DFFF726
-S31508004648BFFF0134A4B2F4E781210248FFF76CFCE6
-S31508004658EBE770BD5451000870B5254B1C78BCB9FA
-S315080046682448FFF79FFF012801D0204670BD214B3B
-S315080046781B78013BDBB23F2BF7D8FFF785FF1E4BAC
-S3150800468818601E4B00221A70194B01221A70ECE7A3
-S3150800469806460D46194B1B78013316481844FFF78A
-S315080046A881FF0446012815D1144B1A780132D2B273
-S315080046B81A70104B1B789A4201D00024D5E7104986
-S315080046C8304600F0DFFA0A4B00221A700B4B1B78AB
-S315080046D82B70CAE7FFF758FF074B1B6864339842E5
-S315080046E803D90024024B1C70BFE70024BDE700BFAE
-S315080046F8F5050020B4050020F8050020F605002079
-S31508004708B50500202DE9F04184B004460D46174644
-S3150800471898466846FDF7DCFF0299164BA3FB01315C
-S315080047288909002201E00132D2B2112A1DD8124B9A
-S3150800473813F8120003EB420393F801C000EB0C03CD
-S3150800474803FB0443B1FBF3FE03FB1E16002EEAD156
-S315080047581FFA8EF32B80013B9BB2B3F5806FE2D22A
-S31508004768387088F800C0012000E0002004B0BDE8D1
-S31508004778F08100BFD34D6210A451000870B58CB003
-S315080047880023ADF82E308DF82D308DF82C300BAB74
-S315080047980DF12D020DF12E014FF4FA70FFF7B2FF55
-S315080047A8002835D01D4C1E4B2360002525766576D6
-S315080047B8A5760126E67625776577A560E5609DF8EE
-S315080047C82D30013B1B0423619DF82C30013B1B054A
-S315080047D86361BDF82E3063602046FDF7B2FB069587
-S315080047E8079508964CF6E043019302954FF6E07351
-S315080047F8039304230493059509960E230A9301A99E
-S315080048082046FDF745FC2046FDF7D8FC0CB070BDE0
-S31508004818B5210448FFF788FBC4E700BFFC0500205C
-S31508004828006400407C51000810B588B040F2E17376
-S315080048380293002304930593069101AB024602A945
-S315080048480B48FDF7E9FC08B108B010BDFFF79CFE58
-S3150800485800F1320401990648FDF754FD0028F3D003
-S31508004868FFF76AFBFFF790FEA042F3D9ECE700BF13
-S31508004878FC05002010B588B00C46034601AA00219D
-S315080048880A48FDF751FD60B9019A40F267639A42F2
-S3150800489801D0002006E0039B33B9059B237001204D
-S315080048A800E0002008B010BD0020FBE7FC0500204A
-S315080048B838B50546002401E00134E4B2062C15D8BB
-S315080048C8FFF73AFB04EB44029300094AD358AB4274
-S315080048D8F2D804EB44029100054A0A445268134484
-S315080048E8AB42E9D9024B0B44187A00E0FF2038BDE1
-S315080048F8C851000808B5C1F3080353B903688B42C1
-S3150800490809D040F8041B4FF4007200F0BBF90120E7
-S3150800491808BD0020FCE70120FAE72DE9F041074623
-S31508004928FDF772FA002400E001347F2C14D83E689B
-S31508004938A30006EB03083B445D68FFF7FDFA2A4621
-S31508004948002341460220FDF7B3FA38B956F8243051
-S31508004958AB42E9D0002402E0012400E00024FDF778
-S315080049686BFA2046BDE8F08138B50D460C4B9842DF
-S3150800497811D004460B4B994207D1094C29462046C3
-S31508004988FFF7B8FF48B1204638BDFFF7C6FF00282D
-S31508004998F4D10024F7E7044CF0E70024F3E700BF56
-S315080049A82808002000800008240600202DE9F04188
-S315080049B806460C4617461D46DFF8748001EA0808BD
-S315080049C80368B3F1FF3F07D0336843450BD1336813
-S315080049D8E41A3444043415E04146FFF78BFF0346CE
-S315080049E80028F1D11FE041463046FFF7BDFF0646CD
-S315080049F80028ECD1002316E017F8013B04F8013B20
-S31508004A08013D0FD0FFF798FA331DE31AB3F5007F77
-S31508004A18F2D308F500713046FFF7A6FF064628B117
-S31508004A28041DE9E701231846BDE8F0810023FAE7E3
-S31508004A3800FEFFFF70B586B004460E4600230193B4
-S31508004A48884219D80125ECB1072E1FD8DDB10023F5
-S31508004A5802930223059301230493FDF7D5F9B4427B
-S31508004A680DD8FFF769FA039401A902A8FEF7D6FD3F
-S31508004A7820B90134E4B2F2E70025E4E70025FDF79A
-S31508004A88DBF900E00025284606B070BD0025FAE7E0
-S31508004A984FF0FF33024A1360024A1360704700BF9B
-S31508004AA8240600202808002070B54B1E134C241A2B
-S31508004AB8A34201D9002070BD16460D460446FFF7E5
-S31508004AC8F7FEFF2811D028190138FFF7F1FEFF284D
-S31508004AD80BD00B4B23400B4A934208D02B46324641
-S31508004AE821460948FFF762FFE5E70020E3E72B467A
-S31508004AF8324621460548FFF759FFDCE7FFFF0F084E
-S31508004B0800FEFFFF00800008240600202808002071
-S31508004B184A1E0D4B1B1A9A4201D90020704770B5D8
-S31508004B280C460546FFF7C4FE064660190138FFF726
-S31508004B38BFFEFF2818BFFF2E01D1002070BD014611
-S31508004B483046FFF777FFF9E7FFFF0F08104B1B689A
-S31508004B58B3F1FF3F19D000B583B00D4A5368916881
-S31508004B680B44D1680B4411690B4451690B4491698C
-S31508004B780B44D26913445B42019301AA04210548F0
-S31508004B88FFF792FF03B05DF804FB0120704700BFEA
-S31508004B9828080020C88100080D4B1B680D4A1268B2
-S31508004BA81A440D4B1B6813440C4A126813440C4AE2
-S31508004BB812681A440B4B1B681A440B4B1B681344A0
-S31508004BC80A4A1268DA4201D0002070470120704765
-S31508004BD80080000804800008088000080C80000887
-S31508004BE8108000081480000818800008C88100088A
-S31508004BF808B50E4B1B68B3F1FF3F07D10C4B1B6872
-S31508004C08B3F1FF3F09D10123184608BD0748FFF746
-S31508004C1884FE03460028F1D1F6E70548FFF77DFE2E
-S31508004C2803460028F0D00123EEE700BF2808002035
-S31508004C3824060020004870470080000808B500F0E0
-S31508004C4836FA08BD10B500F01FFA00B910BDFEF710
-S31508004C5831FE0028FAD0FFF723FAFFF76DFCFCF7B8
-S31508004C68ABF800F015FA054B0340054A936000F0C7
-S31508004C780FFA446800F01DFAA047E7E780FFFF1F10
-S31508004C8800ED00E070B50D460446531E9EB23AB1D3
-S31508004C9815F8013B04F8013BFFF74EF93246F4E7ED
-S31508004CA870BD0000094B03F11801002232B19A744D
-S31508004CB800225A61064B054A1A6070479A74596168
-S31508004CC8183318310132D2B2F0E700BF6C0A002057
-S31508004CD89C0A00200A4B1B6883B110B45C69084A11
-S31508004CE8146019749860D86000225A7418600139DB
-S31508004CF808445860987C5DF8044B7047FF20704755
-S31508004D089C0A002038B504460D4601281CD86200BE
-S31508004D182244D100114B0B445A7C1B7C9A4219D069
-S31508004D280E4B0B44DA6815705A7C01325A74DA68E5
-S31508004D380132DA605B689A420ED9084A0846515821
-S31508004D480244D160012038BD4FF4E0710448FFF7EA
-S31508004D58EBF8DCE70020F6E70120F4E76C0A002008
-S31508004D681C52000808B50146024B1878FFF7CAFF17
-S31508004D7808BD00BFA00A002038B504460D4601281C
-S31508004D881ED804EB4403DA00124B13445B7CEBB1E0
-S31508004D9862002244D1000F4B0B449A6812782A7095
-S31508004DA85A7C013A5A749A6801329A605B689A4240
-S31508004DB80ED9084A0846515802449160012006E06F
-S31508004DC84FF4F1710448FFF7AFF8DAE7002038BD69
-S31508004DD80120FCE76C0A00201C52000808B50146A9
-S31508004DE8024B1878FFF7C8FF08BD00BFE40A002081
-S31508004DF810B50446012806D804EB4404E200054B1E
-S31508004E081344587C10BD40F202210348FFF78CF87A
-S31508004E18F2E700BF6C0A00201C52000838B5FFF7F5
-S31508004E2841FF1A4C4021601CFFF754FF2070184DAB
-S31508004E384021681CFFF74EFF28702378FF2B1BD0EC
-S31508004E48FF2819D0134C002213492046FBF706FE03
-S31508004E5812492046FBF72BFE0120FEF742FD2046A5
-S31508004E68FBF72CFED4F89802FCF763FCFFF7A8F8C2
-S31508004E78B0F5FA6F05D338BD85210948FFF754F808
-S31508004E88E0E74FF4FA60FFF795F8F4E7A00A002080
-S31508004E98E40A0020280B0020380400208804002093
-S31508004EA81C52000810B5064CD4F89802FCF753FCB7
-S31508004EB82046FBF7EAFD0020FEF713FD10BD00BFEC
-S31508004EC8280B002070B506460D463F2906D8284601
-S31508004ED8FFF748FF012806D100240FE0B9210D483D
-S31508004EE8FFF722F8F3E7BD210A48FFF71DF8F3E7AD
-S31508004EF8C6210848FFF718F80134A4B2ABB2A34292
-S31508004F0807D9FFF719F8305DFFF72CFF0128F3D00A
-S31508004F18EEE770BD1C52000870B506460D461F4BD5
-S31508004F28D3F89802FCF798F91D4B1C789CB91D48CC
-S31508004F38FFF754FF012801D0204670BD194B1B788E
-S31508004F48013BDBB23E2BF7D8154B01221A70164BDC
-S31508004F5800221A70F0E7144B1B78013311481844DD
-S31508004F68FFF73CFF0446012801D00024E4E70E4B6E
-S31508004F781A780132D2B21A700A4B1B789A4201D0B3
-S31508004F880024D9E709493046FFF77CFE044B00227E
-S31508004F981A70054B1B782B70CEE700BF280B00202C
-S31508004FA8040E0020C40D0020050E0020C50D0020A3
-S31508004FB830B583B0144B1878FFF71AFF08B30546BF
-S31508004FC8402800D9402500240AE04FF4A3710F4869
-S31508004FD8FEF7AAFF9DF807200D4B1A550134E4B2CF
-S31508004FE8A54208D90DF10701074B1878FFF7C4FE43
-S31508004FF80128EFD0E9E7ABB2054A81210548FEF753
-S3150800500883FF03B030BD00BFA00A00201C52000869
-S315080050182C0A0020280B002070B50446FEF746FE29
-S31508005028064621460F48FEF71AFF85B2002406E011
-S315080050384FF4B4710C48FEF777FF0134A4B2AC42BA
-S3150800504807D2315D094B1878FFF75CFE0128F4D0C2
-S31508005058EEE7FEF72BFE4023024601210148FEF73C
-S315080050685BFF70BD280B00201C520008E40A0020CC
-S3150800507808B5FFF70DFD08BD08B5FFF715FD08BD0E
-S3150800508808B5FFF745FD08BD08B5FFF785FD08BD56
-S3150800509808B5FFF7CFFD08BD08B5FFF757FD034666
-S315080050A808B9184608BDFFF7A3FD0346F9E772B61F
-S315080050B8704762B670470000F8B500BFF8BC08BC70
-S315080050C89E467047F8B500BFF8BC08BC9E467047B0
-S315080050D80000002000000000000000000102030490
-S315080050E80607080900000000010203044465666112
-S315080050F8756C740057696E5553422042756C6B205F
-S31508005108496E746572666163650000004F70656E66
-S31508005118424C5420557365720000000057696E5555
-S3150800512853422042756C6B204465766963650000B6
-S315080051386D61696E2E630000757362645F636F6ED6
-S31508005148662E63004F70656E424C54002E2E2F2E25
-S315080051582E2F2E2E2F536F757263652F41524D438E
-S315080051684D375F53544D333246372F7273323332C5
-S315080051782E6300002E2E2F2E2E2F2E2E2F536F75B0
-S315080051887263652F41524D434D375F53544D333241
-S3150800519846372F63616E2E6300000000050206027B
-S315080051A8060307030803090309040A040B040C0485
-S315080051B80C050D050E050F050F0610061007100835
-S315080051C800800008008000000100000000000108B7
-S315080051D8008000000200000000800108008000002E
-S315080051E80300000000000208000002000400000096
-S315080051F80000040800000400050000000000080874
-S31508005208000004000600000000000C080000040066
-S31508005218070000002E2E2F2E2E2F2E2E2F536F7599
-S315080052287263652F41524D434D375F53544D3332A0
-S3110800523846372F7573622E6300000000D5
-S30D0800524451020008ED01000803
-S3090800524CC90100087E
-S3150800525000000000EC02002054030020BC030020DC
-S315080052600000000000000000000000000000000030
-S315080052700000000000000000000000000000000020
-S315080052800000000000000000000000000000000010
-S315080052900000000000000000000000000000000000
-S315080052A000000000000000000000000000000000F0
-S315080052B000000000000000000000000000000000E0
-S315080052C000000000000000000000000000000000D0
-S315080052D000000000000000000000000000000000C0
-S315080052E000000000000000000000000000000000B0
-S315080052F0000000000000000001000000000000009F
-S315080053000E33CDAB34126DE6ECDE05000B00000063
-S31508005310000000000000000000000000000000007F
-S31508005320000000000000000000000000000000006F
-S31508005330000000000000000000000000000000005F
-S31508005340000000000000000000000000000000004F
-S31508005350000000000000000000000000000000003F
-S31508005360000000000000000000000000000000002F
-S31508005370000000000000000000000000000000001F
-S31508005380000000000000000000000000000000000F
-S3150800539000000000000000000000000000000000FF
-S315080053A000000000000000000000000000000000EF
-S315080053B000000000000000000000000000000000DF
-S315080053C000000000000000000000000000000000CF
-S315080053D000000000000000000000000000000000BF
-S315080053E000000000000000000000000000000000AF
-S315080053F0000000000000000000000000000000009F
-S31508005400000000000000000000000000000000008E
-S31508005410000000000000000000000000000000007E
-S31508005420000000000000000000000000000000006E
-S31508005430000000000000000000000000000000005E
-S31508005440000000000000000000000000000000004E
-S31508005450000000000000000000000000000000003E
-S31508005460000000000000000000000000000000002E
-S31508005470000000000000000000000000000000001E
-S31508005480000000000000000000000000000000000E
-S3150800549000000000000000000000000000000000FE
-S315080054A000000000000000000000000000000000EE
-S315080054B000000000000000000000000000000000DE
-S315080054C000000000000000000000000000000000CE
-S315080054D000000000000000000000000000000000BE
-S315080054E000000000000000000000000000000000AE
-S315080054F0000000000000000000000000000000009E
-S31508005500000000000000000000000000000000008D
-S31508005510000000000000000000000000000000007D
-S31508005520000000000000000000000000000000006D
-S31508005530000000000000000000000000000000005D
-S31508005540000000000000000000000000000000004D
-S31508005550000000000000000000000000000000003D
-S31508005560000000000000000000000000000000002D
-S31508005570000000000000000000000000000000001D
-S31508005580000000000000000000000000000000000D
-S3150800559000000000000000000000000000000000FD
-S315080055A000000000000000000000000000000000ED
-S315080055B000000000000000000000000000000000DD
-S315080055C000000000000000000000000000000000CD
-S315080055D000000000000000000000000000000000BD
-S315080055E000000000000000000000000000000000AD
-S315080055F0000000000000000000000000000000009D
-S31508005600000000000000000000000000000000008C
-S31508005610000000000000000000000000000000007C
-S31508005620000000000000000000000000000000006C
-S31508005630000000000000000000000000000000005C
-S31508005640000000000000000000000000000000004C
-S31508005650000000000000000000000000000000003C
-S31508005660000000000000000000000000000000002C
-S315080056700000000000000000080E00200024F400CE
-S315080056800100000010000000313700083D3700080F
-S31508005690ED370008C9370008B5370008093800088B
-S315080056A02D3800081201000200000040501DAC60B1
-S315080056B00002010203010000040309041A030000A2
-S315080056C000000000000000000000000000000000CC
-S315080056D00000000000000000853C00086D3C000842
-S315080056E00D3C00080000000000000000F53B000823
-S315080056F0FF3B0008E13B0008000000000000000036
-S3150800570000000000C93B000800000000D53B000867
-S3150800571009022000010100C0320904000002FF004E
-S315080057200000070581024000FF070501024000FF4F
-S311080057300A060002000000400100040008
+S31508000408C0F8A432FFF7D8FFF9E70B7803704B78E2
+S3150800041843708B78CA7843EA022343800B794A7972
+S3150800042843EA022383808B79CA7943EA0223C38085
+S31508000438704710B50446802103F0B0FD0021204618
+S3150800044803F0ACFD10BD30B583B004460D46002355
+S31508000458ADF806304A88130A013B062B00F2AB8032
+S31508000468DFE803F0041F33A9A98D9A00D0F8B4323F
+S315080004781B680DF10601007C9847EA88002A00F0F7
+S31508000488A380BDF80630002B00F099809A4228BF51
+S315080004981A46ADF8062001462046FFF770FF03B056
+S315080004A830BD037C43B9D0F8B8329B6A0DF1060013
+S315080004B8984702234370E0E7D0F8B832DB6A0DF1B3
+S315080004C80600984702234370D7E7D2B2052A52D8BE
+S315080004D8DFE802F003101D2A3744D0F8B4325B6807
+S315080004E823B10DF10601007C9847C6E72946FFF7B0
+S315080004F8A0FFD4E7D0F8B4329B6823B10DF1060102
+S31508000508007C9847B9E72946FFF793FFC7E7D0F86D
+S31508000518B432DB6823B10DF10601007C9847ACE7D5
+S315080005282946FFF786FFBAE7D0F8B4321B6923B124
+S315080005380DF10601007C98479FE72946FFF779FFE2
+S31508000548ADE7D0F8B4325B6923B10DF10601007C3A
+S31508000558984792E72946FFF76CFFA0E7D0F8B43228
+S315080005689B6923B10DF10601007C984785E7294662
+S31508000578FFF75FFF93E72946FFF75BFF8FE7037CE3
+S3150800058833B9D0F8B8325B6B0DF10600984774E7B3
+S315080005982946FFF74EFF82E7037C43B9D0F8B832FD
+S315080005A81B6B0DF1060098470723437065E7294634
+S315080005B8FFF73FFF73E72946FFF73BFF6FE7294633
+S315080005C82046FFF736FF6AE72046FFF7F5FE66E797
+S315080005D838B504468B88F3B9CB88E3B94B887F2BA3
+S315080005E819D803F07F0590F89C32032B0CD080F8B5
+S315080005F89E52294603F0E2FC2046FFF7DDFE35B198
+S31508000608022384F89C3209E0FFF713FF06E001236A
+S3150800061884F89C3202E02046FFF70BFF38BD00003D
+S3150800062870B504460D4689782E4B1970012910D8DD
+S3150800063890F89C32022B11D0032B25D02946FFF7B8
+S31508000648F8FE284B1978204600F0A0FA032630460B
+S3150800065870BD2946FFF7EDFE0326F8E781B141602C
+S3150800066800F08BFA064620B129462046FFF7E1FE38
+S31508000678EDE72046FFF7A0FE032384F89C32E6E759
+S31508000688FFF79AFE0026E2E7C9B14368994225D0E2
+S31508000698D9B200F07BFA134B19786160204600F04E
+S315080006A86CFA0646B0B129462046FFF7C2FE2179FC
+S315080006B8204600F06BFA022384F89C32C7E7022327
+S315080006C880F89C32416000F061FA2046FFF774FE14
+S315080006D80026BCE72046FFF76FFEB8E7FFF76CFE73
+S315080006E80026B4E70805002008B5CB88012B0CD1ED
+S315080006F890F89C325AB29AB1022B09D9032B0FD11A
+S315080007080122011DFFF73BFE01E0FFF792FE08BD37
+S315080007180146002341F8083F0122FFF730FEF6E7B5
+S31508000728FFF787FEF3E708B590F89C32013B022BE2
+S3150800073812D8CB88022B0CD10123C360D0F8A43277
+S315080007480BB10323C360022200F10C01FFF717FE61
+S3150800075808BDFFF76EFEFBE7FFF76BFEF8E708B57F
+S3150800076890F89C32013B022B09D84B88012B00D004
+S3150800077808BD0023C0F8A432FFF71EFEF8E7FFF706
+S3150800078858FEF5E708B50B7803F06003202B06D06A
+S31508000798402B04D043B1FFF74CFE002003E0D0F805
+S315080007A8B8329B68984708BD4B78092B21D8DFE8EB
+S315080007B803F0141C201820090520100DFFF743FE26
+S315080007C80020F0E7FFF704FF0020ECE7FFF728FF13
+S315080007D8E9E7FFF789FF0020E5E7FFF7A4FF002010
+S315080007E8E1E7FFF708FE0020DDE7FFF7B8FF00207E
+S315080007F8D9E7FFF71EFE0020D5E770B505460C4673
+S315080008080B7803F06003202B07D0402B05D023B1C3
+S31508000818FFF70FFE0026304670BD95F89C32013B5F
+S31508000828022B18D82379012B0FD8D5F8B8329B682C
+S315080008382146284698470646E388002BEBD1002828
+S31508000848E9D12846FFF7B8FDE5E721462846FFF728
+S31508000858F0FD0026DFE721462846FFF7EAFD0026D1
+S31508000868D9E738B505460C468A880B7803F060033D
+S31508000878202B08D0D1B2402B05D05BB12146FFF713
+S31508000888D8FD002005E0D5F8B8329B6821462846E9
+S31508000898984738BD6378012B3DD058B200286FD0E9
+S315080008A8032B40F0F68095F89C32022B07D0032BD1
+S315080008B81CD021462846FFF7BCFD0020E9E7B1F120
+S315080008C8800318BF0123002908BF002343B128461F
+S315080008D803F064FB8021284603F060FB0020D8E774
+S315080008E821462846FFF7A5FD0020D2E763884BB9BD
+S315080008F8B1F1800318BF0123002908BF00230BB1F3
+S31508000908E38823B12846FFF757FD0020C1E72846A4
+S3150800091803F044FBF6E790F89C32022B06D0032B2B
+S3150800092819D02146FFF785FD0020B2E7B1F180030B
+S3150800093818BF0123002908BF00233BB103F02EFB8B
+S315080009488021284603F02AFB0020A2E72146FFF764
+S3150800095870FD00209DE76388002B40F0A08011F009
+S315080009687F0F0AD12846FFF727FDD5F8B8329B68C6
+S3150800097821462846984700208BE703F017FBF1E73E
+S3150800098895F89C32022B07D0032B31D021462846EE
+S31508000998FFF74FFD00207CE7B1F1800318BF01235C
+S315080009A8002908BF00239BB912F0800F16D101F061
+S315080009B87F0101EB81018B0003F5A87129440431F5
+S315080009C800240C6002222846FFF7D9FC204660E777
+S315080009D821462846FFF72DFD00205AE701F07F013A
+S315080009E801EB81018B0003F1100129440431E7E783
+S315080009F852B2002A24DB01F00F0303EB83039800A5
+S31508000A082844B0F8643153B3002A2EDB01F07F027C
+S31508000A1802EB8202930003F5A8742C440434802957
+S31508000A2814BF00230123002908BF01233BB3002371
+S31508000A382360022221462846FFF7A1FC002028E762
+S31508000A4801F00F0303EB830398002844838C002BDB
+S31508000A58DAD121462846FFF7ECFC002019E721469B
+S31508000A682846FFF7E6FC002013E701F07F0202EBB1
+S31508000A788202930003F110042C440434CFE7284675
+S31508000A8803F038FA10B101232360D2E70023236064
+S31508000A98CFE721462846FFF7CCFC0020F9E60020D8
+S31508000AA8F7E6C0B170B50D4616460446FFF79AFC38
+S31508000AB8013040003080287003236B7002232278A7
+S31508000AC842B1EA5401345A1CD2B20021A95402335D
+S31508000AD8DBB2F4E770BD7047C0B108B50346D0F875
+S31508000AE8B80210B10020C3F8B802D3F8CC0210B186
+S31508000AF80020C3F8CC0209B1C3F8B412184601237A
+S31508000B0880F89C32027003F0BBF908BD03207047D1
+S31508000B1810B50446012380F89C32D0F8B83213B1D0
+S31508000B285B6801799847D4F8CC3213B10023C4F826
+S31508000B38CC32204603F017FA034608B1184610BD0A
+S31508000B48204603F000FA0346F8E710B582B00023FA
+S31508000B58ADF8063059B10446C4F8B812CB6A0DF197
+S31508000B6806009847C4F8CC02002002B010BD03203E
+S31508000B78FBE708B503F0EFF908BD08B5D0F8B832B1
+S31508000B8813B11B68984708BD0320FCE708B5D0F8D9
+S31508000B98B8320BB15B689847002008BD38B50446DB
+S31508000BA800F2AA252846FFF730FC0123C4F8943238
+S31508000BB8B4F8B032C4F8983294F8AA1201F01F03B0
+S31508000BC8012B0ED05AB23AB1022B0FD001F0800190
+S31508000BD8204603F0E3F903E029462046FFF7D2FD4D
+S31508000BE838BD29462046FFF708FEF9E72946204674
+S31508000BF8FFF737FEF4E710B5044631BB1346D0F8BD
+S31508000C089422032A01D0002010BDD0F85C11D0F830
+S31508000C18602191420CD8D0F8B8321B691BB190F8FC
+S31508000C289C22032A0FD02046FFF7C6FB0020EBE7D5
+S31508000C38891AC0F85C118A4228BF0A461946FFF77E
+S31508000C48B3FB0020E0E79847EDE70A46D0F8B83244
+S31508000C589B6933B190F89C12032904D11146984729
+S31508000C68D2E70320D0E70320CEE710B504460029CB
+S31508000C7847D11346D0F89422022A05D094F8A03210
+S31508000C88012B3AD0002010BDC269016A8A4211D8E0
+S31508000C988A421BD0D4F8B832DB681BB194F89C2278
+S31508000CA8032A27D08021204603F078F92046FFF743
+S31508000CB88EFBE3E7521AC2611946FFF76DFB00235C
+S31508000CC81A461946204603F089F9D7E783699942EF
+S31508000CD8E0D8D0F898229342DCD200221146FFF7D2
+S31508000CE85BFB0021C4F898120B460A46204603F017
+S31508000CF875F9C3E720469847D4E7002084F8A00288
+S31508000D08C1E70A46D0F8B8325B6933B190F89C1245
+S31508000D18032904D111469847B5E70320B3E703200A
+S31508000D28B1E770B50446012380F89C320023C0F861
+S31508000D3894324360C0F8A432D0F8BC3223B1D0F854
+S31508000D48B8325B680021984740230022114620469E
+S31508000D5803F011F90126A4F864614025C4F8605126
+S31508000D682B4600228021204603F005F9A684256231
+S31508000D78002070BD01740020704790F89C3280F8F6
+S31508000D889D32042380F89C320020704790F89C32E4
+S31508000D98042B01D00020704790F89D3280F89C32C9
+S31508000DA8F8E708B590F89C32032B01D0002008BD57
+S31508000DB8D0F8B832DB69002BF8D09847F6E7002058
+S31508000DC87047002070470020704708B5012380F84F
+S31508000DD89C32D0F8B83213B15B680179984700207D
+S31508000DE808BD0000054BD3F8882042F47002C3F802
+S31508000DF888204FF000629A60704700BF00ED00E057
+S31508000E0810B5094B4FF0FF321A6200241C625A6269
+S31508000E185C621A611C615A615C619A619C6102F0A4
+S31508000E28EDFE204610BD00BF0038024010B5044646
+S31508000E380E4B18784FF47A73B3FBF0F30C4A106824
+S31508000E48B0FBF3F001F060FE68B90F2C01D9012058
+S31508000E580AE0002221464FF0FF3001F023FE054B39
+S31508000E681C60002000E0012010BD00BF30040020EF
+S31508000E782C0400203404002008B5032001F000FEE5
+S31508000E880020FFF7D3FF02F013FE002008BD00007C
+S31508000E9838B5044603F0E2FB0546B4F1FF3F02D035
+S31508000EA8044B1B781C4403F0D9FB401BA042FAD319
+S31508000EB838BD00BF300400202DE9F04782B0D0F8CD
+S31508000EC80080CA00521A930003445A6D1B6D9A4251
+S31508000ED855D8C1469B1AC1EBC104A2000244526CFC
+S31508000EE89A4200D31A460C46074602F1030A4FEA05
+S31508000EF89A0A15E006F1030A4FEA9A0AE3001B1B49
+S31508000F089D003D44A96C3B7C0093B3B2E2B24046CF
+S31508000F1802F056F9AB6C3344AB646B6D1E446E65D0
+S31508000F2809EB441303F510639B699BB2534512D327
+S31508000F38E3001B1B9A003A44516D136D99420AD275
+S31508000F484BB15B1AC4EBC4018A003A44566C9E42FC
+S31508000F58D0D31E46CEE7E3001B1B980007443A6D1C
+S31508000F687B6D9A420FD804F00F040123A340D8F8E2
+S31508000F78344824EA0304C8F83448002000E001206D
+S31508000F8802B0BDE8F0870020FAE77047F0B58BB0E5
+S31508000F98002800F091800446056890F8BD3323B30D
+S31508000FA8032384F8BD33EB6B13F4807F01D1002348
+S31508000FB82361206801F096FE254655F8107B6E4693
+S31508000FC80FCD0FC60FCD0FC695E8030086E80300B8
+S31508000FD8231D0ECB384601F0CBFD58B1022384F801
+S31508000FE8BD33012528460BB0F0BD80F8BC33FFF7A2
+S31508000FF8CCFFD5E70021206801F07AFE0023656852
+S31508001008AB4216D2D900C81A82002244012082F8B7
+S315080010183D0082F83C30A2F84230002082F83F00B2
+S3150800102850649064CA1A9100214408650133DBB2FA
+S31508001038E5E700239D4216D9D800C11A8A0022443A
+S31508001048002182F8FD1182F8FC3182F8FF11C2F8F6
+S315080010580412C2F80812C21A90002044C0F81012E6
+S315080010680133DBB2E6E7254655F8107B6E460FCD09
+S315080010780FC60FCD0FC695E8030086E80300231DA3
+S315080010880ECB384601F07AFE054660B9002384F887
+S315080010983830012384F8BD33636A012B08D02068E9
+S315080010A802F05BFA9EE7022384F8BD33012599E727
+S315080010B8204602F085FBF2E7012593E7704790F88A
+S315080010C8BC33012B0ED010B50446012380F8BC3377
+S315080010D8006802F036FA206801F0FEFD002084F860
+S315080010E8BC0310BD0220704738B590F8BC33012BF5
+S315080010F818D00446012380F8BC33006801F0F2FDD5
+S31508001108206802F0EAF9054628B1002384F8BC33BA
+S315080011180125284638BD206802F01FFA002384F8FE
+S31508001128BC33F6E70225F4E768B110B5044603238D
+S3150800113880F8BD33FFF7D8FF2046FFF7BFFF00202A
+S3150800114884F8BD0310BD01207047000070B5044639
+S315080011580D460068066C00EB411303F530639A6880
+S315080011682169012911D037498E4254D03DB9C5EBBA
+S31508001178C50293002344D3F81032002B5CD0E9B299
+S31508001188204602F001FE002070BD12F0080F09D0B3
+S315080011982D498E42F7D912F4004FF4D04FF4004285
+S315080011A89A60F0E712F0200F02D020229A60EAE748
+S315080011B812F0280FE7D124498E4206D912F4004FB7
+S315080011C803D04FF400429A60DDE7E900491B8A001C
+S315080011D82244D2F804121B69C3F31203C91AC2F8C7
+S315080011E81412D2F80412D2F808320B44C2F808329C
+S315080011F835B9C5EBC50293002344D3F8103223B199
+S31508001208E9B2204602F0C0FDBDE704F57172012176
+S3150800121802F0F4F9F4E712F4004F03D04FF4004251
+S315080012289A60B0E712F0200F01D020229A60E9B23E
+S31508001238204602F0A9FDA6E704F57172002102F01E
+S31508001248DDF99CE70A31544F0A30544F38B504463D
+S3150800125803681D6C03EB4111D1F8082B0E4B9D4210
+S3150800126807D901F5306112F4004F02D04FF4004354
+S315080012788B60204602F080FD074B9D4202D9236900
+S31508001288012B01D0002038BD04F5717201212068B0
+S3150800129802F0B4F9F6E700BF0A30544F2DE9F84FC3
+S315080012A804460568284602F095F908B1BDE8F88F9E
+S315080012B82F460646206802F05CF90028F6D0206812
+S315080012C802F057F910F0020F04D02268536903F0A8
+S315080012D802035361206802F04CF910F0100F15D07C
+S315080012E82268936923F010039361D5F8208008F0E3
+S315080012F80F09C8F34343022B00F08580062B00F03C
+S31508001308A5802268936943F010039361206802F068
+S3150800131830F910F4002F40F0AD80206802F029F962
+S3150800132810F4802F40F0F180206802F022F9002896
+S31508001338C0F25F81206802F01CF910F4006F0AD029
+S31508001348D5F8083813F0010F40F06D812268536903
+S3150800135803F400635361206802F00BF910F0006F7C
+S3150800136815D02268536903F00063536194F8F4337F
+S31508001378002B40F05C81012184F8F41323685B6D27
+S31508001388C3F38303C4F8F833204602F02DFA20681D
+S3150800139802F0EFF810F4805F40F04D81206802F003
+S315080013A8E8F810F4005F40F0AB81206802F0E1F835
+S315080013B810F0080F40F0BC81206802F0DAF810F443
+S315080013C8801F40F0BE81206802F0D3F810F4001F91
+S315080013D840F0C181206802F0CCF810F0804F40F048
+S315080013E8C481206802F0C5F810F0040F3FF45EAF18
+S315080013F823685D6815F0040F40F0C08122685368B9
+S315080014082B43536052E747F6F07318EA030F3FF485
+S3150800141878AF4FEA18184FEAC90BABEB09034FEA3E
+S31508001428830AA244C8F30A02DAF80812284601F021
+S31508001438E5FFC8F30A08DAF808324344CAF8083256
+S31508001448DAF814324344CAF814325AE7082204F57B
+S315080014587171284601F0D2FFC8F30A184FEAC90382
+S31508001468A3EB09018A002244D2F814324344C2F88D
+S31508001478143246E7206802F080F88046B14617E03D
+S3150800148807EB49130122C3F8082B49462046FFF7FC
+S315080014985DFE1DE007EB49130822C3F8082B4946E9
+S315080014A82046FFF7D3FE16E009F101094FEA580866
+S315080014B8B8F1000F3FF431AF18F0010FF4D05FFA16
+S315080014C889F1206802F069F8824610F0010FD7D131
+S315080014D81AF0080FDED11AF0100F04D007EB4913DB
+S315080014E81022C3F8082B1AF0200F04D007EB49136B
+S315080014F82022C3F8082B1AF4005FD5D007EB491346
+S315080015084FF40052C3F8082BCEE7206802F03DF8DE
+S315080015188046B1462AE05946204602F041FC1AF0B0
+S31508001528080F04D007EB49130822C3F808291AF04C
+S31508001538100F04D007EB49131022C3F808291AF02C
+S31508001548400F04D007EB49134022C3F808291AF0BC
+S31508001558020F04D007EB49130222C3F808291AF028
+S31508001568800F41D109F101094FEA5808B8F1000F6F
+S315080015783FF4DAAE18F0010FF4D05FFA89FB594642
+S31508001588206802F013F8824610F0010FC7D009F058
+S315080015980F03012101FA03F2D7F8343823EA0203C4
+S315080015A8C7F8343807EB4913C3F8081923698B4277
+S315080015B8B1D14FEAC902A2EB090293002344596C38
+S315080015C89A6C0A449A64B9F1000FA4D1C9EBC90206
+S315080015D8930023441B6D002B9DD104F571720121DC
+S315080015E8206802F00BF896E749462046FFF764FCA0
+S315080015F8B8E7D5F8043823F00103C5F8043894F891
+S31508001608F433012B08D0204602F010FC22685369EF
+S3150800161803F0004353618DE6002184F8F41320464D
+S3150800162802F0E2F8F2E7204602F0E6FB8EE62046EC
+S3150800163802F0E2FBABE605F50068D8F8043023F0BB
+S315080016480103C8F804301021206801F069FB20E07E
+S3150800165807EB46134FF67F31C3F80819D3F8002964
+S3150800166822F40012C3F80029D3F8002942F00062D0
+S31508001678C3F80029C3F8081BD3F8002B22F4001274
+S31508001688C3F8002BD3F8002B42F00062C3F8002BEE
+S3150800169801366368B342DBD8D8F81C3043F0011327
+S315080016A8C8F81C30236BEBB1D8F8843043F00B0329
+S315080016B8C8F88430D8F8443043F00B03C8F84430E7
+S315080016C8D5F8003823F4FE63C5F8003804F57172B6
+S315080016D8217C206801F092FF2268536903F480533D
+S315080016E853615BE6D8F8142042F22B031343C8F873
+S315080016F81430D8F8103043F00B03C8F81030DFE779
+S31508001708206801F06BFF206801F008FCE060256896
+S3150800171800F038FC227B0146284601F067FA204685
+S3150800172802F050FB2268536903F4005353613CE600
+S31508001738204602F040FB2268536903F00803536108
+S315080017483AE60021204602F080FB2268536903F432
+S315080017588013536137E60021204602F070FB2268A1
+S31508001768536903F40013536134E6204602F073FB09
+S315080017782268536903F08043536132E6204602F033
+S3150800178874FB3BE690F8BC33012B0BD010B5044626
+S31508001798012380F8BC33006801F0D3FE002084F8E2
+S315080017A8BC0310BD0220704790F8BC33012B0BD040
+S315080017B810B50446012380F8BC33006801F0CDFE55
+S315080017C8002084F8BC0310BD0220704790F8BC338B
+S315080017D8012B0DD010B50446012380F8BC3380F8D8
+S315080017E83810006801F09DFE002084F8BC0310BD7F
+S315080017F802207047F8B511F0800F27D101F00F05C0
+S31508001808EE00771BBC00274604F5FC740444043430
+S315080018180744002587F8FD5101F00F012170A260E1
+S31508001828E370627802B1E180022B1ED090F8BC33CF
+S31508001838012B1DD00546012380F8BC3321460068D4
+S3150800184801F07CFB002085F8BC03F8BD01F00F0603
+S31508001858F500AF1BBC0027463834044404343E461A
+S315080018680644012586F83D50D6E700232371DDE7AF
+S315080018780220EAE738B511F0800F20D101F00F04ED
+S31508001888E200151BAB001D4603F5FC73034404333D
+S315080018980544002285F8FD2101F00F01197090F81A
+S315080018A8BC23012A1AD00446012280F8BC2319460B
+S315080018B8006801F08BFB002084F8BC0338BD01F0F2
+S315080018C80F04E200151BAB001D46383303440433E6
+S315080018D82C460444012284F83D20DDE70220EDE782
+S315080018E870B501F00F05EE00711B8C0004F5FC7449
+S315080018F80444211D761BB4000444C4F80822C4F81D
+S3150800190810320023C4F8143284F8FD3184F8FC51E7
+S315080019180369012B06D065B9DAB2006801F0C4FB81
+S31508001928002070BDC5EBC506B4000444C4F80C22F3
+S31508001938F1E7DAB2006801F057FCF1E701F00F01A8
+S31508001948C1EBC1018B001844D0F81402704770B572
+S3150800195801F00F05EE00711B8C0038340444211D74
+S31508001968761BB4000444A264236500236365012337
+S3150800197884F83D3084F83C500369012B06D05DB9DC
+S31508001988DAB2006801F090FB002070BDC5EBC50609
+S31508001998B4000444E264F2E7DAB2006801F024FC11
+S315080019A8F2E738B501F00F0543689D4236D811F0BD
+S315080019B8800F20D1CA00541AA3001C4603F5FC73ED
+S315080019C80344043322460244002182F8FD11012209
+S315080019D89A701D7090F8BC23012A21D0044601226A
+S315080019E880F8BC231946006801F01CFD7DB100206B
+S315080019F884F8BC0338BDEA00511B8B0019463833F6
+S31508001A08034404330144012281F83D20DFE704F545
+S31508001A187172217C206801F0F1FDE8E70120E9E709
+S31508001A280220E7E710B501F00F0443689C422CD85A
+S31508001A3811F0800F1DD1E3001A1B91000A4601F523
+S31508001A48FC71014404310244002382F8FD31002365
+S31508001A588B700C7090F8BC33012B18D00446012300
+S31508001A6880F8BC33006801F00AFD002084F8BC033E
+S31508001A7810BDE3001A1B91000A46383101440431A7
+S31508001A880244012382F83D30E1E70120F0E702200D
+S31508001A98EEE70000534B98421FD0534B984228D084
+S31508001AA8524B984231D0524B98423AD0514B9842B1
+S31508001AB843D0514B98424CD0504B984255D0504B36
+S31508001AC898425ED04F4B984267D04F4B984270D099
+S31508001AD84E4B984279D00120704703F560531A692E
+S31508001AE842F001021A611A6922F001021A610020FD
+S31508001AF8704703F550531A6942F002021A611A69C7
+S31508001B0822F002021A610020704703F540531A6949
+S31508001B1842F004021A611A6922F004021A610020C6
+S31508001B28704703F530531A6942F008021A611A69B0
+S31508001B3822F008021A610020704703F520531A6933
+S31508001B4842F010021A611A6922F010021A6100207E
+S31508001B58704703F510531A6942F020021A611A6988
+S31508001B6822F020021A610020704703F500531A690B
+S31508001B7842F040021A611A6922F040021A610020EE
+S31508001B88704703F5E0531A6942F080021A611A6928
+S31508001B9822F080021A610020704703F5C0531A69BB
+S31508001BA842F480721A611A6922F480721A61002056
+S31508001BB8704703F5A0531A6942F400721A611A6944
+S31508001BC822F400721A610020704703F580531A69D7
+S31508001BD842F480621A611A6922F480621A61002046
+S31508001BE8704700BF00000240000402400008024097
+S31508001BF8000C02400010024000140240001802407F
+S31508001C08001C02400020024000240240002802402E
+S31508001C18F0B40C6894FAA4F4B4FA84F44BE08E6829
+S31508001C28826893FAA3F5B5FA85F56D00032707FACE
+S31508001C3805F522EA050293FAA3F5B5FA85F56D00C6
+S31508001C4806FA05F52A4382600E68CD68426822EAD4
+S31508001C58060205FB06F52A4342600E69C26893FA2E
+S31508001C68A3F5B5FA85F56D00032707FA05F522EAFF
+S31508001C78050293FAA3F5B5FA85F56D0006FA05F592
+S31508001C882A43C2604A68022A22D04A68056893FA33
+S31508001C98A3F6B6FA86F67600032707FA06F625EABD
+S31508001CA8060593FAA3F3B3FA83F35B0002FA03F380
+S31508001CB82B43036001340B6833FA04F23CD0012243
+S31508001CC8A2401340F6D04A68013A012AC5D8A6E7C1
+S31508001CD893FAA3F2B2FA82F2072A15D84E69026A6B
+S31508001CE893FAA3F5B5FA85F5AD000F2707FA05F5B2
+S31508001CF822EA050293FAA3F5B5FA85F5AD0006FAC0
+S31508001D0805F52A430262C0E74D69466A1A0A92FA35
+S31508001D18A2F7B7FA87F7BF004FF00F0C0CFA07F7C8
+S31508001D2826EA070692FAA2F2B2FA82F2920005FAAF
+S31508001D3802F232434262A8E70020F0BC704700006E
+S31508001D4810B40A490C6924F440740C610C6944F40B
+S31508001D5840740C610C6944F001040C61026043602C
+S31508001D68BFF34F8F5DF8044B704700BF003C024035
+S31508001D78084B1A6922F440721A611A6942F4007209
+S31508001D881A611A6942F001021A610160BFF34F8F9E
+S31508001D98704700BF003C0240084B1A6922F440729B
+S31508001DA81A611A6942F480721A611A6942F00102C4
+S31508001DB81A610180BFF34F8F704700BF003C02408D
+S31508001DC8074B1A6922F440721A611A691A611A6964
+S31508001DD842F001021A610170BFF34F8F704700BFC6
+S31508001DE8003C02401A4BDB6813F0020F04D0194A6C
+S31508001DF8936943F020039361154BDB6813F0100FC2
+S31508001E0804D0144A936943F010039361104BDB68B6
+S31508001E1813F0200F04D00F4A936943F0080393611F
+S31508001E280B4BDB6813F0400F04D00A4A936943F05A
+S31508001E3804039361064BDB6813F0800F04D0054A48
+S31508001E48936943F002039361014BF222DA60704703
+S31508001E58003C0240600E0020094B1B69002B01DB81
+S31508001E6800207047064B074A5A6002F188325A60C2
+S31508001E781B69002B01DB002070470120704700BF53
+S31508001E88003C024023016745034A136943F00043AF
+S31508001E9813610020704700BF003C024038B504466D
+S31508001EA8154B00229A6102F0D9FB0546134BDB68ED
+S31508001EB813F4803F0AD0B4F1FF3FF7D024B102F0FB
+S31508001EC8CDFB401BA042F1D903200DE00B4BDB6884
+S31508001ED813F0F20F09D1094BDB6813F0010F08D08C
+S31508001EE8064B0122DA60002038BDFFF77BFF012088
+S31508001EF8FAE70020F8E700BF600E0020003C024021
+S31508001F08F8B51E4C247D012C35D01F4616460D46BD
+S31508001F1804461A4B01221A754CF25030FFF7BEFFD9
+S31508001F28014698B9032C07D8DFE804F002151A1FEA
+S31508001F38F1B22846FFF744FF4CF25030FFF7AEFFE0
+S31508001F4801460F4A136923F0010313610B4B00225C
+S31508001F581A750846F8BDB1B22846FFF71DFFEBE724
+S31508001F6831462846FFF704FFE6E732463B46284649
+S31508001F78FFF7E6FEE0E70221EBE700BF600E002068
+S31508001F88003C0240014B1868704700BF2C0400202B
+S31508001F987047002800F0A18038B5044690F820302C
+S31508001FA8D3B12268136823F00203136002F056FBC4
+S31508001FB8054623685A6812F0020F10D002F04EFB45
+S31508001FC8401B0A28F5D9636A43F40033636205237C
+S31508001FD884F82030012038BDFFF7DAFFE1E71A68F0
+S31508001FE842F001021A6002F039FB054623685A686E
+S31508001FF812F0010F0DD102F031FB401B0A28F5D962
+S31508002008636A43F400336362052384F820300120A9
+S31508002018E1E7227E012A3DD01A6822F080021A607A
+S31508002028637E012B3BD02268136823F040031360B4
+S31508002038A37E012B39D02268136823F02003136086
+S31508002048E37E012B37D02268136843F01003136028
+S31508002058237F012B35D02268136823F00803136001
+S31508002068637F012B33D02268136823F004031360B7
+S31508002078A368E268134322691343626913436268D3
+S31508002088013A21681343CB6100206062012384F872
+S315080020982030A0E71A6842F080021A60C0E7226872
+S315080020A8136843F040031360C2E72268136843F0D5
+S315080020B820031360C4E72268136823F0100313602B
+S315080020C8C6E72268136843F008031360C8E722685E
+S315080020D8136843F004031360CAE701207047000039
+S315080020E890F82030013BDBB2012B05D9436A43F44B
+S315080020F8802343620120704770B4434BD3F800220B
+S3150800210842F00102C3F80022D3F8002222F47C52D6
+S31508002118C3F80022D3F80022486A42EA0022C3F824
+S3150800212800224A6902F01F02012000FA02F2D3F8D7
+S315080021381C42D0430440C3F81C42CB69B3B9324B9E
+S31508002148D3F80C420440C3F80C42CE688D884C6913
+S3150800215845EA0645483443F834508E680C884D6974
+S3150800216844EA0644483503EBC5035C60CB69012B92
+S315080021781DD08B69002B32D1234CD4F80432034086
+S31508002188C4F804320B698BBB1F4BD3F814422040A2
+S31508002198C3F814020B6A012B2FD01B4AD2F8003257
+S315080021A823F00103C2F80032002070BC7047164BB2
+S315080021B8D3F80C421443C3F80C420E688D884C6950
+S315080021C845EA0645483443F834508E688C894D6983
+S315080021D844EA0644483503EBC5035C60C9E70A4C7C
+S315080021E8D4F804321343C4F80432CBE70648D0F8C7
+S315080021F814321343C0F81432CCE70349D1F81C3219
+S315080022081A43C1F81C22C8E70064004038B590F89C
+S315080022182030DBB2012B05D0436A43F4002343621E
+S31508002228012038BD0446022380F820300268136866
+S3150800223823F00103136002F011FA054623685B6868
+S3150800224813F0010F0DD002F009FA401B0A28F5D938
+S31508002258636A43F400336362052384F82030012057
+S31508002268DFE700206062DCE770B490F82040056874
+S31508002278AD68013CE4B2012C65D815F0E05F5CD086
+S31508002288C5F30165022D05D9436A43F40003436281
+S3150800229801205DE00124AC401C608B68002B39D115
+S315080022A80E68CB68046843EA465605F118031B010D
+S315080022B8E65003680C6905F1180603EB06135C601B
+S315080022C80B7D012B31D0D17993791B0443EA01633D
+S315080022D8517943EA01231479016823432C012144DF
+S315080022E8C1F88C31D17893781B0443EA0163517895
+S315080022F843EA0123117802680B432244C2F888315D
+S31508002308016805F118031B01CA5842F00102CA50B0
+S3150800231800201DE04C6843EAC403CC6806682343DA
+S3150800232805F1180424013351C3E7036803EB0613C0
+S31508002338596841F480715960C5E7436A43F4001344
+S315080023484362012004E0436A43F480234362012080
+S3150800235870BC704790F82030013BDBB2012B01D9DD
+S315080023680020704703689B68890631EA030301D091
+S31508002378012070470020704730B490F82040013C8F
+S31508002388E4B2012C00F28A8051B90468E46814F0B2
+S31508002398030F10D1436A43F400134362012082E015
+S315080023A80468246914F0030F05D1436A43F400133B
+S315080023B84362012077E0056801F11B0424012C59C2
+S315080023C804F004049460002C5AD1056801F11B0432
+S315080023D824012C59640D1460056801F11B042401B5
+S315080023E82D5905F00205D560056825446D6805F080
+S315080023F80F051561056825446D68C5F307259561B8
+S3150800240805682C446468240C546104680A01144459
+S31508002418D4F8B8411C7004681444D4F8B841C4F315
+S3150800242807245C7004681444D4F8B841C4F3074414
+S315080024389C7004681444D4F8B841240EDC70046807
+S315080024481444D4F8BC411C7104681444D4F8BC413B
+S31508002458C4F307245C7104681444D4F8BC41C4F373
+S3150800246807449C7104682244D2F8BC21120EDA711A
+S3150800247871B90268D36843F02003D360002012E0DC
+S31508002488056801F11B0424012C59E4085460A3E7E4
+S315080024980268136943F020031361EFE7436A43F4BC
+S315080024A880234362012030BC70470000014B186046
+S315080024B8704700BF2C04002038B5036813F0010FD5
+S315080024C875D10D46044603683C4A1A404B68C968E4
+S315080024D80B4329690B43A9690B4313430360AB688C
+S315080024E8426822F44052134343606B69826822F4B7
+S315080024F8407213438360324B984216D0314B984248
+S3150800250827D0314B984228D0304B984229D0304BA7
+S3150800251898422AD02F4B98422CD02F4B98422ED02F
+S315080025282E4B984230D0012042E0032000F010F9E3
+S3150800253800283ED02B68002B3DD0AA69B2F5004F7B
+S3150800254827D000EB5300B0FBF3F080B2E060002020
+S315080025582EE00C2000F0FCF8EAE7302000F0F8F846
+S31508002568E6E7C02000F0BEF9E2E74FF4407000F055
+S31508002578B9F9DDE74FF4406000F0EAF8D8E74FF418
+S31508002588405000F0AFF9D3E74FF4404000F0AAF9FD
+S31508002598CEE75A0802EB4000B0FBF3F04FF6F073AB
+S315080025A80340C0F342001843E060002000E0012021
+S315080025B838BD0120FCE70120FAE700BFF369FFEF01
+S315080025C8001001400044004000480040004C00400C
+S315080025D8005000400014014000780040007C00408C
+S315080025E882B0224A136843F0010313601F4B1B6825
+S315080025F813F0020FFAD01D4B00229A601A6801924E
+S3150800260801991B4A0A400192019A1A601A6822F02F
+S31508002618F80242F080021A60144B1B6813F0007F18
+S31508002628FAD1124B1B6813F0006FFAD10F4B1B68CF
+S3150800263813F0005FFAD10D4B0E4A5A60103AC3F8E8
+S315080026488420C3F88820DA6822F4FE42DA60DA6859
+S3150800265842F47F02DA605A6F22F001025A675A6F0B
+S3150800266842F080725A67002002B07047003802406C
+S31508002678FFFFF2EA10300024034B9B68C3F30313E9
+S31508002688024AD35CD840704700380240A051000877
+S31508002698034B9B68C3F38223024AD35CD84070472E
+S315080026A800380240B0510008034B9B68C3F3423315
+S315080026B8024AD35CD840704700380240B051000837
+S315080026C80D4B5B6803F480039BB90C480A4B5A68A0
+S315080026D802F03F02B0FBF2F25868C0F3881000FB1C
+S315080026E802F05B68C3F3014301335B00B0FBF3F008
+S315080026F870470348EAE700BF003802400024F400A0
+S3150800270800127A0008B5074B9B6803F00C03042BE4
+S3150800271804D0082B04D1FFF7D3FF02E0024800E0F3
+S31508002728024808BD0038024000127A000024F40066
+S3150800273810B50446FFF7E6FF2060FFF79DFF6060C7
+S31508002748FFF7A6FFA0606068FFF7AEFFE06010BD60
+S3150800275808B5032808D00C282DD0B0F5406F51D0FD
+S31508002768302877D0002008BD584BD3F8903003405E
+S3150800277843EA0040564B98420FD0B0F1031F13D0D6
+S31508002788013B984206D0FFF7BDFFFFF775FFFFF735
+S315080027988BFFE8E7FFF7B6FFE5E74C4B1B6813F036
+S315080027A8020F7ED10020DEE7484B1B6F13F0020F9D
+S315080027B879D10020D7E7454BD3F89030034043EA50
+S315080027C80040444B98420FD0B0F10C1F13D0043B7D
+S315080027D8984206D0FFF796FFFFF74EFFFFF758FF18
+S315080027E8C1E7FFF78FFFBEE7384B1B6813F0020FE8
+S315080027F85CD10020B7E7354B1B6F13F0020F57D192
+S315080028080020B0E7314BD3F89030034043EA004044
+S31508002818314B984210D0B0F10C2F14D0A3F5806331
+S31508002828984206D0FFF76EFFFFF726FFFFF73CFF33
+S3150800283899E7FFF767FF96E7244B1B6813F0020F23
+S3150800284839D100208FE7214B1B6F13F0020F34D1C3
+S31508002858002088E71D4BD3F89030034043EA004030
+S315080028681E4B98420FD0B0F1301F13D0103B984238
+S3150800287806D0FFF747FFFFF7FFFEFFF709FF72E7E6
+S31508002888FFF740FF6FE7114B1B6813F0020F17D1CC
+S31508002898002068E70D4B1B6F13F0020F12D10020BA
+S315080028A861E70F485FE74FF400405CE70C485AE7D2
+S315080028B84FF4004057E70A4855E74FF4004052E7F7
+S315080028C8074850E74FF400404DE700BF003802407C
+S315080028D80200030008000C000008000C2000300065
+S315080028E80024F40008B5C0280AD0B0F5407F2FD0D8
+S315080028F8B0F5405F54D0B0F5404F79D0002008BDF8
+S31508002908594BD3F89030034043EA0040574B984256
+S315080029180FD0B0F1C01F14D0403B984206D0FFF73D
+S31508002928F1FEFFF7A9FEFFF7B3FEE8E7FFF7EAFEB1
+S31508002938E5E74D4B1B6813F0020F40F08180002035
+S31508002948DDE7494B1B6F13F0020F7BD10020D6E752
+S31508002958454BD3F89030034043EA0040444B98422D
+S3150800296810D0B0F1032F14D0A3F58073984206D07F
+S31508002978FFF7C8FEFFF780FEFFF78AFEBFE7FFF7F7
+S31508002988C1FEBCE7384B1B6813F0020F5DD1002067
+S31508002998B5E7354B1B6F13F0020F58D10020AEE789
+S315080029A8314BD3F89030034043EA0040314B984204
+S315080029B810D0B0F1302F14D0A3F58053984206D022
+S315080029C8FFF7A0FEFFF758FEFFF762FE97E7FFF747
+S315080029D899FE94E7244B1B6813F0020F3AD100209E
+S315080029E88DE7214B1B6F13F0020F35D1002086E7C0
+S315080029F81D4BD3F89030034043EA00401E4B9842DB
+S31508002A0810D0B0F1C02F14D0A3F58043984206D051
+S31508002A18FFF778FEFFF730FEFFF73AFE6FE7FFF796
+S31508002A2871FE6CE7104B1B6813F0020F17D10020D4
+S31508002A3865E70D4B1B6F13F0020F12D100205EE7F6
+S31508002A480E485CE74FF4004059E70C4857E74FF43F
+S31508002A58004054E7094852E74FF400404FE7074853
+S31508002A684DE74FF400404AE7003802408000C000AE
+S31508002A780002000300200030008000C00024F40093
+S31508002A880649CB6823F4E0631B041B0C000200F418
+S31508002A98E0600343024A1A43CA60704700ED00E043
+S31508002AA80000FA0530B4154BDB68C3F30223C3F1FB
+S31508002AB80704042C28BF04241D1D062D01D9033B31
+S31508002AC800E000234FF0FF3505FA04F421EA040173
+S31508002AD8994005FA03F322EA03031943002805DB9C
+S31508002AE80901C9B2064B195430BC704700F00F00EB
+S31508002AF80901C9B2034B1954F6E700BF00ED00E017
+S31508002B0800E400E014ED00E00138B0F1807F0AD255
+S31508002B18064B5860064AF02182F823100020986070
+S31508002B2807221A6070470120704700BF10E000E0CE
+S31508002B3800ED00E0002301330C4A934211D80269DC
+S31508002B48002AF8DA036943F0010303610023013315
+S31508002B58064A934207D8026912F0010FF7D10020F6
+S31508002B687047032070470320704700BF400D0300D5
+S31508002B7884B010B5044603A880E80E00089B012B0C
+S31508002B881DD1A36B23F48033A363E268164B134065
+S31508002B98E360E36823F44013E3600F9B012B09D035
+S31508002BA82046FFF7C7FF069B012B14D0BDE8104047
+S31508002BB804B07047E36843F48013E360F0E7E3681A
+S31508002BC843F04003E3602046FFF7B4FFA36B43F4E2
+S31508002BD88033A363E7E7A36843F00603A360A36803
+S31508002BE843F02003A360E1E7BFFFBDFF022A0AD02E
+S31508002BF80921C26822F47052C260C36843EA812375
+S31508002C08C36000207047274B0B44274A934237D99D
+S31508002C18264B0B44264A934234D9264B0B44264A5C
+S31508002C28934231D9254B0B4402F5C332A03293425D
+S31508002C382CD9234B0B44234A934229D9224B0B44BC
+S31508002C4802F5922202F57872934223D91F4B0B4458
+S31508002C5802F5C32202F5207293421DD91C4B0B4478
+S31508002C6802F5B71202F55872934217D9194B0B4455
+S31508002C7802F5122202F5F862934211D80721B8E73D
+S31508002C880F21B6E70E21B4E70D21B2E70C21B0E70C
+S31508002C980B21AEE70A21ACE70921AAE70821A8E72C
+S31508002CA80621A6E7405327FFFF340C00401E1BFFEA
+S31508002CB83F420F0000DC0BFF7F4F1200808CF9FEA5
+S31508002CC860B6E5FE5FE3160000D3CEFEC05BB3FE32
+S31508002CD800CA91FEE05459FE836843F001038360F5
+S31508002CE800207047836823F001038360002070473B
+S31508002CF808B5C36823F0C043C360012909D069B978
+S31508002D08C36843F08043C3603220FEF7C1F8002049
+S31508002D1808BDC36843F00053C360F5E70120F7E729
+S31508002D28890141F02001016100230133054A9342D4
+S31508002D3805D8026912F0200FF7D100207047032042
+S31508002D48704700BF400D03001023036100230133B9
+S31508002D58054A934205D8026912F0100FF7D10020E8
+S31508002D6870470320704700BF400D0300D0F80038AD
+S31508002D781943C0F8001800207047000084B0F8B559
+S31508002D88044607A880E80E00254600230E2B07D818
+S31508002D9803F1400204EB8202002151600133F5E792
+S31508002DA8119B33BBD4F8043843F00203C4F804383B
+S31508002DB8A36B23F40013A363236843F0400323603B
+S31508002DC8236843F0800323600023C4F8003E04F513
+S31508002DD80066D4F80038C4F800380C9B012B0DD0CF
+S31508002DE8032B1CD1099BABB900212046FFF7BEFF70
+S31508002DF819E0A36B43F40013A363E5E7099B23B91A
+S31508002E0800212046FFF7B2FF0DE001212046FFF713
+S31508002E18ADFF08E001212046FFF7A8FF03E00321DC
+S31508002E282046FFF7A3FF10212046FFF779FF07463C
+S31508002E3800B101272046FFF787FF00B101270023C5
+S31508002E4833617361F3610AE0C3B94FF00060C2F8F1
+S31508002E58000900220A614FF67F328A600133079A11
+S31508002E689A4210D905EB431202F51061D2F8000907
+S31508002E780028E9DB0020C2F80009EAE74FF090408D
+S31508002E88C2F80009E5E700230AE0C3B94FF0006075
+S31508002E98C2F8000B00220A614FF67F328A600133B6
+S31508002EA8079A9A4210D905EB431202F53061D2F80F
+S31508002EB8000B0028E9DB0020C2F8000BEAE74FF010
+S31508002EC89040C2F8000BE5E7336923F48073336151
+S31508002ED80023A3616FF0804363610A9B1BB9A3694A
+S31508002EE843F01003A361A2690A4B1343A3610D9B20
+S31508002EF81BB1A36943F00803A361119B012B04D0F6
+S31508002F083846BDE8F84004B07047A269024B134337
+S31508002F18A361F5E700383C8004000040D0F808387B
+S31508002F2813F0060305D0062B18BF022B03D102207F
+S31508002F387047002070470F207047000070B40B7860
+S31508002F484A78012A20D0D0F81C2803F00F06012455
+S31508002F58B44042EA0442C0F81C2800EB4310D0F8F3
+S31508002F68003B13F4004F0CD1D0F8002B8B68C3F341
+S31508002F780A03C97843EA81431343134A1A43C0F834
+S31508002F88002B002070BC7047D0F81C4803F00F06C9
+S31508002F98B24092B22243C0F81C2800EB4310D0F87E
+S31508002FA8002912F4004FECD1D0F800498A68C2F318
+S31508002FB80A02C97842EA814242EA8353234302490C
+S31508002FC81943C0F80019DCE70080001030B40B7804
+S31508002FD84A78012A24D000EB4313D3F8002B002A99
+S31508002FE850DBD0F83C580A7802F00F02012404FA9C
+S31508002FF802F225EA0242C0F83C28D0F81C280978CB
+S3150800300801F00F018C4022EA0444C0F81C48D3F8A2
+S31508003018001B234A0A40C3F8002B002030BC70471F
+S3150800302800EB4313D3F80029002A1EDBD0F83C58D6
+S315080030380A7802F00F02012404FA02F292B225EA8B
+S315080030480202C0F83C28D0F81C28097801F00F01BC
+S315080030588C40A4B222EA0404C0F81C48D3F8001924
+S31508003068104A0A40C3F80029D7E7D3F8002942F0DE
+S315080030780062C3F80029D3F8002942F08042C3F851
+S315080030880029D3E7D3F8002B42F00062C3F8002BD7
+S31508003098D3F8002B42F08042C3F8002BA1E700BF03
+S315080030A80078F3EF007833EC70B40B784C78012C81
+S315080030B824D000EB431000F530631D693E4C2C40C4
+S315080030C81C611D693D4C2C401C614C690CB18C680F
+S315080030D84C611C6944F400241C611C698D68C5F39D
+S315080030E812052C431C61012A61D0D0F8003B43F035
+S315080030F80443C0F8003B002070BC70474C695CBBB1
+S3150800310800EB4314D4F810692C4D3540C4F810590F
+S31508003118D4F8105945F40025C4F81059D4F810699C
+S31508003128254D3540C4F81059012A31D000EB431310
+S31508003138D3F8002942F00442C3F800294B69002B4A
+S31508003148D9D0D0F83428097801F00F040121A14014
+S315080031580A43C0F83428CEE700EB431404F5106494
+S315080031682669154D354025612669144D3540256172
+S315080031784E698D68AE4200D94D61256945F400252A
+S31508003188256125694E69C6F3120635432561CBE7DD
+S315080031980A691AB100EB4311C1F8142900EB431068
+S315080031A8D0F8002942F00442C0F80029A3E7CA6803
+S315080031B8002A9AD05A6198E70000F8FFFFFF07E04F
+S315080031C870B49DF80C4064B903339E08B44208D21B
+S315080031D800EB023303F5805351F8045B1D60013494
+S315080031E8F4E7002070BC7047F0B583B00B784C78CC
+S315080031F8012C29D000EB431303F5306426697C4D6E
+S315080032083540256126697B4D354025614D69002D78
+S3150800321840F0BF8025698E68C6F3120635432561D6
+S31508003228256945F400252561012A00F0C780CA7872
+S31508003238012A00F0C980D3F8002B42F00442C3F8EB
+S31508003248002B002003B0F0BD4C6974BB00EB431497
+S31508003258D4F81069674D3540C4F81059D4F8105990
+S3150800326845F40025C4F81059D4F81069604D35405E
+S31508003278C4F81059012A4AD000EB4313D3F8004979
+S3150800328844F00444C3F80049CC78012C68D04B694B
+S31508003298002BD6D0D0F83428097801F00F0401217C
+S315080032A8A1400A43C0F83428CBE700EB4314D4F806
+S315080032B810694F4D3540C4F81059D4F810694D4D6A
+S315080032C83540C4F81059D4F810694D698F683D44DB
+S315080032D8013DB5FBF7F5484F07EAC5453543C4F838
+S315080032E81059D4F810594E69C6F312063543C4F86E
+S315080032F8105904F51064CD78012DBBD1256925F040
+S31508003308C0452561256945F000552561B2E70A6972
+S315080033181AB100EB4314C4F81429CA78012A08D04C
+S3150800332800EB4313D3F8002942F00442C3F80029F6
+S3150800333887E7D0F8082812F4807F08D100EB4311F4
+S31508003348D1F8002942F00052C1F80029E8E700EB55
+S315080033584311D1F8002942F08052C1F80029DFE765
+S31508003368D0F8084814F4807F0CD1D3F8004944F003
+S315080033780054C3F8004900928B8A0A78C968FFF78F
+S315080033881FFF5EE7D3F8004944F08054C3F80049A4
+S31508003398F1E78E683544013DB5FBF6F52669164F03
+S315080033A807EAC5473E43266127698E68ADB206FB1C
+S315080033B805F5C5F312053D43256135E7CA68002AB0
+S315080033C83FF435AF626132E7D0F8082812F4807FF7
+S315080033D806D1D3F8002B42F00052C3F8002B2AE78F
+S315080033E8D3F8002B42F08052C3F8002B23E700BF1E
+S315080033F80000F8FFFFFF07E00000F81F03329208F5
+S31508003408002393420CD210B400F58054246841F87E
+S31508003418044B01339342F7D308465DF8044B7047CB
+S31508003428084670470B784A78012A14D000EB4310EF
+S31508003438D0F8002B002A06DB2BB1D0F8003B23F086
+S315080034488043C0F8003BD0F8003B43F40013C0F8AB
+S31508003458003B0020704700EB4310D0F80029002AEB
+S3150800346806DB2BB1D0F8003923F08043C0F80039C1
+S31508003478D0F8003943F40013C0F80039E9E70B78A7
+S315080034884A78012A0ED000EB4310D0F8003B23F403
+S315080034980013C0F8003BCB78023BDBB2012B15D9E9
+S315080034A80020704700EB4310D0F8003923F40013C6
+S315080034B8C0F80039CB78023BDBB2012BF0D8D0F83C
+S315080034C8003943F08053C0F80039E9E7D0F8003BE3
+S315080034D843F08053C0F8003BE2E738B50546044692
+S315080034E800220E2A09D804EB42134FF67F31C3F897
+S315080034F80819C3F8081B0132F3E70022C5F8102893
+S31508003508C5F81428C5F81C282846FFF71DFC0346E5
+S3150800351808B1184638BD10212846FFF701FC0346AE
+S31508003528F7E7D0F8003823F4FE63C0F80038D0F877
+S315080035380038090101F4FE610B43C0F80038002081
+S31508003548704708B5D0F8043823F00203C0F80438E1
+S315080035580320FDF79DFC002008BD08B5D0F80438FF
+S3150800356843F00203C0F804380320FDF791FC002055
+S3150800357808BD4269806910407047D0F8183800F5C8
+S315080035880060C0691840000C7047D0F8183800F574
+S315080035980060C069184080B2704700EB4111D1F845
+S315080035A8082B00F5006040691040704710B4D0F841
+S315080035B81048D0F8343801F00F02D340DB01DBB2EB
+S315080035C8234300EB411000F51060806818405DF849
+S315080035D8044B7047406900F001007047D0F800298D
+S315080035E8054B1340C0F80039D0F8043843F4807303
+S315080035F8C0F804380020704700F8FFFF10B4046CC0
+S31508003608154B9C4203D9D0F8003B002B16DB002447
+S31508003618C0F8104BD0F8104B44F40024C0F8104BEF
+S31508003628D0F8104B44F01804C0F8104BD0F8104BDB
+S3150800363844F0C044C0F8104B012903D000205DF8B7
+S31508003648044B7047C0F8142BD0F8003B43F080238E
+S31508003658C0F8003BF2E700BF0A30544F084B1A6916
+S3150800366822F440721A611A6942F004021A611A6948
+S3150800367842EA002040F480301861BFF34F8F704744
+S31508003688003C024010B449B1012923D0022902D0CE
+S315080036984FF4407203E04FF4007200E000220F4B2B
+S315080036A81C6924F440741C61196911431961196964
+S315080036B821F0F80119611A6942EAC00242F00202C9
+S315080036C81A611A6942F480321A61BFF34F8F5DF89E
+S315080036D8044B70474FF48072E1E700BF003C024094
+S315080036E8214B1B7D012B3CD070B50E4604461E4B5C
+S315080036F801221A754CF25030FEF7D0FB014658BB2A
+S315080037084FF0FF3333602368012B16D06568A3682A
+S3150800371862681344AB421FD9217B2846FFF7B2FFDC
+S315080037284CF25030FEF7BAFB104A136923F07A03B5
+S315080037381361014678B90135E9E7207BFFF78EFF63
+S315080037484CF25030FEF7AAFB0146084A136923F0E3
+S315080037580403136100E03560034B00221A75084616
+S3150800376870BD022108467047600E0020003C0240E2
+S3150800377830B40468606A29B940EA0240A0620020A9
+S3150800378830BC70470D46A36A00EB13400023691E38
+S315080037988B4209D203F1400104EB8101496800EB29
+S315080037A811400133DBB2F2E740EA024005F13F0176
+S315080037B804EB81014860E2E7036859620020704714
+S315080037C8024603680121C0F8FC13002082F8F403B6
+S315080037D89A6942F000629A61596D024A0A435A6523
+S315080037E8704700BF030000107047000012230B80C3
+S315080037F8004870475404002004230B80004870478B
+S31508003808680400200023934216D230B40BE03734FC
+S3150800381801F8134000015C00013400250D550133F9
+S31508003828DBB2934206D2040F092CF0D8303401F8DB
+S315080038381340EFE730BC70477047000038B50A4BAD
+S31508003848186804331C6804331B68C01800D138BDCF
+S31508003858064D0822A91CFFF7D5FF042205F1120117
+S315080038682046FFF7CFFFF2E720F4F01F6C0400208C
+S3150800387808B51A230B80FFF7E1FF014808BD00BF0A
+S315080038886C04002008B50A4628B905490548FDF715
+S3150800389808F9034808BD02490248FDF702F9F8E79E
+S315080038A87C0E0020E851000810B5044C0A4621464B
+S315080038B80348FDF7F6F8204610BD00BF7C0E002029
+S315080038C8D851000808B50A4628B905490548FDF734
+S315080038D8E8F8034808BD02490248FDF7E2F8F8E7A0
+S315080038E87C0E0020B851000808B50A4628B90549CB
+S315080038F80548FDF7D6F8034808BD02490248FDF70A
+S31508003908D0F8F8E77C0E0020C0510008014B188053
+S31508003918704700BF0A05002008B500F097FE0E4B51
+S315080039281B6898420FD30D4B1B786BB90B4B0122BA
+S315080039381A700B4B80229A6100F088FE094B1B8887
+S315080039481844054B186008BD044B00221A70044B2E
+S315080039584FF400029A61EFE7100500200C050020D5
+S31508003968000402400A050020024B4FF400029A613F
+S31508003978704700BF0004024008B5054B1B6913F4DD
+S31508003988005F01D0002008BDFFF7EEFF0120FAE727
+S315080039980008024008B56420FFF7B8FF08BD08B557
+S315080039A8FFF7BAFF08BD70477047704708B5304A31
+S315080039B8136823F00F0343F007031360136803F033
+S315080039C80F03072B4ED12B4B1A6842F440421A6054
+S315080039D81A6842F480321A6003F5E4331A6842F426
+S315080039E880221A601A6842F480321A60224B1B68D1
+S315080039F813F4003FFAD0204B5A6820491140204A50
+S31508003A080A435A605A681F4911401F4A0A435A60AE
+S31508003A181A6842F080721A60174B1B6813F0007F09
+S31508003A28FAD0154B9A6822F0F0029A609A6822F43E
+S31508003A38E05242F4A0529A609A6822F4604242F42C
+S31508003A4800429A609A6822F0030242F002029A60DB
+S31508003A58094B9B6803F00C03082BF9D10B48FEF7B2
+S31508003A6825FD08BD6A210A4800F0C0FAABE700BF81
+S31508003A78003C024000700040003802400080BCFF4D
+S31508003A88086C40000080BFF0086C400900E6DF0CAF
+S31508003A98FC51000808B5FDF7EFF9FFF787FF08BDE1
+S31508003AA808B5FFF7F7FF00F0ADFA00F0B9FAFCE73A
+S31508003AB82DE9F04391B04C4C636C43F4804363643E
+S31508003AC8636C03F480430993099B236C43F0805382
+S31508003AD82364236C03F080530893089B236B43F0F5
+S31508003AE801032363236B03F001030793079B236BE7
+S31508003AF843F002032363236B03F002030693069B32
+S31508003B08236B43F004032363236B03F00403059331
+S31508003B18059B236B43F008032363236B03F0080311
+S31508003B280493049B236C43F480232364236C03F4D3
+S31508003B3880230393039B236C43F000732364236C4D
+S31508003B4803F000730293029B80230A9301230B93C5
+S31508003B5800250C950D950E95DFF89C800AA9404618
+S31508003B68FEF756F84FF40003C8F818304FF4005318
+S31508003B780A930B950E950AA91C48FEF749F84FF4BF
+S31508003B884079CDF8289002270B9703260C960D95B1
+S31508003B980E9507230F930AA91548FEF739F8CDF8A5
+S31508003BA828900B970C960D950E9509230F930AA93D
+S31508003BB84046FEF72DF84FF4C0530A930B970C9618
+S31508003BC80D950E950A230F930AA90A48FEF720F8B9
+S31508003BD8636B43F080036363636B03F080030193AD
+S31508003BE8019B11B0BDE8F083003802400008024086
+S31508003BF8000C0240000002400004024010B5FEF71F
+S31508003C08EFFC1B4C4FF40003A3611A48FDF742FF6B
+S31508003C181948FDF73FFF2046FDF73CFF1748FDF713
+S31508003C2839FF174B5A6B22F080025A631A6C22F036
+S31508003C3800721A641A6C22F480221A641A6B22F02B
+S31508003C4808021A631A6B22F004021A631A6B22F026
+S31508003C5802021A631A6B22F001021A631A6C22F01E
+S31508003C6880521A645A6C22F480425A6410BD00BF06
+S31508003C7800040240000C024000080240000002400E
+S31508003C88003802402023038000487047C0040020FB
+S31508003C980A23038000487047E004002008B590F816
+S31508003CA89C32032B01D0002008BD01F0E3F9FAE79E
+S31508003CB808B501F0DFF9002008BD08B5084601F087
+S31508003CC80DFA002008BD000008B50B7813F0600F40
+S31508003CD806D14B780A2B14D00B2B17D0062B01D0FC
+S31508003CE8002008BD4B881B0A212B04D00B49172234
+S31508003CF8FCF745FBF4E7CA88172A28BF172208499C
+S31508003D08F6E701220749FCF73AFBE9E78B7813B986
+S31508003D18044A1360E4E7FCF78CFBE1E7C9040020D2
+S31508003D28D20400201405002010B50446812100F0AD
+S31508003D382DF90121204600F029F9002010BD0000C0
+S31508003D4810B5044640230222812100F014F94023C5
+S31508003D5802220121204600F00EF94023034A0121D8
+S31508003D68204600F03BF9002010BD00BF7C1000205B
+S31508003D78004870477C10002008B500F57171D0F826
+S31508003D880004FCF70BFF08BD08B5C1EBC102930098
+S31508003D980344D3F80822D0F80004FCF72CFF08BD22
+S31508003DA808B5C1EBC102930003449A6CD0F8000425
+S31508003DB8FCF75BFF08BD08B5D0F80004FCF7F1FF6F
+S31508003DC808BD000010B50446C3684BB1022B01D1E3
+S31508003DD8012106E09121074800F008F9012100E0D1
+S31508003DE80021D4F80004FCF7C5FFD4F80004FCF752
+S31508003DF898FF10BD0452000810B50446D0F8000410
+S31508003E08FCF7BBFF2268D2F8003E43F00103C2F86C
+S31508003E18003E236A23B1044A136943F00603136173
+S31508003E28FFF7C2FD10BD00BF00ED00E010B504465F
+S31508003E38FFF7BBFDD4F80004FCF7A8FF10BD08B5CA
+S31508003E48D0F80004FCF7BDFF08BD08B5D0F8000493
+S31508003E58FCF7B5FF08BD10B504460120FFF7A3FD1A
+S31508003E68D4F80004FCF7AFFF10BD10B504460020CF
+S31508003E78FFF799FDD4F80004FCF7A7FF10BD00006A
+S31508003E8803780BB10020704710B503461748C0F8E9
+S31508003E980034C3F8C4024FF0A04303600623436006
+S31508003EA80222C2600023036182610122C2610362A1
+S31508003EB84362C3620363FDF769F880B90B4C802136
+S31508003EC82046FFF779FC402200212046FFF750FCE0
+S31508003ED8802201212046FFF74BFC002010BD40F246
+S31508003EE82511034800F082F8E8E700BFBC10002057
+S31508003EF804520008D0F8C43211F0800F08D101F036
+S31508003F087F01C1EBC1018A00134493F8FE0170478B
+S31508003F1801F07F01C1EBC1018A00134493F83E0002
+S31508003F28704708B5D0F8C402FDF708FD08BD022891
+S31508003F3807D8DFE800F002060400002070470120D1
+S31508003F4870470320704708B5D0F8C402FDF7ECF8A7
+S31508003F58FFF7EDFF08BD08B5D0F8C402FDF7AFF8BE
+S31508003F68FFF7E5FF08BD08B5D0F8C402FDF7BCF8A9
+S31508003F78FFF7DDFF08BD10B51C4613462246D0F8E4
+S31508003F88C402FDF737FCFFF7D2FF10BD08B5D0F815
+S31508003F98C402FDF76FFCFFF7CAFF08BD08B5D0F8DD
+S31508003FA8C402FDF7FEFCFFF7C2FF08BD08B5D0F846
+S31508003FB8C402FDF737FDFFF7BAFF08BD08B5D0F804
+S31508003FC8C402FDF703FCFFF7B2FF08BD08B5D0F831
+S31508003FD8C402FDF7BCFCFFF7AAFF08BD08B5D0F870
+S31508003FE8C402FDF77DFCFFF7A2FF08BD08B500F07F
+S31508003FF805F8FCE708B5FFF7CDFC08BD08B5FFF7D7
+S31508004008CEFC08BD08B500F07BFEFFF7F3FF00F00D
+S31508004018FBFA01F08FF800F057F800F049F808BDE8
+S3150800402808B5FFF7EBFF00F003FB00F061F800F0B6
+S3150800403801F808BD08B500F0DFF8012803D00B4BD6
+S315080040481B78012B00D008BD00F000FB084B1B6845
+S31508004058084A1268134403F5FA739842F3D3034BD4
+S3150800406800221A7000F050FEEDE700BF1C0500207C
+S315080040781805002020050020014B1860704700BF6E
+S3150800408818050020014B1868704700BF180500205E
+S3150800409808B5054B1B78012B00D008BD00F0D6FAE9
+S315080040A8024B1860F9E700BF1C0500202005002010
+S315080040B808B5044B01221A70FFF7EAFFFFF7BAFFA3
+S315080040C808BD00BF1C05002010B500F005FA00F071
+S315080040D8B7FB064C0123237000F0EAFA0023237085
+S315080040E800F0FEFE0223237010BD00BFEA0400207C
+S315080040F800B583B00DF10701184800F01DFC01282A
+S3150800410810D00DF10701154800F008FB012812D058
+S315080041180DF10701114800F061FF012814D003B01A
+S315080041285DF804FB0E4B01221A709DF807100B4820
+S3150800413800F0F2F9E5E70A4B00221A709DF8071015
+S31508004148064800F0E9F9E3E7054B02221A709DF8DC
+S315080041580710024800F0E0F9E1E700BF240500204F
+S31508004168EA04002008B500F0FFFE08BD38B5044685
+S315080041780D460E4B1B78012B09D00C4B1B7853B1F7
+S315080041880A4B1B78022B0BD000F0BEF938BDC9B212
+S3150800419800F0ACFBF1E7E9B2204600F0A3FAEFE736
+S315080041A8E9B2204600F0F0FEEEE700BFEA04002078
+S315080041B8074B1B78022B05D0032B05D0012B05D0FE
+S315080041C8402070473F2070470020704708207047F6
+S315080041D8EA040020074B1B78022B05D0032B05D0D1
+S315080041E8012B05D0402070473F20704700207047B4
+S315080041F808207047EA04002008B500F07BF9034652
+S3150800420800B10123184608BD014B00225A707047B1
+S3150800421864050020034BFE22DA7018710222A3F8FF
+S31508004228442070476405002010B5054C0023237008
+S31508004238FFF7EAFFFF23E3700123A4F8443010BD13
+S3150800424864050020064BFF22DA7000221A71597895
+S3150800425859719A71DA711A720622A3F844207047BE
+S315080042686405002008B50020FFF7D4FF08BD000044
+S31508004278074BFF22DA70074A9A6400221A715A71A4
+S315080042889A710722C3F807200822A3F84420704722
+S315080042986405002010520008044BFF22DA704268B1
+S315080042A89A640122A3F84420704700BF64050020D9
+S315080042B808B53120FFF7AEFF08BD000038B5084C31
+S315080042C8FF23E370002525716571FFF771FFA0715B
+S315080042D8E571257265720723A4F8443038BD00BF16
+S315080042E86405002038B5FFF78FFF0E4C01252570A9
+S315080042F8FF23E3701023237100236371FFF758FF28
+S31508004308A071FFF767FFE071FFF764FFC0F30720A6
+S3150800431820726572A5720823A4F8443000F00AFFD3
+S3150800432838BD00BF6405002038B50546FFF740FFCD
+S315080043386A7890420FD90A4CA16C201D00F004FD3A
+S31508004348FF23E3706A78A36C1344A3646B7801337C
+S31508004358A4F8443038BD2220FFF75CFFFAE700BF0F
+S315080043686405002038B50446FFF722FF63789842AB
+S3150800437811D961680A4DA9646278281D00F0E4FC21
+S31508004388FF23EB706278AB6C1344AB646378013334
+S31508004398A5F8443038BD2220FFF73CFFFAE700BFEE
+S315080043A864050020F8B50546174600244E1E39B19F
+S315080043B815F8013B1C44E4B2FFF720FE3146F5E741
+S315080043C83C600120F8BD000010B5084CFF23E370D7
+S315080043D8E21D4168A06CFFF7E5FF207100236371B1
+S315080043E8A3710823A4F8443010BD00BF6405002053
+S315080043F838B505460D4B9C6CFFF7DAFE6A1C411E5C
+S31508004408204600F09BFE60B1084CFF23E370FFF7D7
+S31508004418CFFE0138A36C0344A3640123A4F84430EF
+S3150800442838BD3120FFF7F6FEFAE700BF640500201D
+S3150800443810B50446FFF7BCFE01386378984213DDC9
+S31508004448114BFF22DA700122A3F84420617879B16A
+S31508004458A21C0D4B986C00F071FE88B161780A4A67
+S31508004468936C0B44936410BD2220FFF7D3FEFAE73A
+S3150800447800F074FE0028F6D13120FFF7CBFEF2E7EC
+S315080044883120FFF7C7FEEEE76405002008B5416846
+S31508004498074B986C00F056FE30B1054BFF22DA70D0
+S315080044A80122A3F8442008BD3120FFF7B3FEFAE736
+S315080044B86405002008B500F027FC034BFF22DA70D4
+S315080044C80122A3F8442008BD6405002008B589B26E
+S315080044D8FFF74CFE08BD0000054B00221A709A64C7
+S315080044E883F84320A3F844209A705A70704700BF8F
+S315080044F864050020034B1B780BB101207047002088
+S31508004508704700BF64050020024B002283F8432049
+S31508004518704700BF6405002008B50378FF2B23D031
+S31508004528354A1278012A2BD1C93B352B53D8DFE8EF
+S3150800453803F04052524F52524C4349465252525235
+S315080045485252525252525252525252525252525235
+S31508004558525252525252525252525252312B282EBB
+S315080045685252523452373A3DFFF7BCFE224B93F863
+S315080045784330012B33D0204BB3F94410002932DCE1
+S3150800458808BDFFF7D1FEF1E7FFF7ECFEEEE7FFF708
+S3150800459883FEEBE7FFF718FFE8E7FFF769FEE5E7AD
+S315080045A8FFF760FEE2E7FFF74DFEDFE7FFF73CFEA1
+S315080045B8DCE7FFF71DFFD9E7FFF73AFFD6E7FFF76E
+S315080045C87DFED3E7FFF762FFD0E7FFF773FFCDE776
+S315080045D8FFF76EFECAE72020FFF71CFEC6E7102085
+S315080045E8FFF718FEC7E71846012380F8433003305B
+S315080045F8FFF76CFFC4E700BF64050020014B0022E3
+S315080046081A60704710E000E008B5FFF7F7FF054B9A
+S31508004618054A5A6000229A6005211960034B1A60F8
+S3150800462808BD00BF10E000E0BF4B0300B00500203E
+S31508004638044B1B6813F4803F03D0034A13680133FD
+S315080046481360704710E000E0B005002008B5FFF7D2
+S31508004658EFFF014B186808BDB005002008B5FFF73D
+S31508004668F5FF08BD70470000054BDB6913F0200FFE
+S3150800467804D0034B5B6A037001207047002070471B
+S315080046880048004010B5094B9862FFF7DFFF00F1B4
+S315080046980A04064BDB6913F0800F05D1FFF7AEFC59
+S315080046A8FFF7D4FFA042F4D910BD00BF0048004068
+S315080046B810B588B04FF4614301930023029303931E
+S315080046C804930C22059206930793054C01A92046E4
+S315080046D8FDF7F2FE236843F00103236008B010BD16
+S315080046E80048004070B506460D4640290ED82846AB
+S315080046F8FFF7C8FF0024ABB2A3420CD9FFF77EFC2C
+S31508004708305DFFF7BFFF0134A4B2F4E78121024800
+S31508004718FFF76CFCEBE770BD1852000870B5254B1F
+S315080047281C78BCB92448FFF79FFF012801D020460A
+S3150800473870BD214B1B78013BDBB23F2BF7D8FFF73F
+S3150800474885FF1E4B18601E4B00221A70194B012252
+S315080047581A70ECE706460D46194B1B7801331648BE
+S315080047681844FFF781FF0446012815D1144B1A7817
+S315080047780132D2B21A70104B1B789A4201D0002423
+S31508004788D5E71049304600F0DFFA0A4B00221A70BE
+S315080047980B4B1B782B70CAE7FFF758FF074B1B68AC
+S315080047A86433984203D90024024B1C70BFE70024DF
+S315080047B8BDE700BFF5050020B4050020F805002070
+S315080047C8F6050020B50500202DE9F04184B0044619
+S315080047D80D46174698466846FDF7AAFF0299164BEE
+S315080047E8A3FB01318909002201E00132D2B2112A5C
+S315080047F81DD8124B13F8120003EB420393F801C0B5
+S3150800480800EB0C0303FB0443B1FBF3FE03FB1E1684
+S31508004818002EEAD11FFA8EF32B80013B9BB2B3F523
+S31508004828806FE2D2387088F800C0012000E00020C6
+S3150800483804B0BDE8F08100BFD34D62106852000885
+S3150800484870B58CB00023ADF82E308DF82D308DF864
+S315080048582C300BAB0DF12D020DF12E014FF4FA7029
+S31508004868FFF7B2FF002835D01D4C1E4B23600025E4
+S3150800487825766576A5760126E67625776577A56091
+S31508004888E5609DF82D30013B1B0423619DF82C300B
+S31508004898013B1B056361BDF82E3063602046FDF7B2
+S315080048A878FB0695079508964CF6E043019302951A
+S315080048B84FF6E073039304230493059509960E238C
+S315080048C80A9301A92046FDF70BFC2046FDF79EFC36
+S315080048D80CB070BDB5210448FFF788FBC4E700BFD4
+S315080048E8FC050020006400404052000810B588B056
+S315080048F840F2E1730293002304930593069101ABF2
+S31508004908024602A90B48FDF7AFFC08B108B010BD6E
+S31508004918FFF79CFE00F1320401990648FDF71AFDD7
+S315080049280028F3D0FFF76AFBFFF790FEA042F3D9F9
+S31508004938ECE700BFFC05002010B588B00C46034616
+S3150800494801AA00210A48FDF717FD60B9019A40F245
+S3150800495867639A4201D0002006E0039B33B9059B9A
+S315080049682370012000E0002008B010BD0020FBE7F6
+S31508004978FC05002038B50546002401E00134E4B2F8
+S31508004988062C15D8FFF73AFB04EB44029300094AAC
+S31508004998D358AB42F2D804EB44029100054A0A44BC
+S315080049A852681344AB42E9D9024B0B44187A00E023
+S315080049B8FF2038BD8C52000808B5C1F3080353B95F
+S315080049C803688B4209D040F8041B4FF4007200F0C4
+S315080049D8BBF9012008BD0020FCE70120FAE72DE90C
+S315080049E8F0410746FDF738FA002400E001347F2C29
+S315080049F814D83E68A30006EB03083B445D68FFF736
+S31508004A08FDFA2A46002341460220FDF779FA38B905
+S31508004A1856F82430AB42E9D0002402E0012400E02D
+S31508004A280024FDF731FA2046BDE8F08138B50D4671
+S31508004A380C4B984211D004460B4B994207D1094CA6
+S31508004A4829462046FFF7B8FF48B1204638BDFFF784
+S31508004A58C6FF0028F4D10024F7E7044CF0E7002441
+S31508004A68F3E700BF28080020008000082406002075
+S31508004A782DE9F04106460C4617461D46DFF87480B0
+S31508004A8801EA08080368B3F1FF3F07D033684345CE
+S31508004A980BD13368E41A3444043415E04146FFF769
+S31508004AA88BFF03460028F1D11FE041463046FFF741
+S31508004AB8BDFF06460028ECD1002316E017F8013B8F
+S31508004AC804F8013B013D0FD0FFF798FA331DE31AA6
+S31508004AD8B3F5007FF2D308F500713046FFF7A6FF55
+S31508004AE8064628B1041DE9E701231846BDE8F08102
+S31508004AF80023FAE700FEFFFF70B586B004460E46A7
+S31508004B0800230193884219D80125ECB1072E1FD82E
+S31508004B18DDB1002302930223059301230493FDF7CD
+S31508004B289BF9B4420DD8FFF769FA039401A902A8BC
+S31508004B38FEF7D6FD20B90134E4B2F2E70025E4E72A
+S31508004B480025FDF7A1F900E00025284606B070BD46
+S31508004B580025FAE74FF0FF33024A1360024A13604A
+S31508004B68704700BF240600202808002070B54B1E91
+S31508004B78134C241AA34201D9002070BD16460D46C7
+S31508004B880446FFF7F7FEFF2811D028190138FFF762
+S31508004B98F1FEFF280BD00B4B23400B4A934208D053
+S31508004BA82B46324621460948FFF762FFE5E700200B
+S31508004BB8E3E72B46324621460548FFF759FFDCE767
+S31508004BC8FFFF0F0800FEFFFF0080000824060020EC
+S31508004BD8280800204A1E0D4B1B1A9A4201D90020A4
+S31508004BE8704770B50C460546FFF7C4FE06466019B9
+S31508004BF80138FFF7BFFEFF2818BFFF2E01D1002096
+S31508004C0870BD01463046FFF777FFF9E7FFFF0F0843
+S31508004C18104B1B68B3F1FF3F19D000B583B00D4A96
+S31508004C28536891680B44D1680B4411690B44516960
+S31508004C380B4491690B44D26913445B42019301AA58
+S31508004C4804210548FFF792FF03B05DF804FB01202D
+S31508004C58704700BF28080020C88100080D4B1B684C
+S31508004C680D4A12681A440D4B1B6813440C4A1268FD
+S31508004C7813440C4A12681A440B4B1B681A440B4B0C
+S31508004C881B6813440A4A1268DA4201D000207047A2
+S31508004C980120704700800008048000080880000882
+S31508004CA80C80000810800008148000081880000886
+S31508004CB8C881000808B50E4B1B68B3F1FF3F07D13A
+S31508004CC80C4B1B68B3F1FF3F09D10123184608BDF1
+S31508004CD80748FFF784FE03460028F1D1F6E705489A
+S31508004CE8FFF77DFE03460028F0D00123EEE700BF54
+S31508004CF8280800202406002000487047008000087D
+S31508004D0808B500F036FA08BD10B500F01FFA00B964
+S31508004D1810BDFEF731FE0028FAD0FFF723FAFFF791
+S31508004D286DFCFCF76DF800F015FA054B0340054ACB
+S31508004D38936000F00FFA446800F01DFAA047E7E709
+S31508004D4880FFFF1F00ED00E070B50D460446531EB0
+S31508004D589EB23AB115F8013B04F8013BFFF74EF944
+S31508004D683246F4E770BD0000094B03F1180100222A
+S31508004D7832B19A7400225A61064B054A1A6070477E
+S31508004D889A745961183318310132D2B2F0E700BF64
+S31508004D986C0A00209C0A00200A4B1B6883B110B4D1
+S31508004DA85C69084A146019749860D86000225A74B5
+S31508004DB81860013908445860987C5DF8044B7047B8
+S31508004DC8FF2070479C0A002038B504460D4601287E
+S31508004DD81CD862002244D100114B0B445A7C1B7C18
+S31508004DE89A4219D00E4B0B44DA6815705A7C013270
+S31508004DF85A74DA680132DA605B689A420ED9084A48
+S31508004E08084651580244D160012038BD4FF4E07174
+S31508004E180448FFF7EBF8DCE70020F6E70120F4E79B
+S31508004E286C0A0020E052000808B50146024B1878BB
+S31508004E38FFF7CAFF08BD00BFA00A002038B5044618
+S31508004E480D4601281ED804EB4403DA00124B134416
+S31508004E585B7CEBB162002244D1000F4B0B449A6885
+S31508004E6812782A705A7C013A5A749A6801329A60FA
+S31508004E785B689A420ED9084A084651580244916016
+S31508004E88012006E04FF4F1710448FFF7AFF8DAE7B6
+S31508004E98002038BD0120FCE76C0A0020E052000813
+S31508004EA808B50146024B1878FFF7C8FF08BD00BFCA
+S31508004EB8E40A002010B50446012806D804EB440481
+S31508004EC8E200054B1344587C10BD40F20221034802
+S31508004ED8FFF78CF8F2E700BF6C0A0020E0520008DA
+S31508004EE838B5FFF741FF1A4C4021601CFFF754FFFD
+S31508004EF82070184D4021681CFFF74EFF287023784C
+S31508004F08FF2B1BD0FF2819D0134C00221349204623
+S31508004F18FBF7E2FD12492046FBF717FE0120FEF7CC
+S31508004F2842FD2046FBF725FED4F8C402FCF72AFC06
+S31508004F38FFF7A8F8B0F5FA6F05D338BD85210948F3
+S31508004F48FFF754F8E0E74FF4FA60FFF795F8F4E747
+S31508004F58A00A0020E40A0020280B002038040020B4
+S31508004F6888040020E052000810B5064CD4F8C4029C
+S31508004F78FCF71AFC2046FBF7CBFD0020FEF713FDCD
+S31508004F8810BD00BF280B002070B506460D463F2900
+S31508004F9806D82846FFF748FF012806D100240FE05F
+S31508004FA8B9210D48FFF722F8F3E7BD210A48FFF7AC
+S31508004FB81DF8F3E7C6210848FFF718F80134A4B224
+S31508004FC8ABB2A34207D9FFF719F8305DFFF72CFFF4
+S31508004FD80128F3D0EEE770BDE052000870B5064622
+S31508004FE80D461F4BD3F8C402FCF758F91D4B1C781D
+S31508004FF89CB91D48FFF754FF012801D0204670BD0B
+S31508005008194B1B78013BDBB23E2BF7D8154B01220F
+S315080050181A70164B00221A70F0E7144B1B780133E6
+S3150800502811481844FFF73CFF0446012801D000241C
+S31508005038E4E70E4B1A780132D2B21A700A4B1B787B
+S315080050489A4201D00024D9E709493046FFF77CFE81
+S31508005058044B00221A70054B1B782B70CEE700BF4D
+S31508005068280B0020380E0020F80D0020390E0020E5
+S31508005078F90D002030B583B0144B1878FFF71AFFDE
+S3150800508808B30546402800D9402500240AE04FF40D
+S31508005098A3710F48FEF7AAFF9DF807200D4B1A556E
+S315080050A80134E4B2A54208D90DF10701074B18786F
+S315080050B8FFF7C4FE0128EFD0E9E72B46054A812108
+S315080050C80548FEF783FF03B030BD00BFA00A0020DD
+S315080050D8E05200082C0A0020280B002070B5044668
+S315080050E8FEF746FE064621460F48FEF71AFF85B222
+S315080050F8002406E04FF4B4710C48FEF777FF013434
+S31508005108A4B2AC4207D2315D094B1878FFF75CFEAA
+S315080051180128F4D0EEE7FEF72BFE402302460121CC
+S315080051280148FEF75BFF70BD280B0020E052000817
+S31508005138E40A002008B5FFF70DFD08BD08B5FFF716
+S3150800514815FD08BD08B5FFF745FD08BD08B5FFF705
+S3150800515885FD08BD08B5FFF7CFFD08BD08B5FFF7FB
+S3150800516857FD034608B9184608BDFFF7A3FD0346C9
+S31508005178F9E772B6704762B670470000F8B500BF1F
+S31508005188F8BC08BC9E467047F8B500BFF8BC08BC12
+S309080051989E4670476A
+S3150800519C00000020000000000000000001020304CB
+S315080051AC060708090000000001020304446566614D
+S315080051BC756C740057696E5553422042756C6B209A
+S315080051CC496E746572666163650000004F70656EA2
+S315080051DC424C5420557365720000000057696E5591
+S315080051EC53422042756C6B204465766963650000F2
+S315080051FC6D61696E2E630000757362645F636F6E12
+S3150800520C662E63004F70656E424C54002E2E2F2E60
+S3150800521C2E2F2E2E2F536F757263652F41524D43C9
+S3150800522C4D375F53544D333246372F727332333200
+S3150800523C2E6300002E2E2F2E2E2F2E2E2F536F75EB
+S3150800524C7263652F41524D434D375F53544D33327C
+S3150800525C46372F63616E2E630000000005020602B6
+S3150800526C060307030803090309040A040B040C04C0
+S3150800527C0C050D050E050F050F0610061007100870
+S3150800528C00800008008000000100000000000108F2
+S3150800529C0080000002000000008001080080000069
+S315080052AC03000000000002080000020004000000D1
+S315080052BC00000408000004000500000000000808AF
+S315080052CC000004000600000000000C0800000400A2
+S315080052DC070000002E2E2F2E2E2F2E2E2F536F75D5
+S315080052EC7263652F41524D434D375F53544D3332DC
+S311080052FC46372F7573622E630000000011
+S30D0800530851020008ED0100083E
+S30908005310C9010008B9
+S3150800531400000000EC02002054030020BC03002017
+S31508005324000000000000000000000000000000006B
+S31508005334000000000000000000000000000000005B
+S31508005344000000000000000000000000000000004B
+S31508005354000000000000000000000000000000003B
+S31508005364000000000000000000000000000000002B
+S31508005374000000000000000000000000000000001B
+S31508005384000000000000000000000000000000000B
+S3150800539400000000000000000000000000000000FB
+S315080053A400000000000000000000000000000000EB
+S315080053B400000000000000000100000000000000DA
+S315080053C40E33CDAB34126DE6ECDE05000B0000009F
+S315080053D400000000000000000000000000000000BB
+S315080053E400000000000000000000000000000000AB
+S315080053F4000000000000000000000000000000009B
+S31508005404000000000000000000000000000000008A
+S31508005414000000000000000000000000000000007A
+S31508005424000000000000000000000000000000006A
+S31508005434000000000000000000000000000000005A
+S31508005444000000000000000000000000000000004A
+S31508005454000000000000000000000000000000003A
+S31508005464000000000000000000000000000000002A
+S31508005474000000000000000000000000000000001A
+S31508005484000000000000000000000000000000000A
+S3150800549400000000000000000000000000000000FA
+S315080054A400000000000000000000000000000000EA
+S315080054B400000000000000000000000000000000DA
+S315080054C400000000000000000000000000000000CA
+S315080054D400000000000000000000000000000000BA
+S315080054E400000000000000000000000000000000AA
+S315080054F4000000000000000000000000000000009A
+S315080055040000000000000000000000000000000089
+S315080055140000000000000000000000000000000079
+S315080055240000000000000000000000000000000069
+S315080055340000000000000000000000000000000059
+S315080055440000000000000000000000000000000049
+S315080055540000000000000000000000000000000039
+S315080055640000000000000000000000000000000029
+S315080055740000000000000000000000000000000019
+S315080055840000000000000000000000000000000009
+S3150800559400000000000000000000000000000000F9
+S315080055A400000000000000000000000000000000E9
+S315080055B400000000000000000000000000000000D9
+S315080055C400000000000000000000000000000000C9
+S315080055D400000000000000000000000000000000B9
+S315080055E400000000000000000000000000000000A9
+S315080055F40000000000000000000000000000000099
+S315080056040000000000000000000000000000000088
+S315080056140000000000000000000000000000000078
+S315080056240000000000000000000000000000000068
+S315080056340000000000000000000000000000000058
+S315080056440000000000000000000000000000000048
+S315080056540000000000000000000000000000000038
+S315080056640000000000000000000000000000000028
+S315080056740000000000000000000000000000000018
+S315080056840000000000000000000000000000000008
+S3150800569400000000000000000000000000000000F8
+S315080056A400000000000000000000000000000000E8
+S315080056B400000000000000000000000000000000D8
+S315080056C400000000000000000000000000000000C8
+S315080056D400000000000000000000000000000000B8
+S315080056E400000000000000000000000000000000A8
+S315080056F40000000000000000000000000000000098
+S315080057040000000000000000000000000000000087
+S315080057140000000000000000000000000000000077
+S315080057240000000000000000000000000000000067
+S3150800573400000000000000003C0E00200024F400D5
+S315080057440100000010000000F537000801380008C1
+S31508005754B13800088D38000879380008CD380008B3
+S31508005764F13800081201000200000040501DAC6028
+S315080057740002010203010000040309041A030000DD
+S315080057840000000000000000000000000000000007
+S315080057940000000000000000493D0008313D0008F3
+S315080057A4D13C00080000000000000000B93C0008D5
+S315080057B4C33C0008A53C00080000000000000000E7
+S315080057C4000000008D3C000800000000993C000819
+S315080057D409022000010100C0320904000002FF008A
+S315080057E40000070581024000FF070501024000FF8B
+S311080057F40A060002000000400100040044
S70508000335BA
diff --git a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_GCC/Boot/lib/CMSIS/Device/ST/STM32F7xx/Include/stm32f746xx.h b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_GCC/Boot/lib/CMSIS/Device/ST/STM32F7xx/Include/stm32f746xx.h
index 5de6c6e1..2c47d3f0 100644
--- a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_GCC/Boot/lib/CMSIS/Device/ST/STM32F7xx/Include/stm32f746xx.h
+++ b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_GCC/Boot/lib/CMSIS/Device/ST/STM32F7xx/Include/stm32f746xx.h
@@ -12,29 +12,13 @@
******************************************************************************
* @attention
*
- *
© COPYRIGHT(c) 2016 STMicroelectronics
+ * © Copyright (c) 2016 STMicroelectronics.
+ * All rights reserved.
*
- * Redistribution and use in source and binary forms, with or without modification,
- * are permitted provided that the following conditions are met:
- * 1. Redistributions of source code must retain the above copyright notice,
- * this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright notice,
- * this list of conditions and the following disclaimer in the documentation
- * and/or other materials provided with the distribution.
- * 3. Neither the name of STMicroelectronics nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
- * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
- * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ * This software component is licensed by ST under BSD 3-Clause license,
+ * the "License"; You may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at:
+ * opensource.org/licenses/BSD-3-Clause
*
******************************************************************************
*/
@@ -1433,28 +1417,32 @@ typedef struct
/* Analog to Digital Converter */
/* */
/******************************************************************************/
+#define VREFINT_CAL_ADDR_CMSIS ((uint16_t*) (0x1FF0F44A)) /*!© COPYRIGHT(c) 2016 STMicroelectronics
+ * © Copyright (c) 2016 STMicroelectronics.
+ * All rights reserved.
*
- * Redistribution and use in source and binary forms, with or without modification,
- * are permitted provided that the following conditions are met:
- * 1. Redistributions of source code must retain the above copyright notice,
- * this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright notice,
- * this list of conditions and the following disclaimer in the documentation
- * and/or other materials provided with the distribution.
- * 3. Neither the name of STMicroelectronics nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
- * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
- * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ * This software component is licensed by ST under BSD 3-Clause license,
+ * the "License"; You may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at:
+ * opensource.org/licenses/BSD-3-Clause
*
******************************************************************************
*/
@@ -72,10 +56,10 @@
/* Uncomment the line below according to the target STM32 device used in your
application
*/
-#if !defined (STM32F756xx) && !defined (STM32F746xx) && !defined (STM32F745xx) && !defined (STM32F767xx) && \
- !defined (STM32F769xx) && !defined (STM32F777xx) && !defined (STM32F779xx) && !defined (STM32F722xx) && \
- !defined (STM32F723xx) && !defined (STM32F732xx) && !defined (STM32F733xx) && !defined (STM32F730xx) && \
- !defined (STM32F750xx)
+#if !defined (STM32F756xx) && !defined (STM32F746xx) && !defined (STM32F745xx) && !defined (STM32F765xx) && \
+ !defined (STM32F767xx) && !defined (STM32F769xx) && !defined (STM32F777xx) && !defined (STM32F779xx) && \
+ !defined (STM32F722xx) && !defined (STM32F723xx) && !defined (STM32F732xx) && !defined (STM32F733xx) && \
+ !defined (STM32F730xx) && !defined (STM32F750xx)
/* #define STM32F756xx */ /*!< STM32F756VG, STM32F756ZG, STM32F756ZG, STM32F756IG, STM32F756BG,
STM32F756NG Devices */
@@ -113,11 +97,11 @@
#endif /* USE_HAL_DRIVER */
/**
- * @brief CMSIS Device version number V1.2.4
+ * @brief CMSIS Device version number V1.2.5
*/
#define __STM32F7_CMSIS_VERSION_MAIN (0x01) /*!< [31:24] main version */
#define __STM32F7_CMSIS_VERSION_SUB1 (0x02) /*!< [23:16] sub1 version */
-#define __STM32F7_CMSIS_VERSION_SUB2 (0x04) /*!< [15:8] sub2 version */
+#define __STM32F7_CMSIS_VERSION_SUB2 (0x05) /*!< [15:8] sub2 version */
#define __STM32F7_CMSIS_VERSION_RC (0x00) /*!< [7:0] release candidate */
#define __STM32F7_CMSIS_VERSION ((__STM32F7_CMSIS_VERSION_MAIN << 24)\
|(__STM32F7_CMSIS_VERSION_SUB1 << 16)\
diff --git a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_GCC/Boot/lib/STM32F7xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_GCC/Boot/lib/STM32F7xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h
index 13b68bc2..2d265fb6 100644
--- a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_GCC/Boot/lib/STM32F7xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h
+++ b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_GCC/Boot/lib/STM32F7xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h
@@ -7,7 +7,7 @@
******************************************************************************
* @attention
*
- * © Copyright (c) 2018 STMicroelectronics.
+ * © Copyright (c) 2019 STMicroelectronics.
* All rights reserved.
*
* This software component is licensed by ST under BSD 3-Clause license,
@@ -236,6 +236,16 @@
#define DAC_WAVEGENERATION_NOISE DAC_WAVE_NOISE
#define DAC_WAVEGENERATION_TRIANGLE DAC_WAVE_TRIANGLE
+#if defined(STM32G4) || defined(STM32H7)
+#define DAC_CHIPCONNECT_DISABLE DAC_CHIPCONNECT_EXTERNAL
+#define DAC_CHIPCONNECT_ENABLE DAC_CHIPCONNECT_INTERNAL
+#endif
+
+#if defined(STM32L1) || defined(STM32L4) || defined(STM32G0) || defined(STM32L5) || defined(STM32H7) || defined(STM32F4)
+#define HAL_DAC_MSP_INIT_CB_ID HAL_DAC_MSPINIT_CB_ID
+#define HAL_DAC_MSP_DEINIT_CB_ID HAL_DAC_MSPDEINIT_CB_ID
+#endif
+
/**
* @}
*/
@@ -296,8 +306,17 @@
#define HAL_DMAMUX_REQUEST_GEN_FALLING HAL_DMAMUX_REQ_GEN_FALLING
#define HAL_DMAMUX_REQUEST_GEN_RISING_FALLING HAL_DMAMUX_REQ_GEN_RISING_FALLING
+#if defined(STM32L4R5xx) || defined(STM32L4R9xx) || defined(STM32L4R9xx) || defined(STM32L4S5xx) || defined(STM32L4S7xx) || defined(STM32L4S9xx)
+#define DMA_REQUEST_DCMI_PSSI DMA_REQUEST_DCMI
+#endif
+
#endif /* STM32L4 */
+#if defined(STM32G0)
+#define DMA_REQUEST_DAC1_CHANNEL1 DMA_REQUEST_DAC1_CH1
+#define DMA_REQUEST_DAC1_CHANNEL2 DMA_REQUEST_DAC1_CH2
+#endif
+
#if defined(STM32H7)
#define DMA_REQUEST_DAC1 DMA_REQUEST_DAC1_CH1
@@ -355,6 +374,9 @@
#define DFSDM_FILTER_EXT_TRIG_LPTIM2 DFSDM_FILTER_EXT_TRIG_LPTIM2_OUT
#define DFSDM_FILTER_EXT_TRIG_LPTIM3 DFSDM_FILTER_EXT_TRIG_LPTIM3_OUT
+#define DAC_TRIGGER_LP1_OUT DAC_TRIGGER_LPTIM1_OUT
+#define DAC_TRIGGER_LP2_OUT DAC_TRIGGER_LPTIM2_OUT
+
#endif /* STM32H7 */
/**
@@ -450,7 +472,9 @@
#define FLASH_FLAG_SNECCE_BANK2RR FLASH_FLAG_SNECCERR_BANK2
#define FLASH_FLAG_DBECCE_BANK2RR FLASH_FLAG_DBECCERR_BANK2
#define FLASH_FLAG_STRBER_BANK2R FLASH_FLAG_STRBERR_BANK2
-#endif
+#define FLASH_FLAG_WDW FLASH_FLAG_WBNE
+#define OB_WRP_SECTOR_All OB_WRP_SECTOR_ALL
+#endif /* STM32H7 */
/**
* @}
@@ -486,6 +510,13 @@
#define HAL_SYSCFG_FASTMODEPLUS_I2C1 I2C_FASTMODEPLUS_I2C1
#define HAL_SYSCFG_FASTMODEPLUS_I2C2 I2C_FASTMODEPLUS_I2C2
#define HAL_SYSCFG_FASTMODEPLUS_I2C3 I2C_FASTMODEPLUS_I2C3
+#if defined(STM32G4)
+
+#define HAL_SYSCFG_EnableIOAnalogSwitchBooster HAL_SYSCFG_EnableIOSwitchBooster
+#define HAL_SYSCFG_DisableIOAnalogSwitchBooster HAL_SYSCFG_DisableIOSwitchBooster
+#define HAL_SYSCFG_EnableIOAnalogSwitchVDD HAL_SYSCFG_EnableIOSwitchVDD
+#define HAL_SYSCFG_DisableIOAnalogSwitchVDD HAL_SYSCFG_DisableIOSwitchVDD
+#endif /* STM32G4 */
/**
* @}
*/
@@ -494,7 +525,7 @@
/** @defgroup LL_FMC_Aliased_Defines LL FMC Aliased Defines maintained for compatibility purpose
* @{
*/
-#if defined(STM32L4) || defined(STM32F7) || defined(STM32H7)
+#if defined(STM32L4) || defined(STM32F7) || defined(STM32H7) || defined(STM32G4)
#define FMC_NAND_PCC_WAIT_FEATURE_DISABLE FMC_NAND_WAIT_FEATURE_DISABLE
#define FMC_NAND_PCC_WAIT_FEATURE_ENABLE FMC_NAND_WAIT_FEATURE_ENABLE
#define FMC_NAND_PCC_MEM_BUS_WIDTH_8 FMC_NAND_MEM_BUS_WIDTH_8
@@ -547,18 +578,25 @@
#define GPIO_AF9_SDIO2 GPIO_AF9_SDMMC2
#define GPIO_AF10_SDIO2 GPIO_AF10_SDMMC2
#define GPIO_AF11_SDIO2 GPIO_AF11_SDMMC2
-#endif
+
+#if defined (STM32H743xx) || defined (STM32H753xx) || defined (STM32H750xx) || defined (STM32H742xx) || \
+ defined (STM32H745xx) || defined (STM32H755xx) || defined (STM32H747xx) || defined (STM32H757xx)
+#define GPIO_AF10_OTG2_HS GPIO_AF10_OTG2_FS
+#define GPIO_AF10_OTG1_FS GPIO_AF10_OTG1_HS
+#define GPIO_AF12_OTG2_FS GPIO_AF12_OTG1_FS
+#endif /*STM32H743xx || STM32H753xx || STM32H750xx || STM32H742xx || STM32H745xx || STM32H755xx || STM32H747xx || STM32H757xx */
+#endif /* STM32H7 */
#define GPIO_AF0_LPTIM GPIO_AF0_LPTIM1
#define GPIO_AF1_LPTIM GPIO_AF1_LPTIM1
#define GPIO_AF2_LPTIM GPIO_AF2_LPTIM1
-#if defined(STM32L0) || defined(STM32L4) || defined(STM32F4) || defined(STM32F2) || defined(STM32F7) || defined(STM32H7)
+#if defined(STM32L0) || defined(STM32L4) || defined(STM32F4) || defined(STM32F2) || defined(STM32F7) || defined(STM32G4) || defined(STM32H7)
#define GPIO_SPEED_LOW GPIO_SPEED_FREQ_LOW
#define GPIO_SPEED_MEDIUM GPIO_SPEED_FREQ_MEDIUM
#define GPIO_SPEED_FAST GPIO_SPEED_FREQ_HIGH
#define GPIO_SPEED_HIGH GPIO_SPEED_FREQ_VERY_HIGH
-#endif /* STM32L0 || STM32L4 || STM32F4 || STM32F2 || STM32F7 || STM32H7*/
+#endif /* STM32L0 || STM32L4 || STM32F4 || STM32F2 || STM32F7 || STM32G4 || STM32H7*/
#if defined(STM32L1)
#define GPIO_SPEED_VERY_LOW GPIO_SPEED_FREQ_LOW
@@ -599,6 +637,185 @@
#define __HAL_HRTIM_GetClockPrescaler __HAL_HRTIM_GETCLOCKPRESCALER
#define __HAL_HRTIM_SetCompare __HAL_HRTIM_SETCOMPARE
#define __HAL_HRTIM_GetCompare __HAL_HRTIM_GETCOMPARE
+
+#if defined(STM32G4)
+#define HAL_HRTIM_ExternalEventCounterConfig HAL_HRTIM_ExtEventCounterConfig
+#define HAL_HRTIM_ExternalEventCounterEnable HAL_HRTIM_ExtEventCounterEnable
+#define HAL_HRTIM_ExternalEventCounterDisable HAL_HRTIM_ExtEventCounterDisable
+#define HAL_HRTIM_ExternalEventCounterReset HAL_HRTIM_ExtEventCounterReset
+#endif /* STM32G4 */
+
+#if defined(STM32H7)
+#define HRTIM_OUTPUTSET_TIMAEV1_TIMBCMP1 HRTIM_OUTPUTSET_TIMEV_1
+#define HRTIM_OUTPUTSET_TIMAEV2_TIMBCMP2 HRTIM_OUTPUTSET_TIMEV_2
+#define HRTIM_OUTPUTSET_TIMAEV3_TIMCCMP2 HRTIM_OUTPUTSET_TIMEV_3
+#define HRTIM_OUTPUTSET_TIMAEV4_TIMCCMP3 HRTIM_OUTPUTSET_TIMEV_4
+#define HRTIM_OUTPUTSET_TIMAEV5_TIMDCMP1 HRTIM_OUTPUTSET_TIMEV_5
+#define HRTIM_OUTPUTSET_TIMAEV6_TIMDCMP2 HRTIM_OUTPUTSET_TIMEV_6
+#define HRTIM_OUTPUTSET_TIMAEV7_TIMECMP3 HRTIM_OUTPUTSET_TIMEV_7
+#define HRTIM_OUTPUTSET_TIMAEV8_TIMECMP4 HRTIM_OUTPUTSET_TIMEV_8
+#define HRTIM_OUTPUTSET_TIMAEV9_TIMFCMP4 HRTIM_OUTPUTSET_TIMEV_9
+#define HRTIM_OUTPUTSET_TIMBEV1_TIMACMP1 HRTIM_OUTPUTSET_TIMEV_1
+#define HRTIM_OUTPUTSET_TIMBEV2_TIMACMP2 HRTIM_OUTPUTSET_TIMEV_2
+#define HRTIM_OUTPUTSET_TIMBEV3_TIMCCMP3 HRTIM_OUTPUTSET_TIMEV_3
+#define HRTIM_OUTPUTSET_TIMBEV4_TIMCCMP4 HRTIM_OUTPUTSET_TIMEV_4
+#define HRTIM_OUTPUTSET_TIMBEV5_TIMDCMP3 HRTIM_OUTPUTSET_TIMEV_5
+#define HRTIM_OUTPUTSET_TIMBEV6_TIMDCMP4 HRTIM_OUTPUTSET_TIMEV_6
+#define HRTIM_OUTPUTSET_TIMBEV7_TIMECMP1 HRTIM_OUTPUTSET_TIMEV_7
+#define HRTIM_OUTPUTSET_TIMBEV8_TIMECMP2 HRTIM_OUTPUTSET_TIMEV_8
+#define HRTIM_OUTPUTSET_TIMBEV9_TIMFCMP3 HRTIM_OUTPUTSET_TIMEV_9
+#define HRTIM_OUTPUTSET_TIMCEV1_TIMACMP1 HRTIM_OUTPUTSET_TIMEV_1
+#define HRTIM_OUTPUTSET_TIMCEV2_TIMACMP2 HRTIM_OUTPUTSET_TIMEV_2
+#define HRTIM_OUTPUTSET_TIMCEV3_TIMBCMP2 HRTIM_OUTPUTSET_TIMEV_3
+#define HRTIM_OUTPUTSET_TIMCEV4_TIMBCMP3 HRTIM_OUTPUTSET_TIMEV_4
+#define HRTIM_OUTPUTSET_TIMCEV5_TIMDCMP2 HRTIM_OUTPUTSET_TIMEV_5
+#define HRTIM_OUTPUTSET_TIMCEV6_TIMDCMP4 HRTIM_OUTPUTSET_TIMEV_6
+#define HRTIM_OUTPUTSET_TIMCEV7_TIMECMP3 HRTIM_OUTPUTSET_TIMEV_7
+#define HRTIM_OUTPUTSET_TIMCEV8_TIMECMP4 HRTIM_OUTPUTSET_TIMEV_8
+#define HRTIM_OUTPUTSET_TIMCEV9_TIMFCMP2 HRTIM_OUTPUTSET_TIMEV_9
+#define HRTIM_OUTPUTSET_TIMDEV1_TIMACMP1 HRTIM_OUTPUTSET_TIMEV_1
+#define HRTIM_OUTPUTSET_TIMDEV2_TIMACMP4 HRTIM_OUTPUTSET_TIMEV_2
+#define HRTIM_OUTPUTSET_TIMDEV3_TIMBCMP2 HRTIM_OUTPUTSET_TIMEV_3
+#define HRTIM_OUTPUTSET_TIMDEV4_TIMBCMP4 HRTIM_OUTPUTSET_TIMEV_4
+#define HRTIM_OUTPUTSET_TIMDEV5_TIMCCMP4 HRTIM_OUTPUTSET_TIMEV_5
+#define HRTIM_OUTPUTSET_TIMDEV6_TIMECMP1 HRTIM_OUTPUTSET_TIMEV_6
+#define HRTIM_OUTPUTSET_TIMDEV7_TIMECMP4 HRTIM_OUTPUTSET_TIMEV_7
+#define HRTIM_OUTPUTSET_TIMDEV8_TIMFCMP1 HRTIM_OUTPUTSET_TIMEV_8
+#define HRTIM_OUTPUTSET_TIMDEV9_TIMFCMP3 HRTIM_OUTPUTSET_TIMEV_9
+#define HRTIM_OUTPUTSET_TIMEEV1_TIMACMP4 HRTIM_OUTPUTSET_TIMEV_1
+#define HRTIM_OUTPUTSET_TIMEEV2_TIMBCMP3 HRTIM_OUTPUTSET_TIMEV_2
+#define HRTIM_OUTPUTSET_TIMEEV3_TIMBCMP4 HRTIM_OUTPUTSET_TIMEV_3
+#define HRTIM_OUTPUTSET_TIMEEV4_TIMCCMP1 HRTIM_OUTPUTSET_TIMEV_4
+#define HRTIM_OUTPUTSET_TIMEEV5_TIMDCMP2 HRTIM_OUTPUTSET_TIMEV_5
+#define HRTIM_OUTPUTSET_TIMEEV6_TIMDCMP1 HRTIM_OUTPUTSET_TIMEV_6
+#define HRTIM_OUTPUTSET_TIMEEV7_TIMDCMP2 HRTIM_OUTPUTSET_TIMEV_7
+#define HRTIM_OUTPUTSET_TIMEEV8_TIMFCMP3 HRTIM_OUTPUTSET_TIMEV_8
+#define HRTIM_OUTPUTSET_TIMEEV9_TIMFCMP4 HRTIM_OUTPUTSET_TIMEV_9
+#define HRTIM_OUTPUTSET_TIMFEV1_TIMACMP3 HRTIM_OUTPUTSET_TIMEV_1
+#define HRTIM_OUTPUTSET_TIMFEV2_TIMBCMP1 HRTIM_OUTPUTSET_TIMEV_2
+#define HRTIM_OUTPUTSET_TIMFEV3_TIMBCMP4 HRTIM_OUTPUTSET_TIMEV_3
+#define HRTIM_OUTPUTSET_TIMFEV4_TIMCCMP1 HRTIM_OUTPUTSET_TIMEV_4
+#define HRTIM_OUTPUTSET_TIMFEV5_TIMCCMP4 HRTIM_OUTPUTSET_TIMEV_5
+#define HRTIM_OUTPUTSET_TIMFEV6_TIMDCMP3 HRTIM_OUTPUTSET_TIMEV_6
+#define HRTIM_OUTPUTSET_TIMFEV7_TIMDCMP4 HRTIM_OUTPUTSET_TIMEV_7
+#define HRTIM_OUTPUTSET_TIMFEV8_TIMECMP2 HRTIM_OUTPUTSET_TIMEV_8
+#define HRTIM_OUTPUTSET_TIMFEV9_TIMECMP3 HRTIM_OUTPUTSET_TIMEV_9
+
+#define HRTIM_OUTPUTRESET_TIMAEV1_TIMBCMP1 HRTIM_OUTPUTSET_TIMEV_1
+#define HRTIM_OUTPUTRESET_TIMAEV2_TIMBCMP2 HRTIM_OUTPUTSET_TIMEV_2
+#define HRTIM_OUTPUTRESET_TIMAEV3_TIMCCMP2 HRTIM_OUTPUTSET_TIMEV_3
+#define HRTIM_OUTPUTRESET_TIMAEV4_TIMCCMP3 HRTIM_OUTPUTSET_TIMEV_4
+#define HRTIM_OUTPUTRESET_TIMAEV5_TIMDCMP1 HRTIM_OUTPUTSET_TIMEV_5
+#define HRTIM_OUTPUTRESET_TIMAEV6_TIMDCMP2 HRTIM_OUTPUTSET_TIMEV_6
+#define HRTIM_OUTPUTRESET_TIMAEV7_TIMECMP3 HRTIM_OUTPUTSET_TIMEV_7
+#define HRTIM_OUTPUTRESET_TIMAEV8_TIMECMP4 HRTIM_OUTPUTSET_TIMEV_8
+#define HRTIM_OUTPUTRESET_TIMAEV9_TIMFCMP4 HRTIM_OUTPUTSET_TIMEV_9
+#define HRTIM_OUTPUTRESET_TIMBEV1_TIMACMP1 HRTIM_OUTPUTSET_TIMEV_1
+#define HRTIM_OUTPUTRESET_TIMBEV2_TIMACMP2 HRTIM_OUTPUTSET_TIMEV_2
+#define HRTIM_OUTPUTRESET_TIMBEV3_TIMCCMP3 HRTIM_OUTPUTSET_TIMEV_3
+#define HRTIM_OUTPUTRESET_TIMBEV4_TIMCCMP4 HRTIM_OUTPUTSET_TIMEV_4
+#define HRTIM_OUTPUTRESET_TIMBEV5_TIMDCMP3 HRTIM_OUTPUTSET_TIMEV_5
+#define HRTIM_OUTPUTRESET_TIMBEV6_TIMDCMP4 HRTIM_OUTPUTSET_TIMEV_6
+#define HRTIM_OUTPUTRESET_TIMBEV7_TIMECMP1 HRTIM_OUTPUTSET_TIMEV_7
+#define HRTIM_OUTPUTRESET_TIMBEV8_TIMECMP2 HRTIM_OUTPUTSET_TIMEV_8
+#define HRTIM_OUTPUTRESET_TIMBEV9_TIMFCMP3 HRTIM_OUTPUTSET_TIMEV_9
+#define HRTIM_OUTPUTRESET_TIMCEV1_TIMACMP1 HRTIM_OUTPUTSET_TIMEV_1
+#define HRTIM_OUTPUTRESET_TIMCEV2_TIMACMP2 HRTIM_OUTPUTSET_TIMEV_2
+#define HRTIM_OUTPUTRESET_TIMCEV3_TIMBCMP2 HRTIM_OUTPUTSET_TIMEV_3
+#define HRTIM_OUTPUTRESET_TIMCEV4_TIMBCMP3 HRTIM_OUTPUTSET_TIMEV_4
+#define HRTIM_OUTPUTRESET_TIMCEV5_TIMDCMP2 HRTIM_OUTPUTSET_TIMEV_5
+#define HRTIM_OUTPUTRESET_TIMCEV6_TIMDCMP4 HRTIM_OUTPUTSET_TIMEV_6
+#define HRTIM_OUTPUTRESET_TIMCEV7_TIMECMP3 HRTIM_OUTPUTSET_TIMEV_7
+#define HRTIM_OUTPUTRESET_TIMCEV8_TIMECMP4 HRTIM_OUTPUTSET_TIMEV_8
+#define HRTIM_OUTPUTRESET_TIMCEV9_TIMFCMP2 HRTIM_OUTPUTSET_TIMEV_9
+#define HRTIM_OUTPUTRESET_TIMDEV1_TIMACMP1 HRTIM_OUTPUTSET_TIMEV_1
+#define HRTIM_OUTPUTRESET_TIMDEV2_TIMACMP4 HRTIM_OUTPUTSET_TIMEV_2
+#define HRTIM_OUTPUTRESET_TIMDEV3_TIMBCMP2 HRTIM_OUTPUTSET_TIMEV_3
+#define HRTIM_OUTPUTRESET_TIMDEV4_TIMBCMP4 HRTIM_OUTPUTSET_TIMEV_4
+#define HRTIM_OUTPUTRESET_TIMDEV5_TIMCCMP4 HRTIM_OUTPUTSET_TIMEV_5
+#define HRTIM_OUTPUTRESET_TIMDEV6_TIMECMP1 HRTIM_OUTPUTSET_TIMEV_6
+#define HRTIM_OUTPUTRESET_TIMDEV7_TIMECMP4 HRTIM_OUTPUTSET_TIMEV_7
+#define HRTIM_OUTPUTRESET_TIMDEV8_TIMFCMP1 HRTIM_OUTPUTSET_TIMEV_8
+#define HRTIM_OUTPUTRESET_TIMDEV9_TIMFCMP3 HRTIM_OUTPUTSET_TIMEV_9
+#define HRTIM_OUTPUTRESET_TIMEEV1_TIMACMP4 HRTIM_OUTPUTSET_TIMEV_1
+#define HRTIM_OUTPUTRESET_TIMEEV2_TIMBCMP3 HRTIM_OUTPUTSET_TIMEV_2
+#define HRTIM_OUTPUTRESET_TIMEEV3_TIMBCMP4 HRTIM_OUTPUTSET_TIMEV_3
+#define HRTIM_OUTPUTRESET_TIMEEV4_TIMCCMP1 HRTIM_OUTPUTSET_TIMEV_4
+#define HRTIM_OUTPUTRESET_TIMEEV5_TIMDCMP2 HRTIM_OUTPUTSET_TIMEV_5
+#define HRTIM_OUTPUTRESET_TIMEEV6_TIMDCMP1 HRTIM_OUTPUTSET_TIMEV_6
+#define HRTIM_OUTPUTRESET_TIMEEV7_TIMDCMP2 HRTIM_OUTPUTSET_TIMEV_7
+#define HRTIM_OUTPUTRESET_TIMEEV8_TIMFCMP3 HRTIM_OUTPUTSET_TIMEV_8
+#define HRTIM_OUTPUTRESET_TIMEEV9_TIMFCMP4 HRTIM_OUTPUTSET_TIMEV_9
+#define HRTIM_OUTPUTRESET_TIMFEV1_TIMACMP3 HRTIM_OUTPUTSET_TIMEV_1
+#define HRTIM_OUTPUTRESET_TIMFEV2_TIMBCMP1 HRTIM_OUTPUTSET_TIMEV_2
+#define HRTIM_OUTPUTRESET_TIMFEV3_TIMBCMP4 HRTIM_OUTPUTSET_TIMEV_3
+#define HRTIM_OUTPUTRESET_TIMFEV4_TIMCCMP1 HRTIM_OUTPUTSET_TIMEV_4
+#define HRTIM_OUTPUTRESET_TIMFEV5_TIMCCMP4 HRTIM_OUTPUTSET_TIMEV_5
+#define HRTIM_OUTPUTRESET_TIMFEV6_TIMDCMP3 HRTIM_OUTPUTSET_TIMEV_6
+#define HRTIM_OUTPUTRESET_TIMFEV7_TIMDCMP4 HRTIM_OUTPUTSET_TIMEV_7
+#define HRTIM_OUTPUTRESET_TIMFEV8_TIMECMP2 HRTIM_OUTPUTSET_TIMEV_8
+#define HRTIM_OUTPUTRESET_TIMFEV9_TIMECMP3 HRTIM_OUTPUTSET_TIMEV_9
+#endif /* STM32H7 */
+
+#if defined(STM32F3)
+/** @brief Constants defining available sources associated to external events.
+ */
+#define HRTIM_EVENTSRC_1 (0x00000000U)
+#define HRTIM_EVENTSRC_2 (HRTIM_EECR1_EE1SRC_0)
+#define HRTIM_EVENTSRC_3 (HRTIM_EECR1_EE1SRC_1)
+#define HRTIM_EVENTSRC_4 (HRTIM_EECR1_EE1SRC_1 | HRTIM_EECR1_EE1SRC_0)
+
+/** @brief Constants defining the events that can be selected to configure the
+ * set/reset crossbar of a timer output
+ */
+#define HRTIM_OUTPUTSET_TIMEV_1 (HRTIM_SET1R_TIMEVNT1)
+#define HRTIM_OUTPUTSET_TIMEV_2 (HRTIM_SET1R_TIMEVNT2)
+#define HRTIM_OUTPUTSET_TIMEV_3 (HRTIM_SET1R_TIMEVNT3)
+#define HRTIM_OUTPUTSET_TIMEV_4 (HRTIM_SET1R_TIMEVNT4)
+#define HRTIM_OUTPUTSET_TIMEV_5 (HRTIM_SET1R_TIMEVNT5)
+#define HRTIM_OUTPUTSET_TIMEV_6 (HRTIM_SET1R_TIMEVNT6)
+#define HRTIM_OUTPUTSET_TIMEV_7 (HRTIM_SET1R_TIMEVNT7)
+#define HRTIM_OUTPUTSET_TIMEV_8 (HRTIM_SET1R_TIMEVNT8)
+#define HRTIM_OUTPUTSET_TIMEV_9 (HRTIM_SET1R_TIMEVNT9)
+
+#define HRTIM_OUTPUTRESET_TIMEV_1 (HRTIM_RST1R_TIMEVNT1)
+#define HRTIM_OUTPUTRESET_TIMEV_2 (HRTIM_RST1R_TIMEVNT2)
+#define HRTIM_OUTPUTRESET_TIMEV_3 (HRTIM_RST1R_TIMEVNT3)
+#define HRTIM_OUTPUTRESET_TIMEV_4 (HRTIM_RST1R_TIMEVNT4)
+#define HRTIM_OUTPUTRESET_TIMEV_5 (HRTIM_RST1R_TIMEVNT5)
+#define HRTIM_OUTPUTRESET_TIMEV_6 (HRTIM_RST1R_TIMEVNT6)
+#define HRTIM_OUTPUTRESET_TIMEV_7 (HRTIM_RST1R_TIMEVNT7)
+#define HRTIM_OUTPUTRESET_TIMEV_8 (HRTIM_RST1R_TIMEVNT8)
+#define HRTIM_OUTPUTRESET_TIMEV_9 (HRTIM_RST1R_TIMEVNT9)
+
+/** @brief Constants defining the event filtering applied to external events
+ * by a timer
+ */
+#define HRTIM_TIMEVENTFILTER_NONE (0x00000000U)
+#define HRTIM_TIMEVENTFILTER_BLANKINGCMP1 (HRTIM_EEFR1_EE1FLTR_0)
+#define HRTIM_TIMEVENTFILTER_BLANKINGCMP2 (HRTIM_EEFR1_EE1FLTR_1)
+#define HRTIM_TIMEVENTFILTER_BLANKINGCMP3 (HRTIM_EEFR1_EE1FLTR_1 | HRTIM_EEFR1_EE1FLTR_0)
+#define HRTIM_TIMEVENTFILTER_BLANKINGCMP4 (HRTIM_EEFR1_EE1FLTR_2)
+#define HRTIM_TIMEVENTFILTER_BLANKINGFLTR1 (HRTIM_EEFR1_EE1FLTR_2 | HRTIM_EEFR1_EE1FLTR_0)
+#define HRTIM_TIMEVENTFILTER_BLANKINGFLTR2 (HRTIM_EEFR1_EE1FLTR_2 | HRTIM_EEFR1_EE1FLTR_1)
+#define HRTIM_TIMEVENTFILTER_BLANKINGFLTR3 (HRTIM_EEFR1_EE1FLTR_2 | HRTIM_EEFR1_EE1FLTR_1 | HRTIM_EEFR1_EE1FLTR_0)
+#define HRTIM_TIMEVENTFILTER_BLANKINGFLTR4 (HRTIM_EEFR1_EE1FLTR_3)
+#define HRTIM_TIMEVENTFILTER_BLANKINGFLTR5 (HRTIM_EEFR1_EE1FLTR_3 | HRTIM_EEFR1_EE1FLTR_0)
+#define HRTIM_TIMEVENTFILTER_BLANKINGFLTR6 (HRTIM_EEFR1_EE1FLTR_3 | HRTIM_EEFR1_EE1FLTR_1)
+#define HRTIM_TIMEVENTFILTER_BLANKINGFLTR7 (HRTIM_EEFR1_EE1FLTR_3 | HRTIM_EEFR1_EE1FLTR_1 | HRTIM_EEFR1_EE1FLTR_0)
+#define HRTIM_TIMEVENTFILTER_BLANKINGFLTR8 (HRTIM_EEFR1_EE1FLTR_3 | HRTIM_EEFR1_EE1FLTR_2)
+#define HRTIM_TIMEVENTFILTER_WINDOWINGCMP2 (HRTIM_EEFR1_EE1FLTR_3 | HRTIM_EEFR1_EE1FLTR_2 | HRTIM_EEFR1_EE1FLTR_0)
+#define HRTIM_TIMEVENTFILTER_WINDOWINGCMP3 (HRTIM_EEFR1_EE1FLTR_3 | HRTIM_EEFR1_EE1FLTR_2 | HRTIM_EEFR1_EE1FLTR_1)
+#define HRTIM_TIMEVENTFILTER_WINDOWINGTIM (HRTIM_EEFR1_EE1FLTR_3 | HRTIM_EEFR1_EE1FLTR_2 | HRTIM_EEFR1_EE1FLTR_1 | HRTIM_EEFR1_EE1FLTR_0)
+
+/** @brief Constants defining the DLL calibration periods (in micro seconds)
+ */
+#define HRTIM_CALIBRATIONRATE_7300 0x00000000U
+#define HRTIM_CALIBRATIONRATE_910 (HRTIM_DLLCR_CALRTE_0)
+#define HRTIM_CALIBRATIONRATE_114 (HRTIM_DLLCR_CALRTE_1)
+#define HRTIM_CALIBRATIONRATE_14 (HRTIM_DLLCR_CALRTE_1 | HRTIM_DLLCR_CALRTE_0)
+
+#endif /* STM32F3 */
/**
* @}
*/
@@ -738,6 +955,12 @@
#define OPAMP_PGACONNECT_VM0 OPAMP_PGA_CONNECT_INVERTINGINPUT_IO0
#define OPAMP_PGACONNECT_VM1 OPAMP_PGA_CONNECT_INVERTINGINPUT_IO1
+#if defined(STM32L1) || defined(STM32L4) || defined(STM32L5) || defined(STM32H7)
+#define HAL_OPAMP_MSP_INIT_CB_ID HAL_OPAMP_MSPINIT_CB_ID
+#define HAL_OPAMP_MSP_DEINIT_CB_ID HAL_OPAMP_MSPDEINIT_CB_ID
+#endif
+
+
/**
* @}
*/
@@ -753,7 +976,6 @@
#define I2S_FLAG_TXE I2S_FLAG_TXP
#define I2S_FLAG_RXNE I2S_FLAG_RXP
- #define I2S_FLAG_FRE I2S_FLAG_TIFRE
#endif
#if defined(STM32F7)
@@ -824,6 +1046,16 @@
#define RTC_TAMPERPIN_PA0 RTC_TAMPERPIN_POS1
#define RTC_TAMPERPIN_PI8 RTC_TAMPERPIN_POS1
+#if defined(STM32H7)
+#define RTC_TAMPCR_TAMPXE RTC_TAMPER_X
+#define RTC_TAMPCR_TAMPXIE RTC_TAMPER_X_INTERRUPT
+
+#define RTC_TAMPER1_INTERRUPT RTC_IT_TAMP1
+#define RTC_TAMPER2_INTERRUPT RTC_IT_TAMP2
+#define RTC_TAMPER3_INTERRUPT RTC_IT_TAMP3
+#define RTC_ALL_TAMPER_INTERRUPT RTC_IT_TAMPALL
+#endif /* STM32H7 */
+
/**
* @}
*/
@@ -971,6 +1203,24 @@
#define IS_TIM_HALL_INTERFACE_INSTANCE IS_TIM_HALL_SENSOR_INTERFACE_INSTANCE
#endif
+#if defined(STM32H7)
+#define TIM_TIM1_ETR_COMP1_OUT TIM_TIM1_ETR_COMP1
+#define TIM_TIM1_ETR_COMP2_OUT TIM_TIM1_ETR_COMP2
+#define TIM_TIM8_ETR_COMP1_OUT TIM_TIM8_ETR_COMP1
+#define TIM_TIM8_ETR_COMP2_OUT TIM_TIM8_ETR_COMP2
+#define TIM_TIM2_ETR_COMP1_OUT TIM_TIM2_ETR_COMP1
+#define TIM_TIM2_ETR_COMP2_OUT TIM_TIM2_ETR_COMP2
+#define TIM_TIM3_ETR_COMP1_OUT TIM_TIM3_ETR_COMP1
+#define TIM_TIM1_TI1_COMP1_OUT TIM_TIM1_TI1_COMP1
+#define TIM_TIM8_TI1_COMP2_OUT TIM_TIM8_TI1_COMP2
+#define TIM_TIM2_TI4_COMP1_OUT TIM_TIM2_TI4_COMP1
+#define TIM_TIM2_TI4_COMP2_OUT TIM_TIM2_TI4_COMP2
+#define TIM_TIM2_TI4_COMP1COMP2_OUT TIM_TIM2_TI4_COMP1_COMP2
+#define TIM_TIM3_TI1_COMP1_OUT TIM_TIM3_TI1_COMP1
+#define TIM_TIM3_TI1_COMP2_OUT TIM_TIM3_TI1_COMP2
+#define TIM_TIM3_TI1_COMP1COMP2_OUT TIM_TIM3_TI1_COMP1_COMP2
+#endif
+
/**
* @}
*/
@@ -1199,6 +1449,30 @@
#define HASH_HMACKeyType_ShortKey HASH_HMAC_KEYTYPE_SHORTKEY
#define HASH_HMACKeyType_LongKey HASH_HMAC_KEYTYPE_LONGKEY
+
+#if defined(STM32L4) || defined(STM32F4) || defined(STM32F7) || defined(STM32H7)
+
+#define HAL_HASH_MD5_Accumulate HAL_HASH_MD5_Accmlt
+#define HAL_HASH_MD5_Accumulate_End HAL_HASH_MD5_Accmlt_End
+#define HAL_HASH_MD5_Accumulate_IT HAL_HASH_MD5_Accmlt_IT
+#define HAL_HASH_MD5_Accumulate_End_IT HAL_HASH_MD5_Accmlt_End_IT
+
+#define HAL_HASH_SHA1_Accumulate HAL_HASH_SHA1_Accmlt
+#define HAL_HASH_SHA1_Accumulate_End HAL_HASH_SHA1_Accmlt_End
+#define HAL_HASH_SHA1_Accumulate_IT HAL_HASH_SHA1_Accmlt_IT
+#define HAL_HASH_SHA1_Accumulate_End_IT HAL_HASH_SHA1_Accmlt_End_IT
+
+#define HAL_HASHEx_SHA224_Accumulate HAL_HASHEx_SHA224_Accmlt
+#define HAL_HASHEx_SHA224_Accumulate_End HAL_HASHEx_SHA224_Accmlt_End
+#define HAL_HASHEx_SHA224_Accumulate_IT HAL_HASHEx_SHA224_Accmlt_IT
+#define HAL_HASHEx_SHA224_Accumulate_End_IT HAL_HASHEx_SHA224_Accmlt_End_IT
+
+#define HAL_HASHEx_SHA256_Accumulate HAL_HASHEx_SHA256_Accmlt
+#define HAL_HASHEx_SHA256_Accumulate_End HAL_HASHEx_SHA256_Accmlt_End
+#define HAL_HASHEx_SHA256_Accumulate_IT HAL_HASHEx_SHA256_Accmlt_IT
+#define HAL_HASHEx_SHA256_Accumulate_End_IT HAL_HASHEx_SHA256_Accmlt_End_IT
+
+#endif /* STM32L4 || STM32F4 || STM32F7 || STM32H7 */
/**
* @}
*/
@@ -1221,6 +1495,13 @@
#endif
#define HAL_ADC_EnableBuffer_Cmd(cmd) (((cmd)==ENABLE) ? HAL_ADCEx_EnableVREFINT() : HAL_ADCEx_DisableVREFINT())
#define HAL_ADC_EnableBufferSensor_Cmd(cmd) (((cmd)==ENABLE) ? HAL_ADCEx_EnableVREFINTTempSensor() : HAL_ADCEx_DisableVREFINTTempSensor())
+#if defined(STM32H7A3xx) || defined(STM32H7B3xx) || defined(STM32H7B0xx) || defined(STM32H7A3xxQ) || defined(STM32H7B3xxQ) || defined(STM32H7B0xxQ)
+#define HAL_EnableSRDomainDBGStopMode HAL_EnableDomain3DBGStopMode
+#define HAL_DisableSRDomainDBGStopMode HAL_DisableDomain3DBGStopMode
+#define HAL_EnableSRDomainDBGStandbyMode HAL_EnableDomain3DBGStandbyMode
+#define HAL_DisableSRDomainDBGStandbyMode HAL_DisableDomain3DBGStandbyMode
+#endif /* STM32H7A3xx || STM32H7B3xx || STM32H7B0xx || STM32H7A3xxQ || STM32H7B3xxQ || STM32H7B0xxQ */
+
/**
* @}
*/
@@ -1250,16 +1531,18 @@
#define HAL_I2CFastModePlusConfig(SYSCFG_I2CFastModePlus, cmd) (((cmd)==ENABLE)? HAL_I2CEx_EnableFastModePlus(SYSCFG_I2CFastModePlus): HAL_I2CEx_DisableFastModePlus(SYSCFG_I2CFastModePlus))
-#if defined(STM32H7) || defined(STM32WB) || defined(STM32G0) || defined(STM32F4) || defined(STM32F7)
+#if defined(STM32H7) || defined(STM32WB) || defined(STM32G0) || defined(STM32F0) || defined(STM32F1) || defined(STM32F2) || defined(STM32F3) || defined(STM32F4) || defined(STM32F7) || defined(STM32L0) || defined(STM32L4) || defined(STM32L5) || defined(STM32G4)
#define HAL_I2C_Master_Sequential_Transmit_IT HAL_I2C_Master_Seq_Transmit_IT
#define HAL_I2C_Master_Sequential_Receive_IT HAL_I2C_Master_Seq_Receive_IT
#define HAL_I2C_Slave_Sequential_Transmit_IT HAL_I2C_Slave_Seq_Transmit_IT
#define HAL_I2C_Slave_Sequential_Receive_IT HAL_I2C_Slave_Seq_Receive_IT
+#endif /* STM32H7 || STM32WB || STM32G0 || STM32F0 || STM32F1 || STM32F2 || STM32F3 || STM32F4 || STM32F7 || STM32L0 || STM32L4 || STM32L5 || STM32G4 */
+#if defined(STM32H7) || defined(STM32WB) || defined(STM32G0) || defined(STM32F4) || defined(STM32F7) || defined(STM32L0) || defined(STM32L4) || defined(STM32L5) || defined(STM32G4)
#define HAL_I2C_Master_Sequential_Transmit_DMA HAL_I2C_Master_Seq_Transmit_DMA
#define HAL_I2C_Master_Sequential_Receive_DMA HAL_I2C_Master_Seq_Receive_DMA
#define HAL_I2C_Slave_Sequential_Transmit_DMA HAL_I2C_Slave_Seq_Transmit_DMA
#define HAL_I2C_Slave_Sequential_Receive_DMA HAL_I2C_Slave_Seq_Receive_DMA
-#endif /* STM32H7 || STM32WB || STM32G0 || STM32F4 || STM32F7 */
+#endif /* STM32H7 || STM32WB || STM32G0 || STM32F4 || STM32F7 || STM32L0 || STM32L4 || STM32L5 || STM32G4 */
#if defined(STM32F4)
#define HAL_FMPI2C_Master_Sequential_Transmit_IT HAL_FMPI2C_Master_Seq_Transmit_IT
@@ -1278,6 +1561,13 @@
/** @defgroup HAL_PWR_Aliased HAL PWR Aliased maintained for legacy purpose
* @{
*/
+
+#if defined(STM32G0)
+#define HAL_PWR_ConfigPVD HAL_PWREx_ConfigPVD
+#define HAL_PWR_EnablePVD HAL_PWREx_EnablePVD
+#define HAL_PWR_DisablePVD HAL_PWREx_DisablePVD
+#define HAL_PWR_PVD_IRQHandler HAL_PWREx_PVD_IRQHandler
+#endif
#define HAL_PWR_PVDConfig HAL_PWR_ConfigPVD
#define HAL_PWR_DisableBkUpReg HAL_PWREx_DisableBkUpReg
#define HAL_PWR_DisableFlashPowerDown HAL_PWREx_DisableFlashPowerDown
@@ -1350,14 +1640,14 @@
#define HAL_TIM_DMAError TIM_DMAError
#define HAL_TIM_DMACaptureCplt TIM_DMACaptureCplt
#define HAL_TIMEx_DMACommutationCplt TIMEx_DMACommutationCplt
-#if defined(STM32H7) || defined(STM32G0) || defined(STM32F7) || defined(STM32F4) || defined(STM32L0)
+#if defined(STM32H7) || defined(STM32G0) || defined(STM32F0) || defined(STM32F1) || defined(STM32F2) || defined(STM32F3) || defined(STM32F4) || defined(STM32F7) || defined(STM32L0) || defined(STM32L4)
#define HAL_TIM_SlaveConfigSynchronization HAL_TIM_SlaveConfigSynchro
#define HAL_TIM_SlaveConfigSynchronization_IT HAL_TIM_SlaveConfigSynchro_IT
#define HAL_TIMEx_CommutationCallback HAL_TIMEx_CommutCallback
#define HAL_TIMEx_ConfigCommutationEvent HAL_TIMEx_ConfigCommutEvent
#define HAL_TIMEx_ConfigCommutationEvent_IT HAL_TIMEx_ConfigCommutEvent_IT
#define HAL_TIMEx_ConfigCommutationEvent_DMA HAL_TIMEx_ConfigCommutEvent_DMA
-#endif /* STM32H7 || STM32G0 || STM32F7 || STM32F4 || STM32L0 */
+#endif /* STM32H7 || STM32G0 || STM32F0 || STM32F1 || STM32F2 || STM32F3 || STM32F4 || STM32F7 || STM32L0 */
/**
* @}
*/
@@ -2476,12 +2766,28 @@
#define __USB_OTG_FS_CLK_DISABLE __HAL_RCC_USB_OTG_FS_CLK_DISABLE
#define __USB_OTG_FS_CLK_ENABLE __HAL_RCC_USB_OTG_FS_CLK_ENABLE
#define __USB_RELEASE_RESET __HAL_RCC_USB_RELEASE_RESET
+
+#if defined(STM32H7)
+#define __HAL_RCC_WWDG_CLK_DISABLE __HAL_RCC_WWDG1_CLK_DISABLE
+#define __HAL_RCC_WWDG_CLK_ENABLE __HAL_RCC_WWDG1_CLK_ENABLE
+#define __HAL_RCC_WWDG_CLK_SLEEP_DISABLE __HAL_RCC_WWDG1_CLK_SLEEP_DISABLE
+#define __HAL_RCC_WWDG_CLK_SLEEP_ENABLE __HAL_RCC_WWDG1_CLK_SLEEP_ENABLE
+
+#define __HAL_RCC_WWDG_FORCE_RESET ((void)0U) /* Not available on the STM32H7*/
+#define __HAL_RCC_WWDG_RELEASE_RESET ((void)0U) /* Not available on the STM32H7*/
+
+
+#define __HAL_RCC_WWDG_IS_CLK_ENABLED __HAL_RCC_WWDG1_IS_CLK_ENABLED
+#define __HAL_RCC_WWDG_IS_CLK_DISABLED __HAL_RCC_WWDG1_IS_CLK_DISABLED
+#endif
+
#define __WWDG_CLK_DISABLE __HAL_RCC_WWDG_CLK_DISABLE
#define __WWDG_CLK_ENABLE __HAL_RCC_WWDG_CLK_ENABLE
#define __WWDG_CLK_SLEEP_DISABLE __HAL_RCC_WWDG_CLK_SLEEP_DISABLE
#define __WWDG_CLK_SLEEP_ENABLE __HAL_RCC_WWDG_CLK_SLEEP_ENABLE
#define __WWDG_FORCE_RESET __HAL_RCC_WWDG_FORCE_RESET
#define __WWDG_RELEASE_RESET __HAL_RCC_WWDG_RELEASE_RESET
+
#define __TIM21_CLK_ENABLE __HAL_RCC_TIM21_CLK_ENABLE
#define __TIM21_CLK_DISABLE __HAL_RCC_TIM21_CLK_DISABLE
#define __TIM21_FORCE_RESET __HAL_RCC_TIM21_FORCE_RESET
@@ -2814,6 +3120,15 @@
#define __WWDG_IS_CLK_ENABLED __HAL_RCC_WWDG_IS_CLK_ENABLED
#define __WWDG_IS_CLK_DISABLED __HAL_RCC_WWDG_IS_CLK_DISABLED
+#if defined(STM32L1)
+#define __HAL_RCC_CRYP_CLK_DISABLE __HAL_RCC_AES_CLK_DISABLE
+#define __HAL_RCC_CRYP_CLK_ENABLE __HAL_RCC_AES_CLK_ENABLE
+#define __HAL_RCC_CRYP_CLK_SLEEP_DISABLE __HAL_RCC_AES_CLK_SLEEP_DISABLE
+#define __HAL_RCC_CRYP_CLK_SLEEP_ENABLE __HAL_RCC_AES_CLK_SLEEP_ENABLE
+#define __HAL_RCC_CRYP_FORCE_RESET __HAL_RCC_AES_FORCE_RESET
+#define __HAL_RCC_CRYP_RELEASE_RESET __HAL_RCC_AES_RELEASE_RESET
+#endif /* STM32L1 */
+
#if defined(STM32F4)
#define __HAL_RCC_SDMMC1_FORCE_RESET __HAL_RCC_SDIO_FORCE_RESET
#define __HAL_RCC_SDMMC1_RELEASE_RESET __HAL_RCC_SDIO_RELEASE_RESET
@@ -2930,7 +3245,7 @@
#if defined(STM32L4)
#define RCC_RTCCLKSOURCE_NO_CLK RCC_RTCCLKSOURCE_NONE
-#elif defined(STM32WB) || defined(STM32G0)
+#elif defined(STM32WB) || defined(STM32G0) || defined(STM32G4) || defined(STM32L5)
#else
#define RCC_RTCCLKSOURCE_NONE RCC_RTCCLKSOURCE_NO_CLK
#endif
@@ -3058,7 +3373,7 @@
/** @defgroup HAL_RTC_Aliased_Macros HAL RTC Aliased Macros maintained for legacy purpose
* @{
*/
-#if defined (STM32G0) || defined (STM32L412xx) || defined (STM32L422xx) || defined (STM32L4P5xx) || defined (STM32L4Q5xx)
+#if defined (STM32G0) || defined (STM32L5) || defined (STM32L412xx) || defined (STM32L422xx) || defined (STM32L4P5xx) || defined (STM32L4Q5xx) || defined (STM32G4)
#else
#define __HAL_RTC_CLEAR_FLAG __HAL_RTC_EXTI_CLEAR_FLAG
#endif
@@ -3174,14 +3489,14 @@
#define SDIO_IRQHandler SDMMC1_IRQHandler
#endif
-#if defined(STM32F7) || defined(STM32F4) || defined(STM32F2)
+#if defined(STM32F7) || defined(STM32F4) || defined(STM32F2) || defined(STM32L4) || defined(STM32H7)
#define HAL_SD_CardCIDTypedef HAL_SD_CardCIDTypeDef
#define HAL_SD_CardCSDTypedef HAL_SD_CardCSDTypeDef
#define HAL_SD_CardStatusTypedef HAL_SD_CardStatusTypeDef
#define HAL_SD_CardStateTypedef HAL_SD_CardStateTypeDef
#endif
-#if defined(STM32H7)
+#if defined(STM32H7) || defined(STM32L5)
#define HAL_MMCEx_Read_DMADoubleBuffer0CpltCallback HAL_MMCEx_Read_DMADoubleBuf0CpltCallback
#define HAL_MMCEx_Read_DMADoubleBuffer1CpltCallback HAL_MMCEx_Read_DMADoubleBuf1CpltCallback
#define HAL_MMCEx_Write_DMADoubleBuffer0CpltCallback HAL_MMCEx_Write_DMADoubleBuf0CpltCallback
@@ -3421,18 +3736,28 @@
/** @defgroup HAL_HRTIM_Aliased_Functions HAL HRTIM Aliased Functions maintained for legacy purpose
* @{
*/
-#if defined (STM32H7) || defined (STM32F3)
-#define HAL_HRTIM_WaveformCounterStart_IT HAL_HRTIM_WaveformCountStart_IT
-#define HAL_HRTIM_WaveformCounterStart_DMA HAL_HRTIM_WaveformCountStart_DMA
-#define HAL_HRTIM_WaveformCounterStart HAL_HRTIM_WaveformCountStart
-#define HAL_HRTIM_WaveformCounterStop_IT HAL_HRTIM_WaveformCountStop_IT
-#define HAL_HRTIM_WaveformCounterStop_DMA HAL_HRTIM_WaveformCountStop_DMA
-#define HAL_HRTIM_WaveformCounterStop HAL_HRTIM_WaveformCountStop
+#if defined (STM32H7) || defined (STM32G4) || defined (STM32F3)
+#define HAL_HRTIM_WaveformCounterStart_IT HAL_HRTIM_WaveformCountStart_IT
+#define HAL_HRTIM_WaveformCounterStart_DMA HAL_HRTIM_WaveformCountStart_DMA
+#define HAL_HRTIM_WaveformCounterStart HAL_HRTIM_WaveformCountStart
+#define HAL_HRTIM_WaveformCounterStop_IT HAL_HRTIM_WaveformCountStop_IT
+#define HAL_HRTIM_WaveformCounterStop_DMA HAL_HRTIM_WaveformCountStop_DMA
+#define HAL_HRTIM_WaveformCounterStop HAL_HRTIM_WaveformCountStop
#endif
/**
* @}
*/
+/** @defgroup HAL_QSPI_Aliased_Macros HAL QSPI Aliased Macros maintained for legacy purpose
+ * @{
+ */
+#if defined (STM32L4) || defined (STM32F4) || defined (STM32F7)
+#define HAL_QPSI_TIMEOUT_DEFAULT_VALUE HAL_QSPI_TIMEOUT_DEFAULT_VALUE
+#endif /* STM32L4 || STM32F4 || STM32F7 */
+/**
+ * @}
+ */
+
/** @defgroup HAL_PPP_Aliased_Macros HAL PPP Aliased Macros maintained for legacy purpose
* @{
*/
diff --git a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_GCC/Boot/lib/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_exti.h b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_GCC/Boot/lib/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_exti.h
index bf82a38e..c9f137c1 100644
--- a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_GCC/Boot/lib/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_exti.h
+++ b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_GCC/Boot/lib/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_exti.h
@@ -18,8 +18,8 @@
*/
/* Define to prevent recursive inclusion -------------------------------------*/
-#ifndef __STM32F7xx_HAL_EXTI_H
-#define __STM32F7xx_HAL_EXTI_H
+#ifndef STM32F7xx_HAL_EXTI_H
+#define STM32F7xx_HAL_EXTI_H
#ifdef __cplusplus
extern "C" {
@@ -38,14 +38,13 @@ extern "C" {
*/
/* Exported types ------------------------------------------------------------*/
+
/** @defgroup EXTI_Exported_Types EXTI Exported Types
* @{
*/
typedef enum
{
- HAL_EXTI_COMMON_CB_ID = 0x00U,
- HAL_EXTI_RISING_CB_ID = 0x01U,
- HAL_EXTI_FALLING_CB_ID = 0x02U,
+ HAL_EXTI_COMMON_CB_ID = 0x00U
} EXTI_CallbackIDTypeDef;
/**
@@ -68,6 +67,9 @@ typedef struct
This parameter can be a combination of @ref EXTI_Mode */
uint32_t Trigger; /*!< The Exti Trigger to be configured. This parameter
can be a value of @ref EXTI_Trigger */
+ uint32_t GPIOSel; /*!< The Exti GPIO multiplexer selection to be configured.
+ This parameter is only possible for line 0 to 15. It
+ can be a value of @ref EXTI_GPIOSel */
} EXTI_ConfigTypeDef;
/**
@@ -82,48 +84,36 @@ typedef struct
/** @defgroup EXTI_Line EXTI Line
* @{
*/
-#define EXTI_LINE_0 EXTI_IMR_IM0 /*!< External interrupt line 0 */
-#define EXTI_LINE_1 EXTI_IMR_IM1 /*!< External interrupt line 1 */
-#define EXTI_LINE_2 EXTI_IMR_IM2 /*!< External interrupt line 2 */
-#define EXTI_LINE_3 EXTI_IMR_IM3 /*!< External interrupt line 3 */
-#define EXTI_LINE_4 EXTI_IMR_IM4 /*!< External interrupt line 4 */
-#define EXTI_LINE_5 EXTI_IMR_IM5 /*!< External interrupt line 5 */
-#define EXTI_LINE_6 EXTI_IMR_IM6 /*!< External interrupt line 6 */
-#define EXTI_LINE_7 EXTI_IMR_IM7 /*!< External interrupt line 7 */
-#define EXTI_LINE_8 EXTI_IMR_IM8 /*!< External interrupt line 8 */
-#define EXTI_LINE_9 EXTI_IMR_IM9 /*!< External interrupt line 9 */
-#define EXTI_LINE_10 EXTI_IMR_IM10 /*!< External interrupt line 10 */
-#define EXTI_LINE_11 EXTI_IMR_IM11 /*!< External interrupt line 11 */
-#define EXTI_LINE_12 EXTI_IMR_IM12 /*!< External interrupt line 12 */
-#define EXTI_LINE_13 EXTI_IMR_IM13 /*!< External interrupt line 13 */
-#define EXTI_LINE_14 EXTI_IMR_IM14 /*!< External interrupt line 14 */
-#define EXTI_LINE_15 EXTI_IMR_IM15 /*!< External interrupt line 15 */
-#if defined(EXTI_IMR_IM16)
-#define EXTI_LINE_16 EXTI_IMR_IM16 /*!< External interrupt line 16 Connected to the PVD Output */
-#endif /* EXTI_IMR_IM16 */
-#if defined(EXTI_IMR_IM17)
-#define EXTI_LINE_17 EXTI_IMR_IM17 /*!< External interrupt line 17 Connected to the RTC Alarm event */
-#endif /* EXTI_IMR_IM17 */
-#if defined(EXTI_IMR_IM18)
-#define EXTI_LINE_18 EXTI_IMR_IM18 /*!< External interrupt line 18 Connected to the USB OTG FS Wakeup from suspend event */
-#endif /* EXTI_IMR_IM18 */
-#if defined(EXTI_IMR_IM19)
-#define EXTI_LINE_19 EXTI_IMR_IM19 /*!< External interrupt line 19 Connected to the Ethernet Wakeup event */
-#endif /* EXTI_IMR_IM19 */
-#if defined(EXTI_IMR_IM20)
-#define EXTI_LINE_20 EXTI_IMR_IM20 /*!< External interrupt line 20 Connected to the USB OTG HS (configured in FS) Wakeup event */
-#endif /* EXTI_IMR_IM20 */
-#if defined(EXTI_IMR_IM21)
-#define EXTI_LINE_21 EXTI_IMR_IM21 /*!< External interrupt line 21 Connected to the RTC Tamper and Time Stamp events */
-#endif /* EXTI_IMR_IM21 */
-#if defined(EXTI_IMR_IM22)
-#define EXTI_LINE_22 EXTI_IMR_IM22 /*!< External interrupt line 22 Connected to the RTC Wakeup event */
-#endif /* EXTI_IMR_IM22 */
-#if defined(EXTI_IMR_IM23)
-#define EXTI_LINE_23 EXTI_IMR_IM23 /*!< External interrupt line 23 Connected to the LPTIM Wakeup event */
-#endif /* EXTI_IMR_IM23 */
+#define EXTI_LINE_0 (EXTI_GPIO | 0x00u) /*!< External interrupt line 0 */
+#define EXTI_LINE_1 (EXTI_GPIO | 0x01u) /*!< External interrupt line 1 */
+#define EXTI_LINE_2 (EXTI_GPIO | 0x02u) /*!< External interrupt line 2 */
+#define EXTI_LINE_3 (EXTI_GPIO | 0x03u) /*!< External interrupt line 3 */
+#define EXTI_LINE_4 (EXTI_GPIO | 0x04u) /*!< External interrupt line 4 */
+#define EXTI_LINE_5 (EXTI_GPIO | 0x05u) /*!< External interrupt line 5 */
+#define EXTI_LINE_6 (EXTI_GPIO | 0x06u) /*!< External interrupt line 6 */
+#define EXTI_LINE_7 (EXTI_GPIO | 0x07u) /*!< External interrupt line 7 */
+#define EXTI_LINE_8 (EXTI_GPIO | 0x08u) /*!< External interrupt line 8 */
+#define EXTI_LINE_9 (EXTI_GPIO | 0x09u) /*!< External interrupt line 9 */
+#define EXTI_LINE_10 (EXTI_GPIO | 0x0Au) /*!< External interrupt line 10 */
+#define EXTI_LINE_11 (EXTI_GPIO | 0x0Bu) /*!< External interrupt line 11 */
+#define EXTI_LINE_12 (EXTI_GPIO | 0x0Cu) /*!< External interrupt line 12 */
+#define EXTI_LINE_13 (EXTI_GPIO | 0x0Du) /*!< External interrupt line 13 */
+#define EXTI_LINE_14 (EXTI_GPIO | 0x0Eu) /*!< External interrupt line 14 */
+#define EXTI_LINE_15 (EXTI_GPIO | 0x0Fu) /*!< External interrupt line 15 */
+#define EXTI_LINE_16 (EXTI_CONFIG | 0x10u) /*!< External interrupt line 16 Connected to the PVD Output */
+#define EXTI_LINE_17 (EXTI_CONFIG | 0x11u) /*!< External interrupt line 17 Connected to the RTC Alarm event */
+#define EXTI_LINE_18 (EXTI_CONFIG | 0x12u) /*!< External interrupt line 18 Connected to the USB OTG FS Wakeup from suspend event */
+#if defined(ETH)
+#define EXTI_LINE_19 (EXTI_CONFIG | 0x13u) /*!< External interrupt line 19 Connected to the Ethernet Wakeup event */
+#else
+#define EXTI_LINE_19 (EXTI_RESERVED | 0x13u) /*!< No interrupt supported in this line */
+#endif /* ETH */
+#define EXTI_LINE_20 (EXTI_CONFIG | 0x14u) /*!< External interrupt line 20 Connected to the USB OTG HS (configured in FS) Wakeup event */
+#define EXTI_LINE_21 (EXTI_CONFIG | 0x15u) /*!< External interrupt line 21 Connected to the RTC Tamper and Time Stamp events */
+#define EXTI_LINE_22 (EXTI_CONFIG | 0x16u) /*!< External interrupt line 22 Connected to the RTC Wakeup event */
+#define EXTI_LINE_23 (EXTI_CONFIG | 0x17u) /*!< External interrupt line 23 Connected to the LPTIM Wakeup event */
#if defined(EXTI_IMR_IM24)
-#define EXTI_LINE_24 EXTI_IMR_IM24 /*!< External interrupt line 24 Connected to the MDIO Slave global Interrupt Wakeup event */
+#define EXTI_LINE_24 (EXTI_CONFIG | 0x18u) /*!< External interrupt line 24 Connected to the MDIO Slave global Interrupt Wakeup event */
#endif /* EXTI_IMR_IM24 */
/**
* @}
@@ -142,6 +132,7 @@ typedef struct
/** @defgroup EXTI_Trigger EXTI Trigger
* @{
*/
+
#define EXTI_TRIGGER_NONE 0x00000000u
#define EXTI_TRIGGER_RISING 0x00000001u
#define EXTI_TRIGGER_FALLING 0x00000002u
@@ -150,6 +141,24 @@ typedef struct
* @}
*/
+/** @defgroup EXTI_GPIOSel EXTI GPIOSel
+ * @brief
+ * @{
+ */
+#define EXTI_GPIOA 0x00000000u
+#define EXTI_GPIOB 0x00000001u
+#define EXTI_GPIOC 0x00000002u
+#define EXTI_GPIOD 0x00000003u
+#define EXTI_GPIOE 0x00000004u
+#define EXTI_GPIOF 0x00000005u
+#define EXTI_GPIOG 0x00000006u
+#define EXTI_GPIOH 0x00000007u
+#define EXTI_GPIOI 0x00000008u
+#define EXTI_GPIOJ 0x00000009u
+#if defined (GPIOK)
+#define EXTI_GPIOK 0x0000000Au
+#endif /* GPIOK */
+
/**
* @}
*/
@@ -167,6 +176,20 @@ typedef struct
/** @defgroup EXTI_Private_Constants EXTI Private Constants
* @{
*/
+/**
+ * @brief EXTI Line property definition
+ */
+#define EXTI_PROPERTY_SHIFT 24u
+#define EXTI_CONFIG (0x02uL << EXTI_PROPERTY_SHIFT)
+#define EXTI_GPIO ((0x04uL << EXTI_PROPERTY_SHIFT) | EXTI_CONFIG)
+#define EXTI_RESERVED (0x08uL << EXTI_PROPERTY_SHIFT)
+#define EXTI_PROPERTY_MASK (EXTI_CONFIG | EXTI_GPIO)
+
+/**
+ * @brief EXTI bit usage
+ */
+#define EXTI_PIN_MASK 0x0000001Fu
+
/**
* @brief EXTI Mask for interrupt & event mode
*/
@@ -175,12 +198,17 @@ typedef struct
/**
* @brief EXTI Mask for trigger possibilities
*/
-#define EXTI_TRIGGER_MASK (EXTI_TRIGGER_RISING | EXTI_TRIGGER_FALLING | EXTI_TRIGGER_RISING_FALLING)
+#define EXTI_TRIGGER_MASK (EXTI_TRIGGER_RISING | EXTI_TRIGGER_FALLING)
/**
* @brief EXTI Line number
*/
+#if defined(EXTI_IMR_IM24)
#define EXTI_LINE_NB 25u
+#else
+#define EXTI_LINE_NB 24u
+#endif /* EXTI_IMR_IM24 */
+
/**
* @}
@@ -190,16 +218,47 @@ typedef struct
/** @defgroup EXTI_Private_Macros EXTI Private Macros
* @{
*/
-#define IS_EXTI_LINE(__LINE__) ((((__LINE__) & ~EXTI_IMR_IM) == 0x00U) && (__LINE__))
+#define IS_EXTI_LINE(__LINE__) ((((__LINE__) & ~(EXTI_PROPERTY_MASK | EXTI_PIN_MASK)) == 0x00u) && \
+ ((((__LINE__) & EXTI_PROPERTY_MASK) == EXTI_CONFIG) || \
+ (((__LINE__) & EXTI_PROPERTY_MASK) == EXTI_GPIO)) && \
+ (((__LINE__) & EXTI_PIN_MASK) < EXTI_LINE_NB))
-#define IS_EXTI_MODE(__LINE__) ((((__LINE__) & ~EXTI_MODE_MASK) == 0x00U))
+#define IS_EXTI_MODE(__LINE__) ((((__LINE__) & EXTI_MODE_MASK) != 0x00u) && \
+ (((__LINE__) & ~EXTI_MODE_MASK) == 0x00u))
-#define IS_EXTI_TRIGGER(__LINE__) (((__LINE__) & ~EXTI_TRIGGER_MASK) == 0x00U)
+#define IS_EXTI_TRIGGER(__LINE__) (((__LINE__) & ~EXTI_TRIGGER_MASK) == 0x00u)
#define IS_EXTI_PENDING_EDGE(__LINE__) (((__LINE__) == EXTI_TRIGGER_FALLING) || \
((__LINE__) == EXTI_TRIGGER_RISING) || \
((__LINE__) == EXTI_TRIGGER_RISING_FALLING))
+#define IS_EXTI_CONFIG_LINE(__LINE__) (((__LINE__) & EXTI_CONFIG) != 0x00u)
+
+#if defined (GPIOK)
+#define IS_EXTI_GPIO_PORT(__PORT__) (((__PORT__) == EXTI_GPIOA) || \
+ ((__PORT__) == EXTI_GPIOB) || \
+ ((__PORT__) == EXTI_GPIOC) || \
+ ((__PORT__) == EXTI_GPIOD) || \
+ ((__PORT__) == EXTI_GPIOE) || \
+ ((__PORT__) == EXTI_GPIOF) || \
+ ((__PORT__) == EXTI_GPIOG) || \
+ ((__PORT__) == EXTI_GPIOH) || \
+ ((__PORT__) == EXTI_GPIOI) || \
+ ((__PORT__) == EXTI_GPIOJ) || \
+ ((__PORT__) == EXTI_GPIOK))
+#else
+#define IS_EXTI_GPIO_PORT(__PORT__) (((__PORT__) == EXTI_GPIOA) || \
+ ((__PORT__) == EXTI_GPIOB) || \
+ ((__PORT__) == EXTI_GPIOC) || \
+ ((__PORT__) == EXTI_GPIOD) || \
+ ((__PORT__) == EXTI_GPIOE) || \
+ ((__PORT__) == EXTI_GPIOF) || \
+ ((__PORT__) == EXTI_GPIOG) || \
+ ((__PORT__) == EXTI_GPIOH) || \
+ ((__PORT__) == EXTI_GPIOI) || \
+ ((__PORT__) == EXTI_GPIOJ))
+#endif /* GPIOK */
+
#define IS_EXTI_GPIO_PIN(__PIN__) ((__PIN__) < 16U)
/**
* @}
@@ -255,6 +314,6 @@ void HAL_EXTI_GenerateSWI(EXTI_HandleTypeDef *hexti);
}
#endif
-#endif /* __STM32F7xx_HAL_EXTI_H */
+#endif /* STM32F7xx_HAL_EXTI_H */
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff --git a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_GCC/Boot/lib/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_gpio.h b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_GCC/Boot/lib/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_gpio.h
index 3d9de6e2..08e0acb2 100644
--- a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_GCC/Boot/lib/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_gpio.h
+++ b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_GCC/Boot/lib/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_gpio.h
@@ -262,7 +262,7 @@ void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin);
* @{
*/
#define IS_GPIO_PIN_ACTION(ACTION) (((ACTION) == GPIO_PIN_RESET) || ((ACTION) == GPIO_PIN_SET))
-#define IS_GPIO_PIN(__PIN__) ((((__PIN__) & GPIO_PIN_MASK) != (uint32_t)0x00))
+#define IS_GPIO_PIN(__PIN__) ((((uint32_t)(__PIN__) & GPIO_PIN_MASK) != 0x00U))
#define IS_GPIO_MODE(MODE) (((MODE) == GPIO_MODE_INPUT) ||\
((MODE) == GPIO_MODE_OUTPUT_PP) ||\
((MODE) == GPIO_MODE_OUTPUT_OD) ||\
diff --git a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_GCC/Boot/lib/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_i2c_ex.h b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_GCC/Boot/lib/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_i2c_ex.h
index d5d75314..83037894 100644
--- a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_GCC/Boot/lib/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_i2c_ex.h
+++ b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_GCC/Boot/lib/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_i2c_ex.h
@@ -167,6 +167,9 @@ void HAL_I2CEx_DisableFastModePlus(uint32_t ConfigFastModePlus);
(((__CONFIG__) & I2C_FASTMODEPLUS_PB9) == I2C_FASTMODEPLUS_PB9) || \
(((__CONFIG__) & I2C_FASTMODEPLUS_I2C1) == I2C_FASTMODEPLUS_I2C1))
#endif /* SYSCFG_PMC_I2C1_FMP && SYSCFG_PMC_I2C2_FMP && SYSCFG_PMC_I2C3_FMP && SYSCFG_PMC_I2C4_FMP */
+
+
+
/**
* @}
*/
diff --git a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_GCC/Boot/lib/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_pcd.h b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_GCC/Boot/lib/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_pcd.h
index 0633bb22..2650b739 100644
--- a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_GCC/Boot/lib/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_pcd.h
+++ b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_GCC/Boot/lib/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_pcd.h
@@ -96,16 +96,16 @@ typedef struct __PCD_HandleTypeDef
typedef struct
#endif /* USE_HAL_PCD_REGISTER_CALLBACKS */
{
- PCD_TypeDef *Instance; /*!< Register base address */
- PCD_InitTypeDef Init; /*!< PCD required parameters */
- __IO uint8_t USB_Address; /*!< USB Address */
- PCD_EPTypeDef IN_ep[16]; /*!< IN endpoint parameters */
- PCD_EPTypeDef OUT_ep[16]; /*!< OUT endpoint parameters */
- HAL_LockTypeDef Lock; /*!< PCD peripheral status */
- __IO PCD_StateTypeDef State; /*!< PCD communication state */
- __IO uint32_t ErrorCode; /*!< PCD Error code */
- uint32_t Setup[12]; /*!< Setup packet buffer */
- PCD_LPM_StateTypeDef LPM_State; /*!< LPM State */
+ PCD_TypeDef *Instance; /*!< Register base address */
+ PCD_InitTypeDef Init; /*!< PCD required parameters */
+ __IO uint8_t USB_Address; /*!< USB Address */
+ PCD_EPTypeDef IN_ep[16]; /*!< IN endpoint parameters */
+ PCD_EPTypeDef OUT_ep[16]; /*!< OUT endpoint parameters */
+ HAL_LockTypeDef Lock; /*!< PCD peripheral status */
+ __IO PCD_StateTypeDef State; /*!< PCD communication state */
+ __IO uint32_t ErrorCode; /*!< PCD Error code */
+ uint32_t Setup[12]; /*!< Setup packet buffer */
+ PCD_LPM_StateTypeDef LPM_State; /*!< LPM State */
uint32_t BESL;
@@ -148,9 +148,9 @@ typedef struct
/** @defgroup PCD_Speed PCD Speed
* @{
*/
-#define PCD_SPEED_HIGH 0U
-#define PCD_SPEED_HIGH_IN_FULL 1U
-#define PCD_SPEED_FULL 2U
+#define PCD_SPEED_HIGH USBD_HS_SPEED
+#define PCD_SPEED_HIGH_IN_FULL USBD_HSINFS_SPEED
+#define PCD_SPEED_FULL USBD_FS_SPEED
/**
* @}
*/
@@ -207,20 +207,20 @@ typedef struct
#define __HAL_USB_OTG_HS_WAKEUP_EXTI_GET_FLAG() EXTI->PR & (USB_OTG_HS_WAKEUP_EXTI_LINE)
#define __HAL_USB_OTG_HS_WAKEUP_EXTI_CLEAR_FLAG() EXTI->PR = (USB_OTG_HS_WAKEUP_EXTI_LINE)
-#define __HAL_USB_OTG_HS_WAKEUP_EXTI_ENABLE_RISING_EDGE() \
- do { \
+#define __HAL_USB_OTG_HS_WAKEUP_EXTI_ENABLE_RISING_EDGE() \
+ do { \
EXTI->FTSR &= ~(USB_OTG_HS_WAKEUP_EXTI_LINE); \
- EXTI->RTSR |= USB_OTG_HS_WAKEUP_EXTI_LINE; \
+ EXTI->RTSR |= USB_OTG_HS_WAKEUP_EXTI_LINE; \
} while(0U)
#define __HAL_USB_OTG_FS_WAKEUP_EXTI_ENABLE_IT() EXTI->IMR |= USB_OTG_FS_WAKEUP_EXTI_LINE
#define __HAL_USB_OTG_FS_WAKEUP_EXTI_DISABLE_IT() EXTI->IMR &= ~(USB_OTG_FS_WAKEUP_EXTI_LINE)
#define __HAL_USB_OTG_FS_WAKEUP_EXTI_GET_FLAG() EXTI->PR & (USB_OTG_FS_WAKEUP_EXTI_LINE)
#define __HAL_USB_OTG_FS_WAKEUP_EXTI_CLEAR_FLAG() EXTI->PR = USB_OTG_FS_WAKEUP_EXTI_LINE
-#define __HAL_USB_OTG_FS_WAKEUP_EXTI_ENABLE_RISING_EDGE() \
- do { \
+#define __HAL_USB_OTG_FS_WAKEUP_EXTI_ENABLE_RISING_EDGE() \
+ do { \
EXTI->FTSR &= ~(USB_OTG_FS_WAKEUP_EXTI_LINE); \
- EXTI->RTSR |= USB_OTG_FS_WAKEUP_EXTI_LINE; \
+ EXTI->RTSR |= USB_OTG_FS_WAKEUP_EXTI_LINE; \
} while(0U)
#endif /* defined (USB_OTG_FS) || defined (USB_OTG_HS) */
@@ -256,7 +256,7 @@ typedef enum
HAL_PCD_SUSPEND_CB_ID = 0x04, /*!< USB PCD Suspend callback ID */
HAL_PCD_RESUME_CB_ID = 0x05, /*!< USB PCD Resume callback ID */
HAL_PCD_CONNECT_CB_ID = 0x06, /*!< USB PCD Connect callback ID */
- HAL_PCD_DISCONNECT_CB_ID = 0x07, /*!< USB PCD Disconnect callback ID */
+ HAL_PCD_DISCONNECT_CB_ID = 0x07, /*!< USB PCD Disconnect callback ID */
HAL_PCD_MSPINIT_CB_ID = 0x08, /*!< USB PCD MspInit callback ID */
HAL_PCD_MSPDEINIT_CB_ID = 0x09 /*!< USB PCD MspDeInit callback ID */
@@ -371,14 +371,6 @@ PCD_StateTypeDef HAL_PCD_GetState(PCD_HandleTypeDef *hpcd);
* @{
*/
#if defined (USB_OTG_FS) || defined (USB_OTG_HS)
-#define USB_OTG_FS_WAKEUP_EXTI_RISING_EDGE 0x08U
-#define USB_OTG_FS_WAKEUP_EXTI_FALLING_EDGE 0x0CU
-#define USB_OTG_FS_WAKEUP_EXTI_RISING_FALLING_EDGE 0x10U
-
-#define USB_OTG_HS_WAKEUP_EXTI_RISING_EDGE 0x08U
-#define USB_OTG_HS_WAKEUP_EXTI_FALLING_EDGE 0x0CU
-#define USB_OTG_HS_WAKEUP_EXTI_RISING_FALLING_EDGE 0x10U
-
#define USB_OTG_FS_WAKEUP_EXTI_LINE (0x1U << 18) /*!< USB FS EXTI Line WakeUp Interrupt */
#define USB_OTG_HS_WAKEUP_EXTI_LINE (0x1U << 20) /*!< USB HS EXTI Line WakeUp Interrupt */
#endif /* defined (USB_OTG_FS) || defined (USB_OTG_HS) */
diff --git a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_GCC/Boot/lib/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_tim.h b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_GCC/Boot/lib/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_tim.h
index 6a29ae50..ab067a59 100644
--- a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_GCC/Boot/lib/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_tim.h
+++ b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_GCC/Boot/lib/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_tim.h
@@ -167,7 +167,7 @@ typedef struct
This parameter can be a value of @ref TIM_Encoder_Mode */
uint32_t IC1Polarity; /*!< Specifies the active edge of the input signal.
- This parameter can be a value of @ref TIM_Input_Capture_Polarity */
+ This parameter can be a value of @ref TIM_Encoder_Input_Polarity */
uint32_t IC1Selection; /*!< Specifies the input.
This parameter can be a value of @ref TIM_Input_Capture_Selection */
@@ -179,7 +179,7 @@ typedef struct
This parameter can be a number between Min_Data = 0x0 and Max_Data = 0xF */
uint32_t IC2Polarity; /*!< Specifies the active edge of the input signal.
- This parameter can be a value of @ref TIM_Input_Capture_Polarity */
+ This parameter can be a value of @ref TIM_Encoder_Input_Polarity */
uint32_t IC2Selection; /*!< Specifies the input.
This parameter can be a value of @ref TIM_Input_Capture_Selection */
@@ -235,7 +235,12 @@ typedef struct
uint32_t MasterOutputTrigger2; /*!< Trigger output2 (TRGO2) selection
This parameter can be a value of @ref TIM_Master_Mode_Selection_2 */
uint32_t MasterSlaveMode; /*!< Master/slave mode selection
- This parameter can be a value of @ref TIM_Master_Slave_Mode */
+ This parameter can be a value of @ref TIM_Master_Slave_Mode
+ @note When the Master/slave mode is enabled, the effect of
+ an event on the trigger input (TRGI) is delayed to allow a
+ perfect synchronization between the current timer and its
+ slaves (through TRGO). It is not mandatory in case of timer
+ synchronization mode. */
} TIM_MasterConfigTypeDef;
/**
@@ -518,6 +523,15 @@ typedef void (*pTIM_CallbackTypeDef)(TIM_HandleTypeDef *htim); /*!< pointer to
* @}
*/
+/** @defgroup TIM_Update_Interrupt_Flag_Remap TIM Update Interrupt Flag Remap
+ * @{
+ */
+#define TIM_UIFREMAP_DISABLE 0x00000000U /*!< Update interrupt flag remap disabled */
+#define TIM_UIFREMAP_ENABLE TIM_CR1_UIFREMAP /*!< Update interrupt flag remap enabled */
+/**
+ * @}
+ */
+
/** @defgroup TIM_ClockDivision TIM Clock Division
* @{
*/
@@ -611,6 +625,15 @@ typedef void (*pTIM_CallbackTypeDef)(TIM_HandleTypeDef *htim); /*!< pointer to
* @}
*/
+/** @defgroup TIM_Encoder_Input_Polarity TIM Encoder Input Polarity
+ * @{
+ */
+#define TIM_ENCODERINPUTPOLARITY_RISING TIM_INPUTCHANNELPOLARITY_RISING /*!< Encoder input with rising edge polarity */
+#define TIM_ENCODERINPUTPOLARITY_FALLING TIM_INPUTCHANNELPOLARITY_FALLING /*!< Encoder input with falling edge polarity */
+/**
+ * @}
+ */
+
/** @defgroup TIM_Input_Capture_Selection TIM Input Capture Selection
* @{
*/
@@ -1119,15 +1142,15 @@ typedef void (*pTIM_CallbackTypeDef)(TIM_HandleTypeDef *htim); /*!< pointer to
* @retval None
*/
#define __HAL_TIM_DISABLE(__HANDLE__) \
- do { \
- if (((__HANDLE__)->Instance->CCER & TIM_CCER_CCxE_MASK) == 0UL) \
- { \
- if(((__HANDLE__)->Instance->CCER & TIM_CCER_CCxNE_MASK) == 0UL) \
- { \
- (__HANDLE__)->Instance->CR1 &= ~(TIM_CR1_CEN); \
- } \
- } \
- } while(0)
+ do { \
+ if (((__HANDLE__)->Instance->CCER & TIM_CCER_CCxE_MASK) == 0UL) \
+ { \
+ if(((__HANDLE__)->Instance->CCER & TIM_CCER_CCxNE_MASK) == 0UL) \
+ { \
+ (__HANDLE__)->Instance->CR1 &= ~(TIM_CR1_CEN); \
+ } \
+ } \
+ } while(0)
/**
* @brief Disable the TIM main Output.
@@ -1136,15 +1159,15 @@ typedef void (*pTIM_CallbackTypeDef)(TIM_HandleTypeDef *htim); /*!< pointer to
* @note The Main Output Enable of a timer instance is disabled only if all the CCx and CCxN channels have been disabled
*/
#define __HAL_TIM_MOE_DISABLE(__HANDLE__) \
- do { \
- if (((__HANDLE__)->Instance->CCER & TIM_CCER_CCxE_MASK) == 0UL) \
- { \
- if(((__HANDLE__)->Instance->CCER & TIM_CCER_CCxNE_MASK) == 0UL) \
- { \
- (__HANDLE__)->Instance->BDTR &= ~(TIM_BDTR_MOE); \
- } \
- } \
- } while(0)
+ do { \
+ if (((__HANDLE__)->Instance->CCER & TIM_CCER_CCxE_MASK) == 0UL) \
+ { \
+ if(((__HANDLE__)->Instance->CCER & TIM_CCER_CCxNE_MASK) == 0UL) \
+ { \
+ (__HANDLE__)->Instance->BDTR &= ~(TIM_BDTR_MOE); \
+ } \
+ } \
+ } while(0)
/**
* @brief Disable the TIM main Output.
@@ -1279,7 +1302,8 @@ typedef void (*pTIM_CallbackTypeDef)(TIM_HandleTypeDef *htim); /*!< pointer to
* @arg TIM_IT_BREAK: Break interrupt
* @retval The state of TIM_IT (SET or RESET).
*/
-#define __HAL_TIM_GET_IT_SOURCE(__HANDLE__, __INTERRUPT__) ((((__HANDLE__)->Instance->DIER & (__INTERRUPT__)) == (__INTERRUPT__)) ? SET : RESET)
+#define __HAL_TIM_GET_IT_SOURCE(__HANDLE__, __INTERRUPT__) ((((__HANDLE__)->Instance->DIER & (__INTERRUPT__)) \
+ == (__INTERRUPT__)) ? SET : RESET)
/** @brief Clear the TIM interrupt pending bits.
* @param __HANDLE__ TIM handle
@@ -1297,6 +1321,31 @@ typedef void (*pTIM_CallbackTypeDef)(TIM_HandleTypeDef *htim); /*!< pointer to
*/
#define __HAL_TIM_CLEAR_IT(__HANDLE__, __INTERRUPT__) ((__HANDLE__)->Instance->SR = ~(__INTERRUPT__))
+/**
+ * @brief Force a continuous copy of the update interrupt flag (UIF) into the timer counter register (bit 31).
+ * @note This allows both the counter value and a potential roll-over condition signalled by the UIFCPY flag to be read in an atomic way.
+ * @param __HANDLE__ TIM handle.
+ * @retval None
+mode.
+ */
+#define __HAL_TIM_UIFREMAP_ENABLE(__HANDLE__) (((__HANDLE__)->Instance->CR1 |= TIM_CR1_UIFREMAP))
+
+/**
+ * @brief Disable update interrupt flag (UIF) remapping.
+ * @param __HANDLE__ TIM handle.
+ * @retval None
+mode.
+ */
+#define __HAL_TIM_UIFREMAP_DISABLE(__HANDLE__) (((__HANDLE__)->Instance->CR1 &= ~TIM_CR1_UIFREMAP))
+
+/**
+ * @brief Get update interrupt flag (UIF) copy status.
+ * @param __COUNTER__ Counter value.
+ * @retval The state of UIFCPY (TRUE or FALSE).
+mode.
+ */
+#define __HAL_TIM_GET_UIFCPY(__COUNTER__) (((__COUNTER__) & (TIM_CNT_UIFCPY)) == (TIM_CNT_UIFCPY))
+
/**
* @brief Indicates whether or not the TIM Counter is used as downcounter.
* @param __HANDLE__ TIM handle.
@@ -1316,6 +1365,8 @@ mode.
/**
* @brief Set the TIM Counter Register value on runtime.
+ * Note Please check if the bit 31 of CNT register is used as UIF copy or not, this may affect the counter range in case of 32 bits counter TIM instance.
+ * Bit 31 of CNT can be enabled/disabled using __HAL_TIM_UIFREMAP_ENABLE()/__HAL_TIM_UIFREMAP_DISABLE() macros.
* @param __HANDLE__ TIM handle.
* @param __COUNTER__ specifies the Counter register new value.
* @retval None
@@ -1327,8 +1378,7 @@ mode.
* @param __HANDLE__ TIM handle.
* @retval 16-bit or 32-bit value of the timer counter register (TIMx_CNT)
*/
-#define __HAL_TIM_GET_COUNTER(__HANDLE__) \
- ((__HANDLE__)->Instance->CNT)
+#define __HAL_TIM_GET_COUNTER(__HANDLE__) ((__HANDLE__)->Instance->CNT)
/**
* @brief Set the TIM Autoreload Register value on runtime without calling another time any Init function.
@@ -1337,18 +1387,17 @@ mode.
* @retval None
*/
#define __HAL_TIM_SET_AUTORELOAD(__HANDLE__, __AUTORELOAD__) \
- do{ \
- (__HANDLE__)->Instance->ARR = (__AUTORELOAD__); \
- (__HANDLE__)->Init.Period = (__AUTORELOAD__); \
- } while(0)
+ do{ \
+ (__HANDLE__)->Instance->ARR = (__AUTORELOAD__); \
+ (__HANDLE__)->Init.Period = (__AUTORELOAD__); \
+ } while(0)
/**
* @brief Get the TIM Autoreload Register value on runtime.
* @param __HANDLE__ TIM handle.
* @retval 16-bit or 32-bit value of the timer auto-reload register(TIMx_ARR)
*/
-#define __HAL_TIM_GET_AUTORELOAD(__HANDLE__) \
- ((__HANDLE__)->Instance->ARR)
+#define __HAL_TIM_GET_AUTORELOAD(__HANDLE__) ((__HANDLE__)->Instance->ARR)
/**
* @brief Set the TIM Clock Division value on runtime without calling another time any Init function.
@@ -1361,11 +1410,11 @@ mode.
* @retval None
*/
#define __HAL_TIM_SET_CLOCKDIVISION(__HANDLE__, __CKD__) \
- do{ \
- (__HANDLE__)->Instance->CR1 &= (~TIM_CR1_CKD); \
- (__HANDLE__)->Instance->CR1 |= (__CKD__); \
- (__HANDLE__)->Init.ClockDivision = (__CKD__); \
- } while(0)
+ do{ \
+ (__HANDLE__)->Instance->CR1 &= (~TIM_CR1_CKD); \
+ (__HANDLE__)->Instance->CR1 |= (__CKD__); \
+ (__HANDLE__)->Init.ClockDivision = (__CKD__); \
+ } while(0)
/**
* @brief Get the TIM Clock Division value on runtime.
@@ -1375,8 +1424,7 @@ mode.
* @arg TIM_CLOCKDIVISION_DIV2: tDTS=2*tCK_INT
* @arg TIM_CLOCKDIVISION_DIV4: tDTS=4*tCK_INT
*/
-#define __HAL_TIM_GET_CLOCKDIVISION(__HANDLE__) \
- ((__HANDLE__)->Instance->CR1 & TIM_CR1_CKD)
+#define __HAL_TIM_GET_CLOCKDIVISION(__HANDLE__) ((__HANDLE__)->Instance->CR1 & TIM_CR1_CKD)
/**
* @brief Set the TIM Input Capture prescaler on runtime without calling another time HAL_TIM_IC_ConfigChannel() function.
@@ -1396,10 +1444,10 @@ mode.
* @retval None
*/
#define __HAL_TIM_SET_ICPRESCALER(__HANDLE__, __CHANNEL__, __ICPSC__) \
- do{ \
- TIM_RESET_ICPRESCALERVALUE((__HANDLE__), (__CHANNEL__)); \
- TIM_SET_ICPRESCALERVALUE((__HANDLE__), (__CHANNEL__), (__ICPSC__)); \
- } while(0)
+ do{ \
+ TIM_RESET_ICPRESCALERVALUE((__HANDLE__), (__CHANNEL__)); \
+ TIM_SET_ICPRESCALERVALUE((__HANDLE__), (__CHANNEL__), (__ICPSC__)); \
+ } while(0)
/**
* @brief Get the TIM Input Capture prescaler on runtime.
@@ -1437,12 +1485,12 @@ mode.
* @retval None
*/
#define __HAL_TIM_SET_COMPARE(__HANDLE__, __CHANNEL__, __COMPARE__) \
-(((__CHANNEL__) == TIM_CHANNEL_1) ? ((__HANDLE__)->Instance->CCR1 = (__COMPARE__)) :\
- ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCR2 = (__COMPARE__)) :\
- ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCR3 = (__COMPARE__)) :\
- ((__CHANNEL__) == TIM_CHANNEL_4) ? ((__HANDLE__)->Instance->CCR4 = (__COMPARE__)) :\
- ((__CHANNEL__) == TIM_CHANNEL_5) ? ((__HANDLE__)->Instance->CCR5 = (__COMPARE__)) :\
- ((__HANDLE__)->Instance->CCR6 = (__COMPARE__)))
+ (((__CHANNEL__) == TIM_CHANNEL_1) ? ((__HANDLE__)->Instance->CCR1 = (__COMPARE__)) :\
+ ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCR2 = (__COMPARE__)) :\
+ ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCR3 = (__COMPARE__)) :\
+ ((__CHANNEL__) == TIM_CHANNEL_4) ? ((__HANDLE__)->Instance->CCR4 = (__COMPARE__)) :\
+ ((__CHANNEL__) == TIM_CHANNEL_5) ? ((__HANDLE__)->Instance->CCR5 = (__COMPARE__)) :\
+ ((__HANDLE__)->Instance->CCR6 = (__COMPARE__)))
/**
* @brief Get the TIM Capture Compare Register value on runtime.
@@ -1458,12 +1506,12 @@ mode.
* @retval 16-bit or 32-bit value of the capture/compare register (TIMx_CCRy)
*/
#define __HAL_TIM_GET_COMPARE(__HANDLE__, __CHANNEL__) \
-(((__CHANNEL__) == TIM_CHANNEL_1) ? ((__HANDLE__)->Instance->CCR1) :\
- ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCR2) :\
- ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCR3) :\
- ((__CHANNEL__) == TIM_CHANNEL_4) ? ((__HANDLE__)->Instance->CCR4) :\
- ((__CHANNEL__) == TIM_CHANNEL_5) ? ((__HANDLE__)->Instance->CCR5) :\
- ((__HANDLE__)->Instance->CCR6))
+ (((__CHANNEL__) == TIM_CHANNEL_1) ? ((__HANDLE__)->Instance->CCR1) :\
+ ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCR2) :\
+ ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCR3) :\
+ ((__CHANNEL__) == TIM_CHANNEL_4) ? ((__HANDLE__)->Instance->CCR4) :\
+ ((__CHANNEL__) == TIM_CHANNEL_5) ? ((__HANDLE__)->Instance->CCR5) :\
+ ((__HANDLE__)->Instance->CCR6))
/**
* @brief Set the TIM Output compare preload.
@@ -1479,12 +1527,12 @@ mode.
* @retval None
*/
#define __HAL_TIM_ENABLE_OCxPRELOAD(__HANDLE__, __CHANNEL__) \
- (((__CHANNEL__) == TIM_CHANNEL_1) ? ((__HANDLE__)->Instance->CCMR1 |= TIM_CCMR1_OC1PE) :\
- ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCMR1 |= TIM_CCMR1_OC2PE) :\
- ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCMR2 |= TIM_CCMR2_OC3PE) :\
- ((__CHANNEL__) == TIM_CHANNEL_4) ? ((__HANDLE__)->Instance->CCMR2 |= TIM_CCMR2_OC4PE) :\
- ((__CHANNEL__) == TIM_CHANNEL_5) ? ((__HANDLE__)->Instance->CCMR3 |= TIM_CCMR3_OC5PE) :\
- ((__HANDLE__)->Instance->CCMR3 |= TIM_CCMR3_OC6PE))
+ (((__CHANNEL__) == TIM_CHANNEL_1) ? ((__HANDLE__)->Instance->CCMR1 |= TIM_CCMR1_OC1PE) :\
+ ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCMR1 |= TIM_CCMR1_OC2PE) :\
+ ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCMR2 |= TIM_CCMR2_OC3PE) :\
+ ((__CHANNEL__) == TIM_CHANNEL_4) ? ((__HANDLE__)->Instance->CCMR2 |= TIM_CCMR2_OC4PE) :\
+ ((__CHANNEL__) == TIM_CHANNEL_5) ? ((__HANDLE__)->Instance->CCMR3 |= TIM_CCMR3_OC5PE) :\
+ ((__HANDLE__)->Instance->CCMR3 |= TIM_CCMR3_OC6PE))
/**
* @brief Reset the TIM Output compare preload.
@@ -1500,12 +1548,62 @@ mode.
* @retval None
*/
#define __HAL_TIM_DISABLE_OCxPRELOAD(__HANDLE__, __CHANNEL__) \
- (((__CHANNEL__) == TIM_CHANNEL_1) ? ((__HANDLE__)->Instance->CCMR1 &= (uint16_t)~TIM_CCMR1_OC1PE) :\
- ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCMR1 &= (uint16_t)~TIM_CCMR1_OC2PE) :\
- ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCMR2 &= (uint16_t)~TIM_CCMR2_OC3PE) :\
- ((__CHANNEL__) == TIM_CHANNEL_4) ? ((__HANDLE__)->Instance->CCMR2 &= (uint16_t)~TIM_CCMR2_OC4PE) :\
- ((__CHANNEL__) == TIM_CHANNEL_5) ? ((__HANDLE__)->Instance->CCMR3 &= (uint16_t)~TIM_CCMR3_OC5PE) :\
- ((__HANDLE__)->Instance->CCMR3 &= (uint16_t)~TIM_CCMR3_OC6PE))
+ (((__CHANNEL__) == TIM_CHANNEL_1) ? ((__HANDLE__)->Instance->CCMR1 &= ~TIM_CCMR1_OC1PE) :\
+ ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCMR1 &= ~TIM_CCMR1_OC2PE) :\
+ ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCMR2 &= ~TIM_CCMR2_OC3PE) :\
+ ((__CHANNEL__) == TIM_CHANNEL_4) ? ((__HANDLE__)->Instance->CCMR2 &= ~TIM_CCMR2_OC4PE) :\
+ ((__CHANNEL__) == TIM_CHANNEL_5) ? ((__HANDLE__)->Instance->CCMR3 &= ~TIM_CCMR3_OC5PE) :\
+ ((__HANDLE__)->Instance->CCMR3 &= ~TIM_CCMR3_OC6PE))
+
+/**
+ * @brief Enable fast mode for a given channel.
+ * @param __HANDLE__ TIM handle.
+ * @param __CHANNEL__ TIM Channels to be configured.
+ * This parameter can be one of the following values:
+ * @arg TIM_CHANNEL_1: TIM Channel 1 selected
+ * @arg TIM_CHANNEL_2: TIM Channel 2 selected
+ * @arg TIM_CHANNEL_3: TIM Channel 3 selected
+ * @arg TIM_CHANNEL_4: TIM Channel 4 selected
+ * @arg TIM_CHANNEL_5: TIM Channel 5 selected
+ * @arg TIM_CHANNEL_6: TIM Channel 6 selected
+ * @note When fast mode is enabled an active edge on the trigger input acts
+ * like a compare match on CCx output. Delay to sample the trigger
+ * input and to activate CCx output is reduced to 3 clock cycles.
+ * @note Fast mode acts only if the channel is configured in PWM1 or PWM2 mode.
+ * @retval None
+ */
+#define __HAL_TIM_ENABLE_OCxFAST(__HANDLE__, __CHANNEL__) \
+ (((__CHANNEL__) == TIM_CHANNEL_1) ? ((__HANDLE__)->Instance->CCMR1 |= TIM_CCMR1_OC1FE) :\
+ ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCMR1 |= TIM_CCMR1_OC2FE) :\
+ ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCMR2 |= TIM_CCMR2_OC3FE) :\
+ ((__CHANNEL__) == TIM_CHANNEL_4) ? ((__HANDLE__)->Instance->CCMR2 |= TIM_CCMR2_OC4FE) :\
+ ((__CHANNEL__) == TIM_CHANNEL_5) ? ((__HANDLE__)->Instance->CCMR3 |= TIM_CCMR3_OC5FE) :\
+ ((__HANDLE__)->Instance->CCMR3 |= TIM_CCMR3_OC6FE))
+
+/**
+ * @brief Disable fast mode for a given channel.
+ * @param __HANDLE__ TIM handle.
+ * @param __CHANNEL__ TIM Channels to be configured.
+ * This parameter can be one of the following values:
+ * @arg TIM_CHANNEL_1: TIM Channel 1 selected
+ * @arg TIM_CHANNEL_2: TIM Channel 2 selected
+ * @arg TIM_CHANNEL_3: TIM Channel 3 selected
+ * @arg TIM_CHANNEL_4: TIM Channel 4 selected
+ * @arg TIM_CHANNEL_5: TIM Channel 5 selected
+ * @arg TIM_CHANNEL_6: TIM Channel 6 selected
+ * @note When fast mode is disabled CCx output behaves normally depending
+ * on counter and CCRx values even when the trigger is ON. The minimum
+ * delay to activate CCx output when an active edge occurs on the
+ * trigger input is 5 clock cycles.
+ * @retval None
+ */
+#define __HAL_TIM_DISABLE_OCxFAST(__HANDLE__, __CHANNEL__) \
+ (((__CHANNEL__) == TIM_CHANNEL_1) ? ((__HANDLE__)->Instance->CCMR1 &= ~TIM_CCMR1_OC1FE) :\
+ ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCMR1 &= ~TIM_CCMR1_OC2FE) :\
+ ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCMR2 &= ~TIM_CCMR2_OC3FE) :\
+ ((__CHANNEL__) == TIM_CHANNEL_4) ? ((__HANDLE__)->Instance->CCMR2 &= ~TIM_CCMR2_OC4FE) :\
+ ((__CHANNEL__) == TIM_CHANNEL_5) ? ((__HANDLE__)->Instance->CCMR3 &= ~TIM_CCMR3_OC5FE) :\
+ ((__HANDLE__)->Instance->CCMR3 &= ~TIM_CCMR3_OC6FE))
/**
* @brief Set the Update Request Source (URS) bit of the TIMx_CR1 register.
@@ -1515,8 +1613,7 @@ mode.
* enabled)
* @retval None
*/
-#define __HAL_TIM_URS_ENABLE(__HANDLE__) \
- ((__HANDLE__)->Instance->CR1|= TIM_CR1_URS)
+#define __HAL_TIM_URS_ENABLE(__HANDLE__) ((__HANDLE__)->Instance->CR1|= TIM_CR1_URS)
/**
* @brief Reset the Update Request Source (URS) bit of the TIMx_CR1 register.
@@ -1529,8 +1626,7 @@ mode.
* _ Update generation through the slave mode controller
* @retval None
*/
-#define __HAL_TIM_URS_DISABLE(__HANDLE__) \
- ((__HANDLE__)->Instance->CR1&=~TIM_CR1_URS)
+#define __HAL_TIM_URS_DISABLE(__HANDLE__) ((__HANDLE__)->Instance->CR1&=~TIM_CR1_URS)
/**
* @brief Set the TIM Capture x input polarity on runtime.
@@ -1548,10 +1644,10 @@ mode.
* @retval None
*/
#define __HAL_TIM_SET_CAPTUREPOLARITY(__HANDLE__, __CHANNEL__, __POLARITY__) \
- do{ \
- TIM_RESET_CAPTUREPOLARITY((__HANDLE__), (__CHANNEL__)); \
- TIM_SET_CAPTUREPOLARITY((__HANDLE__), (__CHANNEL__), (__POLARITY__)); \
- }while(0)
+ do{ \
+ TIM_RESET_CAPTUREPOLARITY((__HANDLE__), (__CHANNEL__)); \
+ TIM_SET_CAPTUREPOLARITY((__HANDLE__), (__CHANNEL__), (__POLARITY__)); \
+ }while(0)
/**
* @}
@@ -1579,29 +1675,29 @@ mode.
((__MODE__) == TIM_CLEARINPUTSOURCE_ETR))
#if defined(TIM_AF1_BKINE)&&defined(TIM_AF2_BKINE)
-#define IS_TIM_DMA_BASE(__BASE__) (((__BASE__) == TIM_DMABASE_CR1) || \
- ((__BASE__) == TIM_DMABASE_CR2) || \
- ((__BASE__) == TIM_DMABASE_SMCR) || \
- ((__BASE__) == TIM_DMABASE_DIER) || \
- ((__BASE__) == TIM_DMABASE_SR) || \
- ((__BASE__) == TIM_DMABASE_EGR) || \
- ((__BASE__) == TIM_DMABASE_CCMR1) || \
- ((__BASE__) == TIM_DMABASE_CCMR2) || \
- ((__BASE__) == TIM_DMABASE_CCER) || \
- ((__BASE__) == TIM_DMABASE_CNT) || \
- ((__BASE__) == TIM_DMABASE_PSC) || \
- ((__BASE__) == TIM_DMABASE_ARR) || \
- ((__BASE__) == TIM_DMABASE_RCR) || \
- ((__BASE__) == TIM_DMABASE_CCR1) || \
- ((__BASE__) == TIM_DMABASE_CCR2) || \
- ((__BASE__) == TIM_DMABASE_CCR3) || \
- ((__BASE__) == TIM_DMABASE_CCR4) || \
- ((__BASE__) == TIM_DMABASE_BDTR) || \
- ((__BASE__) == TIM_DMABASE_OR) || \
- ((__BASE__) == TIM_DMABASE_CCMR3) || \
- ((__BASE__) == TIM_DMABASE_CCR5) || \
- ((__BASE__) == TIM_DMABASE_CCR6) || \
- ((__BASE__) == TIM_DMABASE_AF1) || \
+#define IS_TIM_DMA_BASE(__BASE__) (((__BASE__) == TIM_DMABASE_CR1) || \
+ ((__BASE__) == TIM_DMABASE_CR2) || \
+ ((__BASE__) == TIM_DMABASE_SMCR) || \
+ ((__BASE__) == TIM_DMABASE_DIER) || \
+ ((__BASE__) == TIM_DMABASE_SR) || \
+ ((__BASE__) == TIM_DMABASE_EGR) || \
+ ((__BASE__) == TIM_DMABASE_CCMR1) || \
+ ((__BASE__) == TIM_DMABASE_CCMR2) || \
+ ((__BASE__) == TIM_DMABASE_CCER) || \
+ ((__BASE__) == TIM_DMABASE_CNT) || \
+ ((__BASE__) == TIM_DMABASE_PSC) || \
+ ((__BASE__) == TIM_DMABASE_ARR) || \
+ ((__BASE__) == TIM_DMABASE_RCR) || \
+ ((__BASE__) == TIM_DMABASE_CCR1) || \
+ ((__BASE__) == TIM_DMABASE_CCR2) || \
+ ((__BASE__) == TIM_DMABASE_CCR3) || \
+ ((__BASE__) == TIM_DMABASE_CCR4) || \
+ ((__BASE__) == TIM_DMABASE_BDTR) || \
+ ((__BASE__) == TIM_DMABASE_OR) || \
+ ((__BASE__) == TIM_DMABASE_CCMR3) || \
+ ((__BASE__) == TIM_DMABASE_CCR5) || \
+ ((__BASE__) == TIM_DMABASE_CCR6) || \
+ ((__BASE__) == TIM_DMABASE_AF1) || \
((__BASE__) == TIM_DMABASE_AF2))
#else
#define IS_TIM_DMA_BASE(__BASE__) (((__BASE__) == TIM_DMABASE_CR1) || \
@@ -1636,6 +1732,9 @@ mode.
((__MODE__) == TIM_COUNTERMODE_CENTERALIGNED2) || \
((__MODE__) == TIM_COUNTERMODE_CENTERALIGNED3))
+#define IS_TIM_UIFREMAP_MODE(__MODE__) (((__MODE__) == TIM_UIFREMAP_DISABLE) || \
+ ((__MODE__) == TIM_UIFREMAP_ENALE))
+
#define IS_TIM_CLOCKDIVISION_DIV(__DIV__) (((__DIV__) == TIM_CLOCKDIVISION_DIV1) || \
((__DIV__) == TIM_CLOCKDIVISION_DIV2) || \
((__DIV__) == TIM_CLOCKDIVISION_DIV4))
@@ -1658,6 +1757,9 @@ mode.
#define IS_TIM_OCNIDLE_STATE(__STATE__) (((__STATE__) == TIM_OCNIDLESTATE_SET) || \
((__STATE__) == TIM_OCNIDLESTATE_RESET))
+#define IS_TIM_ENCODERINPUT_POLARITY(__POLARITY__) (((__POLARITY__) == TIM_ENCODERINPUTPOLARITY_RISING) || \
+ ((__POLARITY__) == TIM_ENCODERINPUTPOLARITY_FALLING))
+
#define IS_TIM_IC_POLARITY(__POLARITY__) (((__POLARITY__) == TIM_ICPOLARITY_RISING) || \
((__POLARITY__) == TIM_ICPOLARITY_FALLING) || \
((__POLARITY__) == TIM_ICPOLARITY_BOTHEDGE))
@@ -1876,28 +1978,28 @@ mode.
((__TRIGGER__) == TIM_SLAVEMODE_COMBINED_RESETTRIGGER))
#define TIM_SET_ICPRESCALERVALUE(__HANDLE__, __CHANNEL__, __ICPSC__) \
-(((__CHANNEL__) == TIM_CHANNEL_1) ? ((__HANDLE__)->Instance->CCMR1 |= (__ICPSC__)) :\
- ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCMR1 |= ((__ICPSC__) << 8U)) :\
- ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCMR2 |= (__ICPSC__)) :\
- ((__HANDLE__)->Instance->CCMR2 |= ((__ICPSC__) << 8U)))
+ (((__CHANNEL__) == TIM_CHANNEL_1) ? ((__HANDLE__)->Instance->CCMR1 |= (__ICPSC__)) :\
+ ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCMR1 |= ((__ICPSC__) << 8U)) :\
+ ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCMR2 |= (__ICPSC__)) :\
+ ((__HANDLE__)->Instance->CCMR2 |= ((__ICPSC__) << 8U)))
#define TIM_RESET_ICPRESCALERVALUE(__HANDLE__, __CHANNEL__) \
-(((__CHANNEL__) == TIM_CHANNEL_1) ? ((__HANDLE__)->Instance->CCMR1 &= (uint16_t)~TIM_CCMR1_IC1PSC) :\
- ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCMR1 &= (uint16_t)~TIM_CCMR1_IC2PSC) :\
- ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCMR2 &= (uint16_t)~TIM_CCMR2_IC3PSC) :\
- ((__HANDLE__)->Instance->CCMR2 &= (uint16_t)~TIM_CCMR2_IC4PSC))
+ (((__CHANNEL__) == TIM_CHANNEL_1) ? ((__HANDLE__)->Instance->CCMR1 &= ~TIM_CCMR1_IC1PSC) :\
+ ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCMR1 &= ~TIM_CCMR1_IC2PSC) :\
+ ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCMR2 &= ~TIM_CCMR2_IC3PSC) :\
+ ((__HANDLE__)->Instance->CCMR2 &= ~TIM_CCMR2_IC4PSC))
#define TIM_SET_CAPTUREPOLARITY(__HANDLE__, __CHANNEL__, __POLARITY__) \
-(((__CHANNEL__) == TIM_CHANNEL_1) ? ((__HANDLE__)->Instance->CCER |= (__POLARITY__)) :\
- ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCER |= ((__POLARITY__) << 4U)) :\
- ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCER |= ((__POLARITY__) << 8U)) :\
- ((__HANDLE__)->Instance->CCER |= (((__POLARITY__) << 12U))))
+ (((__CHANNEL__) == TIM_CHANNEL_1) ? ((__HANDLE__)->Instance->CCER |= (__POLARITY__)) :\
+ ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCER |= ((__POLARITY__) << 4U)) :\
+ ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCER |= ((__POLARITY__) << 8U)) :\
+ ((__HANDLE__)->Instance->CCER |= (((__POLARITY__) << 12U))))
#define TIM_RESET_CAPTUREPOLARITY(__HANDLE__, __CHANNEL__) \
-(((__CHANNEL__) == TIM_CHANNEL_1) ? ((__HANDLE__)->Instance->CCER &= (uint16_t)~(TIM_CCER_CC1P | TIM_CCER_CC1NP)) :\
- ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCER &= (uint16_t)~(TIM_CCER_CC2P | TIM_CCER_CC2NP)) :\
- ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCER &= (uint16_t)~(TIM_CCER_CC3P | TIM_CCER_CC3NP)) :\
- ((__HANDLE__)->Instance->CCER &= (uint16_t)~(TIM_CCER_CC4P | TIM_CCER_CC4NP)))
+ (((__CHANNEL__) == TIM_CHANNEL_1) ? ((__HANDLE__)->Instance->CCER &= ~(TIM_CCER_CC1P | TIM_CCER_CC1NP)) :\
+ ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCER &= ~(TIM_CCER_CC2P | TIM_CCER_CC2NP)) :\
+ ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCER &= ~(TIM_CCER_CC3P | TIM_CCER_CC3NP)) :\
+ ((__HANDLE__)->Instance->CCER &= ~(TIM_CCER_CC4P | TIM_CCER_CC4NP)))
/**
* @}
@@ -2035,7 +2137,8 @@ HAL_StatusTypeDef HAL_TIM_Encoder_Stop(TIM_HandleTypeDef *htim, uint32_t Channel
HAL_StatusTypeDef HAL_TIM_Encoder_Start_IT(TIM_HandleTypeDef *htim, uint32_t Channel);
HAL_StatusTypeDef HAL_TIM_Encoder_Stop_IT(TIM_HandleTypeDef *htim, uint32_t Channel);
/* Non-Blocking mode: DMA */
-HAL_StatusTypeDef HAL_TIM_Encoder_Start_DMA(TIM_HandleTypeDef *htim, uint32_t Channel, uint32_t *pData1, uint32_t *pData2, uint16_t Length);
+HAL_StatusTypeDef HAL_TIM_Encoder_Start_DMA(TIM_HandleTypeDef *htim, uint32_t Channel, uint32_t *pData1,
+ uint32_t *pData2, uint16_t Length);
HAL_StatusTypeDef HAL_TIM_Encoder_Stop_DMA(TIM_HandleTypeDef *htim, uint32_t Channel);
/**
* @}
@@ -2059,17 +2162,19 @@ void HAL_TIM_IRQHandler(TIM_HandleTypeDef *htim);
HAL_StatusTypeDef HAL_TIM_OC_ConfigChannel(TIM_HandleTypeDef *htim, TIM_OC_InitTypeDef *sConfig, uint32_t Channel);
HAL_StatusTypeDef HAL_TIM_PWM_ConfigChannel(TIM_HandleTypeDef *htim, TIM_OC_InitTypeDef *sConfig, uint32_t Channel);
HAL_StatusTypeDef HAL_TIM_IC_ConfigChannel(TIM_HandleTypeDef *htim, TIM_IC_InitTypeDef *sConfig, uint32_t Channel);
-HAL_StatusTypeDef HAL_TIM_OnePulse_ConfigChannel(TIM_HandleTypeDef *htim, TIM_OnePulse_InitTypeDef *sConfig, uint32_t OutputChannel, uint32_t InputChannel);
-HAL_StatusTypeDef HAL_TIM_ConfigOCrefClear(TIM_HandleTypeDef *htim, TIM_ClearInputConfigTypeDef *sClearInputConfig, uint32_t Channel);
+HAL_StatusTypeDef HAL_TIM_OnePulse_ConfigChannel(TIM_HandleTypeDef *htim, TIM_OnePulse_InitTypeDef *sConfig,
+ uint32_t OutputChannel, uint32_t InputChannel);
+HAL_StatusTypeDef HAL_TIM_ConfigOCrefClear(TIM_HandleTypeDef *htim, TIM_ClearInputConfigTypeDef *sClearInputConfig,
+ uint32_t Channel);
HAL_StatusTypeDef HAL_TIM_ConfigClockSource(TIM_HandleTypeDef *htim, TIM_ClockConfigTypeDef *sClockSourceConfig);
HAL_StatusTypeDef HAL_TIM_ConfigTI1Input(TIM_HandleTypeDef *htim, uint32_t TI1_Selection);
HAL_StatusTypeDef HAL_TIM_SlaveConfigSynchro(TIM_HandleTypeDef *htim, TIM_SlaveConfigTypeDef *sSlaveConfig);
HAL_StatusTypeDef HAL_TIM_SlaveConfigSynchro_IT(TIM_HandleTypeDef *htim, TIM_SlaveConfigTypeDef *sSlaveConfig);
-HAL_StatusTypeDef HAL_TIM_DMABurst_WriteStart(TIM_HandleTypeDef *htim, uint32_t BurstBaseAddress, uint32_t BurstRequestSrc, \
- uint32_t *BurstBuffer, uint32_t BurstLength);
+HAL_StatusTypeDef HAL_TIM_DMABurst_WriteStart(TIM_HandleTypeDef *htim, uint32_t BurstBaseAddress,
+ uint32_t BurstRequestSrc, uint32_t *BurstBuffer, uint32_t BurstLength);
HAL_StatusTypeDef HAL_TIM_DMABurst_WriteStop(TIM_HandleTypeDef *htim, uint32_t BurstRequestSrc);
-HAL_StatusTypeDef HAL_TIM_DMABurst_ReadStart(TIM_HandleTypeDef *htim, uint32_t BurstBaseAddress, uint32_t BurstRequestSrc, \
- uint32_t *BurstBuffer, uint32_t BurstLength);
+HAL_StatusTypeDef HAL_TIM_DMABurst_ReadStart(TIM_HandleTypeDef *htim, uint32_t BurstBaseAddress,
+ uint32_t BurstRequestSrc, uint32_t *BurstBuffer, uint32_t BurstLength);
HAL_StatusTypeDef HAL_TIM_DMABurst_ReadStop(TIM_HandleTypeDef *htim, uint32_t BurstRequestSrc);
HAL_StatusTypeDef HAL_TIM_GenerateEvent(TIM_HandleTypeDef *htim, uint32_t EventSource);
uint32_t HAL_TIM_ReadCapturedValue(TIM_HandleTypeDef *htim, uint32_t Channel);
@@ -2095,7 +2200,8 @@ void HAL_TIM_ErrorCallback(TIM_HandleTypeDef *htim);
/* Callbacks Register/UnRegister functions ***********************************/
#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)
-HAL_StatusTypeDef HAL_TIM_RegisterCallback(TIM_HandleTypeDef *htim, HAL_TIM_CallbackIDTypeDef CallbackID, pTIM_CallbackTypeDef pCallback);
+HAL_StatusTypeDef HAL_TIM_RegisterCallback(TIM_HandleTypeDef *htim, HAL_TIM_CallbackIDTypeDef CallbackID,
+ pTIM_CallbackTypeDef pCallback);
HAL_StatusTypeDef HAL_TIM_UnRegisterCallback(TIM_HandleTypeDef *htim, HAL_TIM_CallbackIDTypeDef CallbackID);
#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */
@@ -2125,8 +2231,8 @@ HAL_TIM_StateTypeDef HAL_TIM_Encoder_GetState(TIM_HandleTypeDef *htim);
/* Private functions----------------------------------------------------------*/
/** @defgroup TIM_Private_Functions TIM Private Functions
-* @{
-*/
+ * @{
+ */
void TIM_Base_SetConfig(TIM_TypeDef *TIMx, TIM_Base_InitTypeDef *Structure);
void TIM_TI1_SetConfig(TIM_TypeDef *TIMx, uint32_t TIM_ICPolarity, uint32_t TIM_ICSelection, uint32_t TIM_ICFilter);
void TIM_OC2_SetConfig(TIM_TypeDef *TIMx, TIM_OC_InitTypeDef *OC_Config);
@@ -2145,8 +2251,8 @@ void TIM_ResetCallback(TIM_HandleTypeDef *htim);
#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */
/**
-* @}
-*/
+ * @}
+ */
/* End of private functions --------------------------------------------------*/
/**
diff --git a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_GCC/Boot/lib/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_tim_ex.h b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_GCC/Boot/lib/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_tim_ex.h
index 598f5c6e..b8d3472e 100644
--- a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_GCC/Boot/lib/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_tim_ex.h
+++ b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_GCC/Boot/lib/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_tim_ex.h
@@ -201,9 +201,9 @@ TIMEx_BreakInputConfigTypeDef;
*/
/** @addtogroup TIMEx_Exported_Functions_Group1 Extended Timer Hall Sensor functions
- * @brief Timer Hall Sensor functions
- * @{
- */
+ * @brief Timer Hall Sensor functions
+ * @{
+ */
/* Timer Hall Sensor functions **********************************************/
HAL_StatusTypeDef HAL_TIMEx_HallSensor_Init(TIM_HandleTypeDef *htim, TIM_HallSensor_InitTypeDef *sConfig);
HAL_StatusTypeDef HAL_TIMEx_HallSensor_DeInit(TIM_HandleTypeDef *htim);
@@ -225,9 +225,9 @@ HAL_StatusTypeDef HAL_TIMEx_HallSensor_Stop_DMA(TIM_HandleTypeDef *htim);
*/
/** @addtogroup TIMEx_Exported_Functions_Group2 Extended Timer Complementary Output Compare functions
- * @brief Timer Complementary Output Compare functions
- * @{
- */
+ * @brief Timer Complementary Output Compare functions
+ * @{
+ */
/* Timer Complementary Output Compare functions *****************************/
/* Blocking mode: Polling */
HAL_StatusTypeDef HAL_TIMEx_OCN_Start(TIM_HandleTypeDef *htim, uint32_t Channel);
@@ -245,9 +245,9 @@ HAL_StatusTypeDef HAL_TIMEx_OCN_Stop_DMA(TIM_HandleTypeDef *htim, uint32_t Chann
*/
/** @addtogroup TIMEx_Exported_Functions_Group3 Extended Timer Complementary PWM functions
- * @brief Timer Complementary PWM functions
- * @{
- */
+ * @brief Timer Complementary PWM functions
+ * @{
+ */
/* Timer Complementary PWM functions ****************************************/
/* Blocking mode: Polling */
HAL_StatusTypeDef HAL_TIMEx_PWMN_Start(TIM_HandleTypeDef *htim, uint32_t Channel);
@@ -264,9 +264,9 @@ HAL_StatusTypeDef HAL_TIMEx_PWMN_Stop_DMA(TIM_HandleTypeDef *htim, uint32_t Chan
*/
/** @addtogroup TIMEx_Exported_Functions_Group4 Extended Timer Complementary One Pulse functions
- * @brief Timer Complementary One Pulse functions
- * @{
- */
+ * @brief Timer Complementary One Pulse functions
+ * @{
+ */
/* Timer Complementary One Pulse functions **********************************/
/* Blocking mode: Polling */
HAL_StatusTypeDef HAL_TIMEx_OnePulseN_Start(TIM_HandleTypeDef *htim, uint32_t OutputChannel);
@@ -280,17 +280,23 @@ HAL_StatusTypeDef HAL_TIMEx_OnePulseN_Stop_IT(TIM_HandleTypeDef *htim, uint32_t
*/
/** @addtogroup TIMEx_Exported_Functions_Group5 Extended Peripheral Control functions
- * @brief Peripheral Control functions
- * @{
- */
+ * @brief Peripheral Control functions
+ * @{
+ */
/* Extended Control functions ************************************************/
-HAL_StatusTypeDef HAL_TIMEx_ConfigCommutEvent(TIM_HandleTypeDef *htim, uint32_t InputTrigger, uint32_t CommutationSource);
-HAL_StatusTypeDef HAL_TIMEx_ConfigCommutEvent_IT(TIM_HandleTypeDef *htim, uint32_t InputTrigger, uint32_t CommutationSource);
-HAL_StatusTypeDef HAL_TIMEx_ConfigCommutEvent_DMA(TIM_HandleTypeDef *htim, uint32_t InputTrigger, uint32_t CommutationSource);
-HAL_StatusTypeDef HAL_TIMEx_MasterConfigSynchronization(TIM_HandleTypeDef *htim, TIM_MasterConfigTypeDef *sMasterConfig);
-HAL_StatusTypeDef HAL_TIMEx_ConfigBreakDeadTime(TIM_HandleTypeDef *htim, TIM_BreakDeadTimeConfigTypeDef *sBreakDeadTimeConfig);
+HAL_StatusTypeDef HAL_TIMEx_ConfigCommutEvent(TIM_HandleTypeDef *htim, uint32_t InputTrigger,
+ uint32_t CommutationSource);
+HAL_StatusTypeDef HAL_TIMEx_ConfigCommutEvent_IT(TIM_HandleTypeDef *htim, uint32_t InputTrigger,
+ uint32_t CommutationSource);
+HAL_StatusTypeDef HAL_TIMEx_ConfigCommutEvent_DMA(TIM_HandleTypeDef *htim, uint32_t InputTrigger,
+ uint32_t CommutationSource);
+HAL_StatusTypeDef HAL_TIMEx_MasterConfigSynchronization(TIM_HandleTypeDef *htim,
+ TIM_MasterConfigTypeDef *sMasterConfig);
+HAL_StatusTypeDef HAL_TIMEx_ConfigBreakDeadTime(TIM_HandleTypeDef *htim,
+ TIM_BreakDeadTimeConfigTypeDef *sBreakDeadTimeConfig);
#if defined(TIM_BREAK_INPUT_SUPPORT)
-HAL_StatusTypeDef HAL_TIMEx_ConfigBreakInput(TIM_HandleTypeDef *htim, uint32_t BreakInput, TIMEx_BreakInputConfigTypeDef *sBreakInputConfig);
+HAL_StatusTypeDef HAL_TIMEx_ConfigBreakInput(TIM_HandleTypeDef *htim, uint32_t BreakInput,
+ TIMEx_BreakInputConfigTypeDef *sBreakInputConfig);
#endif /* TIM_BREAK_INPUT_SUPPORT */
HAL_StatusTypeDef HAL_TIMEx_GroupChannel5(TIM_HandleTypeDef *htim, uint32_t Channels);
HAL_StatusTypeDef HAL_TIMEx_RemapConfig(TIM_HandleTypeDef *htim, uint32_t Remap);
@@ -327,7 +333,7 @@ HAL_TIM_StateTypeDef HAL_TIMEx_HallSensor_GetState(TIM_HandleTypeDef *htim);
/* End of exported functions -------------------------------------------------*/
/* Private functions----------------------------------------------------------*/
-/** @defgroup TIMEx_Private_Functions TIM Extended Private Functions
+/** @addtogroup TIMEx_Private_Functions TIMEx Private Functions
* @{
*/
void TIMEx_DMACommutationCplt(DMA_HandleTypeDef *hdma);
diff --git a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_GCC/Boot/lib/STM32F7xx_HAL_Driver/Inc/stm32f7xx_ll_usart.h b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_GCC/Boot/lib/STM32F7xx_HAL_Driver/Inc/stm32f7xx_ll_usart.h
index f151a3d3..9bbccb71 100644
--- a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_GCC/Boot/lib/STM32F7xx_HAL_Driver/Inc/stm32f7xx_ll_usart.h
+++ b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_GCC/Boot/lib/STM32F7xx_HAL_Driver/Inc/stm32f7xx_ll_usart.h
@@ -42,13 +42,6 @@ extern "C" {
/* Private variables ---------------------------------------------------------*/
/* Private constants ---------------------------------------------------------*/
-/** @defgroup USART_LL_Private_Constants USART Private Constants
- * @{
- */
-/**
- * @}
- */
-
/* Private macros ------------------------------------------------------------*/
#if defined(USE_FULL_LL_DRIVER)
/** @defgroup USART_LL_Private_Macros USART Private Macros
@@ -156,18 +149,21 @@ typedef struct
*/
#define LL_USART_ICR_PECF USART_ICR_PECF /*!< Parity error flag */
#define LL_USART_ICR_FECF USART_ICR_FECF /*!< Framing error flag */
-#define LL_USART_ICR_NCF USART_ICR_NCF /*!< Noise error detected flag */
+#define LL_USART_ICR_NCF USART_ICR_NCF /*!< Noise error detected flag */
#define LL_USART_ICR_ORECF USART_ICR_ORECF /*!< Overrun error flag */
#define LL_USART_ICR_IDLECF USART_ICR_IDLECF /*!< Idle line detected flag */
#define LL_USART_ICR_TCCF USART_ICR_TCCF /*!< Transmission complete flag */
#if defined(USART_TCBGT_SUPPORT)
#define LL_USART_ICR_TCBGTCF USART_ICR_TCBGTCF /*!< Transmission completed before guard time flag */
-#endif
+#endif /* USART_TCBGT_SUPPORT */
#define LL_USART_ICR_LBDCF USART_ICR_LBDCF /*!< LIN break detection flag */
#define LL_USART_ICR_CTSCF USART_ICR_CTSCF /*!< CTS flag */
#define LL_USART_ICR_RTOCF USART_ICR_RTOCF /*!< Receiver timeout flag */
#define LL_USART_ICR_EOBCF USART_ICR_EOBCF /*!< End of block flag */
#define LL_USART_ICR_CMCF USART_ICR_CMCF /*!< Character match flag */
+#if defined(USART_CR1_UESM)
+#define LL_USART_ICR_WUCF USART_ICR_WUCF /*!< Wakeup from Stop mode flag */
+#endif /* USART_CR1_UESM */
/**
* @}
*/
@@ -195,10 +191,16 @@ typedef struct
#define LL_USART_ISR_CMF USART_ISR_CMF /*!< Character match flag */
#define LL_USART_ISR_SBKF USART_ISR_SBKF /*!< Send break flag */
#define LL_USART_ISR_RWU USART_ISR_RWU /*!< Receiver wakeup from Mute mode flag */
+#if defined(USART_CR1_UESM)
+#define LL_USART_ISR_WUF USART_ISR_WUF /*!< Wakeup from Stop mode flag */
+#endif /* USART_CR1_UESM */
#define LL_USART_ISR_TEACK USART_ISR_TEACK /*!< Transmit enable acknowledge flag */
+#if defined(USART_ISR_REACK)
+#define LL_USART_ISR_REACK USART_ISR_REACK /*!< Receive enable acknowledge flag */
+#endif /* USART_ISR_REACK */
#if defined(USART_TCBGT_SUPPORT)
#define LL_USART_ISR_TCBGT USART_ISR_TCBGT /*!< Transmission complete before guard time completion flag */
-#endif
+#endif /* USART_TCBGT_SUPPORT */
/**
* @}
*/
@@ -218,9 +220,12 @@ typedef struct
#define LL_USART_CR2_LBDIE USART_CR2_LBDIE /*!< LIN break detection interrupt enable */
#define LL_USART_CR3_EIE USART_CR3_EIE /*!< Error interrupt enable */
#define LL_USART_CR3_CTSIE USART_CR3_CTSIE /*!< CTS interrupt enable */
+#if defined(USART_CR1_UESM)
+#define LL_USART_CR3_WUFIE USART_CR3_WUFIE /*!< Wakeup from Stop mode interrupt enable */
+#endif /* USART_CR1_UESM */
#if defined(USART_TCBGT_SUPPORT)
#define LL_USART_CR3_TCBGTIE USART_CR3_TCBGTIE /*!< Transmission complete before guard time interrupt enable */
-#endif
+#endif /* USART_TCBGT_SUPPORT */
/**
* @}
*/
@@ -400,6 +405,18 @@ typedef struct
* @}
*/
+#if defined(USART_CR1_UESM)
+/** @defgroup USART_LL_EC_WAKEUP_ON Wakeup Activation
+ * @{
+ */
+#define LL_USART_WAKEUP_ON_ADDRESS 0x00000000U /*!< Wake up active on address match */
+#define LL_USART_WAKEUP_ON_STARTBIT USART_CR3_WUS_1 /*!< Wake up active on Start bit detection */
+#define LL_USART_WAKEUP_ON_RXNE (USART_CR3_WUS_0 | USART_CR3_WUS_1) /*!< Wake up active on RXNE */
+/**
+ * @}
+ */
+
+#endif /* USART_CR1_UESM */
/** @defgroup USART_LL_EC_IRDA_POWER IrDA Power
* @{
*/
@@ -480,7 +497,8 @@ typedef struct
* @param __BAUDRATE__ Baud rate value to achieve
* @retval USARTDIV value to be used for BRR register filling in OverSampling_8 case
*/
-#define __LL_USART_DIV_SAMPLING8(__PERIPHCLK__, __BAUDRATE__) ((((__PERIPHCLK__)*2U) + ((__BAUDRATE__)/2U))/(__BAUDRATE__))
+#define __LL_USART_DIV_SAMPLING8(__PERIPHCLK__, __BAUDRATE__) ((((__PERIPHCLK__)*2U)\
+ + ((__BAUDRATE__)/2U))/(__BAUDRATE__))
/**
* @brief Compute USARTDIV value according to Peripheral Clock and
@@ -545,6 +563,87 @@ __STATIC_INLINE uint32_t LL_USART_IsEnabled(USART_TypeDef *USARTx)
return ((READ_BIT(USARTx->CR1, USART_CR1_UE) == (USART_CR1_UE)) ? 1UL : 0UL);
}
+#if defined(USART_CR1_UESM)
+/**
+ * @brief USART enabled in STOP Mode.
+ * @note When this function is enabled, USART is able to wake up the MCU from Stop mode, provided that
+ * USART clock selection is HSI or LSE in RCC.
+ * @note Macro @ref IS_UART_WAKEUP_FROMSTOP_INSTANCE(USARTx) can be used to check whether or not
+ * Wake-up from Stop mode feature is supported by the USARTx instance.
+ * @rmtoll CR1 UESM LL_USART_EnableInStopMode
+ * @param USARTx USART Instance
+ * @retval None
+ */
+__STATIC_INLINE void LL_USART_EnableInStopMode(USART_TypeDef *USARTx)
+{
+ SET_BIT(USARTx->CR1, USART_CR1_UESM);
+}
+
+/**
+ * @brief USART disabled in STOP Mode.
+ * @note When this function is disabled, USART is not able to wake up the MCU from Stop mode
+ * @note Macro @ref IS_UART_WAKEUP_FROMSTOP_INSTANCE(USARTx) can be used to check whether or not
+ * Wake-up from Stop mode feature is supported by the USARTx instance.
+ * @rmtoll CR1 UESM LL_USART_DisableInStopMode
+ * @param USARTx USART Instance
+ * @retval None
+ */
+__STATIC_INLINE void LL_USART_DisableInStopMode(USART_TypeDef *USARTx)
+{
+ CLEAR_BIT(USARTx->CR1, USART_CR1_UESM);
+}
+
+/**
+ * @brief Indicate if USART is enabled in STOP Mode (able to wake up MCU from Stop mode or not)
+ * @note Macro @ref IS_UART_WAKEUP_FROMSTOP_INSTANCE(USARTx) can be used to check whether or not
+ * Wake-up from Stop mode feature is supported by the USARTx instance.
+ * @rmtoll CR1 UESM LL_USART_IsEnabledInStopMode
+ * @param USARTx USART Instance
+ * @retval State of bit (1 or 0).
+ */
+__STATIC_INLINE uint32_t LL_USART_IsEnabledInStopMode(USART_TypeDef *USARTx)
+{
+ return ((READ_BIT(USARTx->CR1, USART_CR1_UESM) == (USART_CR1_UESM)) ? 1UL : 0UL);
+}
+
+#if defined(USART_CR3_UCESM)
+/**
+ * @brief USART Clock enabled in STOP Mode
+ * @note When this function is called, USART Clock is enabled while in STOP mode
+ * @rmtoll CR3 UCESM LL_USART_EnableClockInStopMode
+ * @param USARTx USART Instance
+ * @retval None
+ */
+__STATIC_INLINE void LL_USART_EnableClockInStopMode(USART_TypeDef *USARTx)
+{
+ SET_BIT(USARTx->CR3, USART_CR3_UCESM);
+}
+
+/**
+ * @brief USART clock disabled in STOP Mode
+ * @note When this function is called, USART Clock is disabled while in STOP mode
+ * @rmtoll CR3 UCESM LL_USART_DisableClockInStopMode
+ * @param USARTx USART Instance
+ * @retval None
+ */
+__STATIC_INLINE void LL_USART_DisableClockInStopMode(USART_TypeDef *USARTx)
+{
+ CLEAR_BIT(USARTx->CR3, USART_CR3_UCESM);
+}
+
+/**
+ * @brief Indicate if USART clock is enabled in STOP Mode
+ * @rmtoll CR3 UCESM LL_USART_IsClockEnabledInStopMode
+ * @param USARTx USART Instance
+ * @retval State of bit (1 or 0).
+ */
+__STATIC_INLINE uint32_t LL_USART_IsClockEnabledInStopMode(USART_TypeDef *USARTx)
+{
+ return (READ_BIT(USARTx->CR3, USART_CR3_UCESM) == (USART_CR3_UCESM));
+}
+
+#endif /* USART_CR3_UCESM */
+#endif /* USART_CR1_UESM*/
/**
* @brief Receiver Enable (Receiver is enabled and begins searching for a start bit)
* @rmtoll CR1 RE LL_USART_EnableDirectionRx
@@ -1461,6 +1560,41 @@ __STATIC_INLINE uint32_t LL_USART_IsEnabledOverrunDetect(USART_TypeDef *USARTx)
return ((READ_BIT(USARTx->CR3, USART_CR3_OVRDIS) != USART_CR3_OVRDIS) ? 1UL : 0UL);
}
+#if defined(USART_CR1_UESM)
+/**
+ * @brief Select event type for Wake UP Interrupt Flag (WUS[1:0] bits)
+ * @note Macro @ref IS_UART_WAKEUP_FROMSTOP_INSTANCE(USARTx) can be used to check whether or not
+ * Wake-up from Stop mode feature is supported by the USARTx instance.
+ * @rmtoll CR3 WUS LL_USART_SetWKUPType
+ * @param USARTx USART Instance
+ * @param Type This parameter can be one of the following values:
+ * @arg @ref LL_USART_WAKEUP_ON_ADDRESS
+ * @arg @ref LL_USART_WAKEUP_ON_STARTBIT
+ * @arg @ref LL_USART_WAKEUP_ON_RXNE
+ * @retval None
+ */
+__STATIC_INLINE void LL_USART_SetWKUPType(USART_TypeDef *USARTx, uint32_t Type)
+{
+ MODIFY_REG(USARTx->CR3, USART_CR3_WUS, Type);
+}
+
+/**
+ * @brief Return event type for Wake UP Interrupt Flag (WUS[1:0] bits)
+ * @note Macro @ref IS_UART_WAKEUP_FROMSTOP_INSTANCE(USARTx) can be used to check whether or not
+ * Wake-up from Stop mode feature is supported by the USARTx instance.
+ * @rmtoll CR3 WUS LL_USART_GetWKUPType
+ * @param USARTx USART Instance
+ * @retval Returned value can be one of the following values:
+ * @arg @ref LL_USART_WAKEUP_ON_ADDRESS
+ * @arg @ref LL_USART_WAKEUP_ON_STARTBIT
+ * @arg @ref LL_USART_WAKEUP_ON_RXNE
+ */
+__STATIC_INLINE uint32_t LL_USART_GetWKUPType(USART_TypeDef *USARTx)
+{
+ return (uint32_t)(READ_BIT(USARTx->CR3, USART_CR3_WUS));
+}
+
+#endif /* USART_CR1_UESM */
/**
* @brief Configure USART BRR register for achieving expected Baud Rate value.
* @note Compute and set USARTDIV value in BRR Register (full BRR content)
@@ -1480,7 +1614,7 @@ __STATIC_INLINE uint32_t LL_USART_IsEnabledOverrunDetect(USART_TypeDef *USARTx)
__STATIC_INLINE void LL_USART_SetBaudRate(USART_TypeDef *USARTx, uint32_t PeriphClk, uint32_t OverSampling,
uint32_t BaudRate)
{
- register uint32_t usartdiv;
+ uint32_t usartdiv;
register uint32_t brrtemp;
if (OverSampling == LL_USART_OVERSAMPLING_8)
@@ -2161,7 +2295,8 @@ __STATIC_INLINE void LL_USART_ConfigAsyncMode(USART_TypeDef *USARTx)
{
/* In Asynchronous mode, the following bits must be kept cleared:
- LINEN, CLKEN bits in the USART_CR2 register,
- - SCEN, IREN and HDSEL bits in the USART_CR3 register.*/
+ - SCEN, IREN and HDSEL bits in the USART_CR3 register.
+ */
CLEAR_BIT(USARTx->CR2, (USART_CR2_LINEN | USART_CR2_CLKEN));
CLEAR_BIT(USARTx->CR3, (USART_CR3_SCEN | USART_CR3_IREN | USART_CR3_HDSEL));
}
@@ -2197,7 +2332,8 @@ __STATIC_INLINE void LL_USART_ConfigSyncMode(USART_TypeDef *USARTx)
{
/* In Synchronous mode, the following bits must be kept cleared:
- LINEN bit in the USART_CR2 register,
- - SCEN, IREN and HDSEL bits in the USART_CR3 register.*/
+ - SCEN, IREN and HDSEL bits in the USART_CR3 register.
+ */
CLEAR_BIT(USARTx->CR2, (USART_CR2_LINEN));
CLEAR_BIT(USARTx->CR3, (USART_CR3_SCEN | USART_CR3_IREN | USART_CR3_HDSEL));
/* set the UART/USART in Synchronous mode */
@@ -2237,7 +2373,8 @@ __STATIC_INLINE void LL_USART_ConfigLINMode(USART_TypeDef *USARTx)
{
/* In LIN mode, the following bits must be kept cleared:
- STOP and CLKEN bits in the USART_CR2 register,
- - IREN, SCEN and HDSEL bits in the USART_CR3 register.*/
+ - IREN, SCEN and HDSEL bits in the USART_CR3 register.
+ */
CLEAR_BIT(USARTx->CR2, (USART_CR2_CLKEN | USART_CR2_STOP));
CLEAR_BIT(USARTx->CR3, (USART_CR3_IREN | USART_CR3_SCEN | USART_CR3_HDSEL));
/* Set the UART/USART in LIN mode */
@@ -2275,7 +2412,8 @@ __STATIC_INLINE void LL_USART_ConfigHalfDuplexMode(USART_TypeDef *USARTx)
{
/* In Half Duplex mode, the following bits must be kept cleared:
- LINEN and CLKEN bits in the USART_CR2 register,
- - SCEN and IREN bits in the USART_CR3 register.*/
+ - SCEN and IREN bits in the USART_CR3 register.
+ */
CLEAR_BIT(USARTx->CR2, (USART_CR2_LINEN | USART_CR2_CLKEN));
CLEAR_BIT(USARTx->CR3, (USART_CR3_SCEN | USART_CR3_IREN));
/* set the UART/USART in Half Duplex mode */
@@ -2315,7 +2453,8 @@ __STATIC_INLINE void LL_USART_ConfigSmartcardMode(USART_TypeDef *USARTx)
{
/* In Smartcard mode, the following bits must be kept cleared:
- LINEN bit in the USART_CR2 register,
- - IREN and HDSEL bits in the USART_CR3 register.*/
+ - IREN and HDSEL bits in the USART_CR3 register.
+ */
CLEAR_BIT(USARTx->CR2, (USART_CR2_LINEN));
CLEAR_BIT(USARTx->CR3, (USART_CR3_IREN | USART_CR3_HDSEL));
/* Configure Stop bits to 1.5 bits */
@@ -2358,7 +2497,8 @@ __STATIC_INLINE void LL_USART_ConfigIrdaMode(USART_TypeDef *USARTx)
{
/* In IRDA mode, the following bits must be kept cleared:
- LINEN, STOP and CLKEN bits in the USART_CR2 register,
- - SCEN and HDSEL bits in the USART_CR3 register.*/
+ - SCEN and HDSEL bits in the USART_CR3 register.
+ */
CLEAR_BIT(USARTx->CR2, (USART_CR2_LINEN | USART_CR2_CLKEN | USART_CR2_STOP));
CLEAR_BIT(USARTx->CR3, (USART_CR3_SCEN | USART_CR3_HDSEL));
/* set the UART/USART in IRDA mode */
@@ -2396,7 +2536,8 @@ __STATIC_INLINE void LL_USART_ConfigMultiProcessMode(USART_TypeDef *USARTx)
{
/* In Multi Processor mode, the following bits must be kept cleared:
- LINEN and CLKEN bits in the USART_CR2 register,
- - IREN, SCEN and HDSEL bits in the USART_CR3 register.*/
+ - IREN, SCEN and HDSEL bits in the USART_CR3 register.
+ */
CLEAR_BIT(USARTx->CR2, (USART_CR2_LINEN | USART_CR2_CLKEN));
CLEAR_BIT(USARTx->CR3, (USART_CR3_SCEN | USART_CR3_HDSEL | USART_CR3_IREN));
}
@@ -2630,6 +2771,21 @@ __STATIC_INLINE uint32_t LL_USART_IsActiveFlag_RWU(USART_TypeDef *USARTx)
return ((READ_BIT(USARTx->ISR, USART_ISR_RWU) == (USART_ISR_RWU)) ? 1UL : 0UL);
}
+#if defined(USART_CR1_UESM)
+/**
+ * @brief Check if the USART Wake Up from stop mode Flag is set or not
+ * @note Macro @ref IS_UART_WAKEUP_FROMSTOP_INSTANCE(USARTx) can be used to check whether or not
+ * Wake-up from Stop mode feature is supported by the USARTx instance.
+ * @rmtoll ISR WUF LL_USART_IsActiveFlag_WKUP
+ * @param USARTx USART Instance
+ * @retval State of bit (1 or 0).
+ */
+__STATIC_INLINE uint32_t LL_USART_IsActiveFlag_WKUP(USART_TypeDef *USARTx)
+{
+ return ((READ_BIT(USARTx->ISR, USART_ISR_WUF) == (USART_ISR_WUF)) ? 1UL : 0UL);
+}
+
+#endif /* USART_CR1_UESM */
/**
* @brief Check if the USART Transmit Enable Acknowledge Flag is set or not
* @rmtoll ISR TEACK LL_USART_IsActiveFlag_TEACK
@@ -2641,6 +2797,19 @@ __STATIC_INLINE uint32_t LL_USART_IsActiveFlag_TEACK(USART_TypeDef *USARTx)
return ((READ_BIT(USARTx->ISR, USART_ISR_TEACK) == (USART_ISR_TEACK)) ? 1UL : 0UL);
}
+#if defined(USART_ISR_REACK)
+/**
+ * @brief Check if the USART Receive Enable Acknowledge Flag is set or not
+ * @rmtoll ISR REACK LL_USART_IsActiveFlag_REACK
+ * @param USARTx USART Instance
+ * @retval State of bit (1 or 0).
+ */
+__STATIC_INLINE uint32_t LL_USART_IsActiveFlag_REACK(USART_TypeDef *USARTx)
+{
+ return ((READ_BIT(USARTx->ISR, USART_ISR_REACK) == (USART_ISR_REACK)) ? 1UL : 0UL);
+}
+
+#endif/* USART_ISR_REACK */
#if defined(USART_TCBGT_SUPPORT)
/* Function available only on devices supporting Transmit Complete before Guard Time feature */
/**
@@ -2653,8 +2822,8 @@ __STATIC_INLINE uint32_t LL_USART_IsActiveFlag_TCBGT(USART_TypeDef *USARTx)
{
return ((READ_BIT(USARTx->ISR, USART_ISR_TCBGT) == (USART_ISR_TCBGT)) ? 1UL : 0UL);
}
-#endif
+#endif /* USART_TCBGT_SUPPORT */
/**
* @brief Clear Parity Error Flag
* @rmtoll ICR PECF LL_USART_ClearFlag_PE
@@ -2733,7 +2902,7 @@ __STATIC_INLINE void LL_USART_ClearFlag_TCBGT(USART_TypeDef *USARTx)
{
WRITE_REG(USARTx->ICR, USART_ICR_TCBGTCF);
}
-#endif
+#endif /* USART_TCBGT_SUPPORT */
/**
* @brief Clear LIN Break Detection Flag
@@ -2796,6 +2965,21 @@ __STATIC_INLINE void LL_USART_ClearFlag_CM(USART_TypeDef *USARTx)
WRITE_REG(USARTx->ICR, USART_ICR_CMCF);
}
+#if defined(USART_CR1_UESM)
+/**
+ * @brief Clear Wake Up from stop mode Flag
+ * @note Macro @ref IS_UART_WAKEUP_FROMSTOP_INSTANCE(USARTx) can be used to check whether or not
+ * Wake-up from Stop mode feature is supported by the USARTx instance.
+ * @rmtoll ICR WUCF LL_USART_ClearFlag_WKUP
+ * @param USARTx USART Instance
+ * @retval None
+ */
+__STATIC_INLINE void LL_USART_ClearFlag_WKUP(USART_TypeDef *USARTx)
+{
+ WRITE_REG(USARTx->ICR, USART_ICR_WUCF);
+}
+
+#endif /* USART_CR1_UESM */
/**
* @}
*/
@@ -2935,6 +3119,21 @@ __STATIC_INLINE void LL_USART_EnableIT_CTS(USART_TypeDef *USARTx)
SET_BIT(USARTx->CR3, USART_CR3_CTSIE);
}
+#if defined(USART_CR1_UESM)
+/**
+ * @brief Enable Wake Up from Stop Mode Interrupt
+ * @note Macro @ref IS_UART_WAKEUP_FROMSTOP_INSTANCE(USARTx) can be used to check whether or not
+ * Wake-up from Stop mode feature is supported by the USARTx instance.
+ * @rmtoll CR3 WUFIE LL_USART_EnableIT_WKUP
+ * @param USARTx USART Instance
+ * @retval None
+ */
+__STATIC_INLINE void LL_USART_EnableIT_WKUP(USART_TypeDef *USARTx)
+{
+ SET_BIT(USARTx->CR3, USART_CR3_WUFIE);
+}
+
+#endif /* USART_CR1_UESM */
#if defined(USART_TCBGT_SUPPORT)
/* Function available only on devices supporting Transmit Complete before Guard Time feature */
/**
@@ -2949,7 +3148,7 @@ __STATIC_INLINE void LL_USART_EnableIT_TCBGT(USART_TypeDef *USARTx)
{
SET_BIT(USARTx->CR3, USART_CR3_TCBGTIE);
}
-#endif
+#endif /* USART_TCBGT_SUPPORT */
/**
* @brief Disable IDLE Interrupt
@@ -3082,6 +3281,21 @@ __STATIC_INLINE void LL_USART_DisableIT_CTS(USART_TypeDef *USARTx)
CLEAR_BIT(USARTx->CR3, USART_CR3_CTSIE);
}
+#if defined(USART_CR1_UESM)
+/**
+ * @brief Disable Wake Up from Stop Mode Interrupt
+ * @note Macro @ref IS_UART_WAKEUP_FROMSTOP_INSTANCE(USARTx) can be used to check whether or not
+ * Wake-up from Stop mode feature is supported by the USARTx instance.
+ * @rmtoll CR3 WUFIE LL_USART_DisableIT_WKUP
+ * @param USARTx USART Instance
+ * @retval None
+ */
+__STATIC_INLINE void LL_USART_DisableIT_WKUP(USART_TypeDef *USARTx)
+{
+ CLEAR_BIT(USARTx->CR3, USART_CR3_WUFIE);
+}
+
+#endif /* USART_CR1_UESM */
#if defined(USART_TCBGT_SUPPORT)
/* Function available only on devices supporting Transmit Complete before Guard Time feature */
/**
@@ -3096,7 +3310,7 @@ __STATIC_INLINE void LL_USART_DisableIT_TCBGT(USART_TypeDef *USARTx)
{
CLEAR_BIT(USARTx->CR3, USART_CR3_TCBGTIE);
}
-#endif
+#endif /* USART_TCBGT_SUPPORT */
/**
* @brief Check if the USART IDLE Interrupt source is enabled or disabled.
@@ -3225,6 +3439,21 @@ __STATIC_INLINE uint32_t LL_USART_IsEnabledIT_CTS(USART_TypeDef *USARTx)
return ((READ_BIT(USARTx->CR3, USART_CR3_CTSIE) == (USART_CR3_CTSIE)) ? 1UL : 0UL);
}
+#if defined(USART_CR1_UESM)
+/**
+ * @brief Check if the USART Wake Up from Stop Mode Interrupt is enabled or disabled.
+ * @note Macro @ref IS_UART_WAKEUP_FROMSTOP_INSTANCE(USARTx) can be used to check whether or not
+ * Wake-up from Stop mode feature is supported by the USARTx instance.
+ * @rmtoll CR3 WUFIE LL_USART_IsEnabledIT_WKUP
+ * @param USARTx USART Instance
+ * @retval State of bit (1 or 0).
+ */
+__STATIC_INLINE uint32_t LL_USART_IsEnabledIT_WKUP(USART_TypeDef *USARTx)
+{
+ return ((READ_BIT(USARTx->CR3, USART_CR3_WUFIE) == (USART_CR3_WUFIE)) ? 1UL : 0UL);
+}
+
+#endif /* USART_CR1_UESM */
#if defined(USART_TCBGT_SUPPORT)
/* Function available only on devices supporting Transmit Complete before Guard Time feature */
/**
@@ -3239,7 +3468,7 @@ __STATIC_INLINE uint32_t LL_USART_IsEnabledIT_TCBGT(USART_TypeDef *USARTx)
{
return ((READ_BIT(USARTx->CR3, USART_CR3_TCBGTIE) == (USART_CR3_TCBGTIE)) ? 1UL : 0UL);
}
-#endif
+#endif /* USART_TCBGT_SUPPORT */
/**
* @}
@@ -3365,12 +3594,12 @@ __STATIC_INLINE uint32_t LL_USART_DMA_GetRegAddr(USART_TypeDef *USARTx, uint32_t
if (Direction == LL_USART_DMA_REG_DATA_TRANSMIT)
{
/* return address of TDR register */
- data_reg_addr = (uint32_t) & (USARTx->TDR);
+ data_reg_addr = (uint32_t) &(USARTx->TDR);
}
else
{
/* return address of RDR register */
- data_reg_addr = (uint32_t) & (USARTx->RDR);
+ data_reg_addr = (uint32_t) &(USARTx->RDR);
}
return data_reg_addr;
@@ -3392,7 +3621,7 @@ __STATIC_INLINE uint32_t LL_USART_DMA_GetRegAddr(USART_TypeDef *USARTx, uint32_t
*/
__STATIC_INLINE uint8_t LL_USART_ReceiveData8(USART_TypeDef *USARTx)
{
- return (uint8_t)(READ_BIT(USARTx->RDR, USART_RDR_RDR));
+ return (uint8_t)(READ_BIT(USARTx->RDR, USART_RDR_RDR) & 0xFFU);
}
/**
diff --git a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_GCC/Boot/lib/STM32F7xx_HAL_Driver/Inc/stm32f7xx_ll_usb.h b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_GCC/Boot/lib/STM32F7xx_HAL_Driver/Inc/stm32f7xx_ll_usb.h
index 1f768abf..44bf4853 100644
--- a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_GCC/Boot/lib/STM32F7xx_HAL_Driver/Inc/stm32f7xx_ll_usb.h
+++ b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_GCC/Boot/lib/STM32F7xx_HAL_Driver/Inc/stm32f7xx_ll_usb.h
@@ -155,7 +155,7 @@ typedef struct
typedef struct
{
- uint8_t dev_addr ; /*!< USB device address.
+ uint8_t dev_addr; /*!< USB device address.
This parameter must be a number between Min_Data = 1 and Max_Data = 255 */
uint8_t ch_num; /*!< Host channel number.
@@ -199,10 +199,10 @@ typedef struct
uint32_t ErrCnt; /*!< Host channel error count.*/
- USB_OTG_URBStateTypeDef urb_state; /*!< URB state.
+ USB_OTG_URBStateTypeDef urb_state; /*!< URB state.
This parameter can be any value of @ref USB_OTG_URBStateTypeDef */
- USB_OTG_HCStateTypeDef state; /*!< Host Channel state.
+ USB_OTG_HCStateTypeDef state; /*!< Host Channel state.
This parameter can be any value of @ref USB_OTG_HCStateTypeDef */
} USB_OTG_HCTypeDef;
#endif /* defined (USB_OTG_FS) || defined (USB_OTG_HS) */
@@ -234,6 +234,18 @@ typedef struct
* @}
*/
+/** @defgroup USB_LL Device Speed
+ * @{
+ */
+#define USBD_HS_SPEED 0U
+#define USBD_HSINFS_SPEED 1U
+#define USBH_HS_SPEED 0U
+#define USBD_FS_SPEED 2U
+#define USBH_FSLS_SPEED 1U
+/**
+ * @}
+ */
+
/** @defgroup USB_LL_Core_Speed USB Low Layer Core Speed
* @{
*/
@@ -252,7 +264,7 @@ typedef struct
#define USB_OTG_HS_EMBEDDED_PHY 3U
#if !defined (USB_HS_PHYC_TUNE_VALUE)
-#define USB_HS_PHYC_TUNE_VALUE 0x00000F13U /*!< Value of USB HS PHY Tune */
+#define USB_HS_PHYC_TUNE_VALUE 0x00000F13U /*!< Value of USB HS PHY Tune */
#endif /* USB_HS_PHYC_TUNE_VALUE */
/**
* @}
@@ -262,11 +274,11 @@ typedef struct
* @{
*/
#ifndef USBD_HS_TRDT_VALUE
-#define USBD_HS_TRDT_VALUE 9U
+#define USBD_HS_TRDT_VALUE 9U
#endif /* USBD_HS_TRDT_VALUE */
#ifndef USBD_FS_TRDT_VALUE
-#define USBD_FS_TRDT_VALUE 5U
-#define USBD_DEFAULT_TRDT_VALUE 9U
+#define USBD_FS_TRDT_VALUE 5U
+#define USBD_DEFAULT_TRDT_VALUE 9U
#endif /* USBD_HS_TRDT_VALUE */
/**
* @}
@@ -275,9 +287,9 @@ typedef struct
/** @defgroup USB_LL_Core_MPS USB Low Layer Core MPS
* @{
*/
-#define USB_OTG_HS_MAX_PACKET_SIZE 512U
-#define USB_OTG_FS_MAX_PACKET_SIZE 64U
-#define USB_OTG_MAX_EP0_SIZE 64U
+#define USB_OTG_HS_MAX_PACKET_SIZE 512U
+#define USB_OTG_FS_MAX_PACKET_SIZE 64U
+#define USB_OTG_MAX_EP0_SIZE 64U
/**
* @}
*/
@@ -287,7 +299,6 @@ typedef struct
*/
#define DSTS_ENUMSPD_HS_PHY_30MHZ_OR_60MHZ (0U << 1)
#define DSTS_ENUMSPD_FS_PHY_30MHZ_OR_60MHZ (1U << 1)
-#define DSTS_ENUMSPD_LS_PHY_6MHZ (2U << 1)
#define DSTS_ENUMSPD_FS_PHY_48MHZ (3U << 1)
/**
* @}
@@ -397,7 +408,7 @@ typedef struct
#define USBPHYC ((USBPHYC_GlobalTypeDef *)((uint32_t )USB_PHY_HS_CONTROLLER_BASE))
#endif /* defined (USB_OTG_FS) || defined (USB_OTG_HS) */
-#define EP_ADDR_MSK 0xFU
+#define EP_ADDR_MSK 0xFU
/**
* @}
*/
@@ -462,13 +473,9 @@ HAL_StatusTypeDef USB_ResetPort(USB_OTG_GlobalTypeDef *USBx);
HAL_StatusTypeDef USB_DriveVbus(USB_OTG_GlobalTypeDef *USBx, uint8_t state);
uint32_t USB_GetHostSpeed(USB_OTG_GlobalTypeDef *USBx);
uint32_t USB_GetCurrentFrame(USB_OTG_GlobalTypeDef *USBx);
-HAL_StatusTypeDef USB_HC_Init(USB_OTG_GlobalTypeDef *USBx,
- uint8_t ch_num,
- uint8_t epnum,
- uint8_t dev_address,
- uint8_t speed,
- uint8_t ep_type,
- uint16_t mps);
+HAL_StatusTypeDef USB_HC_Init(USB_OTG_GlobalTypeDef *USBx, uint8_t ch_num,
+ uint8_t epnum, uint8_t dev_address, uint8_t speed,
+ uint8_t ep_type, uint16_t mps);
HAL_StatusTypeDef USB_HC_StartXfer(USB_OTG_GlobalTypeDef *USBx, USB_OTG_HCTypeDef *hc, uint8_t dma);
uint32_t USB_HC_ReadInterrupt(USB_OTG_GlobalTypeDef *USBx);
HAL_StatusTypeDef USB_HC_Halt(USB_OTG_GlobalTypeDef *USBx, uint8_t hc_num);
diff --git a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_GCC/Boot/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal.c b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_GCC/Boot/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal.c
index 81a39d76..48bbd535 100644
--- a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_GCC/Boot/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal.c
+++ b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_GCC/Boot/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal.c
@@ -50,11 +50,11 @@
* @{
*/
/**
- * @brief STM32F7xx HAL Driver version number V1.2.7
+ * @brief STM32F7xx HAL Driver version number V1.2.8
*/
#define __STM32F7xx_HAL_VERSION_MAIN (0x01) /*!< [31:24] main version */
#define __STM32F7xx_HAL_VERSION_SUB1 (0x02) /*!< [23:16] sub1 version */
-#define __STM32F7xx_HAL_VERSION_SUB2 (0x07) /*!< [15:8] sub2 version */
+#define __STM32F7xx_HAL_VERSION_SUB2 (0x08) /*!< [15:8] sub2 version */
#define __STM32F7xx_HAL_VERSION_RC (0x00) /*!< [7:0] release candidate */
#define __STM32F7xx_HAL_VERSION ((__STM32F7xx_HAL_VERSION_MAIN << 24)\
|(__STM32F7xx_HAL_VERSION_SUB1 << 16)\
@@ -319,14 +319,26 @@ uint32_t HAL_GetTickPrio(void)
HAL_StatusTypeDef HAL_SetTickFreq(HAL_TickFreqTypeDef Freq)
{
HAL_StatusTypeDef status = HAL_OK;
+ HAL_TickFreqTypeDef prevTickFreq;
+
assert_param(IS_TICKFREQ(Freq));
if (uwTickFreq != Freq)
{
+ /* Back up uwTickFreq frequency */
+ prevTickFreq = uwTickFreq;
+
+ /* Update uwTickFreq global variable used by HAL_InitTick() */
uwTickFreq = Freq;
/* Apply the new tick Freq */
status = HAL_InitTick(uwTickPrio);
+
+ if (status != HAL_OK)
+ {
+ /* Restore previous tick frequency */
+ uwTickFreq = prevTickFreq;
+ }
}
return status;
diff --git a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_GCC/Boot/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_can.c b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_GCC/Boot/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_can.c
index 6978c4da..a381dfc4 100644
--- a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_GCC/Boot/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_can.c
+++ b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_GCC/Boot/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_can.c
@@ -1556,7 +1556,7 @@ HAL_StatusTypeDef HAL_CAN_GetRxMessage(CAN_HandleTypeDef *hcan, uint32_t RxFifo,
{
pHeader->ExtId = ((CAN_RI0R_EXID | CAN_RI0R_STID) & hcan->Instance->sFIFOMailBox[RxFifo].RIR) >> CAN_RI0R_EXID_Pos;
}
- pHeader->RTR = (CAN_RI0R_RTR & hcan->Instance->sFIFOMailBox[RxFifo].RIR) >> CAN_RI0R_RTR_Pos;
+ pHeader->RTR = (CAN_RI0R_RTR & hcan->Instance->sFIFOMailBox[RxFifo].RIR);
pHeader->DLC = (CAN_RDT0R_DLC & hcan->Instance->sFIFOMailBox[RxFifo].RDTR) >> CAN_RDT0R_DLC_Pos;
pHeader->FilterMatchIndex = (CAN_RDT0R_FMI & hcan->Instance->sFIFOMailBox[RxFifo].RDTR) >> CAN_RDT0R_FMI_Pos;
pHeader->Timestamp = (CAN_RDT0R_TIME & hcan->Instance->sFIFOMailBox[RxFifo].RDTR) >> CAN_RDT0R_TIME_Pos;
diff --git a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_GCC/Boot/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_exti.c b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_GCC/Boot/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_exti.c
index 07e53536..246f4562 100644
--- a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_GCC/Boot/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_exti.c
+++ b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_GCC/Boot/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_exti.c
@@ -85,7 +85,6 @@
/* Includes ------------------------------------------------------------------*/
#include "stm32f7xx_hal.h"
-#include "stm32f7xx_hal_exti.h"
/** @addtogroup STM32F7xx_HAL_Driver
* @{
@@ -105,7 +104,7 @@
#ifdef HAL_EXTI_MODULE_ENABLED
/* Private typedef -----------------------------------------------------------*/
-/* Private defines ------------------------------------------------------------*/
+/* Private defines -----------------------------------------------------------*/
/** @defgroup EXTI_Private_Constants EXTI Private Constants
* @{
*/
@@ -144,6 +143,8 @@
HAL_StatusTypeDef HAL_EXTI_SetConfigLine(EXTI_HandleTypeDef *hexti, EXTI_ConfigTypeDef *pExtiConfig)
{
uint32_t regval;
+ uint32_t linepos;
+ uint32_t maskline;
/* Check null pointer */
if ((hexti == NULL) || (pExtiConfig == NULL))
@@ -154,37 +155,77 @@ HAL_StatusTypeDef HAL_EXTI_SetConfigLine(EXTI_HandleTypeDef *hexti, EXTI_ConfigT
/* Check parameters */
assert_param(IS_EXTI_LINE(pExtiConfig->Line));
assert_param(IS_EXTI_MODE(pExtiConfig->Mode));
- assert_param(IS_EXTI_TRIGGER(pExtiConfig->Trigger));
-
+
/* Assign line number to handle */
hexti->Line = pExtiConfig->Line;
-
- /* Clear EXTI line configuration */
- EXTI->IMR &= ~pExtiConfig->Line;
- EXTI->EMR &= ~pExtiConfig->Line;
-
- /* Select the Mode for the selected external interrupts */
- regval = (uint32_t)EXTI_BASE;
- regval += pExtiConfig->Mode;
- *(__IO uint32_t *) regval |= pExtiConfig->Line;
-
- /* Clear Rising Falling edge configuration */
- EXTI->RTSR &= ~pExtiConfig->Line;
- EXTI->FTSR &= ~pExtiConfig->Line;
-
- /* Select the trigger for the selected external interrupts */
- if (pExtiConfig->Trigger == EXTI_TRIGGER_RISING_FALLING)
+
+ /* Compute line mask */
+ linepos = (pExtiConfig->Line & EXTI_PIN_MASK);
+ maskline = (1uL << linepos);
+
+ /* Configure triggers for configurable lines */
+ if ((pExtiConfig->Line & EXTI_CONFIG) != 0x00u)
{
- /* Rising Falling edge */
- EXTI->RTSR |= pExtiConfig->Line;
- EXTI->FTSR |= pExtiConfig->Line;
+ assert_param(IS_EXTI_TRIGGER(pExtiConfig->Trigger));
+
+ /* Configure rising trigger */
+ /* Mask or set line */
+ if ((pExtiConfig->Trigger & EXTI_TRIGGER_RISING) != 0x00u)
+ {
+ EXTI->RTSR |= maskline;
+ }
+ else
+ {
+ EXTI->RTSR &= ~maskline;
+ }
+
+ /* Configure falling trigger */
+ /* Mask or set line */
+ if ((pExtiConfig->Trigger & EXTI_TRIGGER_FALLING) != 0x00u)
+ {
+ EXTI->FTSR |= maskline;
+ }
+ else
+ {
+ EXTI->FTSR &= ~maskline;
+ }
+
+
+ /* Configure gpio port selection in case of gpio exti line */
+ if ((pExtiConfig->Line & EXTI_GPIO) == EXTI_GPIO)
+ {
+ assert_param(IS_EXTI_GPIO_PORT(pExtiConfig->GPIOSel));
+ assert_param(IS_EXTI_GPIO_PIN(linepos));
+
+ regval = SYSCFG->EXTICR[linepos >> 2u];
+ regval &= ~(SYSCFG_EXTICR1_EXTI0 << (SYSCFG_EXTICR1_EXTI1_Pos * (linepos & 0x03u)));
+ regval |= (pExtiConfig->GPIOSel << (SYSCFG_EXTICR1_EXTI1_Pos * (linepos & 0x03u)));
+ SYSCFG->EXTICR[linepos >> 2u] = regval;
+ }
+ }
+
+ /* Configure interrupt mode : read current mode */
+ /* Mask or set line */
+ if ((pExtiConfig->Mode & EXTI_MODE_INTERRUPT) != 0x00u)
+ {
+ EXTI->IMR |= maskline;
}
else
{
- regval = (uint32_t)EXTI_BASE;
- regval += pExtiConfig->Trigger;
- *(__IO uint32_t *) regval |= pExtiConfig->Line;
+ EXTI->IMR &= ~maskline;
}
+
+ /* Configure event mode : read current mode */
+ /* Mask or set line */
+ if ((pExtiConfig->Mode & EXTI_MODE_EVENT) != 0x00u)
+ {
+ EXTI->EMR |= maskline;
+ }
+ else
+ {
+ EXTI->EMR &= ~maskline;
+ }
+
return HAL_OK;
}
@@ -196,6 +237,10 @@ HAL_StatusTypeDef HAL_EXTI_SetConfigLine(EXTI_HandleTypeDef *hexti, EXTI_ConfigT
*/
HAL_StatusTypeDef HAL_EXTI_GetConfigLine(EXTI_HandleTypeDef *hexti, EXTI_ConfigTypeDef *pExtiConfig)
{
+ uint32_t regval;
+ uint32_t linepos;
+ uint32_t maskline;
+
/* Check null pointer */
if ((hexti == NULL) || (pExtiConfig == NULL))
{
@@ -208,41 +253,67 @@ HAL_StatusTypeDef HAL_EXTI_GetConfigLine(EXTI_HandleTypeDef *hexti, EXTI_ConfigT
/* Store handle line number to configuration structure */
pExtiConfig->Line = hexti->Line;
- /* Get EXTI mode to configiguration structure */
- if ((EXTI->IMR & hexti->Line) == hexti->Line)
+ /* Compute line mask */
+ linepos = (pExtiConfig->Line & EXTI_PIN_MASK);
+ maskline = (1uL << linepos);
+
+ /* 1] Get core mode : interrupt */
+
+ /* Check if selected line is enable */
+ if ((EXTI->IMR & maskline) != 0x00u)
{
pExtiConfig->Mode = EXTI_MODE_INTERRUPT;
}
- else if ((EXTI->EMR & hexti->Line) == hexti->Line)
- {
- pExtiConfig->Mode = EXTI_MODE_EVENT;
- }
else
{
- /* No MODE selected */
- pExtiConfig->Mode = 0x0Bu;
+ pExtiConfig->Mode = EXTI_MODE_NONE;
}
- /* Get EXTI Trigger to configiguration structure */
- if ((EXTI->RTSR & hexti->Line) == hexti->Line)
+ /* Get event mode */
+ /* Check if selected line is enable */
+ if ((EXTI->EMR & maskline) != 0x00u)
{
- if ((EXTI->FTSR & hexti->Line) == hexti->Line)
- {
- pExtiConfig->Trigger = EXTI_TRIGGER_RISING_FALLING;
- }
- else
+ pExtiConfig->Mode |= EXTI_MODE_EVENT;
+ }
+
+ /* 2] Get trigger for configurable lines : rising */
+ if ((pExtiConfig->Line & EXTI_CONFIG) != 0x00u)
+ {
+ /* Check if configuration of selected line is enable */
+ if ((EXTI->RTSR & maskline) != 0x00u)
{
pExtiConfig->Trigger = EXTI_TRIGGER_RISING;
}
- }
- else if ((EXTI->FTSR & hexti->Line) == hexti->Line)
- {
- pExtiConfig->Trigger = EXTI_TRIGGER_FALLING;
+ else
+ {
+ pExtiConfig->Trigger = EXTI_TRIGGER_NONE;
+ }
+
+ /* Get falling configuration */
+ /* Check if configuration of selected line is enable */
+ if ((EXTI->FTSR & maskline) != 0x00u)
+ {
+ pExtiConfig->Trigger |= EXTI_TRIGGER_FALLING;
+ }
+
+ /* Get Gpio port selection for gpio lines */
+ if ((pExtiConfig->Line & EXTI_GPIO) == EXTI_GPIO)
+ {
+ assert_param(IS_EXTI_GPIO_PIN(linepos));
+
+ regval = SYSCFG->EXTICR[linepos >> 2u];
+ pExtiConfig->GPIOSel = ((regval << (SYSCFG_EXTICR1_EXTI1_Pos * (3uL - (linepos & 0x03u)))) >> 24);
+ }
+ else
+ {
+ pExtiConfig->GPIOSel = 0x00u;
+ }
}
else
{
/* No Trigger selected */
- pExtiConfig->Trigger = 0x00u;
+ pExtiConfig->Trigger = EXTI_TRIGGER_NONE;
+ pExtiConfig->GPIOSel = 0x00u;
}
return HAL_OK;
@@ -255,6 +326,10 @@ HAL_StatusTypeDef HAL_EXTI_GetConfigLine(EXTI_HandleTypeDef *hexti, EXTI_ConfigT
*/
HAL_StatusTypeDef HAL_EXTI_ClearConfigLine(EXTI_HandleTypeDef *hexti)
{
+ uint32_t regval;
+ uint32_t linepos;
+ uint32_t maskline;
+
/* Check null pointer */
if (hexti == NULL)
{
@@ -264,15 +339,32 @@ HAL_StatusTypeDef HAL_EXTI_ClearConfigLine(EXTI_HandleTypeDef *hexti)
/* Check the parameter */
assert_param(IS_EXTI_LINE(hexti->Line));
+ /* compute line mask */
+ linepos = (hexti->Line & EXTI_PIN_MASK);
+ maskline = (1uL << linepos);
+
/* 1] Clear interrupt mode */
- EXTI->IMR = (EXTI->IMR & ~hexti->Line);
+ EXTI->IMR = (EXTI->IMR & ~maskline);
/* 2] Clear event mode */
- EXTI->EMR = (EXTI->EMR & ~hexti->Line);
+ EXTI->EMR = (EXTI->EMR & ~maskline);
- /* 3] Clear triggers */
- EXTI->RTSR = (EXTI->RTSR & ~hexti->Line);
- EXTI->FTSR = (EXTI->FTSR & ~hexti->Line);
+ /* 3] Clear triggers in case of configurable lines */
+ if ((hexti->Line & EXTI_CONFIG) != 0x00u)
+ {
+ EXTI->RTSR = (EXTI->RTSR & ~maskline);
+ EXTI->FTSR = (EXTI->FTSR & ~maskline);
+
+ /* Get Gpio port selection for gpio lines */
+ if ((hexti->Line & EXTI_GPIO) == EXTI_GPIO)
+ {
+ assert_param(IS_EXTI_GPIO_PIN(linepos));
+
+ regval = SYSCFG->EXTICR[linepos >> 2u];
+ regval &= ~(SYSCFG_EXTICR1_EXTI0 << (SYSCFG_EXTICR1_EXTI1_Pos * (linepos & 0x03u)));
+ SYSCFG->EXTICR[linepos >> 2u] = regval;
+ }
+ }
return HAL_OK;
}
@@ -352,17 +444,18 @@ HAL_StatusTypeDef HAL_EXTI_GetHandle(EXTI_HandleTypeDef *hexti, uint32_t ExtiLin
*/
void HAL_EXTI_IRQHandler(EXTI_HandleTypeDef *hexti)
{
- __IO uint32_t *regaddr;
uint32_t regval;
+ uint32_t maskline;
+
+ /* Compute line mask */
+ maskline = (1uL << (hexti->Line & EXTI_PIN_MASK));
/* Get pending bit */
- regaddr = (&EXTI->PR);
- regval = (*regaddr & hexti->Line);
-
+ regval = (EXTI->PR & maskline);
if (regval != 0x00u)
{
/* Clear pending bit */
- *regaddr = hexti->Line;
+ EXTI->PR = maskline;
/* Call callback */
if (hexti->PendingCallback != NULL)
@@ -383,19 +476,21 @@ void HAL_EXTI_IRQHandler(EXTI_HandleTypeDef *hexti)
*/
uint32_t HAL_EXTI_GetPending(EXTI_HandleTypeDef *hexti, uint32_t Edge)
{
- __IO uint32_t *regaddr;
uint32_t regval;
+ uint32_t linepos;
+ uint32_t maskline;
/* Check parameters */
assert_param(IS_EXTI_LINE(hexti->Line));
+ assert_param(IS_EXTI_CONFIG_LINE(hexti->Line));
assert_param(IS_EXTI_PENDING_EDGE(Edge));
- /* Get pending bit */
- regaddr = &EXTI->PR;
+ /* Compute line mask */
+ linepos = (hexti->Line & EXTI_PIN_MASK);
+ maskline = (1uL << linepos);
/* return 1 if bit is set else 0 */
- regval = ((*regaddr & hexti->Line) >> POSITION_VAL(hexti->Line));
-
+ regval = ((EXTI->PR & maskline) >> linepos);
return regval;
}
@@ -410,12 +505,18 @@ uint32_t HAL_EXTI_GetPending(EXTI_HandleTypeDef *hexti, uint32_t Edge)
*/
void HAL_EXTI_ClearPending(EXTI_HandleTypeDef *hexti, uint32_t Edge)
{
+ uint32_t maskline;
+
/* Check parameters */
assert_param(IS_EXTI_LINE(hexti->Line));
+ assert_param(IS_EXTI_CONFIG_LINE(hexti->Line));
assert_param(IS_EXTI_PENDING_EDGE(Edge));
-
+
+ /* Compute line mask */
+ maskline = (1uL << (hexti->Line & EXTI_PIN_MASK));
+
/* Clear Pending bit */
- EXTI->PR = hexti->Line;
+ EXTI->PR = maskline;
}
/**
@@ -425,10 +526,17 @@ void HAL_EXTI_ClearPending(EXTI_HandleTypeDef *hexti, uint32_t Edge)
*/
void HAL_EXTI_GenerateSWI(EXTI_HandleTypeDef *hexti)
{
+ uint32_t maskline;
+
/* Check parameters */
assert_param(IS_EXTI_LINE(hexti->Line));
+ assert_param(IS_EXTI_CONFIG_LINE(hexti->Line));
- EXTI->SWIER = hexti->Line;
+ /* Compute line mask */
+ maskline = (1uL << (hexti->Line & EXTI_PIN_MASK));
+
+ /* Generate Software interrupt */
+ EXTI->SWIER = maskline;
}
/**
diff --git a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_GCC/Boot/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_gpio.c b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_GCC/Boot/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_gpio.c
index ffc617dd..0afa1df1 100644
--- a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_GCC/Boot/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_gpio.c
+++ b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_GCC/Boot/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_gpio.c
@@ -190,25 +190,6 @@ void HAL_GPIO_Init(GPIO_TypeDef *GPIOx, GPIO_InitTypeDef *GPIO_Init)
if(iocurrent == ioposition)
{
/*--------------------- GPIO Mode Configuration ------------------------*/
- /* In case of Alternate function mode selection */
- if((GPIO_Init->Mode == GPIO_MODE_AF_PP) || (GPIO_Init->Mode == GPIO_MODE_AF_OD))
- {
- /* Check the Alternate function parameter */
- assert_param(IS_GPIO_AF(GPIO_Init->Alternate));
-
- /* Configure Alternate function mapped with the current IO */
- temp = GPIOx->AFR[position >> 3];
- temp &= ~((uint32_t)0xF << ((uint32_t)(position & (uint32_t)0x07) * 4)) ;
- temp |= ((uint32_t)(GPIO_Init->Alternate) << (((uint32_t)position & (uint32_t)0x07) * 4));
- GPIOx->AFR[position >> 3] = temp;
- }
-
- /* Configure IO Direction mode (Input, Output, Alternate or Analog) */
- temp = GPIOx->MODER;
- temp &= ~(GPIO_MODER_MODER0 << (position * 2));
- temp |= ((GPIO_Init->Mode & GPIO_MODE) << (position * 2));
- GPIOx->MODER = temp;
-
/* In case of Output or Alternate function mode selection */
if((GPIO_Init->Mode == GPIO_MODE_OUTPUT_PP) || (GPIO_Init->Mode == GPIO_MODE_AF_PP) ||
(GPIO_Init->Mode == GPIO_MODE_OUTPUT_OD) || (GPIO_Init->Mode == GPIO_MODE_AF_OD))
@@ -234,6 +215,25 @@ void HAL_GPIO_Init(GPIO_TypeDef *GPIOx, GPIO_InitTypeDef *GPIO_Init)
temp |= ((GPIO_Init->Pull) << (position * 2));
GPIOx->PUPDR = temp;
+ /* In case of Alternate function mode selection */
+ if((GPIO_Init->Mode == GPIO_MODE_AF_PP) || (GPIO_Init->Mode == GPIO_MODE_AF_OD))
+ {
+ /* Check the Alternate function parameter */
+ assert_param(IS_GPIO_AF(GPIO_Init->Alternate));
+
+ /* Configure Alternate function mapped with the current IO */
+ temp = GPIOx->AFR[position >> 3];
+ temp &= ~((uint32_t)0xF << ((uint32_t)(position & (uint32_t)0x07) * 4)) ;
+ temp |= ((uint32_t)(GPIO_Init->Alternate) << (((uint32_t)position & (uint32_t)0x07) * 4));
+ GPIOx->AFR[position >> 3] = temp;
+ }
+
+ /* Configure IO Direction mode (Input, Output, Alternate or Analog) */
+ temp = GPIOx->MODER;
+ temp &= ~(GPIO_MODER_MODER0 << (position * 2));
+ temp |= ((GPIO_Init->Mode & GPIO_MODE) << (position * 2));
+ GPIOx->MODER = temp;
+
/*--------------------- EXTI Mode Configuration ------------------------*/
/* Configure the External Interrupt or event for the current IO */
if((GPIO_Init->Mode & EXTI_MODE) == EXTI_MODE)
@@ -300,7 +300,7 @@ void HAL_GPIO_DeInit(GPIO_TypeDef *GPIOx, uint32_t GPIO_Pin)
/* Check the parameters */
assert_param(IS_GPIO_ALL_INSTANCE(GPIOx));
-
+
/* Configure the port pins */
for(position = 0; position < GPIO_NUMBER; position++)
{
@@ -316,10 +316,6 @@ void HAL_GPIO_DeInit(GPIO_TypeDef *GPIOx, uint32_t GPIO_Pin)
tmp &= (((uint32_t)0x0F) << (4 * (position & 0x03)));
if(tmp == ((uint32_t)(GPIO_GET_INDEX(GPIOx)) << (4 * (position & 0x03))))
{
- /* Configure the External Interrupt or event for the current IO */
- tmp = ((uint32_t)0x0F) << (4 * (position & 0x03));
- SYSCFG->EXTICR[position >> 2] &= ~tmp;
-
/* Clear EXTI line configuration */
EXTI->IMR &= ~((uint32_t)iocurrent);
EXTI->EMR &= ~((uint32_t)iocurrent);
@@ -327,6 +323,10 @@ void HAL_GPIO_DeInit(GPIO_TypeDef *GPIOx, uint32_t GPIO_Pin)
/* Clear Rising Falling edge configuration */
EXTI->RTSR &= ~((uint32_t)iocurrent);
EXTI->FTSR &= ~((uint32_t)iocurrent);
+
+ /* Configure the External Interrupt or event for the current IO */
+ tmp = ((uint32_t)0x0F) << (4 * (position & 0x03));
+ SYSCFG->EXTICR[position >> 2] &= ~tmp;
}
/*------------------------- GPIO Mode Configuration --------------------*/
/* Configure IO Direction in Input Floating Mode */
@@ -335,14 +335,14 @@ void HAL_GPIO_DeInit(GPIO_TypeDef *GPIOx, uint32_t GPIO_Pin)
/* Configure the default Alternate Function in current IO */
GPIOx->AFR[position >> 3] &= ~((uint32_t)0xF << ((uint32_t)(position & (uint32_t)0x07) * 4)) ;
- /* Configure the default value for IO Speed */
- GPIOx->OSPEEDR &= ~(GPIO_OSPEEDER_OSPEEDR0 << (position * 2));
+ /* Deactivate the Pull-up and Pull-down resistor for the current IO */
+ GPIOx->PUPDR &= ~(GPIO_PUPDR_PUPDR0 << (position * 2));
/* Configure the default value IO Output Type */
GPIOx->OTYPER &= ~(GPIO_OTYPER_OT_0 << position) ;
- /* Deactivate the Pull-up and Pull-down resistor for the current IO */
- GPIOx->PUPDR &= ~(GPIO_PUPDR_PUPDR0 << (position * 2));
+ /* Configure the default value for IO Speed */
+ GPIOx->OSPEEDR &= ~(GPIO_OSPEEDER_OSPEEDR0 << (position * 2));
}
}
}
@@ -431,13 +431,13 @@ void HAL_GPIO_TogglePin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
/* Check the parameters */
assert_param(IS_GPIO_PIN(GPIO_Pin));
- if ((GPIOx->ODR & GPIO_Pin) == GPIO_Pin)
+ if ((GPIOx->ODR & GPIO_Pin) != 0X00u)
{
GPIOx->BSRR = (uint32_t)GPIO_Pin << GPIO_NUMBER;
}
else
{
- GPIOx->BSRR = GPIO_Pin;
+ GPIOx->BSRR = (uint32_t)GPIO_Pin;
}
}
@@ -467,10 +467,11 @@ HAL_StatusTypeDef HAL_GPIO_LockPin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
GPIOx->LCKR = GPIO_Pin;
/* Set LCKx bit(s): LCKK='1' + LCK[15-0] */
GPIOx->LCKR = tmp;
- /* Read LCKK bit*/
+ /* Read LCKR register. This read is mandatory to complete key lock sequence */
tmp = GPIOx->LCKR;
- if((GPIOx->LCKR & GPIO_LCKR_LCKK) != RESET)
+ /* Read again in order to confirm lock is active */
+ if((GPIOx->LCKR & GPIO_LCKR_LCKK) != RESET)
{
return HAL_OK;
}
diff --git a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_GCC/Boot/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_i2c.c b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_GCC/Boot/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_i2c.c
index 775bff23..ef049ec4 100644
--- a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_GCC/Boot/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_i2c.c
+++ b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_GCC/Boot/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_i2c.c
@@ -223,12 +223,12 @@
*** Callback registration ***
=============================================
-
+ [..]
The compilation flag USE_HAL_I2C_REGISTER_CALLBACKS when set to 1
allows the user to configure dynamically the driver callbacks.
Use Functions @ref HAL_I2C_RegisterCallback() or @ref HAL_I2C_RegisterAddrCallback()
to register an interrupt callback.
-
+ [..]
Function @ref HAL_I2C_RegisterCallback() allows to register following callbacks:
(+) MasterTxCpltCallback : callback for Master transmission end of transfer.
(+) MasterRxCpltCallback : callback for Master reception end of transfer.
@@ -243,9 +243,9 @@
(+) MspDeInitCallback : callback for Msp DeInit.
This function takes as parameters the HAL peripheral handle, the Callback ID
and a pointer to the user callback function.
-
+ [..]
For specific callback AddrCallback use dedicated register callbacks : @ref HAL_I2C_RegisterAddrCallback().
-
+ [..]
Use function @ref HAL_I2C_UnRegisterCallback to reset a callback to the default
weak function.
@ref HAL_I2C_UnRegisterCallback takes as parameters the HAL peripheral handle,
@@ -262,9 +262,9 @@
(+) AbortCpltCallback : callback for abort completion process.
(+) MspInitCallback : callback for Msp Init.
(+) MspDeInitCallback : callback for Msp DeInit.
-
+ [..]
For callback AddrCallback use dedicated register callbacks : @ref HAL_I2C_UnRegisterAddrCallback().
-
+ [..]
By default, after the @ref HAL_I2C_Init() and when the state is @ref HAL_I2C_STATE_RESET
all callbacks are set to the corresponding weak functions:
examples @ref HAL_I2C_MasterTxCpltCallback(), @ref HAL_I2C_MasterRxCpltCallback().
@@ -273,7 +273,7 @@
these callbacks are null (not registered beforehand).
If MspInit or MspDeInit are not null, the @ref HAL_I2C_Init()/ @ref HAL_I2C_DeInit()
keep and use the user MspInit/MspDeInit callbacks (registered beforehand) whatever the state.
-
+ [..]
Callbacks can be registered/unregistered in @ref HAL_I2C_STATE_READY state only.
Exception done MspInit/MspDeInit functions that can be registered/unregistered
in @ref HAL_I2C_STATE_READY or @ref HAL_I2C_STATE_RESET state,
@@ -281,7 +281,7 @@
Then, the user first registers the MspInit/MspDeInit user callbacks
using @ref HAL_I2C_RegisterCallback() before calling @ref HAL_I2C_DeInit()
or @ref HAL_I2C_Init() function.
-
+ [..]
When the compilation flag USE_HAL_I2C_REGISTER_CALLBACKS is set to 0 or
not defined, the callback registration feature is not available and all callbacks
are set to the corresponding weak functions.
@@ -4737,6 +4737,13 @@ static HAL_StatusTypeDef I2C_Slave_ISR_IT(struct __I2C_HandleTypeDef *hi2c, uint
/* Process locked */
__HAL_LOCK(hi2c);
+ /* Check if STOPF is set */
+ if ((I2C_CHECK_FLAG(tmpITFlags, I2C_FLAG_STOPF) != RESET) && (I2C_CHECK_IT_SOURCE(ITSources, I2C_IT_STOPI) != RESET))
+ {
+ /* Call I2C Slave complete process */
+ I2C_ITSlaveCplt(hi2c, tmpITFlags);
+ }
+
if ((I2C_CHECK_FLAG(tmpITFlags, I2C_FLAG_AF) != RESET) && (I2C_CHECK_IT_SOURCE(ITSources, I2C_IT_NACKI) != RESET))
{
/* Check that I2C transfer finished */
@@ -4788,9 +4795,6 @@ static HAL_StatusTypeDef I2C_Slave_ISR_IT(struct __I2C_HandleTypeDef *hi2c, uint
{
if (hi2c->XferCount > 0U)
{
- /* Remove RXNE flag on temporary variable as read done */
- tmpITFlags &= ~I2C_FLAG_RXNE;
-
/* Read data from RXDR */
*hi2c->pBuffPtr = (uint8_t)hi2c->Instance->RXDR;
@@ -4844,13 +4848,6 @@ static HAL_StatusTypeDef I2C_Slave_ISR_IT(struct __I2C_HandleTypeDef *hi2c, uint
/* Nothing to do */
}
- /* Check if STOPF is set */
- if ((I2C_CHECK_FLAG(tmpITFlags, I2C_FLAG_STOPF) != RESET) && (I2C_CHECK_IT_SOURCE(ITSources, I2C_IT_STOPI) != RESET))
- {
- /* Call I2C Slave complete process */
- I2C_ITSlaveCplt(hi2c, tmpITFlags);
- }
-
/* Process Unlocked */
__HAL_UNLOCK(hi2c);
@@ -5008,6 +5005,13 @@ static HAL_StatusTypeDef I2C_Slave_ISR_DMA(struct __I2C_HandleTypeDef *hi2c, uin
/* Process locked */
__HAL_LOCK(hi2c);
+ /* Check if STOPF is set */
+ if ((I2C_CHECK_FLAG(ITFlags, I2C_FLAG_STOPF) != RESET) && (I2C_CHECK_IT_SOURCE(ITSources, I2C_IT_STOPI) != RESET))
+ {
+ /* Call I2C Slave complete process */
+ I2C_ITSlaveCplt(hi2c, ITFlags);
+ }
+
if ((I2C_CHECK_FLAG(ITFlags, I2C_FLAG_AF) != RESET) && (I2C_CHECK_IT_SOURCE(ITSources, I2C_IT_NACKI) != RESET))
{
/* Check that I2C transfer finished */
@@ -5092,11 +5096,6 @@ static HAL_StatusTypeDef I2C_Slave_ISR_DMA(struct __I2C_HandleTypeDef *hi2c, uin
{
I2C_ITAddrCplt(hi2c, ITFlags);
}
- else if ((I2C_CHECK_FLAG(ITFlags, I2C_FLAG_STOPF) != RESET) && (I2C_CHECK_IT_SOURCE(ITSources, I2C_IT_STOPI) != RESET))
- {
- /* Call I2C Slave complete process */
- I2C_ITSlaveCplt(hi2c, ITFlags);
- }
else
{
/* Nothing to do */
diff --git a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_GCC/Boot/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_pcd.c b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_GCC/Boot/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_pcd.c
index 2b4a5eff..ea532df6 100644
--- a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_GCC/Boot/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_pcd.c
+++ b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_GCC/Boot/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_pcd.c
@@ -122,6 +122,7 @@ static HAL_StatusTypeDef PCD_EP_OutSetupPacket_int(PCD_HandleTypeDef *hpcd, uint
*/
HAL_StatusTypeDef HAL_PCD_Init(PCD_HandleTypeDef *hpcd)
{
+ USB_OTG_GlobalTypeDef *USBx;
uint8_t i;
/* Check the PCD handle allocation */
@@ -133,6 +134,8 @@ HAL_StatusTypeDef HAL_PCD_Init(PCD_HandleTypeDef *hpcd)
/* Check the parameters */
assert_param(IS_PCD_ALL_INSTANCE(hpcd->Instance));
+ USBx = hpcd->Instance;
+
if (hpcd->State == HAL_PCD_STATE_RESET)
{
/* Allocate lock resource and initialize it */
@@ -166,6 +169,12 @@ HAL_StatusTypeDef HAL_PCD_Init(PCD_HandleTypeDef *hpcd)
hpcd->State = HAL_PCD_STATE_BUSY;
+ /* Disable DMA mode for FS instance */
+ if ((USBx->CID & (0x1U << 8)) == 0U)
+ {
+ hpcd->Init.dma_enable = 0U;
+ }
+
/* Disable the Interrupts */
__HAL_PCD_DISABLE(hpcd);
@@ -943,7 +952,7 @@ void HAL_PCD_IRQHandler(PCD_HandleTypeDef *hpcd)
{
USB_OTG_GlobalTypeDef *USBx = hpcd->Instance;
uint32_t USBx_BASE = (uint32_t)USBx;
- uint32_t i, ep_intr, epint, epnum = 0U;
+ uint32_t i, ep_intr, epint, epnum;
uint32_t fifoemptymsk, temp;
USB_OTG_EPTypeDef *ep;
@@ -962,6 +971,38 @@ void HAL_PCD_IRQHandler(PCD_HandleTypeDef *hpcd)
__HAL_PCD_CLEAR_FLAG(hpcd, USB_OTG_GINTSTS_MMIS);
}
+ /* Handle RxQLevel Interrupt */
+ if (__HAL_PCD_GET_FLAG(hpcd, USB_OTG_GINTSTS_RXFLVL))
+ {
+ USB_MASK_INTERRUPT(hpcd->Instance, USB_OTG_GINTSTS_RXFLVL);
+
+ temp = USBx->GRXSTSP;
+
+ ep = &hpcd->OUT_ep[temp & USB_OTG_GRXSTSP_EPNUM];
+
+ if (((temp & USB_OTG_GRXSTSP_PKTSTS) >> 17) == STS_DATA_UPDT)
+ {
+ if ((temp & USB_OTG_GRXSTSP_BCNT) != 0U)
+ {
+ (void)USB_ReadPacket(USBx, ep->xfer_buff,
+ (uint16_t)((temp & USB_OTG_GRXSTSP_BCNT) >> 4));
+
+ ep->xfer_buff += (temp & USB_OTG_GRXSTSP_BCNT) >> 4;
+ ep->xfer_count += (temp & USB_OTG_GRXSTSP_BCNT) >> 4;
+ }
+ }
+ else if (((temp & USB_OTG_GRXSTSP_PKTSTS) >> 17) == STS_SETUP_UPDT)
+ {
+ (void)USB_ReadPacket(USBx, (uint8_t *)hpcd->Setup, 8U);
+ ep->xfer_count += (temp & USB_OTG_GRXSTSP_BCNT) >> 4;
+ }
+ else
+ {
+ /* ... */
+ }
+ USB_UNMASK_INTERRUPT(hpcd->Instance, USB_OTG_GINTSTS_RXFLVL);
+ }
+
if (__HAL_PCD_GET_FLAG(hpcd, USB_OTG_GINTSTS_OEPINT))
{
epnum = 0U;
@@ -983,9 +1024,9 @@ void HAL_PCD_IRQHandler(PCD_HandleTypeDef *hpcd)
if ((epint & USB_OTG_DOEPINT_STUP) == USB_OTG_DOEPINT_STUP)
{
+ CLEAR_OUT_EP_INTR(epnum, USB_OTG_DOEPINT_STUP);
/* Class B setup phase done for previous decoded setup */
(void)PCD_EP_OutSetupPacket_int(hpcd, epnum);
- CLEAR_OUT_EP_INTR(epnum, USB_OTG_DOEPINT_STUP);
}
if ((epint & USB_OTG_DOEPINT_OTEPDIS) == USB_OTG_DOEPINT_OTEPDIS)
@@ -996,10 +1037,6 @@ void HAL_PCD_IRQHandler(PCD_HandleTypeDef *hpcd)
/* Clear Status Phase Received interrupt */
if ((epint & USB_OTG_DOEPINT_OTEPSPR) == USB_OTG_DOEPINT_OTEPSPR)
{
- if (hpcd->Init.dma_enable == 1U)
- {
- (void)USB_EP0_OutStart(hpcd->Instance, 1U, (uint8_t *)hpcd->Setup);
- }
CLEAR_OUT_EP_INTR(epnum, USB_OTG_DOEPINT_OTEPSPR);
}
@@ -1037,16 +1074,7 @@ void HAL_PCD_IRQHandler(PCD_HandleTypeDef *hpcd)
if (hpcd->Init.dma_enable == 1U)
{
hpcd->IN_ep[epnum].xfer_buff += hpcd->IN_ep[epnum].maxpacket;
- }
-#if (USE_HAL_PCD_REGISTER_CALLBACKS == 1U)
- hpcd->DataInStageCallback(hpcd, (uint8_t)epnum);
-#else
- HAL_PCD_DataInStageCallback(hpcd, (uint8_t)epnum);
-#endif /* USE_HAL_PCD_REGISTER_CALLBACKS */
-
- if (hpcd->Init.dma_enable == 1U)
- {
/* this is ZLP, so prepare EP0 for next setup */
if ((epnum == 0U) && (hpcd->IN_ep[epnum].xfer_len == 0U))
{
@@ -1054,6 +1082,12 @@ void HAL_PCD_IRQHandler(PCD_HandleTypeDef *hpcd)
(void)USB_EP0_OutStart(hpcd->Instance, 1U, (uint8_t *)hpcd->Setup);
}
}
+
+#if (USE_HAL_PCD_REGISTER_CALLBACKS == 1U)
+ hpcd->DataInStageCallback(hpcd, (uint8_t)epnum);
+#else
+ HAL_PCD_DataInStageCallback(hpcd, (uint8_t)epnum);
+#endif /* USE_HAL_PCD_REGISTER_CALLBACKS */
}
if ((epint & USB_OTG_DIEPINT_TOC) == USB_OTG_DIEPINT_TOC)
{
@@ -1159,8 +1193,10 @@ void HAL_PCD_IRQHandler(PCD_HandleTypeDef *hpcd)
{
USBx_INEP(i)->DIEPINT = 0xFB7FU;
USBx_INEP(i)->DIEPCTL &= ~USB_OTG_DIEPCTL_STALL;
+ USBx_INEP(i)->DIEPCTL |= USB_OTG_DIEPCTL_SNAK;
USBx_OUTEP(i)->DOEPINT = 0xFB7FU;
USBx_OUTEP(i)->DOEPCTL &= ~USB_OTG_DOEPCTL_STALL;
+ USBx_OUTEP(i)->DOEPCTL |= USB_OTG_DOEPCTL_SNAK;
}
USBx_DEVICE->DAINTMSK |= 0x10001U;
@@ -1217,38 +1253,6 @@ void HAL_PCD_IRQHandler(PCD_HandleTypeDef *hpcd)
__HAL_PCD_CLEAR_FLAG(hpcd, USB_OTG_GINTSTS_ENUMDNE);
}
- /* Handle RxQLevel Interrupt */
- if (__HAL_PCD_GET_FLAG(hpcd, USB_OTG_GINTSTS_RXFLVL))
- {
- USB_MASK_INTERRUPT(hpcd->Instance, USB_OTG_GINTSTS_RXFLVL);
-
- temp = USBx->GRXSTSP;
-
- ep = &hpcd->OUT_ep[temp & USB_OTG_GRXSTSP_EPNUM];
-
- if (((temp & USB_OTG_GRXSTSP_PKTSTS) >> 17) == STS_DATA_UPDT)
- {
- if ((temp & USB_OTG_GRXSTSP_BCNT) != 0U)
- {
- (void)USB_ReadPacket(USBx, ep->xfer_buff,
- (uint16_t)((temp & USB_OTG_GRXSTSP_BCNT) >> 4));
-
- ep->xfer_buff += (temp & USB_OTG_GRXSTSP_BCNT) >> 4;
- ep->xfer_count += (temp & USB_OTG_GRXSTSP_BCNT) >> 4;
- }
- }
- else if (((temp & USB_OTG_GRXSTSP_PKTSTS) >> 17) == STS_SETUP_UPDT)
- {
- (void)USB_ReadPacket(USBx, (uint8_t *)hpcd->Setup, 8U);
- ep->xfer_count += (temp & USB_OTG_GRXSTSP_BCNT) >> 4;
- }
- else
- {
- /* ... */
- }
- USB_UNMASK_INTERRUPT(hpcd->Instance, USB_OTG_GINTSTS_RXFLVL);
- }
-
/* Handle SOF Interrupt */
if (__HAL_PCD_GET_FLAG(hpcd, USB_OTG_GINTSTS_SOF))
{
@@ -1264,6 +1268,10 @@ void HAL_PCD_IRQHandler(PCD_HandleTypeDef *hpcd)
/* Handle Incomplete ISO IN Interrupt */
if (__HAL_PCD_GET_FLAG(hpcd, USB_OTG_GINTSTS_IISOIXFR))
{
+ /* Keep application checking the corresponding Iso IN endpoint
+ causing the incomplete Interrupt */
+ epnum = 0U;
+
#if (USE_HAL_PCD_REGISTER_CALLBACKS == 1U)
hpcd->ISOINIncompleteCallback(hpcd, (uint8_t)epnum);
#else
@@ -1276,6 +1284,10 @@ void HAL_PCD_IRQHandler(PCD_HandleTypeDef *hpcd)
/* Handle Incomplete ISO OUT Interrupt */
if (__HAL_PCD_GET_FLAG(hpcd, USB_OTG_GINTSTS_PXFR_INCOMPISOOUT))
{
+ /* Keep application checking the corresponding Iso OUT endpoint
+ causing the incomplete Interrupt */
+ epnum = 0U;
+
#if (USE_HAL_PCD_REGISTER_CALLBACKS == 1U)
hpcd->ISOOUTIncompleteCallback(hpcd, (uint8_t)epnum);
#else
@@ -1955,16 +1967,6 @@ static HAL_StatusTypeDef PCD_EP_OutXfrComplete_int(PCD_HandleTypeDef *hpcd, uint
{
CLEAR_OUT_EP_INTR(epnum, USB_OTG_DOEPINT_STPKTRX);
}
-
- /* Inform the upper layer that a setup packet is available */
-#if (USE_HAL_PCD_REGISTER_CALLBACKS == 1U)
- hpcd->SetupStageCallback(hpcd);
-#else
- HAL_PCD_SetupStageCallback(hpcd);
-#endif /* USE_HAL_PCD_REGISTER_CALLBACKS */
-
- (void)USB_EP0_OutStart(hpcd->Instance, 1U, (uint8_t *)hpcd->Setup);
- CLEAR_OUT_EP_INTR(epnum, USB_OTG_DOEPINT_STUP);
}
else if ((DoepintReg & USB_OTG_DOEPINT_OTEPSPR) == USB_OTG_DOEPINT_OTEPSPR) /* Class E */
{
@@ -1987,17 +1989,16 @@ static HAL_StatusTypeDef PCD_EP_OutXfrComplete_int(PCD_HandleTypeDef *hpcd, uint
hpcd->OUT_ep[epnum].xfer_buff += hpcd->OUT_ep[epnum].maxpacket;
-#if (USE_HAL_PCD_REGISTER_CALLBACKS == 1U)
- hpcd->DataOutStageCallback(hpcd, (uint8_t)epnum);
-#else
- HAL_PCD_DataOutStageCallback(hpcd, (uint8_t)epnum);
-#endif /* USE_HAL_PCD_REGISTER_CALLBACKS */
-
if ((epnum == 0U) && (hpcd->OUT_ep[epnum].xfer_len == 0U))
{
/* this is ZLP, so prepare EP0 for next setup */
(void)USB_EP0_OutStart(hpcd->Instance, 1U, (uint8_t *)hpcd->Setup);
}
+#if (USE_HAL_PCD_REGISTER_CALLBACKS == 1U)
+ hpcd->DataOutStageCallback(hpcd, (uint8_t)epnum);
+#else
+ HAL_PCD_DataOutStageCallback(hpcd, (uint8_t)epnum);
+#endif /* USE_HAL_PCD_REGISTER_CALLBACKS */
}
}
else
@@ -2030,6 +2031,12 @@ static HAL_StatusTypeDef PCD_EP_OutXfrComplete_int(PCD_HandleTypeDef *hpcd, uint
}
else
{
+ if ((epnum == 0U) && (hpcd->OUT_ep[epnum].xfer_len == 0U))
+ {
+ /* this is ZLP, so prepare EP0 for next setup */
+ (void)USB_EP0_OutStart(hpcd->Instance, 0U, (uint8_t *)hpcd->Setup);
+ }
+
#if (USE_HAL_PCD_REGISTER_CALLBACKS == 1U)
hpcd->DataOutStageCallback(hpcd, (uint8_t)epnum);
#else
@@ -2055,22 +2062,10 @@ static HAL_StatusTypeDef PCD_EP_OutSetupPacket_int(PCD_HandleTypeDef *hpcd, uint
uint32_t gSNPSiD = *(__IO uint32_t *)(&USBx->CID + 0x1U);
uint32_t DoepintReg = USBx_OUTEP(epnum)->DOEPINT;
- if (hpcd->Init.dma_enable == 1U)
+ if ((gSNPSiD > USB_OTG_CORE_ID_300A) &&
+ ((DoepintReg & USB_OTG_DOEPINT_STPKTRX) == USB_OTG_DOEPINT_STPKTRX))
{
- /* StupPktRcvd = 1 pending setup packet int */
- if ((gSNPSiD > USB_OTG_CORE_ID_300A) &&
- ((DoepintReg & USB_OTG_DOEPINT_STPKTRX) == USB_OTG_DOEPINT_STPKTRX))
- {
- CLEAR_OUT_EP_INTR(epnum, USB_OTG_DOEPINT_STPKTRX);
- }
- }
- else
- {
- if ((gSNPSiD == USB_OTG_CORE_ID_310A) &&
- ((DoepintReg & USB_OTG_DOEPINT_STPKTRX) == USB_OTG_DOEPINT_STPKTRX))
- {
- CLEAR_OUT_EP_INTR(epnum, USB_OTG_DOEPINT_STPKTRX);
- }
+ CLEAR_OUT_EP_INTR(epnum, USB_OTG_DOEPINT_STPKTRX);
}
/* Inform the upper layer that a setup packet is available */
diff --git a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_GCC/Boot/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_rcc.c b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_GCC/Boot/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_rcc.c
index bf33cff4..d63a6f4e 100644
--- a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_GCC/Boot/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_rcc.c
+++ b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_GCC/Boot/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_rcc.c
@@ -317,7 +317,7 @@ HAL_StatusTypeDef HAL_RCC_DeInit(void)
SystemCoreClock = HSI_VALUE;
/* Adapt Systick interrupt period */
- if(HAL_InitTick(TICK_INT_PRIORITY) != HAL_OK)
+ if (HAL_InitTick(uwTickPrio) != HAL_OK)
{
return HAL_ERROR;
}
@@ -344,10 +344,11 @@ HAL_StatusTypeDef HAL_RCC_DeInit(void)
HAL_StatusTypeDef HAL_RCC_OscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct)
{
uint32_t tickstart;
+ uint32_t pll_config;
FlagStatus pwrclkchanged = RESET;
/* Check Null pointer */
- if(RCC_OscInitStruct == NULL)
+ if (RCC_OscInitStruct == NULL)
{
return HAL_ERROR;
}
@@ -356,15 +357,15 @@ HAL_StatusTypeDef HAL_RCC_OscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct)
assert_param(IS_RCC_OSCILLATORTYPE(RCC_OscInitStruct->OscillatorType));
/*------------------------------- HSE Configuration ------------------------*/
- if(((RCC_OscInitStruct->OscillatorType) & RCC_OSCILLATORTYPE_HSE) == RCC_OSCILLATORTYPE_HSE)
+ if (((RCC_OscInitStruct->OscillatorType) & RCC_OSCILLATORTYPE_HSE) == RCC_OSCILLATORTYPE_HSE)
{
/* Check the parameters */
assert_param(IS_RCC_HSE(RCC_OscInitStruct->HSEState));
/* When the HSE is used as system clock or clock source for PLL, It can not be disabled */
- if((__HAL_RCC_GET_SYSCLK_SOURCE() == RCC_SYSCLKSOURCE_STATUS_HSE)
- || ((__HAL_RCC_GET_SYSCLK_SOURCE() == RCC_SYSCLKSOURCE_STATUS_PLLCLK) && ((RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC) == RCC_PLLCFGR_PLLSRC_HSE)))
+ if ((__HAL_RCC_GET_SYSCLK_SOURCE() == RCC_SYSCLKSOURCE_STATUS_HSE)
+ || ((__HAL_RCC_GET_SYSCLK_SOURCE() == RCC_SYSCLKSOURCE_STATUS_PLLCLK) && ((RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC) == RCC_PLLCFGR_PLLSRC_HSE)))
{
- if((__HAL_RCC_GET_FLAG(RCC_FLAG_HSERDY) != RESET) && (RCC_OscInitStruct->HSEState == RCC_HSE_OFF))
+ if ((__HAL_RCC_GET_FLAG(RCC_FLAG_HSERDY) != RESET) && (RCC_OscInitStruct->HSEState == RCC_HSE_OFF))
{
return HAL_ERROR;
}
@@ -375,15 +376,15 @@ HAL_StatusTypeDef HAL_RCC_OscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct)
__HAL_RCC_HSE_CONFIG(RCC_OscInitStruct->HSEState);
/* Check the HSE State */
- if(RCC_OscInitStruct->HSEState != RCC_HSE_OFF)
+ if (RCC_OscInitStruct->HSEState != RCC_HSE_OFF)
{
/* Get Start Tick*/
tickstart = HAL_GetTick();
/* Wait till HSE is ready */
- while(__HAL_RCC_GET_FLAG(RCC_FLAG_HSERDY) == RESET)
+ while (__HAL_RCC_GET_FLAG(RCC_FLAG_HSERDY) == RESET)
{
- if((HAL_GetTick() - tickstart ) > HSE_TIMEOUT_VALUE)
+ if ((HAL_GetTick() - tickstart) > HSE_TIMEOUT_VALUE)
{
return HAL_TIMEOUT;
}
@@ -395,9 +396,9 @@ HAL_StatusTypeDef HAL_RCC_OscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct)
tickstart = HAL_GetTick();
/* Wait till HSE is bypassed or disabled */
- while(__HAL_RCC_GET_FLAG(RCC_FLAG_HSERDY) != RESET)
+ while (__HAL_RCC_GET_FLAG(RCC_FLAG_HSERDY) != RESET)
{
- if((HAL_GetTick() - tickstart ) > HSE_TIMEOUT_VALUE)
+ if ((HAL_GetTick() - tickstart) > HSE_TIMEOUT_VALUE)
{
return HAL_TIMEOUT;
}
@@ -406,18 +407,18 @@ HAL_StatusTypeDef HAL_RCC_OscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct)
}
}
/*----------------------------- HSI Configuration --------------------------*/
- if(((RCC_OscInitStruct->OscillatorType) & RCC_OSCILLATORTYPE_HSI) == RCC_OSCILLATORTYPE_HSI)
+ if (((RCC_OscInitStruct->OscillatorType) & RCC_OSCILLATORTYPE_HSI) == RCC_OSCILLATORTYPE_HSI)
{
/* Check the parameters */
assert_param(IS_RCC_HSI(RCC_OscInitStruct->HSIState));
assert_param(IS_RCC_CALIBRATION_VALUE(RCC_OscInitStruct->HSICalibrationValue));
/* Check if HSI is used as system clock or as PLL source when PLL is selected as system clock */
- if((__HAL_RCC_GET_SYSCLK_SOURCE() == RCC_SYSCLKSOURCE_STATUS_HSI)
- || ((__HAL_RCC_GET_SYSCLK_SOURCE() == RCC_SYSCLKSOURCE_STATUS_PLLCLK) && ((RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC) == RCC_PLLCFGR_PLLSRC_HSI)))
+ if ((__HAL_RCC_GET_SYSCLK_SOURCE() == RCC_SYSCLKSOURCE_STATUS_HSI)
+ || ((__HAL_RCC_GET_SYSCLK_SOURCE() == RCC_SYSCLKSOURCE_STATUS_PLLCLK) && ((RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC) == RCC_PLLCFGR_PLLSRC_HSI)))
{
/* When HSI is used as system clock it will not disabled */
- if((__HAL_RCC_GET_FLAG(RCC_FLAG_HSIRDY) != RESET) && (RCC_OscInitStruct->HSIState != RCC_HSI_ON))
+ if ((__HAL_RCC_GET_FLAG(RCC_FLAG_HSIRDY) != RESET) && (RCC_OscInitStruct->HSIState != RCC_HSI_ON))
{
return HAL_ERROR;
}
@@ -431,7 +432,7 @@ HAL_StatusTypeDef HAL_RCC_OscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct)
else
{
/* Check the HSI State */
- if((RCC_OscInitStruct->HSIState)!= RCC_HSI_OFF)
+ if ((RCC_OscInitStruct->HSIState) != RCC_HSI_OFF)
{
/* Enable the Internal High Speed oscillator (HSI). */
__HAL_RCC_HSI_ENABLE();
@@ -440,9 +441,9 @@ HAL_StatusTypeDef HAL_RCC_OscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct)
tickstart = HAL_GetTick();
/* Wait till HSI is ready */
- while(__HAL_RCC_GET_FLAG(RCC_FLAG_HSIRDY) == RESET)
+ while (__HAL_RCC_GET_FLAG(RCC_FLAG_HSIRDY) == RESET)
{
- if((HAL_GetTick() - tickstart ) > HSI_TIMEOUT_VALUE)
+ if ((HAL_GetTick() - tickstart) > HSI_TIMEOUT_VALUE)
{
return HAL_TIMEOUT;
}
@@ -460,9 +461,9 @@ HAL_StatusTypeDef HAL_RCC_OscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct)
tickstart = HAL_GetTick();
/* Wait till HSI is ready */
- while(__HAL_RCC_GET_FLAG(RCC_FLAG_HSIRDY) != RESET)
+ while (__HAL_RCC_GET_FLAG(RCC_FLAG_HSIRDY) != RESET)
{
- if((HAL_GetTick() - tickstart ) > HSI_TIMEOUT_VALUE)
+ if ((HAL_GetTick() - tickstart) > HSI_TIMEOUT_VALUE)
{
return HAL_TIMEOUT;
}
@@ -471,13 +472,13 @@ HAL_StatusTypeDef HAL_RCC_OscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct)
}
}
/*------------------------------ LSI Configuration -------------------------*/
- if(((RCC_OscInitStruct->OscillatorType) & RCC_OSCILLATORTYPE_LSI) == RCC_OSCILLATORTYPE_LSI)
+ if (((RCC_OscInitStruct->OscillatorType) & RCC_OSCILLATORTYPE_LSI) == RCC_OSCILLATORTYPE_LSI)
{
/* Check the parameters */
assert_param(IS_RCC_LSI(RCC_OscInitStruct->LSIState));
/* Check the LSI State */
- if((RCC_OscInitStruct->LSIState)!= RCC_LSI_OFF)
+ if ((RCC_OscInitStruct->LSIState) != RCC_LSI_OFF)
{
/* Enable the Internal Low Speed oscillator (LSI). */
__HAL_RCC_LSI_ENABLE();
@@ -486,9 +487,9 @@ HAL_StatusTypeDef HAL_RCC_OscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct)
tickstart = HAL_GetTick();
/* Wait till LSI is ready */
- while(__HAL_RCC_GET_FLAG(RCC_FLAG_LSIRDY) == RESET)
+ while (__HAL_RCC_GET_FLAG(RCC_FLAG_LSIRDY) == RESET)
{
- if((HAL_GetTick() - tickstart ) > LSI_TIMEOUT_VALUE)
+ if ((HAL_GetTick() - tickstart) > LSI_TIMEOUT_VALUE)
{
return HAL_TIMEOUT;
}
@@ -503,9 +504,9 @@ HAL_StatusTypeDef HAL_RCC_OscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct)
tickstart = HAL_GetTick();
/* Wait till LSI is ready */
- while(__HAL_RCC_GET_FLAG(RCC_FLAG_LSIRDY) != RESET)
+ while (__HAL_RCC_GET_FLAG(RCC_FLAG_LSIRDY) != RESET)
{
- if((HAL_GetTick() - tickstart ) > LSI_TIMEOUT_VALUE)
+ if ((HAL_GetTick() - tickstart) > LSI_TIMEOUT_VALUE)
{
return HAL_TIMEOUT;
}
@@ -513,21 +514,21 @@ HAL_StatusTypeDef HAL_RCC_OscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct)
}
}
/*------------------------------ LSE Configuration -------------------------*/
- if(((RCC_OscInitStruct->OscillatorType) & RCC_OSCILLATORTYPE_LSE) == RCC_OSCILLATORTYPE_LSE)
+ if (((RCC_OscInitStruct->OscillatorType) & RCC_OSCILLATORTYPE_LSE) == RCC_OSCILLATORTYPE_LSE)
{
/* Check the parameters */
assert_param(IS_RCC_LSE(RCC_OscInitStruct->LSEState));
/* Update LSE configuration in Backup Domain control register */
/* Requires to enable write access to Backup Domain of necessary */
- if(__HAL_RCC_PWR_IS_CLK_DISABLED())
+ if (__HAL_RCC_PWR_IS_CLK_DISABLED())
{
/* Enable Power Clock*/
__HAL_RCC_PWR_CLK_ENABLE();
pwrclkchanged = SET;
}
- if(HAL_IS_BIT_CLR(PWR->CR1, PWR_CR1_DBP))
+ if (HAL_IS_BIT_CLR(PWR->CR1, PWR_CR1_DBP))
{
/* Enable write access to Backup domain */
PWR->CR1 |= PWR_CR1_DBP;
@@ -535,9 +536,9 @@ HAL_StatusTypeDef HAL_RCC_OscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct)
/* Wait for Backup domain Write protection disable */
tickstart = HAL_GetTick();
- while(HAL_IS_BIT_CLR(PWR->CR1, PWR_CR1_DBP))
+ while (HAL_IS_BIT_CLR(PWR->CR1, PWR_CR1_DBP))
{
- if((HAL_GetTick() - tickstart ) > RCC_DBP_TIMEOUT_VALUE)
+ if ((HAL_GetTick() - tickstart) > RCC_DBP_TIMEOUT_VALUE)
{
return HAL_TIMEOUT;
}
@@ -547,15 +548,15 @@ HAL_StatusTypeDef HAL_RCC_OscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct)
/* Set the new LSE configuration -----------------------------------------*/
__HAL_RCC_LSE_CONFIG(RCC_OscInitStruct->LSEState);
/* Check the LSE State */
- if((RCC_OscInitStruct->LSEState) != RCC_LSE_OFF)
+ if ((RCC_OscInitStruct->LSEState) != RCC_LSE_OFF)
{
/* Get Start Tick*/
tickstart = HAL_GetTick();
/* Wait till LSE is ready */
- while(__HAL_RCC_GET_FLAG(RCC_FLAG_LSERDY) == RESET)
+ while (__HAL_RCC_GET_FLAG(RCC_FLAG_LSERDY) == RESET)
{
- if((HAL_GetTick() - tickstart ) > RCC_LSE_TIMEOUT_VALUE)
+ if ((HAL_GetTick() - tickstart) > RCC_LSE_TIMEOUT_VALUE)
{
return HAL_TIMEOUT;
}
@@ -567,9 +568,9 @@ HAL_StatusTypeDef HAL_RCC_OscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct)
tickstart = HAL_GetTick();
/* Wait till LSE is ready */
- while(__HAL_RCC_GET_FLAG(RCC_FLAG_LSERDY) != RESET)
+ while (__HAL_RCC_GET_FLAG(RCC_FLAG_LSERDY) != RESET)
{
- if((HAL_GetTick() - tickstart ) > RCC_LSE_TIMEOUT_VALUE)
+ if ((HAL_GetTick() - tickstart) > RCC_LSE_TIMEOUT_VALUE)
{
return HAL_TIMEOUT;
}
@@ -577,7 +578,7 @@ HAL_StatusTypeDef HAL_RCC_OscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct)
}
/* Restore clock configuration if changed */
- if(pwrclkchanged == SET)
+ if (pwrclkchanged == SET)
{
__HAL_RCC_PWR_CLK_DISABLE();
}
@@ -588,9 +589,9 @@ HAL_StatusTypeDef HAL_RCC_OscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct)
if ((RCC_OscInitStruct->PLL.PLLState) != RCC_PLL_NONE)
{
/* Check if the PLL is used as system clock or not */
- if(__HAL_RCC_GET_SYSCLK_SOURCE() != RCC_SYSCLKSOURCE_STATUS_PLLCLK)
+ if (__HAL_RCC_GET_SYSCLK_SOURCE() != RCC_SYSCLKSOURCE_STATUS_PLLCLK)
{
- if((RCC_OscInitStruct->PLL.PLLState) == RCC_PLL_ON)
+ if ((RCC_OscInitStruct->PLL.PLLState) == RCC_PLL_ON)
{
/* Check the parameters */
assert_param(IS_RCC_PLLSOURCE(RCC_OscInitStruct->PLL.PLLSource));
@@ -609,9 +610,9 @@ HAL_StatusTypeDef HAL_RCC_OscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct)
tickstart = HAL_GetTick();
/* Wait till PLL is ready */
- while(__HAL_RCC_GET_FLAG(RCC_FLAG_PLLRDY) != RESET)
+ while (__HAL_RCC_GET_FLAG(RCC_FLAG_PLLRDY) != RESET)
{
- if((HAL_GetTick() - tickstart ) > PLL_TIMEOUT_VALUE)
+ if ((HAL_GetTick() - tickstart) > PLL_TIMEOUT_VALUE)
{
return HAL_TIMEOUT;
}
@@ -640,9 +641,9 @@ HAL_StatusTypeDef HAL_RCC_OscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct)
tickstart = HAL_GetTick();
/* Wait till PLL is ready */
- while(__HAL_RCC_GET_FLAG(RCC_FLAG_PLLRDY) == RESET)
+ while (__HAL_RCC_GET_FLAG(RCC_FLAG_PLLRDY) == RESET)
{
- if((HAL_GetTick() - tickstart ) > PLL_TIMEOUT_VALUE)
+ if ((HAL_GetTick() - tickstart) > PLL_TIMEOUT_VALUE)
{
return HAL_TIMEOUT;
}
@@ -657,9 +658,9 @@ HAL_StatusTypeDef HAL_RCC_OscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct)
tickstart = HAL_GetTick();
/* Wait till PLL is ready */
- while(__HAL_RCC_GET_FLAG(RCC_FLAG_PLLRDY) != RESET)
+ while (__HAL_RCC_GET_FLAG(RCC_FLAG_PLLRDY) != RESET)
{
- if((HAL_GetTick() - tickstart ) > PLL_TIMEOUT_VALUE)
+ if ((HAL_GetTick() - tickstart) > PLL_TIMEOUT_VALUE)
{
return HAL_TIMEOUT;
}
@@ -668,7 +669,27 @@ HAL_StatusTypeDef HAL_RCC_OscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct)
}
else
{
- return HAL_ERROR;
+ /* Do not return HAL_ERROR if request repeats the current configuration */
+ pll_config = RCC->PLLCFGR;
+#if defined (RCC_PLLCFGR_PLLR)
+ if (((RCC_OscInitStruct->PLL.PLLState) == RCC_PLL_OFF) ||
+ (READ_BIT(pll_config, RCC_PLLCFGR_PLLSRC) != RCC_OscInitStruct->PLL.PLLSource) ||
+ (READ_BIT(pll_config, RCC_PLLCFGR_PLLM) != RCC_OscInitStruct->PLL.PLLM) ||
+ (READ_BIT(pll_config, RCC_PLLCFGR_PLLN) != (RCC_OscInitStruct->PLL.PLLN << RCC_PLLCFGR_PLLN_Pos)) ||
+ (READ_BIT(pll_config, RCC_PLLCFGR_PLLP) != ((((RCC_OscInitStruct->PLL.PLLP) >> 1U) - 1U) << RCC_PLLCFGR_PLLP_Pos)) ||
+ (READ_BIT(pll_config, RCC_PLLCFGR_PLLQ) != (RCC_OscInitStruct->PLL.PLLQ << RCC_PLLCFGR_PLLQ_Pos)) ||
+ (READ_BIT(pll_config, RCC_PLLCFGR_PLLR) != (RCC_OscInitStruct->PLL.PLLR << RCC_PLLCFGR_PLLR_Pos)))
+#else
+ if (((RCC_OscInitStruct->PLL.PLLState) == RCC_PLL_OFF) ||
+ (READ_BIT(pll_config, RCC_PLLCFGR_PLLSRC) != RCC_OscInitStruct->PLL.PLLSource) ||
+ (READ_BIT(pll_config, RCC_PLLCFGR_PLLM) != RCC_OscInitStruct->PLL.PLLM) ||
+ (READ_BIT(pll_config, RCC_PLLCFGR_PLLN) != (RCC_OscInitStruct->PLL.PLLN << RCC_PLLCFGR_PLLN_Pos)) ||
+ (READ_BIT(pll_config, RCC_PLLCFGR_PLLP) != ((((RCC_OscInitStruct->PLL.PLLP) >> 1U) - 1U) << RCC_PLLCFGR_PLLP_Pos)) ||
+ (READ_BIT(pll_config, RCC_PLLCFGR_PLLQ) != (RCC_OscInitStruct->PLL.PLLQ << RCC_PLLCFGR_PLLQ_Pos)))
+#endif
+ {
+ return HAL_ERROR;
+ }
}
}
return HAL_OK;
@@ -705,7 +726,7 @@ HAL_StatusTypeDef HAL_RCC_ClockConfig(RCC_ClkInitTypeDef *RCC_ClkInitStruct, ui
uint32_t tickstart = 0;
/* Check Null pointer */
- if(RCC_ClkInitStruct == NULL)
+ if (RCC_ClkInitStruct == NULL)
{
return HAL_ERROR;
}
@@ -719,30 +740,30 @@ HAL_StatusTypeDef HAL_RCC_ClockConfig(RCC_ClkInitTypeDef *RCC_ClkInitStruct, ui
(HCLK) and the supply voltage of the device. */
/* Increasing the CPU frequency */
- if(FLatency > __HAL_FLASH_GET_LATENCY())
+ if (FLatency > __HAL_FLASH_GET_LATENCY())
{
/* Program the new number of wait states to the LATENCY bits in the FLASH_ACR register */
__HAL_FLASH_SET_LATENCY(FLatency);
/* Check that the new number of wait states is taken into account to access the Flash
memory by reading the FLASH_ACR register */
- if(__HAL_FLASH_GET_LATENCY() != FLatency)
+ if (__HAL_FLASH_GET_LATENCY() != FLatency)
{
return HAL_ERROR;
}
}
/*-------------------------- HCLK Configuration --------------------------*/
- if(((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_HCLK) == RCC_CLOCKTYPE_HCLK)
+ if (((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_HCLK) == RCC_CLOCKTYPE_HCLK)
{
/* Set the highest APBx dividers in order to ensure that we do not go through
a non-spec phase whatever we decrease or increase HCLK. */
- if(((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_PCLK1) == RCC_CLOCKTYPE_PCLK1)
+ if (((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_PCLK1) == RCC_CLOCKTYPE_PCLK1)
{
MODIFY_REG(RCC->CFGR, RCC_CFGR_PPRE1, RCC_HCLK_DIV16);
}
- if(((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_PCLK2) == RCC_CLOCKTYPE_PCLK2)
+ if (((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_PCLK2) == RCC_CLOCKTYPE_PCLK2)
{
MODIFY_REG(RCC->CFGR, RCC_CFGR_PPRE2, (RCC_HCLK_DIV16 << 3));
}
@@ -753,24 +774,24 @@ HAL_StatusTypeDef HAL_RCC_ClockConfig(RCC_ClkInitTypeDef *RCC_ClkInitStruct, ui
}
/*------------------------- SYSCLK Configuration ---------------------------*/
- if(((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_SYSCLK) == RCC_CLOCKTYPE_SYSCLK)
+ if (((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_SYSCLK) == RCC_CLOCKTYPE_SYSCLK)
{
assert_param(IS_RCC_SYSCLKSOURCE(RCC_ClkInitStruct->SYSCLKSource));
/* HSE is selected as System Clock Source */
- if(RCC_ClkInitStruct->SYSCLKSource == RCC_SYSCLKSOURCE_HSE)
+ if (RCC_ClkInitStruct->SYSCLKSource == RCC_SYSCLKSOURCE_HSE)
{
/* Check the HSE ready flag */
- if(__HAL_RCC_GET_FLAG(RCC_FLAG_HSERDY) == RESET)
+ if (__HAL_RCC_GET_FLAG(RCC_FLAG_HSERDY) == RESET)
{
return HAL_ERROR;
}
}
/* PLL is selected as System Clock Source */
- else if(RCC_ClkInitStruct->SYSCLKSource == RCC_SYSCLKSOURCE_PLLCLK)
+ else if (RCC_ClkInitStruct->SYSCLKSource == RCC_SYSCLKSOURCE_PLLCLK)
{
/* Check the PLL ready flag */
- if(__HAL_RCC_GET_FLAG(RCC_FLAG_PLLRDY) == RESET)
+ if (__HAL_RCC_GET_FLAG(RCC_FLAG_PLLRDY) == RESET)
{
return HAL_ERROR;
}
@@ -779,7 +800,7 @@ HAL_StatusTypeDef HAL_RCC_ClockConfig(RCC_ClkInitTypeDef *RCC_ClkInitStruct, ui
else
{
/* Check the HSI ready flag */
- if(__HAL_RCC_GET_FLAG(RCC_FLAG_HSIRDY) == RESET)
+ if (__HAL_RCC_GET_FLAG(RCC_FLAG_HSIRDY) == RESET)
{
return HAL_ERROR;
}
@@ -800,38 +821,38 @@ HAL_StatusTypeDef HAL_RCC_ClockConfig(RCC_ClkInitTypeDef *RCC_ClkInitStruct, ui
}
/* Decreasing the number of wait states because of lower CPU frequency */
- if(FLatency < __HAL_FLASH_GET_LATENCY())
+ if (FLatency < __HAL_FLASH_GET_LATENCY())
{
/* Program the new number of wait states to the LATENCY bits in the FLASH_ACR register */
__HAL_FLASH_SET_LATENCY(FLatency);
/* Check that the new number of wait states is taken into account to access the Flash
memory by reading the FLASH_ACR register */
- if(__HAL_FLASH_GET_LATENCY() != FLatency)
+ if (__HAL_FLASH_GET_LATENCY() != FLatency)
{
return HAL_ERROR;
}
}
/*-------------------------- PCLK1 Configuration ---------------------------*/
- if(((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_PCLK1) == RCC_CLOCKTYPE_PCLK1)
+ if (((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_PCLK1) == RCC_CLOCKTYPE_PCLK1)
{
assert_param(IS_RCC_PCLK(RCC_ClkInitStruct->APB1CLKDivider));
MODIFY_REG(RCC->CFGR, RCC_CFGR_PPRE1, RCC_ClkInitStruct->APB1CLKDivider);
}
/*-------------------------- PCLK2 Configuration ---------------------------*/
- if(((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_PCLK2) == RCC_CLOCKTYPE_PCLK2)
+ if (((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_PCLK2) == RCC_CLOCKTYPE_PCLK2)
{
assert_param(IS_RCC_PCLK(RCC_ClkInitStruct->APB2CLKDivider));
MODIFY_REG(RCC->CFGR, RCC_CFGR_PPRE2, ((RCC_ClkInitStruct->APB2CLKDivider) << 3));
}
/* Update the SystemCoreClock global variable */
- SystemCoreClock = HAL_RCC_GetSysClockFreq() >> AHBPrescTable[(RCC->CFGR & RCC_CFGR_HPRE)>> RCC_CFGR_HPRE_Pos];
+ SystemCoreClock = HAL_RCC_GetSysClockFreq() >> AHBPrescTable[(RCC->CFGR & RCC_CFGR_HPRE) >> RCC_CFGR_HPRE_Pos];
/* Configure the source of time base considering new system clocks settings*/
- HAL_InitTick (TICK_INT_PRIORITY);
+ HAL_InitTick(uwTickPrio);
return HAL_OK;
}
@@ -888,7 +909,7 @@ void HAL_RCC_MCOConfig(uint32_t RCC_MCOx, uint32_t RCC_MCOSource, uint32_t RCC_M
assert_param(IS_RCC_MCO(RCC_MCOx));
assert_param(IS_RCC_MCODIV(RCC_MCODiv));
/* RCC_MCO1 */
- if(RCC_MCOx == RCC_MCO1)
+ if (RCC_MCOx == RCC_MCO1)
{
assert_param(IS_RCC_MCO1SOURCE(RCC_MCOSource));
@@ -990,7 +1011,7 @@ uint32_t HAL_RCC_GetSysClockFreq(void)
case RCC_SYSCLKSOURCE_STATUS_HSI: /* HSI used as system clock source */
{
sysclockfreq = HSI_VALUE;
- break;
+ break;
}
case RCC_SYSCLKSOURCE_STATUS_HSE: /* HSE used as system clock source */
{
@@ -1005,16 +1026,16 @@ uint32_t HAL_RCC_GetSysClockFreq(void)
if (__HAL_RCC_GET_PLL_OSCSOURCE() != RCC_PLLCFGR_PLLSRC_HSI)
{
/* HSE used as PLL clock source */
- pllvco = (uint32_t) ((((uint64_t) HSE_VALUE * ((uint64_t) ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> RCC_PLLCFGR_PLLN_Pos)))) / (uint64_t)pllm);
+ pllvco = (uint32_t)((((uint64_t) HSE_VALUE * ((uint64_t)((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> RCC_PLLCFGR_PLLN_Pos)))) / (uint64_t)pllm);
}
else
{
/* HSI used as PLL clock source */
- pllvco = (uint32_t) ((((uint64_t) HSI_VALUE * ((uint64_t) ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> RCC_PLLCFGR_PLLN_Pos)))) / (uint64_t)pllm);
+ pllvco = (uint32_t)((((uint64_t) HSI_VALUE * ((uint64_t)((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> RCC_PLLCFGR_PLLN_Pos)))) / (uint64_t)pllm);
}
- pllp = ((((RCC->PLLCFGR & RCC_PLLCFGR_PLLP) >> RCC_PLLCFGR_PLLP_Pos) + 1 ) *2);
+ pllp = ((((RCC->PLLCFGR & RCC_PLLCFGR_PLLP) >> RCC_PLLCFGR_PLLP_Pos) + 1) * 2);
- sysclockfreq = pllvco/pllp;
+ sysclockfreq = pllvco / pllp;
break;
}
default:
@@ -1047,7 +1068,7 @@ uint32_t HAL_RCC_GetHCLKFreq(void)
uint32_t HAL_RCC_GetPCLK1Freq(void)
{
/* Get HCLK source and Compute PCLK1 frequency ---------------------------*/
- return (HAL_RCC_GetHCLKFreq() >> APBPrescTable[(RCC->CFGR & RCC_CFGR_PPRE1)>> RCC_CFGR_PPRE1_Pos]);
+ return (HAL_RCC_GetHCLKFreq() >> APBPrescTable[(RCC->CFGR & RCC_CFGR_PPRE1) >> RCC_CFGR_PPRE1_Pos]);
}
/**
@@ -1059,7 +1080,7 @@ uint32_t HAL_RCC_GetPCLK1Freq(void)
uint32_t HAL_RCC_GetPCLK2Freq(void)
{
/* Get HCLK source and Compute PCLK2 frequency ---------------------------*/
- return (HAL_RCC_GetHCLKFreq()>> APBPrescTable[(RCC->CFGR & RCC_CFGR_PPRE2)>> RCC_CFGR_PPRE2_Pos]);
+ return (HAL_RCC_GetHCLKFreq() >> APBPrescTable[(RCC->CFGR & RCC_CFGR_PPRE2) >> RCC_CFGR_PPRE2_Pos]);
}
/**
@@ -1075,11 +1096,11 @@ void HAL_RCC_GetOscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct)
RCC_OscInitStruct->OscillatorType = RCC_OSCILLATORTYPE_HSE | RCC_OSCILLATORTYPE_HSI | RCC_OSCILLATORTYPE_LSE | RCC_OSCILLATORTYPE_LSI;
/* Get the HSE configuration -----------------------------------------------*/
- if((RCC->CR &RCC_CR_HSEBYP) == RCC_CR_HSEBYP)
+ if ((RCC->CR & RCC_CR_HSEBYP) == RCC_CR_HSEBYP)
{
RCC_OscInitStruct->HSEState = RCC_HSE_BYPASS;
}
- else if((RCC->CR &RCC_CR_HSEON) == RCC_CR_HSEON)
+ else if ((RCC->CR & RCC_CR_HSEON) == RCC_CR_HSEON)
{
RCC_OscInitStruct->HSEState = RCC_HSE_ON;
}
@@ -1089,7 +1110,7 @@ void HAL_RCC_GetOscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct)
}
/* Get the HSI configuration -----------------------------------------------*/
- if((RCC->CR &RCC_CR_HSION) == RCC_CR_HSION)
+ if ((RCC->CR & RCC_CR_HSION) == RCC_CR_HSION)
{
RCC_OscInitStruct->HSIState = RCC_HSI_ON;
}
@@ -1098,14 +1119,14 @@ void HAL_RCC_GetOscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct)
RCC_OscInitStruct->HSIState = RCC_HSI_OFF;
}
- RCC_OscInitStruct->HSICalibrationValue = (uint32_t)((RCC->CR &RCC_CR_HSITRIM) >> RCC_CR_HSITRIM_Pos);
+ RCC_OscInitStruct->HSICalibrationValue = (uint32_t)((RCC->CR & RCC_CR_HSITRIM) >> RCC_CR_HSITRIM_Pos);
/* Get the LSE configuration -----------------------------------------------*/
- if((RCC->BDCR &RCC_BDCR_LSEBYP) == RCC_BDCR_LSEBYP)
+ if ((RCC->BDCR & RCC_BDCR_LSEBYP) == RCC_BDCR_LSEBYP)
{
RCC_OscInitStruct->LSEState = RCC_LSE_BYPASS;
}
- else if((RCC->BDCR &RCC_BDCR_LSEON) == RCC_BDCR_LSEON)
+ else if ((RCC->BDCR & RCC_BDCR_LSEON) == RCC_BDCR_LSEON)
{
RCC_OscInitStruct->LSEState = RCC_LSE_ON;
}
@@ -1115,7 +1136,7 @@ void HAL_RCC_GetOscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct)
}
/* Get the LSI configuration -----------------------------------------------*/
- if((RCC->CSR &RCC_CSR_LSION) == RCC_CSR_LSION)
+ if ((RCC->CSR & RCC_CSR_LSION) == RCC_CSR_LSION)
{
RCC_OscInitStruct->LSIState = RCC_LSI_ON;
}
@@ -1125,7 +1146,7 @@ void HAL_RCC_GetOscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct)
}
/* Get the PLL configuration -----------------------------------------------*/
- if((RCC->CR &RCC_CR_PLLON) == RCC_CR_PLLON)
+ if ((RCC->CR & RCC_CR_PLLON) == RCC_CR_PLLON)
{
RCC_OscInitStruct->PLL.PLLState = RCC_PLL_ON;
}
@@ -1180,7 +1201,7 @@ void HAL_RCC_GetClockConfig(RCC_ClkInitTypeDef *RCC_ClkInitStruct, uint32_t *pF
void HAL_RCC_NMI_IRQHandler(void)
{
/* Check RCC CSSF flag */
- if(__HAL_RCC_GET_IT(RCC_IT_CSS))
+ if (__HAL_RCC_GET_IT(RCC_IT_CSS))
{
/* RCC Clock Security System interrupt user callback */
HAL_RCC_CSSCallback();
diff --git a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_GCC/Boot/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_tim.c b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_GCC/Boot/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_tim.c
index c4676923..29de7d5b 100644
--- a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_GCC/Boot/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_tim.c
+++ b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_GCC/Boot/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_tim.c
@@ -98,18 +98,22 @@
*** Callback registration ***
=============================================
+ [..]
The compilation define USE_HAL_TIM_REGISTER_CALLBACKS when set to 1
allows the user to configure dynamically the driver callbacks.
+ [..]
Use Function @ref HAL_TIM_RegisterCallback() to register a callback.
@ref HAL_TIM_RegisterCallback() takes as parameters the HAL peripheral handle,
the Callback ID and a pointer to the user callback function.
+ [..]
Use function @ref HAL_TIM_UnRegisterCallback() to reset a callback to the default
weak function.
@ref HAL_TIM_UnRegisterCallback takes as parameters the HAL peripheral handle,
and the Callback ID.
+ [..]
These functions allow to register/unregister following callbacks:
(+) Base_MspInitCallback : TIM Base Msp Init Callback.
(+) Base_MspDeInitCallback : TIM Base Msp DeInit Callback.
@@ -140,15 +144,18 @@
(+) BreakCallback : TIM Break Callback.
(+) Break2Callback : TIM Break2 Callback.
+ [..]
By default, after the Init and when the state is HAL_TIM_STATE_RESET
all interrupt callbacks are set to the corresponding weak functions:
examples @ref HAL_TIM_TriggerCallback(), @ref HAL_TIM_ErrorCallback().
+ [..]
Exception done for MspInit and MspDeInit functions that are reset to the legacy weak
functionalities in the Init / DeInit only when these callbacks are null
(not registered beforehand). If not, MspInit or MspDeInit are not null, the Init / DeInit
keep and use the user MspInit / MspDeInit callbacks(registered beforehand)
+ [..]
Callbacks can be registered / unregistered in HAL_TIM_STATE_READY state only.
Exception done MspInit / MspDeInit that can be registered / unregistered
in HAL_TIM_STATE_READY or HAL_TIM_STATE_RESET state,
@@ -156,6 +163,7 @@ all interrupt callbacks are set to the corresponding weak functions:
In that case first register the MspInit/MspDeInit user callbacks
using @ref HAL_TIM_RegisterCallback() before calling DeInit or Init function.
+ [..]
When The compilation define USE_HAL_TIM_REGISTER_CALLBACKS is set to 0 or
not defined, the callback registration feature is not available and all callbacks
are set to the corresponding weak functions.
@@ -216,7 +224,7 @@ static void TIM_DMAPeriodElapsedHalfCplt(DMA_HandleTypeDef *hdma);
static void TIM_DMATriggerCplt(DMA_HandleTypeDef *hdma);
static void TIM_DMATriggerHalfCplt(DMA_HandleTypeDef *hdma);
static HAL_StatusTypeDef TIM_SlaveTimer_SetConfig(TIM_HandleTypeDef *htim,
- TIM_SlaveConfigTypeDef *sSlaveConfig);
+ TIM_SlaveConfigTypeDef *sSlaveConfig);
/**
* @}
*/
@@ -227,8 +235,8 @@ static HAL_StatusTypeDef TIM_SlaveTimer_SetConfig(TIM_HandleTypeDef *htim,
*/
/** @defgroup TIM_Exported_Functions_Group1 TIM Time Base functions
- * @brief Time Base functions
- *
+ * @brief Time Base functions
+ *
@verbatim
==============================================================================
##### Time Base functions #####
@@ -482,11 +490,11 @@ HAL_StatusTypeDef HAL_TIM_Base_Start_DMA(TIM_HandleTypeDef *htim, uint32_t *pDat
/* Check the parameters */
assert_param(IS_TIM_DMA_INSTANCE(htim->Instance));
- if ((htim->State == HAL_TIM_STATE_BUSY))
+ if (htim->State == HAL_TIM_STATE_BUSY)
{
return HAL_BUSY;
}
- else if ((htim->State == HAL_TIM_STATE_READY))
+ else if (htim->State == HAL_TIM_STATE_READY)
{
if ((pData == NULL) && (Length > 0U))
{
@@ -559,8 +567,8 @@ HAL_StatusTypeDef HAL_TIM_Base_Stop_DMA(TIM_HandleTypeDef *htim)
*/
/** @defgroup TIM_Exported_Functions_Group2 TIM Output Compare functions
- * @brief TIM Output Compare functions
- *
+ * @brief TIM Output Compare functions
+ *
@verbatim
==============================================================================
##### TIM Output Compare functions #####
@@ -929,16 +937,16 @@ HAL_StatusTypeDef HAL_TIM_OC_Stop_IT(TIM_HandleTypeDef *htim, uint32_t Channel)
*/
HAL_StatusTypeDef HAL_TIM_OC_Start_DMA(TIM_HandleTypeDef *htim, uint32_t Channel, uint32_t *pData, uint16_t Length)
{
- uint32_t tmpsmcr;
+ uint32_t tmpsmcr;
/* Check the parameters */
assert_param(IS_TIM_CCX_INSTANCE(htim->Instance, Channel));
- if ((htim->State == HAL_TIM_STATE_BUSY))
+ if (htim->State == HAL_TIM_STATE_BUSY)
{
return HAL_BUSY;
}
- else if ((htim->State == HAL_TIM_STATE_READY))
+ else if (htim->State == HAL_TIM_STATE_READY)
{
if ((pData == NULL) && (Length > 0U))
{
@@ -1136,8 +1144,8 @@ HAL_StatusTypeDef HAL_TIM_OC_Stop_DMA(TIM_HandleTypeDef *htim, uint32_t Channel)
*/
/** @defgroup TIM_Exported_Functions_Group3 TIM PWM functions
- * @brief TIM PWM functions
- *
+ * @brief TIM PWM functions
+ *
@verbatim
==============================================================================
##### TIM PWM functions #####
@@ -1513,11 +1521,11 @@ HAL_StatusTypeDef HAL_TIM_PWM_Start_DMA(TIM_HandleTypeDef *htim, uint32_t Channe
/* Check the parameters */
assert_param(IS_TIM_CCX_INSTANCE(htim->Instance, Channel));
- if ((htim->State == HAL_TIM_STATE_BUSY))
+ if (htim->State == HAL_TIM_STATE_BUSY)
{
return HAL_BUSY;
}
- else if ((htim->State == HAL_TIM_STATE_READY))
+ else if (htim->State == HAL_TIM_STATE_READY)
{
if ((pData == NULL) && (Length > 0U))
{
@@ -1714,8 +1722,8 @@ HAL_StatusTypeDef HAL_TIM_PWM_Stop_DMA(TIM_HandleTypeDef *htim, uint32_t Channel
*/
/** @defgroup TIM_Exported_Functions_Group4 TIM Input Capture functions
- * @brief TIM Input Capture functions
- *
+ * @brief TIM Input Capture functions
+ *
@verbatim
==============================================================================
##### TIM Input Capture functions #####
@@ -2061,11 +2069,11 @@ HAL_StatusTypeDef HAL_TIM_IC_Start_DMA(TIM_HandleTypeDef *htim, uint32_t Channel
assert_param(IS_TIM_CCX_INSTANCE(htim->Instance, Channel));
assert_param(IS_TIM_DMA_CC_INSTANCE(htim->Instance));
- if ((htim->State == HAL_TIM_STATE_BUSY))
+ if (htim->State == HAL_TIM_STATE_BUSY)
{
return HAL_BUSY;
}
- else if ((htim->State == HAL_TIM_STATE_READY))
+ else if (htim->State == HAL_TIM_STATE_READY)
{
if ((pData == NULL) && (Length > 0U))
{
@@ -2249,8 +2257,8 @@ HAL_StatusTypeDef HAL_TIM_IC_Stop_DMA(TIM_HandleTypeDef *htim, uint32_t Channel)
*/
/** @defgroup TIM_Exported_Functions_Group5 TIM One Pulse functions
- * @brief TIM One Pulse functions
- *
+ * @brief TIM One Pulse functions
+ *
@verbatim
==============================================================================
##### TIM One Pulse functions #####
@@ -2563,8 +2571,8 @@ HAL_StatusTypeDef HAL_TIM_OnePulse_Stop_IT(TIM_HandleTypeDef *htim, uint32_t Out
*/
/** @defgroup TIM_Exported_Functions_Group6 TIM Encoder functions
- * @brief TIM Encoder functions
- *
+ * @brief TIM Encoder functions
+ *
@verbatim
==============================================================================
##### TIM Encoder functions #####
@@ -2609,15 +2617,15 @@ HAL_StatusTypeDef HAL_TIM_Encoder_Init(TIM_HandleTypeDef *htim, TIM_Encoder_Ini
}
/* Check the parameters */
+ assert_param(IS_TIM_ENCODER_INTERFACE_INSTANCE(htim->Instance));
assert_param(IS_TIM_COUNTER_MODE(htim->Init.CounterMode));
assert_param(IS_TIM_CLOCKDIVISION_DIV(htim->Init.ClockDivision));
assert_param(IS_TIM_AUTORELOAD_PRELOAD(htim->Init.AutoReloadPreload));
- assert_param(IS_TIM_CC2_INSTANCE(htim->Instance));
assert_param(IS_TIM_ENCODER_MODE(sConfig->EncoderMode));
assert_param(IS_TIM_IC_SELECTION(sConfig->IC1Selection));
assert_param(IS_TIM_IC_SELECTION(sConfig->IC2Selection));
- assert_param(IS_TIM_IC_POLARITY(sConfig->IC1Polarity));
- assert_param(IS_TIM_IC_POLARITY(sConfig->IC2Polarity));
+ assert_param(IS_TIM_ENCODERINPUT_POLARITY(sConfig->IC1Polarity));
+ assert_param(IS_TIM_ENCODERINPUT_POLARITY(sConfig->IC2Polarity));
assert_param(IS_TIM_IC_PRESCALER(sConfig->IC1Prescaler));
assert_param(IS_TIM_IC_PRESCALER(sConfig->IC2Prescaler));
assert_param(IS_TIM_IC_FILTER(sConfig->IC1Filter));
@@ -2775,7 +2783,7 @@ __weak void HAL_TIM_Encoder_MspDeInit(TIM_HandleTypeDef *htim)
HAL_StatusTypeDef HAL_TIM_Encoder_Start(TIM_HandleTypeDef *htim, uint32_t Channel)
{
/* Check the parameters */
- assert_param(IS_TIM_CC2_INSTANCE(htim->Instance));
+ assert_param(IS_TIM_ENCODER_INTERFACE_INSTANCE(htim->Instance));
/* Enable the encoder interface channels */
switch (Channel)
@@ -2819,7 +2827,7 @@ HAL_StatusTypeDef HAL_TIM_Encoder_Start(TIM_HandleTypeDef *htim, uint32_t Channe
HAL_StatusTypeDef HAL_TIM_Encoder_Stop(TIM_HandleTypeDef *htim, uint32_t Channel)
{
/* Check the parameters */
- assert_param(IS_TIM_CC2_INSTANCE(htim->Instance));
+ assert_param(IS_TIM_ENCODER_INTERFACE_INSTANCE(htim->Instance));
/* Disable the Input Capture channels 1 and 2
(in the EncoderInterface the two possible channels that can be used are TIM_CHANNEL_1 and TIM_CHANNEL_2) */
@@ -2865,7 +2873,7 @@ HAL_StatusTypeDef HAL_TIM_Encoder_Stop(TIM_HandleTypeDef *htim, uint32_t Channel
HAL_StatusTypeDef HAL_TIM_Encoder_Start_IT(TIM_HandleTypeDef *htim, uint32_t Channel)
{
/* Check the parameters */
- assert_param(IS_TIM_CC2_INSTANCE(htim->Instance));
+ assert_param(IS_TIM_ENCODER_INTERFACE_INSTANCE(htim->Instance));
/* Enable the encoder interface channels */
/* Enable the capture compare Interrupts 1 and/or 2 */
@@ -2915,7 +2923,7 @@ HAL_StatusTypeDef HAL_TIM_Encoder_Start_IT(TIM_HandleTypeDef *htim, uint32_t Cha
HAL_StatusTypeDef HAL_TIM_Encoder_Stop_IT(TIM_HandleTypeDef *htim, uint32_t Channel)
{
/* Check the parameters */
- assert_param(IS_TIM_CC2_INSTANCE(htim->Instance));
+ assert_param(IS_TIM_ENCODER_INTERFACE_INSTANCE(htim->Instance));
/* Disable the Input Capture channels 1 and 2
(in the EncoderInterface the two possible channels that can be used are TIM_CHANNEL_1 and TIM_CHANNEL_2) */
@@ -2966,16 +2974,17 @@ HAL_StatusTypeDef HAL_TIM_Encoder_Stop_IT(TIM_HandleTypeDef *htim, uint32_t Chan
* @param Length The length of data to be transferred from TIM peripheral to memory.
* @retval HAL status
*/
-HAL_StatusTypeDef HAL_TIM_Encoder_Start_DMA(TIM_HandleTypeDef *htim, uint32_t Channel, uint32_t *pData1, uint32_t *pData2, uint16_t Length)
+HAL_StatusTypeDef HAL_TIM_Encoder_Start_DMA(TIM_HandleTypeDef *htim, uint32_t Channel, uint32_t *pData1,
+ uint32_t *pData2, uint16_t Length)
{
/* Check the parameters */
- assert_param(IS_TIM_DMA_CC_INSTANCE(htim->Instance));
+ assert_param(IS_TIM_ENCODER_INTERFACE_INSTANCE(htim->Instance));
- if ((htim->State == HAL_TIM_STATE_BUSY))
+ if (htim->State == HAL_TIM_STATE_BUSY)
{
return HAL_BUSY;
}
- else if ((htim->State == HAL_TIM_STATE_READY))
+ else if (htim->State == HAL_TIM_STATE_READY)
{
if ((((pData1 == NULL) || (pData2 == NULL))) && (Length > 0U))
{
@@ -3103,7 +3112,7 @@ HAL_StatusTypeDef HAL_TIM_Encoder_Start_DMA(TIM_HandleTypeDef *htim, uint32_t Ch
HAL_StatusTypeDef HAL_TIM_Encoder_Stop_DMA(TIM_HandleTypeDef *htim, uint32_t Channel)
{
/* Check the parameters */
- assert_param(IS_TIM_DMA_CC_INSTANCE(htim->Instance));
+ assert_param(IS_TIM_ENCODER_INTERFACE_INSTANCE(htim->Instance));
/* Disable the Input Capture channels 1 and 2
(in the EncoderInterface the two possible channels that can be used are TIM_CHANNEL_1 and TIM_CHANNEL_2) */
@@ -3149,8 +3158,8 @@ HAL_StatusTypeDef HAL_TIM_Encoder_Stop_DMA(TIM_HandleTypeDef *htim, uint32_t Cha
* @}
*/
/** @defgroup TIM_Exported_Functions_Group7 TIM IRQ handler management
- * @brief TIM IRQ handler management
- *
+ * @brief TIM IRQ handler management
+ *
@verbatim
==============================================================================
##### IRQ handler management #####
@@ -3363,8 +3372,8 @@ void HAL_TIM_IRQHandler(TIM_HandleTypeDef *htim)
*/
/** @defgroup TIM_Exported_Functions_Group8 TIM Peripheral Control functions
- * @brief TIM Peripheral Control functions
- *
+ * @brief TIM Peripheral Control functions
+ *
@verbatim
==============================================================================
##### Peripheral Control functions #####
@@ -3738,9 +3747,14 @@ HAL_StatusTypeDef HAL_TIM_PWM_ConfigChannel(TIM_HandleTypeDef *htim,
* This parameter can be one of the following values:
* @arg TIM_CHANNEL_1: TIM Channel 1 selected
* @arg TIM_CHANNEL_2: TIM Channel 2 selected
+ * @note To output a waveform with a minimum delay user can enable the fast
+ * mode by calling the @ref __HAL_TIM_ENABLE_OCxFAST macro. Then CCx
+ * output is forced in response to the edge detection on TIx input,
+ * without taking in account the comparison.
* @retval HAL status
*/
-HAL_StatusTypeDef HAL_TIM_OnePulse_ConfigChannel(TIM_HandleTypeDef *htim, TIM_OnePulse_InitTypeDef *sConfig, uint32_t OutputChannel, uint32_t InputChannel)
+HAL_StatusTypeDef HAL_TIM_OnePulse_ConfigChannel(TIM_HandleTypeDef *htim, TIM_OnePulse_InitTypeDef *sConfig,
+ uint32_t OutputChannel, uint32_t InputChannel)
{
TIM_OC_InitTypeDef temp1;
@@ -3894,11 +3908,11 @@ HAL_StatusTypeDef HAL_TIM_DMABurst_WriteStart(TIM_HandleTypeDef *htim, uint32_t
assert_param(IS_TIM_DMA_SOURCE(BurstRequestSrc));
assert_param(IS_TIM_DMA_LENGTH(BurstLength));
- if ((htim->State == HAL_TIM_STATE_BUSY))
+ if (htim->State == HAL_TIM_STATE_BUSY)
{
return HAL_BUSY;
}
- else if ((htim->State == HAL_TIM_STATE_READY))
+ else if (htim->State == HAL_TIM_STATE_READY)
{
if ((BurstBuffer == NULL) && (BurstLength > 0U))
{
@@ -3941,7 +3955,8 @@ HAL_StatusTypeDef HAL_TIM_DMABurst_WriteStart(TIM_HandleTypeDef *htim, uint32_t
htim->hdma[TIM_DMA_ID_CC1]->XferErrorCallback = TIM_DMAError ;
/* Enable the DMA stream */
- if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC1], (uint32_t)BurstBuffer, (uint32_t)&htim->Instance->DMAR, ((BurstLength) >> 8U) + 1U) != HAL_OK)
+ if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC1], (uint32_t)BurstBuffer,
+ (uint32_t)&htim->Instance->DMAR, ((BurstLength) >> 8U) + 1U) != HAL_OK)
{
return HAL_ERROR;
}
@@ -3957,7 +3972,8 @@ HAL_StatusTypeDef HAL_TIM_DMABurst_WriteStart(TIM_HandleTypeDef *htim, uint32_t
htim->hdma[TIM_DMA_ID_CC2]->XferErrorCallback = TIM_DMAError ;
/* Enable the DMA stream */
- if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC2], (uint32_t)BurstBuffer, (uint32_t)&htim->Instance->DMAR, ((BurstLength) >> 8U) + 1U) != HAL_OK)
+ if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC2], (uint32_t)BurstBuffer,
+ (uint32_t)&htim->Instance->DMAR, ((BurstLength) >> 8U) + 1U) != HAL_OK)
{
return HAL_ERROR;
}
@@ -3973,7 +3989,8 @@ HAL_StatusTypeDef HAL_TIM_DMABurst_WriteStart(TIM_HandleTypeDef *htim, uint32_t
htim->hdma[TIM_DMA_ID_CC3]->XferErrorCallback = TIM_DMAError ;
/* Enable the DMA stream */
- if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC3], (uint32_t)BurstBuffer, (uint32_t)&htim->Instance->DMAR, ((BurstLength) >> 8U) + 1U) != HAL_OK)
+ if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC3], (uint32_t)BurstBuffer,
+ (uint32_t)&htim->Instance->DMAR, ((BurstLength) >> 8U) + 1U) != HAL_OK)
{
return HAL_ERROR;
}
@@ -3989,7 +4006,8 @@ HAL_StatusTypeDef HAL_TIM_DMABurst_WriteStart(TIM_HandleTypeDef *htim, uint32_t
htim->hdma[TIM_DMA_ID_CC4]->XferErrorCallback = TIM_DMAError ;
/* Enable the DMA stream */
- if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC4], (uint32_t)BurstBuffer, (uint32_t)&htim->Instance->DMAR, ((BurstLength) >> 8U) + 1U) != HAL_OK)
+ if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC4], (uint32_t)BurstBuffer,
+ (uint32_t)&htim->Instance->DMAR, ((BurstLength) >> 8U) + 1U) != HAL_OK)
{
return HAL_ERROR;
}
@@ -4005,7 +4023,8 @@ HAL_StatusTypeDef HAL_TIM_DMABurst_WriteStart(TIM_HandleTypeDef *htim, uint32_t
htim->hdma[TIM_DMA_ID_COMMUTATION]->XferErrorCallback = TIM_DMAError ;
/* Enable the DMA stream */
- if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_COMMUTATION], (uint32_t)BurstBuffer, (uint32_t)&htim->Instance->DMAR, ((BurstLength) >> 8U) + 1U) != HAL_OK)
+ if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_COMMUTATION], (uint32_t)BurstBuffer,
+ (uint32_t)&htim->Instance->DMAR, ((BurstLength) >> 8U) + 1U) != HAL_OK)
{
return HAL_ERROR;
}
@@ -4021,7 +4040,8 @@ HAL_StatusTypeDef HAL_TIM_DMABurst_WriteStart(TIM_HandleTypeDef *htim, uint32_t
htim->hdma[TIM_DMA_ID_TRIGGER]->XferErrorCallback = TIM_DMAError ;
/* Enable the DMA stream */
- if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_TRIGGER], (uint32_t)BurstBuffer, (uint32_t)&htim->Instance->DMAR, ((BurstLength) >> 8U) + 1U) != HAL_OK)
+ if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_TRIGGER], (uint32_t)BurstBuffer,
+ (uint32_t)&htim->Instance->DMAR, ((BurstLength) >> 8U) + 1U) != HAL_OK)
{
return HAL_ERROR;
}
@@ -4151,8 +4171,8 @@ HAL_StatusTypeDef HAL_TIM_DMABurst_WriteStop(TIM_HandleTypeDef *htim, uint32_t B
* @note This function should be used only when BurstLength is equal to DMA data transfer length.
* @retval HAL status
*/
-HAL_StatusTypeDef HAL_TIM_DMABurst_ReadStart(TIM_HandleTypeDef *htim, uint32_t BurstBaseAddress, uint32_t BurstRequestSrc,
- uint32_t *BurstBuffer, uint32_t BurstLength)
+HAL_StatusTypeDef HAL_TIM_DMABurst_ReadStart(TIM_HandleTypeDef *htim, uint32_t BurstBaseAddress,
+ uint32_t BurstRequestSrc, uint32_t *BurstBuffer, uint32_t BurstLength)
{
/* Check the parameters */
assert_param(IS_TIM_DMABURST_INSTANCE(htim->Instance));
@@ -4160,11 +4180,11 @@ HAL_StatusTypeDef HAL_TIM_DMABurst_ReadStart(TIM_HandleTypeDef *htim, uint32_t B
assert_param(IS_TIM_DMA_SOURCE(BurstRequestSrc));
assert_param(IS_TIM_DMA_LENGTH(BurstLength));
- if ((htim->State == HAL_TIM_STATE_BUSY))
+ if (htim->State == HAL_TIM_STATE_BUSY)
{
return HAL_BUSY;
}
- else if ((htim->State == HAL_TIM_STATE_READY))
+ else if (htim->State == HAL_TIM_STATE_READY)
{
if ((BurstBuffer == NULL) && (BurstLength > 0U))
{
@@ -4465,7 +4485,7 @@ HAL_StatusTypeDef HAL_TIM_ConfigOCrefClear(TIM_HandleTypeDef *htim,
/* When OCRef clear feature is used with ETR source, ETR prescaler must be off */
if (sClearInputConfig->ClearInputPrescaler != TIM_CLEARINPUTPRESCALER_DIV1)
{
- htim->State = HAL_TIM_STATE_READY;
+ htim->State = HAL_TIM_STATE_READY;
__HAL_UNLOCK(htim);
return HAL_ERROR;
}
@@ -4780,9 +4800,9 @@ HAL_StatusTypeDef HAL_TIM_SlaveConfigSynchro(TIM_HandleTypeDef *htim, TIM_SlaveC
htim->State = HAL_TIM_STATE_BUSY;
- if(TIM_SlaveTimer_SetConfig(htim, sSlaveConfig) != HAL_OK)
+ if (TIM_SlaveTimer_SetConfig(htim, sSlaveConfig) != HAL_OK)
{
- htim->State = HAL_TIM_STATE_READY;
+ htim->State = HAL_TIM_STATE_READY;
__HAL_UNLOCK(htim);
return HAL_ERROR;
}
@@ -4810,7 +4830,7 @@ HAL_StatusTypeDef HAL_TIM_SlaveConfigSynchro(TIM_HandleTypeDef *htim, TIM_SlaveC
* @retval HAL status
*/
HAL_StatusTypeDef HAL_TIM_SlaveConfigSynchro_IT(TIM_HandleTypeDef *htim,
- TIM_SlaveConfigTypeDef *sSlaveConfig)
+ TIM_SlaveConfigTypeDef *sSlaveConfig)
{
/* Check the parameters */
assert_param(IS_TIM_SLAVE_INSTANCE(htim->Instance));
@@ -4821,9 +4841,9 @@ HAL_StatusTypeDef HAL_TIM_SlaveConfigSynchro_IT(TIM_HandleTypeDef *htim,
htim->State = HAL_TIM_STATE_BUSY;
- if(TIM_SlaveTimer_SetConfig(htim, sSlaveConfig) != HAL_OK)
+ if (TIM_SlaveTimer_SetConfig(htim, sSlaveConfig) != HAL_OK)
{
- htim->State = HAL_TIM_STATE_READY;
+ htim->State = HAL_TIM_STATE_READY;
__HAL_UNLOCK(htim);
return HAL_ERROR;
}
@@ -4913,8 +4933,8 @@ uint32_t HAL_TIM_ReadCapturedValue(TIM_HandleTypeDef *htim, uint32_t Channel)
*/
/** @defgroup TIM_Exported_Functions_Group9 TIM Callbacks functions
- * @brief TIM Callbacks functions
- *
+ * @brief TIM Callbacks functions
+ *
@verbatim
==============================================================================
##### TIM Callbacks functions #####
@@ -5118,7 +5138,8 @@ __weak void HAL_TIM_ErrorCallback(TIM_HandleTypeDef *htim)
* @param pCallback pointer to the callback function
* @retval status
*/
-HAL_StatusTypeDef HAL_TIM_RegisterCallback(TIM_HandleTypeDef *htim, HAL_TIM_CallbackIDTypeDef CallbackID, pTIM_CallbackTypeDef pCallback)
+HAL_StatusTypeDef HAL_TIM_RegisterCallback(TIM_HandleTypeDef *htim, HAL_TIM_CallbackIDTypeDef CallbackID,
+ pTIM_CallbackTypeDef pCallback)
{
HAL_StatusTypeDef status = HAL_OK;
@@ -5578,8 +5599,8 @@ HAL_StatusTypeDef HAL_TIM_UnRegisterCallback(TIM_HandleTypeDef *htim, HAL_TIM_Ca
*/
/** @defgroup TIM_Exported_Functions_Group10 TIM Peripheral State functions
- * @brief TIM Peripheral State functions
- *
+ * @brief TIM Peripheral State functions
+ *
@verbatim
==============================================================================
##### Peripheral State functions #####
@@ -6365,7 +6386,7 @@ static void TIM_OC6_SetConfig(TIM_TypeDef *TIMx,
* @retval None
*/
static HAL_StatusTypeDef TIM_SlaveTimer_SetConfig(TIM_HandleTypeDef *htim,
- TIM_SlaveConfigTypeDef *sSlaveConfig)
+ TIM_SlaveConfigTypeDef *sSlaveConfig)
{
uint32_t tmpsmcr;
uint32_t tmpccmr1;
diff --git a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_GCC/Boot/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_tim_ex.c b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_GCC/Boot/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_tim_ex.c
index 271f11ec..f2d976ae 100644
--- a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_GCC/Boot/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_tim_ex.c
+++ b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_GCC/Boot/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_tim_ex.c
@@ -73,7 +73,7 @@
* opensource.org/licenses/BSD-3-Clause
*
******************************************************************************
-*/
+ */
/* Includes ------------------------------------------------------------------*/
#include "stm32f7xx_hal.h"
@@ -397,11 +397,11 @@ HAL_StatusTypeDef HAL_TIMEx_HallSensor_Start_DMA(TIM_HandleTypeDef *htim, uint32
/* Check the parameters */
assert_param(IS_TIM_HALL_SENSOR_INTERFACE_INSTANCE(htim->Instance));
- if ((htim->State == HAL_TIM_STATE_BUSY))
+ if (htim->State == HAL_TIM_STATE_BUSY)
{
return HAL_BUSY;
}
- else if ((htim->State == HAL_TIM_STATE_READY))
+ else if (htim->State == HAL_TIM_STATE_READY)
{
if (((uint32_t)pData == 0U) && (Length > 0U))
{
@@ -709,11 +709,11 @@ HAL_StatusTypeDef HAL_TIMEx_OCN_Start_DMA(TIM_HandleTypeDef *htim, uint32_t Chan
/* Check the parameters */
assert_param(IS_TIM_CCXN_INSTANCE(htim->Instance, Channel));
- if ((htim->State == HAL_TIM_STATE_BUSY))
+ if (htim->State == HAL_TIM_STATE_BUSY)
{
return HAL_BUSY;
}
- else if ((htim->State == HAL_TIM_STATE_READY))
+ else if (htim->State == HAL_TIM_STATE_READY)
{
if (((uint32_t)pData == 0U) && (Length > 0U))
{
@@ -1117,11 +1117,11 @@ HAL_StatusTypeDef HAL_TIMEx_PWMN_Start_DMA(TIM_HandleTypeDef *htim, uint32_t Cha
/* Check the parameters */
assert_param(IS_TIM_CCXN_INSTANCE(htim->Instance, Channel));
- if ((htim->State == HAL_TIM_STATE_BUSY))
+ if (htim->State == HAL_TIM_STATE_BUSY)
{
return HAL_BUSY;
}
- else if ((htim->State == HAL_TIM_STATE_READY))
+ else if (htim->State == HAL_TIM_STATE_READY)
{
if (((uint32_t)pData == 0U) && (Length > 0U))
{
@@ -1466,7 +1466,8 @@ HAL_StatusTypeDef HAL_TIMEx_OnePulseN_Stop_IT(TIM_HandleTypeDef *htim, uint32_t
* @arg TIM_COMMUTATION_SOFTWARE: Commutation source is set by software using the COMG bit
* @retval HAL status
*/
-HAL_StatusTypeDef HAL_TIMEx_ConfigCommutEvent(TIM_HandleTypeDef *htim, uint32_t InputTrigger, uint32_t CommutationSource)
+HAL_StatusTypeDef HAL_TIMEx_ConfigCommutEvent(TIM_HandleTypeDef *htim, uint32_t InputTrigger,
+ uint32_t CommutationSource)
{
/* Check the parameters */
assert_param(IS_TIM_COMMUTATION_EVENT_INSTANCE(htim->Instance));
@@ -1521,7 +1522,8 @@ HAL_StatusTypeDef HAL_TIMEx_ConfigCommutEvent(TIM_HandleTypeDef *htim, uint32_t
* @arg TIM_COMMUTATION_SOFTWARE: Commutation source is set by software using the COMG bit
* @retval HAL status
*/
-HAL_StatusTypeDef HAL_TIMEx_ConfigCommutEvent_IT(TIM_HandleTypeDef *htim, uint32_t InputTrigger, uint32_t CommutationSource)
+HAL_StatusTypeDef HAL_TIMEx_ConfigCommutEvent_IT(TIM_HandleTypeDef *htim, uint32_t InputTrigger,
+ uint32_t CommutationSource)
{
/* Check the parameters */
assert_param(IS_TIM_COMMUTATION_EVENT_INSTANCE(htim->Instance));
@@ -1577,7 +1579,8 @@ HAL_StatusTypeDef HAL_TIMEx_ConfigCommutEvent_IT(TIM_HandleTypeDef *htim, uint32
* @arg TIM_COMMUTATION_SOFTWARE: Commutation source is set by software using the COMG bit
* @retval HAL status
*/
-HAL_StatusTypeDef HAL_TIMEx_ConfigCommutEvent_DMA(TIM_HandleTypeDef *htim, uint32_t InputTrigger, uint32_t CommutationSource)
+HAL_StatusTypeDef HAL_TIMEx_ConfigCommutEvent_DMA(TIM_HandleTypeDef *htim, uint32_t InputTrigger,
+ uint32_t CommutationSource)
{
/* Check the parameters */
assert_param(IS_TIM_COMMUTATION_EVENT_INSTANCE(htim->Instance));
@@ -1632,7 +1635,7 @@ HAL_StatusTypeDef HAL_TIMEx_MasterConfigSynchronization(TIM_HandleTypeDef *htim,
uint32_t tmpsmcr;
/* Check the parameters */
- assert_param(IS_TIM_SYNCHRO_INSTANCE(htim->Instance));
+ assert_param(IS_TIM_MASTER_INSTANCE(htim->Instance));
assert_param(IS_TIM_TRGO_SOURCE(sMasterConfig->MasterOutputTrigger));
assert_param(IS_TIM_MSM_STATE(sMasterConfig->MasterSlaveMode));
@@ -1665,16 +1668,19 @@ HAL_StatusTypeDef HAL_TIMEx_MasterConfigSynchronization(TIM_HandleTypeDef *htim,
/* Select the TRGO source */
tmpcr2 |= sMasterConfig->MasterOutputTrigger;
- /* Reset the MSM Bit */
- tmpsmcr &= ~TIM_SMCR_MSM;
- /* Set master mode */
- tmpsmcr |= sMasterConfig->MasterSlaveMode;
-
/* Update TIMx CR2 */
htim->Instance->CR2 = tmpcr2;
- /* Update TIMx SMCR */
- htim->Instance->SMCR = tmpsmcr;
+ if (IS_TIM_SLAVE_INSTANCE(htim->Instance))
+ {
+ /* Reset the MSM Bit */
+ tmpsmcr &= ~TIM_SMCR_MSM;
+ /* Set master mode */
+ tmpsmcr |= sMasterConfig->MasterSlaveMode;
+
+ /* Update TIMx SMCR */
+ htim->Instance->SMCR = tmpsmcr;
+ }
/* Change the htim state */
htim->State = HAL_TIM_STATE_READY;
@@ -1690,6 +1696,9 @@ HAL_StatusTypeDef HAL_TIMEx_MasterConfigSynchronization(TIM_HandleTypeDef *htim,
* @param htim TIM handle
* @param sBreakDeadTimeConfig pointer to a TIM_ConfigBreakDeadConfigTypeDef structure that
* contains the BDTR Register configuration information for the TIM peripheral.
+ * @note Interrupts can be generated when an active level is detected on the
+ * break input, the break 2 input or the system break input. Break
+ * interrupt can be enabled by calling the @ref __HAL_TIM_ENABLE_IT macro.
* @retval HAL status
*/
HAL_StatusTypeDef HAL_TIMEx_ConfigBreakDeadTime(TIM_HandleTypeDef *htim,
@@ -1763,10 +1772,10 @@ HAL_StatusTypeDef HAL_TIMEx_ConfigBreakInput(TIM_HandleTypeDef *htim,
{
uint32_t tmporx;
- uint32_t bkin_enable_mask = 0U;
- uint32_t bkin_polarity_mask = 0U;
- uint32_t bkin_enable_bitpos = 0U;
- uint32_t bkin_polarity_bitpos = 0U;
+ uint32_t bkin_enable_mask;
+ uint32_t bkin_polarity_mask;
+ uint32_t bkin_enable_bitpos;
+ uint32_t bkin_polarity_bitpos;
/* Check the parameters */
assert_param(IS_TIM_BREAK_INSTANCE(htim->Instance));
@@ -1800,11 +1809,19 @@ HAL_StatusTypeDef HAL_TIMEx_ConfigBreakInput(TIM_HandleTypeDef *htim,
{
bkin_enable_mask = TIM1_AF1_BKDF1BKE;
bkin_enable_bitpos = 8;
+ bkin_polarity_mask = 0U;
+ bkin_polarity_bitpos = 0U;
break;
}
default:
+ {
+ bkin_enable_mask = 0U;
+ bkin_polarity_mask = 0U;
+ bkin_enable_bitpos = 0U;
+ bkin_polarity_bitpos = 0U;
break;
+ }
}
switch (BreakInput)
@@ -2054,7 +2071,7 @@ HAL_TIM_StateTypeDef HAL_TIMEx_HallSensor_GetState(TIM_HandleTypeDef *htim)
*/
/* Private functions ---------------------------------------------------------*/
-/** @defgroup TIMEx_Private_Functions TIM Extended Private Functions
+/** @defgroup TIMEx_Private_Functions TIMEx Private Functions
* @{
*/
diff --git a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_GCC/Boot/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_ll_gpio.c b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_GCC/Boot/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_ll_gpio.c
index 987e5bef..0f04752c 100644
--- a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_GCC/Boot/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_ll_gpio.c
+++ b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_GCC/Boot/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_ll_gpio.c
@@ -220,9 +220,6 @@ ErrorStatus LL_GPIO_Init(GPIO_TypeDef *GPIOx, LL_GPIO_InitTypeDef *GPIO_InitStru
if (currentpin)
{
- /* Pin Mode configuration */
- LL_GPIO_SetPinMode(GPIOx, currentpin, GPIO_InitStruct->Mode);
-
if ((GPIO_InitStruct->Mode == LL_GPIO_MODE_OUTPUT) || (GPIO_InitStruct->Mode == LL_GPIO_MODE_ALTERNATE))
{
/* Check Speed mode parameters */
@@ -230,6 +227,12 @@ ErrorStatus LL_GPIO_Init(GPIO_TypeDef *GPIOx, LL_GPIO_InitTypeDef *GPIO_InitStru
/* Speed mode configuration */
LL_GPIO_SetPinSpeed(GPIOx, currentpin, GPIO_InitStruct->Speed);
+
+ /* Check Output mode parameters */
+ assert_param(IS_LL_GPIO_OUTPUT_TYPE(GPIO_InitStruct->OutputType));
+
+ /* Output mode configuration*/
+ LL_GPIO_SetPinOutputType(GPIOx, GPIO_InitStruct->Pin, GPIO_InitStruct->OutputType);
}
/* Pull-up Pull down resistor configuration*/
@@ -250,19 +253,11 @@ ErrorStatus LL_GPIO_Init(GPIO_TypeDef *GPIOx, LL_GPIO_InitTypeDef *GPIO_InitStru
LL_GPIO_SetAFPin_8_15(GPIOx, currentpin, GPIO_InitStruct->Alternate);
}
}
+ /* Pin Mode configuration */
+ LL_GPIO_SetPinMode(GPIOx, currentpin, GPIO_InitStruct->Mode);
}
pinpos++;
}
-
- if ((GPIO_InitStruct->Mode == LL_GPIO_MODE_OUTPUT) || (GPIO_InitStruct->Mode == LL_GPIO_MODE_ALTERNATE))
- {
- /* Check Output mode parameters */
- assert_param(IS_LL_GPIO_OUTPUT_TYPE(GPIO_InitStruct->OutputType));
-
- /* Output mode configuration*/
- LL_GPIO_SetPinOutputType(GPIOx, GPIO_InitStruct->Pin, GPIO_InitStruct->OutputType);
-
- }
return (SUCCESS);
}
diff --git a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_GCC/Boot/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_ll_rcc.c b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_GCC/Boot/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_ll_rcc.c
index 0197818f..588d0bb5 100644
--- a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_GCC/Boot/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_ll_rcc.c
+++ b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_GCC/Boot/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_ll_rcc.c
@@ -163,7 +163,7 @@ uint32_t RCC_PLLI2S_GetFreqDomain_SPDIFRX(void);
*/
ErrorStatus LL_RCC_DeInit(void)
{
- uint32_t vl_mask = 0xFFFFFFFFU;
+ __IO uint32_t vl_mask;
/* Set HSION bit */
LL_RCC_HSI_Enable();
@@ -175,10 +175,13 @@ ErrorStatus LL_RCC_DeInit(void)
/* Reset CFGR register */
LL_RCC_WriteReg(CFGR, 0x00000000U);
+ /* Read CR register */
+ vl_mask = LL_RCC_ReadReg(CR);
+
/* Reset HSEON, HSEBYP, PLLON, CSSON, PLLI2SON and PLLSAION bits */
CLEAR_BIT(vl_mask, (RCC_CR_HSEON | RCC_CR_HSEBYP | RCC_CR_PLLON | RCC_CR_CSSON | RCC_CR_PLLSAION | RCC_CR_PLLI2SON));
- /* Write new mask in CR register */
+ /* Write new value in CR register */
LL_RCC_WriteReg(CR, vl_mask);
/* Set HSITRIM bits to the reset value*/
diff --git a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_GCC/Boot/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_ll_usart.c b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_GCC/Boot/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_ll_usart.c
index 2f82ef49..b3db0e6a 100644
--- a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_GCC/Boot/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_ll_usart.c
+++ b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_GCC/Boot/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_ll_usart.c
@@ -22,11 +22,11 @@
#include "stm32f7xx_ll_usart.h"
#include "stm32f7xx_ll_rcc.h"
#include "stm32f7xx_ll_bus.h"
-#ifdef USE_FULL_ASSERT
+#ifdef USE_FULL_ASSERT
#include "stm32_assert.h"
#else
#define assert_param(expr) ((void)0U)
-#endif
+#endif /* USE_FULL_ASSERT */
/** @addtogroup STM32F7xx_LL_Driver
* @{
@@ -41,14 +41,6 @@
/* Private types -------------------------------------------------------------*/
/* Private variables ---------------------------------------------------------*/
/* Private constants ---------------------------------------------------------*/
-/** @addtogroup USART_LL_Private_Constants
- * @{
- */
-
-/**
- * @}
- */
-
/* Private macros ------------------------------------------------------------*/
/** @addtogroup USART_LL_Private_Macros
* @{
@@ -65,42 +57,42 @@
#define IS_LL_USART_BRR_MAX(__VALUE__) ((__VALUE__) <= 0x0000FFFFU)
#define IS_LL_USART_DIRECTION(__VALUE__) (((__VALUE__) == LL_USART_DIRECTION_NONE) \
- || ((__VALUE__) == LL_USART_DIRECTION_RX) \
- || ((__VALUE__) == LL_USART_DIRECTION_TX) \
- || ((__VALUE__) == LL_USART_DIRECTION_TX_RX))
+ || ((__VALUE__) == LL_USART_DIRECTION_RX) \
+ || ((__VALUE__) == LL_USART_DIRECTION_TX) \
+ || ((__VALUE__) == LL_USART_DIRECTION_TX_RX))
#define IS_LL_USART_PARITY(__VALUE__) (((__VALUE__) == LL_USART_PARITY_NONE) \
- || ((__VALUE__) == LL_USART_PARITY_EVEN) \
- || ((__VALUE__) == LL_USART_PARITY_ODD))
+ || ((__VALUE__) == LL_USART_PARITY_EVEN) \
+ || ((__VALUE__) == LL_USART_PARITY_ODD))
#define IS_LL_USART_DATAWIDTH(__VALUE__) (((__VALUE__) == LL_USART_DATAWIDTH_7B) \
- || ((__VALUE__) == LL_USART_DATAWIDTH_8B) \
- || ((__VALUE__) == LL_USART_DATAWIDTH_9B))
+ || ((__VALUE__) == LL_USART_DATAWIDTH_8B) \
+ || ((__VALUE__) == LL_USART_DATAWIDTH_9B))
#define IS_LL_USART_OVERSAMPLING(__VALUE__) (((__VALUE__) == LL_USART_OVERSAMPLING_16) \
- || ((__VALUE__) == LL_USART_OVERSAMPLING_8))
+ || ((__VALUE__) == LL_USART_OVERSAMPLING_8))
#define IS_LL_USART_LASTBITCLKOUTPUT(__VALUE__) (((__VALUE__) == LL_USART_LASTCLKPULSE_NO_OUTPUT) \
- || ((__VALUE__) == LL_USART_LASTCLKPULSE_OUTPUT))
+ || ((__VALUE__) == LL_USART_LASTCLKPULSE_OUTPUT))
#define IS_LL_USART_CLOCKPHASE(__VALUE__) (((__VALUE__) == LL_USART_PHASE_1EDGE) \
- || ((__VALUE__) == LL_USART_PHASE_2EDGE))
+ || ((__VALUE__) == LL_USART_PHASE_2EDGE))
#define IS_LL_USART_CLOCKPOLARITY(__VALUE__) (((__VALUE__) == LL_USART_POLARITY_LOW) \
- || ((__VALUE__) == LL_USART_POLARITY_HIGH))
+ || ((__VALUE__) == LL_USART_POLARITY_HIGH))
#define IS_LL_USART_CLOCKOUTPUT(__VALUE__) (((__VALUE__) == LL_USART_CLOCK_DISABLE) \
- || ((__VALUE__) == LL_USART_CLOCK_ENABLE))
+ || ((__VALUE__) == LL_USART_CLOCK_ENABLE))
#define IS_LL_USART_STOPBITS(__VALUE__) (((__VALUE__) == LL_USART_STOPBITS_0_5) \
- || ((__VALUE__) == LL_USART_STOPBITS_1) \
- || ((__VALUE__) == LL_USART_STOPBITS_1_5) \
- || ((__VALUE__) == LL_USART_STOPBITS_2))
+ || ((__VALUE__) == LL_USART_STOPBITS_1) \
+ || ((__VALUE__) == LL_USART_STOPBITS_1_5) \
+ || ((__VALUE__) == LL_USART_STOPBITS_2))
#define IS_LL_USART_HWCONTROL(__VALUE__) (((__VALUE__) == LL_USART_HWCONTROL_NONE) \
- || ((__VALUE__) == LL_USART_HWCONTROL_RTS) \
- || ((__VALUE__) == LL_USART_HWCONTROL_CTS) \
- || ((__VALUE__) == LL_USART_HWCONTROL_RTS_CTS))
+ || ((__VALUE__) == LL_USART_HWCONTROL_RTS) \
+ || ((__VALUE__) == LL_USART_HWCONTROL_CTS) \
+ || ((__VALUE__) == LL_USART_HWCONTROL_RTS_CTS))
/**
* @}
diff --git a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_GCC/Boot/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_ll_usb.c b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_GCC/Boot/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_ll_usb.c
index ece23086..8d9dbb24 100644
--- a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_GCC/Boot/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_ll_usb.c
+++ b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_GCC/Boot/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_ll_usb.c
@@ -94,6 +94,11 @@ HAL_StatusTypeDef USB_CoreInit(USB_OTG_GlobalTypeDef *USBx, USB_OTG_CfgTypeDef c
/* Init The ULPI Interface */
USBx->GUSBCFG &= ~(USB_OTG_GUSBCFG_TSDPS | USB_OTG_GUSBCFG_ULPIFSLS | USB_OTG_GUSBCFG_PHYSEL);
+#if defined(STM32F722xx) || defined(STM32F723xx) || defined(STM32F730xx) || defined(STM32F732xx) || defined(STM32F733xx)
+ /* Select ULPI Interface */
+ USBx->GUSBCFG |= USB_OTG_GUSBCFG_ULPI_UTMI_SEL;
+#endif /* defined(STM32F722xx) || defined(STM32F723xx) || defined(STM32F730xx) || defined(STM32F732xx) || defined(STM32F733xx) */
+
/* Select vbus source */
USBx->GUSBCFG &= ~(USB_OTG_GUSBCFG_ULPIEVBUSD | USB_OTG_GUSBCFG_ULPIEVBUSI);
if (cfg.use_external_vbus == 1U)
@@ -115,7 +120,7 @@ HAL_StatusTypeDef USB_CoreInit(USB_OTG_GlobalTypeDef *USBx, USB_OTG_CfgTypeDef c
USBx->GUSBCFG &= ~(USB_OTG_GUSBCFG_ULPIEVBUSD | USB_OTG_GUSBCFG_ULPIEVBUSI);
/* Select UTMI Interace */
- USBx->GUSBCFG &= ~ USB_OTG_GUSBCFG_ULPI_UTMI_SEL;
+ USBx->GUSBCFG &= ~USB_OTG_GUSBCFG_ULPI_UTMI_SEL;
USBx->GCCFG |= USB_OTG_GCCFG_PHYHSEN;
/* Enables control of a High Speed USB PHY */
@@ -158,10 +163,6 @@ HAL_StatusTypeDef USB_CoreInit(USB_OTG_GlobalTypeDef *USBx, USB_OTG_CfgTypeDef c
* @brief Set the USB turnaround time
* @param USBx USB Instance
* @param hclk: AHB clock frequency
- * @param speed device speed
- * This parameter can be one of these values:
- * @arg PCD_SPEED_HIGH: High speed mode
- * @arg PCD_SPEED_FULL: Full speed mode
* @retval USB turnaround time In PHY Clocks number
*/
HAL_StatusTypeDef USB_SetTurnaroundTime(USB_OTG_GlobalTypeDef *USBx,
@@ -173,7 +174,7 @@ HAL_StatusTypeDef USB_SetTurnaroundTime(USB_OTG_GlobalTypeDef *USBx,
used by application. In the low AHB frequency range it is used to stretch enough the USB response
time to IN tokens, the USB turnaround time, so to compensate for the longer AHB read access
latency to the Data FIFO */
- if (speed == PCD_SPEED_FULL)
+ if (speed == USBD_FS_SPEED)
{
if ((hclk >= 14200000U) && (hclk < 15000000U))
{
@@ -226,7 +227,7 @@ HAL_StatusTypeDef USB_SetTurnaroundTime(USB_OTG_GlobalTypeDef *USBx,
UsbTrd = 0x6U;
}
}
- else if (speed == PCD_SPEED_HIGH)
+ else if (speed == USBD_HS_SPEED)
{
UsbTrd = USBD_HS_TRDT_VALUE;
}
@@ -318,6 +319,8 @@ HAL_StatusTypeDef USB_DevInit(USB_OTG_GlobalTypeDef *USBx, USB_OTG_CfgTypeDef cf
/* VBUS Sensing setup */
if (cfg.vbus_sensing_enable == 0U)
{
+ USBx_DEVICE->DCTL |= USB_OTG_DCTL_SDIS;
+
/* Deactivate VBUS Sensing B */
USBx->GCCFG &= ~USB_OTG_GCCFG_VBDEN;
@@ -339,33 +342,33 @@ HAL_StatusTypeDef USB_DevInit(USB_OTG_GlobalTypeDef *USBx, USB_OTG_CfgTypeDef cf
if (cfg.phy_itface == USB_OTG_ULPI_PHY)
{
- if (cfg.speed == USB_OTG_SPEED_HIGH)
+ if (cfg.speed == USBD_HS_SPEED)
{
- /* Set High speed phy */
+ /* Set Core speed to High speed mode */
(void)USB_SetDevSpeed(USBx, USB_OTG_SPEED_HIGH);
}
else
{
- /* set High speed phy in Full speed mode */
+ /* Set Core speed to Full speed mode */
(void)USB_SetDevSpeed(USBx, USB_OTG_SPEED_HIGH_IN_FULL);
}
}
else if (cfg.phy_itface == USB_OTG_HS_EMBEDDED_PHY)
{
- if (cfg.speed == USB_OTG_SPEED_HIGH)
+ if (cfg.speed == USBD_HS_SPEED)
{
- /* Set High speed phy */
+ /* Set Core speed to High speed mode */
(void)USB_SetDevSpeed(USBx, USB_OTG_SPEED_HIGH);
}
else
{
- /* set High speed phy in Full speed mode */
+ /* Set Core speed to Full speed mode */
(void)USB_SetDevSpeed(USBx, USB_OTG_SPEED_HIGH_IN_FULL);
}
}
else
{
- /* Set Full speed phy */
+ /* Set Core speed to Full speed mode */
(void)USB_SetDevSpeed(USBx, USB_OTG_SPEED_FULL);
}
@@ -431,17 +434,6 @@ HAL_StatusTypeDef USB_DevInit(USB_OTG_GlobalTypeDef *USBx, USB_OTG_CfgTypeDef cf
USBx_DEVICE->DIEPMSK &= ~(USB_OTG_DIEPMSK_TXFURM);
- if (cfg.dma_enable == 1U)
- {
- /*Set threshold parameters */
- USBx_DEVICE->DTHRCTL = USB_OTG_DTHRCTL_TXTHRLEN_6 |
- USB_OTG_DTHRCTL_RXTHRLEN_6;
-
- USBx_DEVICE->DTHRCTL |= USB_OTG_DTHRCTL_RXTHREN |
- USB_OTG_DTHRCTL_ISOTHREN |
- USB_OTG_DTHRCTL_NONISOTHREN;
- }
-
/* Disable all interrupts. */
USBx->GINTMSK = 0U;
@@ -557,16 +549,16 @@ uint8_t USB_GetDevSpeed(USB_OTG_GlobalTypeDef *USBx)
if (DevEnumSpeed == DSTS_ENUMSPD_HS_PHY_30MHZ_OR_60MHZ)
{
- speed = PCD_SPEED_HIGH;
+ speed = USBD_HS_SPEED;
}
else if ((DevEnumSpeed == DSTS_ENUMSPD_FS_PHY_30MHZ_OR_60MHZ) ||
(DevEnumSpeed == DSTS_ENUMSPD_FS_PHY_48MHZ))
{
- speed = PCD_SPEED_FULL;
+ speed = USBD_FS_SPEED;
}
else
{
- speed = 0U;
+ speed = 0xFU;
}
return speed;
@@ -663,6 +655,12 @@ HAL_StatusTypeDef USB_DeactivateEndpoint(USB_OTG_GlobalTypeDef *USBx, USB_OTG_EP
/* Read DEPCTLn register */
if (ep->is_in == 1U)
{
+ if ((USBx_INEP(epnum)->DIEPCTL & USB_OTG_DIEPCTL_EPENA) == USB_OTG_DIEPCTL_EPENA)
+ {
+ USBx_INEP(epnum)->DIEPCTL |= USB_OTG_DIEPCTL_SNAK;
+ USBx_INEP(epnum)->DIEPCTL |= USB_OTG_DIEPCTL_EPDIS;
+ }
+
USBx_DEVICE->DEACHMSK &= ~(USB_OTG_DAINTMSK_IEPM & (uint32_t)(1UL << (ep->num & EP_ADDR_MSK)));
USBx_DEVICE->DAINTMSK &= ~(USB_OTG_DAINTMSK_IEPM & (uint32_t)(1UL << (ep->num & EP_ADDR_MSK)));
USBx_INEP(epnum)->DIEPCTL &= ~(USB_OTG_DIEPCTL_USBAEP |
@@ -673,6 +671,12 @@ HAL_StatusTypeDef USB_DeactivateEndpoint(USB_OTG_GlobalTypeDef *USBx, USB_OTG_EP
}
else
{
+ if ((USBx_OUTEP(epnum)->DOEPCTL & USB_OTG_DOEPCTL_EPENA) == USB_OTG_DOEPCTL_EPENA)
+ {
+ USBx_OUTEP(epnum)->DOEPCTL |= USB_OTG_DOEPCTL_SNAK;
+ USBx_OUTEP(epnum)->DOEPCTL |= USB_OTG_DOEPCTL_EPDIS;
+ }
+
USBx_DEVICE->DEACHMSK &= ~(USB_OTG_DAINTMSK_OEPM & ((uint32_t)(1UL << (ep->num & EP_ADDR_MSK)) << 16));
USBx_DEVICE->DAINTMSK &= ~(USB_OTG_DAINTMSK_OEPM & ((uint32_t)(1UL << (ep->num & EP_ADDR_MSK)) << 16));
USBx_OUTEP(epnum)->DOEPCTL &= ~(USB_OTG_DOEPCTL_USBAEP |
@@ -698,11 +702,23 @@ HAL_StatusTypeDef USB_DeactivateDedicatedEndpoint(USB_OTG_GlobalTypeDef *USBx, U
/* Read DEPCTLn register */
if (ep->is_in == 1U)
{
+ if ((USBx_INEP(epnum)->DIEPCTL & USB_OTG_DIEPCTL_EPENA) == USB_OTG_DIEPCTL_EPENA)
+ {
+ USBx_INEP(epnum)->DIEPCTL |= USB_OTG_DIEPCTL_SNAK;
+ USBx_INEP(epnum)->DIEPCTL |= USB_OTG_DIEPCTL_EPDIS;
+ }
+
USBx_INEP(epnum)->DIEPCTL &= ~ USB_OTG_DIEPCTL_USBAEP;
USBx_DEVICE->DAINTMSK &= ~(USB_OTG_DAINTMSK_IEPM & (uint32_t)(1UL << (ep->num & EP_ADDR_MSK)));
}
else
{
+ if ((USBx_OUTEP(epnum)->DOEPCTL & USB_OTG_DOEPCTL_EPENA) == USB_OTG_DOEPCTL_EPENA)
+ {
+ USBx_OUTEP(epnum)->DOEPCTL |= USB_OTG_DOEPCTL_SNAK;
+ USBx_OUTEP(epnum)->DOEPCTL |= USB_OTG_DOEPCTL_EPDIS;
+ }
+
USBx_OUTEP(epnum)->DOEPCTL &= ~USB_OTG_DOEPCTL_USBAEP;
USBx_DEVICE->DAINTMSK &= ~(USB_OTG_DAINTMSK_OEPM & ((uint32_t)(1UL << (ep->num & EP_ADDR_MSK)) << 16));
}
@@ -761,9 +777,27 @@ HAL_StatusTypeDef USB_EPStartXfer(USB_OTG_GlobalTypeDef *USBx, USB_OTG_EPTypeDef
{
USBx_INEP(epnum)->DIEPDMA = (uint32_t)(ep->dma_addr);
}
+
+ if (ep->type == EP_TYPE_ISOC)
+ {
+ if ((USBx_DEVICE->DSTS & (1U << 8)) == 0U)
+ {
+ USBx_INEP(epnum)->DIEPCTL |= USB_OTG_DIEPCTL_SODDFRM;
+ }
+ else
+ {
+ USBx_INEP(epnum)->DIEPCTL |= USB_OTG_DIEPCTL_SD0PID_SEVNFRM;
+ }
+ }
+
+ /* EP enable, IN data in FIFO */
+ USBx_INEP(epnum)->DIEPCTL |= (USB_OTG_DIEPCTL_CNAK | USB_OTG_DIEPCTL_EPENA);
}
else
{
+ /* EP enable, IN data in FIFO */
+ USBx_INEP(epnum)->DIEPCTL |= (USB_OTG_DIEPCTL_CNAK | USB_OTG_DIEPCTL_EPENA);
+
if (ep->type != EP_TYPE_ISOC)
{
/* Enable the Tx FIFO Empty Interrupt for this EP */
@@ -772,27 +806,20 @@ HAL_StatusTypeDef USB_EPStartXfer(USB_OTG_GlobalTypeDef *USBx, USB_OTG_EPTypeDef
USBx_DEVICE->DIEPEMPMSK |= 1UL << (ep->num & EP_ADDR_MSK);
}
}
- }
-
- if (ep->type == EP_TYPE_ISOC)
- {
- if ((USBx_DEVICE->DSTS & (1U << 8)) == 0U)
- {
- USBx_INEP(epnum)->DIEPCTL |= USB_OTG_DIEPCTL_SODDFRM;
- }
else
{
- USBx_INEP(epnum)->DIEPCTL |= USB_OTG_DIEPCTL_SD0PID_SEVNFRM;
+ if ((USBx_DEVICE->DSTS & (1U << 8)) == 0U)
+ {
+ USBx_INEP(epnum)->DIEPCTL |= USB_OTG_DIEPCTL_SODDFRM;
+ }
+ else
+ {
+ USBx_INEP(epnum)->DIEPCTL |= USB_OTG_DIEPCTL_SD0PID_SEVNFRM;
+ }
+
+ (void)USB_WritePacket(USBx, ep->xfer_buff, ep->num, (uint16_t)ep->xfer_len, dma);
}
}
-
- /* EP enable, IN data in FIFO */
- USBx_INEP(epnum)->DIEPCTL |= (USB_OTG_DIEPCTL_CNAK | USB_OTG_DIEPCTL_EPENA);
-
- if (ep->type == EP_TYPE_ISOC)
- {
- (void)USB_WritePacket(USBx, ep->xfer_buff, ep->num, (uint16_t)ep->xfer_len, dma);
- }
}
else /* OUT endpoint */
{
@@ -890,18 +917,21 @@ HAL_StatusTypeDef USB_EP0StartXfer(USB_OTG_GlobalTypeDef *USBx, USB_OTG_EPTypeDe
{
USBx_INEP(epnum)->DIEPDMA = (uint32_t)(ep->dma_addr);
}
+
+ /* EP enable, IN data in FIFO */
+ USBx_INEP(epnum)->DIEPCTL |= (USB_OTG_DIEPCTL_CNAK | USB_OTG_DIEPCTL_EPENA);
}
else
{
+ /* EP enable, IN data in FIFO */
+ USBx_INEP(epnum)->DIEPCTL |= (USB_OTG_DIEPCTL_CNAK | USB_OTG_DIEPCTL_EPENA);
+
/* Enable the Tx FIFO Empty Interrupt for this EP */
if (ep->xfer_len > 0U)
{
USBx_DEVICE->DIEPEMPMSK |= 1UL << (ep->num & EP_ADDR_MSK);
}
}
-
- /* EP enable, IN data in FIFO */
- USBx_INEP(epnum)->DIEPCTL |= (USB_OTG_DIEPCTL_CNAK | USB_OTG_DIEPCTL_EPENA);
}
else /* OUT endpoint */
{
@@ -959,7 +989,7 @@ HAL_StatusTypeDef USB_WritePacket(USB_OTG_GlobalTypeDef *USBx, uint8_t *src, uin
count32b = ((uint32_t)len + 3U) / 4U;
for (i = 0U; i < count32b; i++)
{
- USBx_DFIFO((uint32_t)ch_ep_num) = *((__packed uint32_t *)pSrc);
+ USBx_DFIFO((uint32_t)ch_ep_num) = __UNALIGNED_UINT32_READ(pSrc);
pSrc++;
}
}
@@ -968,15 +998,10 @@ HAL_StatusTypeDef USB_WritePacket(USB_OTG_GlobalTypeDef *USBx, uint8_t *src, uin
}
/**
- * @brief USB_ReadPacket : read a packet from the Tx FIFO associated
- * with the EP/channel
+ * @brief USB_ReadPacket : read a packet from the RX FIFO
* @param USBx Selected device
* @param dest source pointer
* @param len Number of bytes to read
- * @param dma USB dma enabled or disabled
- * This parameter can be one of these values:
- * 0 : DMA feature not used
- * 1 : DMA feature used
* @retval pointer to destination buffer
*/
void *USB_ReadPacket(USB_OTG_GlobalTypeDef *USBx, uint8_t *dest, uint16_t len)
@@ -988,7 +1013,7 @@ void *USB_ReadPacket(USB_OTG_GlobalTypeDef *USBx, uint8_t *dest, uint16_t len)
for (i = 0U; i < count32b; i++)
{
- *(__packed uint32_t *)pDest = USBx_DFIFO(0U);
+ __UNALIGNED_UINT32_WRITE(pDest, USBx_DFIFO(0U));
pDest++;
}
@@ -1260,13 +1285,9 @@ HAL_StatusTypeDef USB_ActivateSetup(USB_OTG_GlobalTypeDef *USBx)
{
uint32_t USBx_BASE = (uint32_t)USBx;
- /* Set the MPS of the IN EP based on the enumeration speed */
+ /* Set the MPS of the IN EP0 to 64 bytes */
USBx_INEP(0U)->DIEPCTL &= ~USB_OTG_DIEPCTL_MPSIZ;
- if ((USBx_DEVICE->DSTS & USB_OTG_DSTS_ENUMSPD) == DSTS_ENUMSPD_LS_PHY_6MHZ)
- {
- USBx_INEP(0U)->DIEPCTL |= 3U;
- }
USBx_DEVICE->DCTL |= USB_OTG_DCTL_CGINAK;
return HAL_OK;
@@ -1433,7 +1454,7 @@ HAL_StatusTypeDef USB_HostInit(USB_OTG_GlobalTypeDef *USBx, USB_OTG_CfgTypeDef c
if ((USBx->CID & (0x1U << 8)) != 0U)
{
- if (cfg.speed == USB_OTG_SPEED_FULL)
+ if (cfg.speed == USBH_FSLS_SPEED)
{
/* Force Device Enumeration to FS/LS mode only */
USBx_HOST->HCFG |= USB_OTG_HCFG_FSLSS;
@@ -1594,9 +1615,9 @@ HAL_StatusTypeDef USB_DriveVbus(USB_OTG_GlobalTypeDef *USBx, uint8_t state)
* @param USBx Selected device
* @retval speed : Host speed
* This parameter can be one of these values:
- * @arg USB_OTG_SPEED_HIGH: High speed mode
- * @arg USB_OTG_SPEED_FULL: Full speed mode
- * @arg USB_OTG_SPEED_LOW: Low speed mode
+ * @arg HCD_SPEED_HIGH: High speed mode
+ * @arg HCD_SPEED_FULL: Full speed mode
+ * @arg HCD_SPEED_LOW: Low speed mode
*/
uint32_t USB_GetHostSpeed(USB_OTG_GlobalTypeDef *USBx)
{
@@ -1774,7 +1795,7 @@ HAL_StatusTypeDef USB_HC_StartXfer(USB_OTG_GlobalTypeDef *USBx, USB_OTG_HCTypeDe
uint16_t num_packets;
uint16_t max_hc_pkt_count = 256U;
- if (((USBx->CID & (0x1U << 8)) != 0U) && (hc->speed == USB_OTG_SPEED_HIGH))
+ if (((USBx->CID & (0x1U << 8)) != 0U) && (hc->speed == USBH_HS_SPEED))
{
if ((dma == 0U) && (hc->do_ping == 1U))
{
@@ -2002,7 +2023,6 @@ HAL_StatusTypeDef USB_StopHost(USB_OTG_GlobalTypeDef *USBx)
uint32_t value;
uint32_t i;
-
(void)USB_DisableGlobalInt(USBx);
/* Flush FIFO */
@@ -2041,6 +2061,7 @@ HAL_StatusTypeDef USB_StopHost(USB_OTG_GlobalTypeDef *USBx)
/* Clear any pending Host interrupts */
USBx_HOST->HAINT = 0xFFFFFFFFU;
USBx->GINTSTS = 0xFFFFFFFFU;
+
(void)USB_EnableGlobalInt(USBx);
return HAL_OK;
diff --git a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_GCC/Boot/lib/STM32_USB_Device_Library/Core/Inc/usbd_core.h b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_GCC/Boot/lib/STM32_USB_Device_Library/Core/Inc/usbd_core.h
index 31ec3b02..988ba1ff 100644
--- a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_GCC/Boot/lib/STM32_USB_Device_Library/Core/Inc/usbd_core.h
+++ b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_GCC/Boot/lib/STM32_USB_Device_Library/Core/Inc/usbd_core.h
@@ -12,7 +12,7 @@
* This software component is licensed by ST under Ultimate Liberty license
* SLA0044, the "License"; You may not use this file except in compliance with
* the License. You may obtain a copy of the License at:
- * http://www.st.com/SLA0044
+ * www.st.com/SLA0044
*
******************************************************************************
*/
@@ -22,7 +22,7 @@
#define __USBD_CORE_H
#ifdef __cplusplus
- extern "C" {
+extern "C" {
#endif
/* Includes ------------------------------------------------------------------*/
@@ -84,58 +84,55 @@
*/
USBD_StatusTypeDef USBD_Init(USBD_HandleTypeDef *pdev, USBD_DescriptorsTypeDef *pdesc, uint8_t id);
USBD_StatusTypeDef USBD_DeInit(USBD_HandleTypeDef *pdev);
-USBD_StatusTypeDef USBD_Start (USBD_HandleTypeDef *pdev);
-USBD_StatusTypeDef USBD_Stop (USBD_HandleTypeDef *pdev);
+USBD_StatusTypeDef USBD_Start(USBD_HandleTypeDef *pdev);
+USBD_StatusTypeDef USBD_Stop(USBD_HandleTypeDef *pdev);
USBD_StatusTypeDef USBD_RegisterClass(USBD_HandleTypeDef *pdev, USBD_ClassTypeDef *pclass);
-USBD_StatusTypeDef USBD_RunTestMode (USBD_HandleTypeDef *pdev);
-USBD_StatusTypeDef USBD_SetClassConfig(USBD_HandleTypeDef *pdev, uint8_t cfgidx);
-USBD_StatusTypeDef USBD_ClrClassConfig(USBD_HandleTypeDef *pdev, uint8_t cfgidx);
+USBD_StatusTypeDef USBD_RunTestMode(USBD_HandleTypeDef *pdev);
+USBD_StatusTypeDef USBD_SetClassConfig(USBD_HandleTypeDef *pdev, uint8_t cfgidx);
+USBD_StatusTypeDef USBD_ClrClassConfig(USBD_HandleTypeDef *pdev, uint8_t cfgidx);
USBD_StatusTypeDef USBD_LL_SetupStage(USBD_HandleTypeDef *pdev, uint8_t *psetup);
-USBD_StatusTypeDef USBD_LL_DataOutStage(USBD_HandleTypeDef *pdev , uint8_t epnum, uint8_t *pdata);
-USBD_StatusTypeDef USBD_LL_DataInStage(USBD_HandleTypeDef *pdev , uint8_t epnum, uint8_t *pdata);
+USBD_StatusTypeDef USBD_LL_DataOutStage(USBD_HandleTypeDef *pdev, uint8_t epnum, uint8_t *pdata);
+USBD_StatusTypeDef USBD_LL_DataInStage(USBD_HandleTypeDef *pdev, uint8_t epnum, uint8_t *pdata);
-USBD_StatusTypeDef USBD_LL_Reset(USBD_HandleTypeDef *pdev);
-USBD_StatusTypeDef USBD_LL_SetSpeed(USBD_HandleTypeDef *pdev, USBD_SpeedTypeDef speed);
-USBD_StatusTypeDef USBD_LL_Suspend(USBD_HandleTypeDef *pdev);
-USBD_StatusTypeDef USBD_LL_Resume(USBD_HandleTypeDef *pdev);
+USBD_StatusTypeDef USBD_LL_Reset(USBD_HandleTypeDef *pdev);
+USBD_StatusTypeDef USBD_LL_SetSpeed(USBD_HandleTypeDef *pdev, USBD_SpeedTypeDef speed);
+USBD_StatusTypeDef USBD_LL_Suspend(USBD_HandleTypeDef *pdev);
+USBD_StatusTypeDef USBD_LL_Resume(USBD_HandleTypeDef *pdev);
USBD_StatusTypeDef USBD_LL_SOF(USBD_HandleTypeDef *pdev);
-USBD_StatusTypeDef USBD_LL_IsoINIncomplete(USBD_HandleTypeDef *pdev, uint8_t epnum);
-USBD_StatusTypeDef USBD_LL_IsoOUTIncomplete(USBD_HandleTypeDef *pdev, uint8_t epnum);
+USBD_StatusTypeDef USBD_LL_IsoINIncomplete(USBD_HandleTypeDef *pdev, uint8_t epnum);
+USBD_StatusTypeDef USBD_LL_IsoOUTIncomplete(USBD_HandleTypeDef *pdev, uint8_t epnum);
-USBD_StatusTypeDef USBD_LL_DevConnected(USBD_HandleTypeDef *pdev);
-USBD_StatusTypeDef USBD_LL_DevDisconnected(USBD_HandleTypeDef *pdev);
+USBD_StatusTypeDef USBD_LL_DevConnected(USBD_HandleTypeDef *pdev);
+USBD_StatusTypeDef USBD_LL_DevDisconnected(USBD_HandleTypeDef *pdev);
/* USBD Low Level Driver */
-USBD_StatusTypeDef USBD_LL_Init (USBD_HandleTypeDef *pdev);
-USBD_StatusTypeDef USBD_LL_DeInit (USBD_HandleTypeDef *pdev);
-USBD_StatusTypeDef USBD_LL_Start(USBD_HandleTypeDef *pdev);
-USBD_StatusTypeDef USBD_LL_Stop (USBD_HandleTypeDef *pdev);
-USBD_StatusTypeDef USBD_LL_OpenEP (USBD_HandleTypeDef *pdev,
- uint8_t ep_addr,
- uint8_t ep_type,
- uint16_t ep_mps);
+USBD_StatusTypeDef USBD_LL_Init(USBD_HandleTypeDef *pdev);
+USBD_StatusTypeDef USBD_LL_DeInit(USBD_HandleTypeDef *pdev);
+USBD_StatusTypeDef USBD_LL_Start(USBD_HandleTypeDef *pdev);
+USBD_StatusTypeDef USBD_LL_Stop(USBD_HandleTypeDef *pdev);
-USBD_StatusTypeDef USBD_LL_CloseEP (USBD_HandleTypeDef *pdev, uint8_t ep_addr);
-USBD_StatusTypeDef USBD_LL_FlushEP (USBD_HandleTypeDef *pdev, uint8_t ep_addr);
-USBD_StatusTypeDef USBD_LL_StallEP (USBD_HandleTypeDef *pdev, uint8_t ep_addr);
-USBD_StatusTypeDef USBD_LL_ClearStallEP (USBD_HandleTypeDef *pdev, uint8_t ep_addr);
-uint8_t USBD_LL_IsStallEP (USBD_HandleTypeDef *pdev, uint8_t ep_addr);
-USBD_StatusTypeDef USBD_LL_SetUSBAddress (USBD_HandleTypeDef *pdev, uint8_t dev_addr);
-USBD_StatusTypeDef USBD_LL_Transmit (USBD_HandleTypeDef *pdev,
- uint8_t ep_addr,
- uint8_t *pbuf,
- uint16_t size);
+USBD_StatusTypeDef USBD_LL_OpenEP(USBD_HandleTypeDef *pdev, uint8_t ep_addr,
+ uint8_t ep_type, uint16_t ep_mps);
-USBD_StatusTypeDef USBD_LL_PrepareReceive(USBD_HandleTypeDef *pdev,
- uint8_t ep_addr,
- uint8_t *pbuf,
- uint16_t size);
+USBD_StatusTypeDef USBD_LL_CloseEP(USBD_HandleTypeDef *pdev, uint8_t ep_addr);
+USBD_StatusTypeDef USBD_LL_FlushEP(USBD_HandleTypeDef *pdev, uint8_t ep_addr);
+USBD_StatusTypeDef USBD_LL_StallEP(USBD_HandleTypeDef *pdev, uint8_t ep_addr);
+USBD_StatusTypeDef USBD_LL_ClearStallEP(USBD_HandleTypeDef *pdev, uint8_t ep_addr);
+USBD_StatusTypeDef USBD_LL_SetUSBAddress(USBD_HandleTypeDef *pdev, uint8_t dev_addr);
-uint32_t USBD_LL_GetRxDataSize (USBD_HandleTypeDef *pdev, uint8_t ep_addr);
-void USBD_LL_Delay (uint32_t Delay);
+USBD_StatusTypeDef USBD_LL_Transmit(USBD_HandleTypeDef *pdev, uint8_t ep_addr,
+ uint8_t *pbuf, uint32_t size);
+
+USBD_StatusTypeDef USBD_LL_PrepareReceive(USBD_HandleTypeDef *pdev, uint8_t ep_addr,
+ uint8_t *pbuf, uint32_t size);
+
+uint8_t USBD_LL_IsStallEP(USBD_HandleTypeDef *pdev, uint8_t ep_addr);
+uint32_t USBD_LL_GetRxDataSize(USBD_HandleTypeDef *pdev, uint8_t ep_addr);
+
+void USBD_LL_Delay(uint32_t Delay);
/**
* @}
diff --git a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_GCC/Boot/lib/STM32_USB_Device_Library/Core/Inc/usbd_ctlreq.h b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_GCC/Boot/lib/STM32_USB_Device_Library/Core/Inc/usbd_ctlreq.h
index 9fa2873a..a4bfc44b 100644
--- a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_GCC/Boot/lib/STM32_USB_Device_Library/Core/Inc/usbd_ctlreq.h
+++ b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_GCC/Boot/lib/STM32_USB_Device_Library/Core/Inc/usbd_ctlreq.h
@@ -12,7 +12,7 @@
* This software component is licensed by ST under Ultimate Liberty license
* SLA0044, the "License"; You may not use this file except in compliance with
* the License. You may obtain a copy of the License at:
- * http://www.st.com/SLA0044
+ * www.st.com/SLA0044
*
******************************************************************************
*/
@@ -22,7 +22,7 @@
#define __USB_REQUEST_H
#ifdef __cplusplus
- extern "C" {
+extern "C" {
#endif
/* Includes ------------------------------------------------------------------*/
@@ -73,16 +73,14 @@
* @{
*/
-USBD_StatusTypeDef USBD_StdDevReq (USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req);
-USBD_StatusTypeDef USBD_StdItfReq (USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req);
-USBD_StatusTypeDef USBD_StdEPReq (USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req);
+USBD_StatusTypeDef USBD_StdDevReq(USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req);
+USBD_StatusTypeDef USBD_StdItfReq(USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req);
+USBD_StatusTypeDef USBD_StdEPReq(USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req);
+void USBD_CtlError(USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req);
+void USBD_ParseSetupRequest(USBD_SetupReqTypedef *req, uint8_t *pdata);
+void USBD_GetString(uint8_t *desc, uint8_t *unicode, uint16_t *len);
-void USBD_CtlError (USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req);
-
-void USBD_ParseSetupRequest (USBD_SetupReqTypedef *req, uint8_t *pdata);
-
-void USBD_GetString (uint8_t *desc, uint8_t *unicode, uint16_t *len);
/**
* @}
*/
diff --git a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_GCC/Boot/lib/STM32_USB_Device_Library/Core/Inc/usbd_def.h b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_GCC/Boot/lib/STM32_USB_Device_Library/Core/Inc/usbd_def.h
index b1e7968d..8219140f 100644
--- a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_GCC/Boot/lib/STM32_USB_Device_Library/Core/Inc/usbd_def.h
+++ b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_GCC/Boot/lib/STM32_USB_Device_Library/Core/Inc/usbd_def.h
@@ -12,7 +12,7 @@
* This software component is licensed by ST under Ultimate Liberty license
* SLA0044, the "License"; You may not use this file except in compliance with
* the License. You may obtain a copy of the License at:
- * http://www.st.com/SLA0044
+ * www.st.com/SLA0044
*
******************************************************************************
*/
@@ -22,7 +22,7 @@
#define __USBD_DEF_H
#ifdef __cplusplus
- extern "C" {
+extern "C" {
#endif
/* Includes ------------------------------------------------------------------*/
@@ -61,9 +61,13 @@
#define USBD_SELF_POWERED 1U
#endif /*USBD_SELF_POWERED */
-#ifndef USBD_SUPPORT_USER_STRING
-#define USBD_SUPPORT_USER_STRING 0U
-#endif /* USBD_SUPPORT_USER_STRING */
+#ifndef USBD_SUPPORT_USER_STRING_DESC
+#define USBD_SUPPORT_USER_STRING_DESC 0U
+#endif /* USBD_SUPPORT_USER_STRING_DESC */
+
+#ifndef USBD_CLASS_USER_STRING_DESC
+#define USBD_CLASS_USER_STRING_DESC 0U
+#endif /* USBD_CLASS_USER_STRING_DESC */
#define USB_LEN_DEV_QUALIFIER_DESC 0x0AU
#define USB_LEN_DEV_DESC 0x12U
@@ -158,37 +162,58 @@
typedef struct usb_setup_req
{
+ uint8_t bmRequest;
+ uint8_t bRequest;
+ uint16_t wValue;
+ uint16_t wIndex;
+ uint16_t wLength;
+} USBD_SetupReqTypedef;
+
+typedef struct
+{
+ uint8_t bLength;
+ uint8_t bDescriptorType;
+ uint8_t wDescriptorLengthLow;
+ uint8_t wDescriptorLengthHigh;
+ uint8_t bNumInterfaces;
+ uint8_t bConfigurationValue;
+ uint8_t iConfiguration;
+ uint8_t bmAttributes;
+ uint8_t bMaxPower;
+} USBD_ConfigDescTypedef;
+
+typedef struct
+{
+ uint8_t bLength;
+ uint8_t bDescriptorType;
+ uint16_t wTotalLength;
+ uint8_t bNumDeviceCaps;
+} USBD_BosDescTypedef;
- uint8_t bmRequest;
- uint8_t bRequest;
- uint16_t wValue;
- uint16_t wIndex;
- uint16_t wLength;
-}USBD_SetupReqTypedef;
struct _USBD_HandleTypeDef;
typedef struct _Device_cb
{
- uint8_t (*Init) (struct _USBD_HandleTypeDef *pdev , uint8_t cfgidx);
- uint8_t (*DeInit) (struct _USBD_HandleTypeDef *pdev , uint8_t cfgidx);
- /* Control Endpoints*/
- uint8_t (*Setup) (struct _USBD_HandleTypeDef *pdev , USBD_SetupReqTypedef *req);
- uint8_t (*EP0_TxSent) (struct _USBD_HandleTypeDef *pdev );
- uint8_t (*EP0_RxReady) (struct _USBD_HandleTypeDef *pdev );
+ uint8_t (*Init)(struct _USBD_HandleTypeDef *pdev, uint8_t cfgidx);
+ uint8_t (*DeInit)(struct _USBD_HandleTypeDef *pdev, uint8_t cfgidx);
+ /* Control Endpoints*/
+ uint8_t (*Setup)(struct _USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req);
+ uint8_t (*EP0_TxSent)(struct _USBD_HandleTypeDef *pdev);
+ uint8_t (*EP0_RxReady)(struct _USBD_HandleTypeDef *pdev);
/* Class Specific Endpoints*/
- uint8_t (*DataIn) (struct _USBD_HandleTypeDef *pdev , uint8_t epnum);
- uint8_t (*DataOut) (struct _USBD_HandleTypeDef *pdev , uint8_t epnum);
- uint8_t (*SOF) (struct _USBD_HandleTypeDef *pdev);
- uint8_t (*IsoINIncomplete) (struct _USBD_HandleTypeDef *pdev , uint8_t epnum);
- uint8_t (*IsoOUTIncomplete) (struct _USBD_HandleTypeDef *pdev , uint8_t epnum);
+ uint8_t (*DataIn)(struct _USBD_HandleTypeDef *pdev, uint8_t epnum);
+ uint8_t (*DataOut)(struct _USBD_HandleTypeDef *pdev, uint8_t epnum);
+ uint8_t (*SOF)(struct _USBD_HandleTypeDef *pdev);
+ uint8_t (*IsoINIncomplete)(struct _USBD_HandleTypeDef *pdev, uint8_t epnum);
+ uint8_t (*IsoOUTIncomplete)(struct _USBD_HandleTypeDef *pdev, uint8_t epnum);
uint8_t *(*GetHSConfigDescriptor)(uint16_t *length);
uint8_t *(*GetFSConfigDescriptor)(uint16_t *length);
uint8_t *(*GetOtherSpeedConfigDescriptor)(uint16_t *length);
uint8_t *(*GetDeviceQualifierDescriptor)(uint16_t *length);
-#if (USBD_SUPPORT_USER_STRING == 1U)
- uint8_t *(*GetUsrStrDescriptor)(struct _USBD_HandleTypeDef *pdev ,uint8_t index, uint16_t *length);
+#if (USBD_SUPPORT_USER_STRING_DESC == 1U)
+ uint8_t *(*GetUsrStrDescriptor)(struct _USBD_HandleTypeDef *pdev, uint8_t index, uint16_t *length);
#endif
} USBD_ClassTypeDef;
@@ -199,38 +224,44 @@ typedef enum
USBD_SPEED_HIGH = 0U,
USBD_SPEED_FULL = 1U,
USBD_SPEED_LOW = 2U,
-}USBD_SpeedTypeDef;
+} USBD_SpeedTypeDef;
/* Following USB Device status */
-typedef enum {
- USBD_OK = 0U,
+typedef enum
+{
+ USBD_OK = 0U,
USBD_BUSY,
+ USBD_EMEM,
USBD_FAIL,
-}USBD_StatusTypeDef;
+} USBD_StatusTypeDef;
/* USB Device descriptors structure */
typedef struct
{
- uint8_t *(*GetDeviceDescriptor)( USBD_SpeedTypeDef speed , uint16_t *length);
- uint8_t *(*GetLangIDStrDescriptor)( USBD_SpeedTypeDef speed , uint16_t *length);
- uint8_t *(*GetManufacturerStrDescriptor)( USBD_SpeedTypeDef speed , uint16_t *length);
- uint8_t *(*GetProductStrDescriptor)( USBD_SpeedTypeDef speed , uint16_t *length);
- uint8_t *(*GetSerialStrDescriptor)( USBD_SpeedTypeDef speed , uint16_t *length);
- uint8_t *(*GetConfigurationStrDescriptor)( USBD_SpeedTypeDef speed , uint16_t *length);
- uint8_t *(*GetInterfaceStrDescriptor)( USBD_SpeedTypeDef speed , uint16_t *length);
-#if (USBD_LPM_ENABLED == 1U)
- uint8_t *(*GetBOSDescriptor)( USBD_SpeedTypeDef speed , uint16_t *length);
+ uint8_t *(*GetDeviceDescriptor)(USBD_SpeedTypeDef speed, uint16_t *length);
+ uint8_t *(*GetLangIDStrDescriptor)(USBD_SpeedTypeDef speed, uint16_t *length);
+ uint8_t *(*GetManufacturerStrDescriptor)(USBD_SpeedTypeDef speed, uint16_t *length);
+ uint8_t *(*GetProductStrDescriptor)(USBD_SpeedTypeDef speed, uint16_t *length);
+ uint8_t *(*GetSerialStrDescriptor)(USBD_SpeedTypeDef speed, uint16_t *length);
+ uint8_t *(*GetConfigurationStrDescriptor)(USBD_SpeedTypeDef speed, uint16_t *length);
+ uint8_t *(*GetInterfaceStrDescriptor)(USBD_SpeedTypeDef speed, uint16_t *length);
+#if (USBD_CLASS_USER_STRING_DESC == 1)
+ uint8_t *(*GetUserStrDescriptor)(USBD_SpeedTypeDef speed, uint8_t idx, uint16_t *length);
+#endif
+#if ((USBD_LPM_ENABLED == 1U) || (USBD_CLASS_BOS_ENABLED == 1))
+ uint8_t *(*GetBOSDescriptor)(USBD_SpeedTypeDef speed, uint16_t *length);
#endif
} USBD_DescriptorsTypeDef;
/* USB Device handle structure */
typedef struct
{
- uint32_t status;
- uint32_t is_used;
- uint32_t total_length;
- uint32_t rem_length;
- uint32_t maxpacket;
+ uint32_t status;
+ uint32_t total_length;
+ uint32_t rem_length;
+ uint32_t maxpacket;
+ uint16_t is_used;
+ uint16_t bInterval;
} USBD_EndpointTypeDef;
/* USB Device handle structure */
@@ -241,8 +272,8 @@ typedef struct _USBD_HandleTypeDef
uint32_t dev_default_config;
uint32_t dev_config_status;
USBD_SpeedTypeDef dev_speed;
- USBD_EndpointTypeDef ep_in[15];
- USBD_EndpointTypeDef ep_out[15];
+ USBD_EndpointTypeDef ep_in[16];
+ USBD_EndpointTypeDef ep_out[16];
uint32_t ep0_state;
uint32_t ep0_data_len;
uint8_t dev_state;
@@ -251,6 +282,7 @@ typedef struct _USBD_HandleTypeDef
uint8_t dev_connection_status;
uint8_t dev_test_mode;
uint32_t dev_remote_wakeup;
+ uint8_t ConfIdx;
USBD_SetupReqTypedef request;
USBD_DescriptorsTypeDef *pDesc;
@@ -258,6 +290,8 @@ typedef struct _USBD_HandleTypeDef
void *pClassData;
void *pUserData;
void *pData;
+ void *pBosDesc;
+ void *pConfDesc;
} USBD_HandleTypeDef;
/**
@@ -269,40 +303,57 @@ typedef struct _USBD_HandleTypeDef
/** @defgroup USBD_DEF_Exported_Macros
* @{
*/
-#define SWAPBYTE(addr) (((uint16_t)(*((uint8_t *)(addr)))) + \
- (((uint16_t)(*(((uint8_t *)(addr)) + 1U))) << 8U))
+__STATIC_INLINE uint16_t SWAPBYTE(uint8_t *addr)
+{
+ uint16_t _SwapVal, _Byte1, _Byte2;
+ uint8_t *_pbuff = addr;
-#define LOBYTE(x) ((uint8_t)(x & 0x00FFU))
-#define HIBYTE(x) ((uint8_t)((x & 0xFF00U) >> 8U))
+ _Byte1 = *(uint8_t *)_pbuff;
+ _pbuff++;
+ _Byte2 = *(uint8_t *)_pbuff;
+
+ _SwapVal = (_Byte2 << 8) | _Byte1;
+
+ return _SwapVal;
+}
+
+#define LOBYTE(x) ((uint8_t)((x) & 0x00FFU))
+#define HIBYTE(x) ((uint8_t)(((x) & 0xFF00U) >> 8U))
#define MIN(a, b) (((a) < (b)) ? (a) : (b))
#define MAX(a, b) (((a) > (b)) ? (a) : (b))
#if defined ( __GNUC__ )
- #ifndef __weak
- #define __weak __attribute__((weak))
- #endif /* __weak */
- #ifndef __packed
- #define __packed __attribute__((__packed__))
- #endif /* __packed */
+#ifndef __weak
+#define __weak __attribute__((weak))
+#endif /* __weak */
+#ifndef __packed
+#define __packed __attribute__((__packed__))
+#endif /* __packed */
#endif /* __GNUC__ */
/* In HS mode and when the DMA is used, all variables and data structures dealing
with the DMA during the transaction process should be 4-bytes aligned */
-#if defined (__GNUC__) /* GNU Compiler */
- #define __ALIGN_END __attribute__ ((aligned (4)))
- #define __ALIGN_BEGIN
+#if defined ( __GNUC__ ) && !defined (__CC_ARM) /* GNU Compiler */
+#ifndef __ALIGN_END
+#define __ALIGN_END __attribute__ ((aligned (4U)))
+#endif /* __ALIGN_END */
+#ifndef __ALIGN_BEGIN
+#define __ALIGN_BEGIN
+#endif /* __ALIGN_BEGIN */
#else
- #define __ALIGN_END
- #if defined (__CC_ARM) /* ARM Compiler */
- #define __ALIGN_BEGIN __align(4)
- #elif defined (__ICCARM__) /* IAR Compiler */
- #define __ALIGN_BEGIN
- #elif defined (__TASKING__) /* TASKING Compiler */
- #define __ALIGN_BEGIN __align(4)
- #endif /* __CC_ARM */
+#ifndef __ALIGN_END
+#define __ALIGN_END
+#endif /* __ALIGN_END */
+#ifndef __ALIGN_BEGIN
+#if defined (__CC_ARM) /* ARM Compiler */
+#define __ALIGN_BEGIN __align(4U)
+#elif defined (__ICCARM__) /* IAR Compiler */
+#define __ALIGN_BEGIN
+#endif /* __CC_ARM */
+#endif /* __ALIGN_BEGIN */
#endif /* __GNUC__ */
diff --git a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_GCC/Boot/lib/STM32_USB_Device_Library/Core/Inc/usbd_ioreq.h b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_GCC/Boot/lib/STM32_USB_Device_Library/Core/Inc/usbd_ioreq.h
index 0552e00f..8f077c79 100644
--- a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_GCC/Boot/lib/STM32_USB_Device_Library/Core/Inc/usbd_ioreq.h
+++ b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_GCC/Boot/lib/STM32_USB_Device_Library/Core/Inc/usbd_ioreq.h
@@ -12,7 +12,7 @@
* This software component is licensed by ST under Ultimate Liberty license
* SLA0044, the "License"; You may not use this file except in compliance with
* the License. You may obtain a copy of the License at:
- * http://www.st.com/SLA0044
+ * www.st.com/SLA0044
*
******************************************************************************
*/
@@ -22,7 +22,7 @@
#define __USBD_IOREQ_H
#ifdef __cplusplus
- extern "C" {
+extern "C" {
#endif
/* Includes ------------------------------------------------------------------*/
@@ -77,27 +77,22 @@
* @{
*/
-USBD_StatusTypeDef USBD_CtlSendData (USBD_HandleTypeDef *pdev,
- uint8_t *pbuf,
- uint16_t len);
+USBD_StatusTypeDef USBD_CtlSendData(USBD_HandleTypeDef *pdev,
+ uint8_t *pbuf, uint32_t len);
-USBD_StatusTypeDef USBD_CtlContinueSendData (USBD_HandleTypeDef *pdev,
- uint8_t *pbuf,
- uint16_t len);
+USBD_StatusTypeDef USBD_CtlContinueSendData(USBD_HandleTypeDef *pdev,
+ uint8_t *pbuf, uint32_t len);
-USBD_StatusTypeDef USBD_CtlPrepareRx (USBD_HandleTypeDef *pdev,
- uint8_t *pbuf,
- uint16_t len);
+USBD_StatusTypeDef USBD_CtlPrepareRx(USBD_HandleTypeDef *pdev,
+ uint8_t *pbuf, uint32_t len);
-USBD_StatusTypeDef USBD_CtlContinueRx (USBD_HandleTypeDef *pdev,
- uint8_t *pbuf,
- uint16_t len);
+USBD_StatusTypeDef USBD_CtlContinueRx(USBD_HandleTypeDef *pdev,
+ uint8_t *pbuf, uint32_t len);
-USBD_StatusTypeDef USBD_CtlSendStatus (USBD_HandleTypeDef *pdev);
+USBD_StatusTypeDef USBD_CtlSendStatus(USBD_HandleTypeDef *pdev);
+USBD_StatusTypeDef USBD_CtlReceiveStatus(USBD_HandleTypeDef *pdev);
-USBD_StatusTypeDef USBD_CtlReceiveStatus (USBD_HandleTypeDef *pdev);
-
-uint32_t USBD_GetRxCount (USBD_HandleTypeDef *pdev, uint8_t ep_addr);
+uint32_t USBD_GetRxCount(USBD_HandleTypeDef *pdev, uint8_t ep_addr);
/**
* @}
diff --git a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_GCC/Boot/lib/STM32_USB_Device_Library/Core/Src/usbd_core.c b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_GCC/Boot/lib/STM32_USB_Device_Library/Core/Src/usbd_core.c
index 1cc9b19f..e3db03fd 100644
--- a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_GCC/Boot/lib/STM32_USB_Device_Library/Core/Src/usbd_core.c
+++ b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_GCC/Boot/lib/STM32_USB_Device_Library/Core/Src/usbd_core.c
@@ -12,7 +12,7 @@
* This software component is licensed by ST under Ultimate Liberty license
* SLA0044, the "License"; You may not use this file except in compliance with
* the License. You may obtain a copy of the License at:
- * http://www.st.com/SLA0044
+ * www.st.com/SLA0044
*
******************************************************************************
*/
@@ -33,6 +33,7 @@
/** @defgroup USBD_CORE_Private_TypesDefinitions
* @{
*/
+
/**
* @}
*/
@@ -50,13 +51,12 @@
/** @defgroup USBD_CORE_Private_Macros
* @{
*/
+
/**
* @}
*/
-
-
/** @defgroup USBD_CORE_Private_FunctionPrototypes
* @{
*/
@@ -73,6 +73,7 @@
* @}
*/
+
/** @defgroup USBD_CORE_Private_Functions
* @{
*/
@@ -85,10 +86,13 @@
* @param id: Low level core index
* @retval None
*/
-USBD_StatusTypeDef USBD_Init(USBD_HandleTypeDef *pdev, USBD_DescriptorsTypeDef *pdesc, uint8_t id)
+USBD_StatusTypeDef USBD_Init(USBD_HandleTypeDef *pdev,
+ USBD_DescriptorsTypeDef *pdesc, uint8_t id)
{
+ USBD_StatusTypeDef ret;
+
/* Check whether the USB Host handle is valid */
- if(pdev == NULL)
+ if (pdev == NULL)
{
#if (USBD_DEBUG_LEVEL > 1U)
USBD_ErrLog("Invalid Device handle");
@@ -96,25 +100,31 @@ USBD_StatusTypeDef USBD_Init(USBD_HandleTypeDef *pdev, USBD_DescriptorsTypeDef *
return USBD_FAIL;
}
- /* Unlink previous class*/
- if(pdev->pClass != NULL)
+ /* Unlink previous class */
+ if (pdev->pClass != NULL)
{
pdev->pClass = NULL;
}
+ if (pdev->pConfDesc != NULL)
+ {
+ pdev->pConfDesc = NULL;
+ }
+
/* Assign USBD Descriptors */
- if(pdesc != NULL)
+ if (pdesc != NULL)
{
pdev->pDesc = pdesc;
}
/* Set Device initial State */
- pdev->dev_state = USBD_STATE_DEFAULT;
+ pdev->dev_state = USBD_STATE_DEFAULT;
pdev->id = id;
- /* Initialize low level driver */
- USBD_LL_Init(pdev);
- return USBD_OK;
+ /* Initialize low level driver */
+ ret = USBD_LL_Init(pdev);
+
+ return ret;
}
/**
@@ -125,19 +135,34 @@ USBD_StatusTypeDef USBD_Init(USBD_HandleTypeDef *pdev, USBD_DescriptorsTypeDef *
*/
USBD_StatusTypeDef USBD_DeInit(USBD_HandleTypeDef *pdev)
{
+ USBD_StatusTypeDef ret;
+
/* Set Default State */
- pdev->dev_state = USBD_STATE_DEFAULT;
+ pdev->dev_state = USBD_STATE_DEFAULT;
/* Free Class Resources */
- pdev->pClass->DeInit(pdev, (uint8_t)pdev->dev_config);
+ if (pdev->pClass != NULL)
+ {
+ pdev->pClass->DeInit(pdev, (uint8_t)pdev->dev_config);
+ }
- /* Stop the low level driver */
- USBD_LL_Stop(pdev);
+ if (pdev->pConfDesc != NULL)
+ {
+ pdev->pConfDesc = NULL;
+ }
+
+ /* Stop the low level driver */
+ ret = USBD_LL_Stop(pdev);
+
+ if (ret != USBD_OK)
+ {
+ return ret;
+ }
/* Initialize low level driver */
- USBD_LL_DeInit(pdev);
+ ret = USBD_LL_DeInit(pdev);
- return USBD_OK;
+ return ret;
}
/**
@@ -147,24 +172,30 @@ USBD_StatusTypeDef USBD_DeInit(USBD_HandleTypeDef *pdev)
* @param pclass: Class handle
* @retval USBD Status
*/
-USBD_StatusTypeDef USBD_RegisterClass(USBD_HandleTypeDef *pdev, USBD_ClassTypeDef *pclass)
+USBD_StatusTypeDef USBD_RegisterClass(USBD_HandleTypeDef *pdev, USBD_ClassTypeDef *pclass)
{
- USBD_StatusTypeDef status = USBD_OK;
- if(pclass != 0)
- {
- /* link the class to the USB Device handle */
- pdev->pClass = pclass;
- status = USBD_OK;
- }
- else
+ uint16_t len = 0U;
+
+ if (pclass == NULL)
{
#if (USBD_DEBUG_LEVEL > 1U)
USBD_ErrLog("Invalid Class handle");
#endif
- status = USBD_FAIL;
+ return USBD_FAIL;
}
- return status;
+ /* link the class to the USB Device handle */
+ pdev->pClass = pclass;
+
+ /* Get Device Configuration Descriptor */
+#ifdef USE_USB_FS
+ pdev->pConfDesc = (void *)pdev->pClass->GetFSConfigDescriptor(&len);
+#else /* USE_USB_HS */
+ pdev->pConfDesc = (void *)pdev->pClass->GetHSConfigDescriptor(&len);
+#endif /* USE_USB_FS */
+
+
+ return USBD_OK;
}
/**
@@ -173,13 +204,10 @@ USBD_StatusTypeDef USBD_RegisterClass(USBD_HandleTypeDef *pdev, USBD_ClassTypeD
* @param pdev: Device Handle
* @retval USBD Status
*/
-USBD_StatusTypeDef USBD_Start (USBD_HandleTypeDef *pdev)
+USBD_StatusTypeDef USBD_Start(USBD_HandleTypeDef *pdev)
{
-
/* Start the low level driver */
- USBD_LL_Start(pdev);
-
- return USBD_OK;
+ return USBD_LL_Start(pdev);
}
/**
@@ -188,15 +216,25 @@ USBD_StatusTypeDef USBD_Start (USBD_HandleTypeDef *pdev)
* @param pdev: Device Handle
* @retval USBD Status
*/
-USBD_StatusTypeDef USBD_Stop (USBD_HandleTypeDef *pdev)
+USBD_StatusTypeDef USBD_Stop(USBD_HandleTypeDef *pdev)
{
+ USBD_StatusTypeDef ret;
+
/* Free Class Resources */
- pdev->pClass->DeInit(pdev, (uint8_t)pdev->dev_config);
+ if (pdev->pClass != NULL)
+ {
+ pdev->pClass->DeInit(pdev, (uint8_t)pdev->dev_config);
+ }
- /* Stop the low level driver */
- USBD_LL_Stop(pdev);
+ if (pdev->pConfDesc != NULL)
+ {
+ pdev->pConfDesc = NULL;
+ }
- return USBD_OK;
+ /* Stop the low level driver */
+ ret = USBD_LL_Stop(pdev);
+
+ return ret;
}
/**
@@ -205,7 +243,7 @@ USBD_StatusTypeDef USBD_Stop (USBD_HandleTypeDef *pdev)
* @param pdev: device instance
* @retval status
*/
-USBD_StatusTypeDef USBD_RunTestMode (USBD_HandleTypeDef *pdev)
+USBD_StatusTypeDef USBD_RunTestMode(USBD_HandleTypeDef *pdev)
{
/* Prevent unused argument compilation warning */
UNUSED(pdev);
@@ -221,17 +259,14 @@ USBD_StatusTypeDef USBD_RunTestMode (USBD_HandleTypeDef *pdev)
* @retval status
*/
-USBD_StatusTypeDef USBD_SetClassConfig(USBD_HandleTypeDef *pdev, uint8_t cfgidx)
+USBD_StatusTypeDef USBD_SetClassConfig(USBD_HandleTypeDef *pdev, uint8_t cfgidx)
{
- USBD_StatusTypeDef ret = USBD_FAIL;
+ USBD_StatusTypeDef ret = USBD_FAIL;
- if(pdev->pClass != NULL)
+ if (pdev->pClass != NULL)
{
- /* Set configuration and Start the Class*/
- if(pdev->pClass->Init(pdev, cfgidx) == 0U)
- {
- ret = USBD_OK;
- }
+ /* Set configuration and Start the Class */
+ ret = (USBD_StatusTypeDef)pdev->pClass->Init(pdev, cfgidx);
}
return ret;
@@ -244,10 +279,14 @@ USBD_StatusTypeDef USBD_SetClassConfig(USBD_HandleTypeDef *pdev, uint8_t cfgidx
* @param cfgidx: configuration index
* @retval status: USBD_StatusTypeDef
*/
-USBD_StatusTypeDef USBD_ClrClassConfig(USBD_HandleTypeDef *pdev, uint8_t cfgidx)
+USBD_StatusTypeDef USBD_ClrClassConfig(USBD_HandleTypeDef *pdev, uint8_t cfgidx)
{
- /* Clear configuration and De-initialize the Class process*/
- pdev->pClass->DeInit(pdev, cfgidx);
+ /* Clear configuration and De-initialize the Class process */
+ if (pdev->pClass != NULL)
+ {
+ pdev->pClass->DeInit(pdev, cfgidx);
+ }
+
return USBD_OK;
}
@@ -260,6 +299,8 @@ USBD_StatusTypeDef USBD_ClrClassConfig(USBD_HandleTypeDef *pdev, uint8_t cfgidx
*/
USBD_StatusTypeDef USBD_LL_SetupStage(USBD_HandleTypeDef *pdev, uint8_t *psetup)
{
+ USBD_StatusTypeDef ret;
+
USBD_ParseSetupRequest(&pdev->request, psetup);
pdev->ep0_state = USBD_EP0_SETUP;
@@ -268,24 +309,24 @@ USBD_StatusTypeDef USBD_LL_SetupStage(USBD_HandleTypeDef *pdev, uint8_t *psetup)
switch (pdev->request.bmRequest & 0x1FU)
{
- case USB_REQ_RECIPIENT_DEVICE:
- USBD_StdDevReq (pdev, &pdev->request);
- break;
+ case USB_REQ_RECIPIENT_DEVICE:
+ ret = USBD_StdDevReq(pdev, &pdev->request);
+ break;
- case USB_REQ_RECIPIENT_INTERFACE:
- USBD_StdItfReq(pdev, &pdev->request);
- break;
+ case USB_REQ_RECIPIENT_INTERFACE:
+ ret = USBD_StdItfReq(pdev, &pdev->request);
+ break;
- case USB_REQ_RECIPIENT_ENDPOINT:
- USBD_StdEPReq(pdev, &pdev->request);
- break;
+ case USB_REQ_RECIPIENT_ENDPOINT:
+ ret = USBD_StdEPReq(pdev, &pdev->request);
+ break;
- default:
- USBD_LL_StallEP(pdev, (pdev->request.bmRequest & 0x80U));
- break;
+ default:
+ ret = USBD_LL_StallEP(pdev, (pdev->request.bmRequest & 0x80U));
+ break;
}
- return USBD_OK;
+ return ret;
}
/**
@@ -298,48 +339,54 @@ USBD_StatusTypeDef USBD_LL_SetupStage(USBD_HandleTypeDef *pdev, uint8_t *psetup)
USBD_StatusTypeDef USBD_LL_DataOutStage(USBD_HandleTypeDef *pdev,
uint8_t epnum, uint8_t *pdata)
{
- USBD_EndpointTypeDef *pep;
+ USBD_EndpointTypeDef *pep;
+ USBD_StatusTypeDef ret;
- if(epnum == 0U)
+ if (epnum == 0U)
{
pep = &pdev->ep_out[0];
- if ( pdev->ep0_state == USBD_EP0_DATA_OUT)
+ if (pdev->ep0_state == USBD_EP0_DATA_OUT)
{
- if(pep->rem_length > pep->maxpacket)
+ if (pep->rem_length > pep->maxpacket)
{
- pep->rem_length -= pep->maxpacket;
+ pep->rem_length -= pep->maxpacket;
- USBD_CtlContinueRx (pdev,
- pdata,
- (uint16_t)MIN(pep->rem_length, pep->maxpacket));
+ (void)USBD_CtlContinueRx(pdev, pdata, MIN(pep->rem_length, pep->maxpacket));
}
else
{
- if((pdev->pClass->EP0_RxReady != NULL)&&
- (pdev->dev_state == USBD_STATE_CONFIGURED))
+ if ((pdev->pClass->EP0_RxReady != NULL) &&
+ (pdev->dev_state == USBD_STATE_CONFIGURED))
{
pdev->pClass->EP0_RxReady(pdev);
}
- USBD_CtlSendStatus(pdev);
+ (void)USBD_CtlSendStatus(pdev);
}
}
else
{
+#if 0
if (pdev->ep0_state == USBD_EP0_STATUS_OUT)
{
/*
* STATUS PHASE completed, update ep0_state to idle
*/
pdev->ep0_state = USBD_EP0_IDLE;
- USBD_LL_StallEP(pdev, 0U);
+ (void)USBD_LL_StallEP(pdev, 0U);
}
+#endif
}
}
- else if((pdev->pClass->DataOut != NULL) &&
- (pdev->dev_state == USBD_STATE_CONFIGURED))
+ else if ((pdev->pClass->DataOut != NULL) &&
+ (pdev->dev_state == USBD_STATE_CONFIGURED))
{
- pdev->pClass->DataOut(pdev, epnum);
+ ret = (USBD_StatusTypeDef)pdev->pClass->DataOut(pdev, epnum);
+
+ if (ret != USBD_OK)
+ {
+ return ret;
+ }
}
else
{
@@ -357,69 +404,78 @@ USBD_StatusTypeDef USBD_LL_DataOutStage(USBD_HandleTypeDef *pdev,
* @param epnum: endpoint index
* @retval status
*/
-USBD_StatusTypeDef USBD_LL_DataInStage(USBD_HandleTypeDef *pdev, uint8_t epnum,
- uint8_t *pdata)
+USBD_StatusTypeDef USBD_LL_DataInStage(USBD_HandleTypeDef *pdev,
+ uint8_t epnum, uint8_t *pdata)
{
USBD_EndpointTypeDef *pep;
+ USBD_StatusTypeDef ret;
- if(epnum == 0U)
+ if (epnum == 0U)
{
pep = &pdev->ep_in[0];
- if ( pdev->ep0_state == USBD_EP0_DATA_IN)
+ if (pdev->ep0_state == USBD_EP0_DATA_IN)
{
- if(pep->rem_length > pep->maxpacket)
+ if (pep->rem_length > pep->maxpacket)
{
pep->rem_length -= pep->maxpacket;
- USBD_CtlContinueSendData (pdev, pdata, (uint16_t)pep->rem_length);
+ (void)USBD_CtlContinueSendData(pdev, pdata, pep->rem_length);
/* Prepare endpoint for premature end of transfer */
- USBD_LL_PrepareReceive (pdev, 0U, NULL, 0U);
+ (void)USBD_LL_PrepareReceive(pdev, 0U, NULL, 0U);
}
else
- { /* last packet is MPS multiple, so send ZLP packet */
- if((pep->total_length % pep->maxpacket == 0U) &&
- (pep->total_length >= pep->maxpacket) &&
- (pep->total_length < pdev->ep0_data_len))
+ {
+ /* last packet is MPS multiple, so send ZLP packet */
+ if ((pep->maxpacket == pep->rem_length) &&
+ (pep->total_length >= pep->maxpacket) &&
+ (pep->total_length < pdev->ep0_data_len))
{
- USBD_CtlContinueSendData(pdev, NULL, 0U);
+ (void)USBD_CtlContinueSendData(pdev, NULL, 0U);
pdev->ep0_data_len = 0U;
/* Prepare endpoint for premature end of transfer */
- USBD_LL_PrepareReceive (pdev, 0U, NULL, 0U);
+ (void)USBD_LL_PrepareReceive(pdev, 0U, NULL, 0U);
}
else
{
- if((pdev->pClass->EP0_TxSent != NULL)&&
- (pdev->dev_state == USBD_STATE_CONFIGURED))
+ if ((pdev->pClass->EP0_TxSent != NULL) &&
+ (pdev->dev_state == USBD_STATE_CONFIGURED))
{
pdev->pClass->EP0_TxSent(pdev);
}
- USBD_LL_StallEP(pdev, 0x80U);
- USBD_CtlReceiveStatus(pdev);
+ (void)USBD_LL_StallEP(pdev, 0x80U);
+ (void)USBD_CtlReceiveStatus(pdev);
}
}
}
else
{
+#if 0
if ((pdev->ep0_state == USBD_EP0_STATUS_IN) ||
(pdev->ep0_state == USBD_EP0_IDLE))
{
- USBD_LL_StallEP(pdev, 0x80U);
+ (void)USBD_LL_StallEP(pdev, 0x80U);
}
+#endif
}
if (pdev->dev_test_mode == 1U)
{
- USBD_RunTestMode(pdev);
+ (void)USBD_RunTestMode(pdev);
pdev->dev_test_mode = 0U;
}
}
- else if((pdev->pClass->DataIn != NULL) &&
- (pdev->dev_state == USBD_STATE_CONFIGURED))
+ else if ((pdev->pClass->DataIn != NULL) &&
+ (pdev->dev_state == USBD_STATE_CONFIGURED))
{
- pdev->pClass->DataIn(pdev, epnum);
+ ret = (USBD_StatusTypeDef)pdev->pClass->DataIn(pdev, epnum);
+
+ if (ret != USBD_OK)
+ {
+ return ret;
+ }
}
else
{
@@ -437,29 +493,30 @@ USBD_StatusTypeDef USBD_LL_DataInStage(USBD_HandleTypeDef *pdev, uint8_t epnum,
* @retval status
*/
-USBD_StatusTypeDef USBD_LL_Reset(USBD_HandleTypeDef *pdev)
+USBD_StatusTypeDef USBD_LL_Reset(USBD_HandleTypeDef *pdev)
{
- /* Open EP0 OUT */
- USBD_LL_OpenEP(pdev, 0x00U, USBD_EP_TYPE_CTRL, USB_MAX_EP0_SIZE);
+ /* Upon Reset call user call back */
+ pdev->dev_state = USBD_STATE_DEFAULT;
+ pdev->ep0_state = USBD_EP0_IDLE;
+ pdev->dev_config = 0U;
+ pdev->dev_remote_wakeup = 0U;
+
+ if (pdev->pClassData != NULL)
+ {
+ pdev->pClass->DeInit(pdev, (uint8_t)pdev->dev_config);
+ }
+
+ /* Open EP0 OUT */
+ (void)USBD_LL_OpenEP(pdev, 0x00U, USBD_EP_TYPE_CTRL, USB_MAX_EP0_SIZE);
pdev->ep_out[0x00U & 0xFU].is_used = 1U;
pdev->ep_out[0].maxpacket = USB_MAX_EP0_SIZE;
/* Open EP0 IN */
- USBD_LL_OpenEP(pdev, 0x80U, USBD_EP_TYPE_CTRL, USB_MAX_EP0_SIZE);
+ (void)USBD_LL_OpenEP(pdev, 0x80U, USBD_EP_TYPE_CTRL, USB_MAX_EP0_SIZE);
pdev->ep_in[0x80U & 0xFU].is_used = 1U;
pdev->ep_in[0].maxpacket = USB_MAX_EP0_SIZE;
- /* Upon Reset call user call back */
- pdev->dev_state = USBD_STATE_DEFAULT;
- pdev->ep0_state = USBD_EP0_IDLE;
- pdev->dev_config= 0U;
- pdev->dev_remote_wakeup = 0U;
-
- if (pdev->pClassData)
- {
- pdev->pClass->DeInit(pdev, (uint8_t)pdev->dev_config);
- }
return USBD_OK;
}
@@ -470,9 +527,11 @@ USBD_StatusTypeDef USBD_LL_Reset(USBD_HandleTypeDef *pdev)
* @param pdev: device instance
* @retval status
*/
-USBD_StatusTypeDef USBD_LL_SetSpeed(USBD_HandleTypeDef *pdev, USBD_SpeedTypeDef speed)
+USBD_StatusTypeDef USBD_LL_SetSpeed(USBD_HandleTypeDef *pdev,
+ USBD_SpeedTypeDef speed)
{
pdev->dev_speed = speed;
+
return USBD_OK;
}
@@ -483,10 +542,11 @@ USBD_StatusTypeDef USBD_LL_SetSpeed(USBD_HandleTypeDef *pdev, USBD_SpeedTypeDef
* @retval status
*/
-USBD_StatusTypeDef USBD_LL_Suspend(USBD_HandleTypeDef *pdev)
+USBD_StatusTypeDef USBD_LL_Suspend(USBD_HandleTypeDef *pdev)
{
- pdev->dev_old_state = pdev->dev_state;
- pdev->dev_state = USBD_STATE_SUSPENDED;
+ pdev->dev_old_state = pdev->dev_state;
+ pdev->dev_state = USBD_STATE_SUSPENDED;
+
return USBD_OK;
}
@@ -497,9 +557,13 @@ USBD_StatusTypeDef USBD_LL_Suspend(USBD_HandleTypeDef *pdev)
* @retval status
*/
-USBD_StatusTypeDef USBD_LL_Resume(USBD_HandleTypeDef *pdev)
+USBD_StatusTypeDef USBD_LL_Resume(USBD_HandleTypeDef *pdev)
{
- pdev->dev_state = pdev->dev_old_state;
+ if (pdev->dev_state == USBD_STATE_SUSPENDED)
+ {
+ pdev->dev_state = pdev->dev_old_state;
+ }
+
return USBD_OK;
}
@@ -510,15 +574,16 @@ USBD_StatusTypeDef USBD_LL_Resume(USBD_HandleTypeDef *pdev)
* @retval status
*/
-USBD_StatusTypeDef USBD_LL_SOF(USBD_HandleTypeDef *pdev)
+USBD_StatusTypeDef USBD_LL_SOF(USBD_HandleTypeDef *pdev)
{
- if(pdev->dev_state == USBD_STATE_CONFIGURED)
+ if (pdev->dev_state == USBD_STATE_CONFIGURED)
{
- if(pdev->pClass->SOF != NULL)
+ if (pdev->pClass->SOF != NULL)
{
pdev->pClass->SOF(pdev);
}
}
+
return USBD_OK;
}
@@ -528,7 +593,8 @@ USBD_StatusTypeDef USBD_LL_SOF(USBD_HandleTypeDef *pdev)
* @param pdev: device instance
* @retval status
*/
-USBD_StatusTypeDef USBD_LL_IsoINIncomplete(USBD_HandleTypeDef *pdev, uint8_t epnum)
+USBD_StatusTypeDef USBD_LL_IsoINIncomplete(USBD_HandleTypeDef *pdev,
+ uint8_t epnum)
{
/* Prevent unused arguments compilation warning */
UNUSED(pdev);
@@ -543,7 +609,8 @@ USBD_StatusTypeDef USBD_LL_IsoINIncomplete(USBD_HandleTypeDef *pdev, uint8_t ep
* @param pdev: device instance
* @retval status
*/
-USBD_StatusTypeDef USBD_LL_IsoOUTIncomplete(USBD_HandleTypeDef *pdev, uint8_t epnum)
+USBD_StatusTypeDef USBD_LL_IsoOUTIncomplete(USBD_HandleTypeDef *pdev,
+ uint8_t epnum)
{
/* Prevent unused arguments compilation warning */
UNUSED(pdev);
@@ -558,7 +625,7 @@ USBD_StatusTypeDef USBD_LL_IsoOUTIncomplete(USBD_HandleTypeDef *pdev, uint8_t e
* @param pdev: device instance
* @retval status
*/
-USBD_StatusTypeDef USBD_LL_DevConnected(USBD_HandleTypeDef *pdev)
+USBD_StatusTypeDef USBD_LL_DevConnected(USBD_HandleTypeDef *pdev)
{
/* Prevent unused argument compilation warning */
UNUSED(pdev);
@@ -572,11 +639,15 @@ USBD_StatusTypeDef USBD_LL_DevConnected(USBD_HandleTypeDef *pdev)
* @param pdev: device instance
* @retval status
*/
-USBD_StatusTypeDef USBD_LL_DevDisconnected(USBD_HandleTypeDef *pdev)
+USBD_StatusTypeDef USBD_LL_DevDisconnected(USBD_HandleTypeDef *pdev)
{
/* Free Class Resources */
pdev->dev_state = USBD_STATE_DEFAULT;
- pdev->pClass->DeInit(pdev, (uint8_t)pdev->dev_config);
+
+ if (pdev->pClass != NULL)
+ {
+ pdev->pClass->DeInit(pdev, (uint8_t)pdev->dev_config);
+ }
return USBD_OK;
}
diff --git a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_GCC/Boot/lib/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.c b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_GCC/Boot/lib/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.c
index c3e7ecbe..c51f3497 100644
--- a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_GCC/Boot/lib/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.c
+++ b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_GCC/Boot/lib/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.c
@@ -12,7 +12,7 @@
* This software component is licensed by ST under Ultimate Liberty license
* SLA0044, the "License"; You may not use this file except in compliance with
* the License. You may obtain a copy of the License at:
- * http://www.st.com/SLA0044
+ * www.st.com/SLA0044
*
******************************************************************************
*/
@@ -35,6 +35,7 @@
/** @defgroup USBD_REQ_Private_TypesDefinitions
* @{
*/
+
/**
* @}
*/
@@ -52,6 +53,7 @@
/** @defgroup USBD_REQ_Private_Macros
* @{
*/
+
/**
* @}
*/
@@ -60,6 +62,7 @@
/** @defgroup USBD_REQ_Private_Variables
* @{
*/
+
/**
* @}
*/
@@ -68,27 +71,13 @@
/** @defgroup USBD_REQ_Private_FunctionPrototypes
* @{
*/
-static void USBD_GetDescriptor(USBD_HandleTypeDef *pdev ,
- USBD_SetupReqTypedef *req);
-
-static void USBD_SetAddress(USBD_HandleTypeDef *pdev ,
- USBD_SetupReqTypedef *req);
-
-static void USBD_SetConfig(USBD_HandleTypeDef *pdev ,
- USBD_SetupReqTypedef *req);
-
-static void USBD_GetConfig(USBD_HandleTypeDef *pdev ,
- USBD_SetupReqTypedef *req);
-
-static void USBD_GetStatus(USBD_HandleTypeDef *pdev ,
- USBD_SetupReqTypedef *req);
-
-static void USBD_SetFeature(USBD_HandleTypeDef *pdev ,
- USBD_SetupReqTypedef *req);
-
-static void USBD_ClrFeature(USBD_HandleTypeDef *pdev ,
- USBD_SetupReqTypedef *req);
-
+static void USBD_GetDescriptor(USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req);
+static void USBD_SetAddress(USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req);
+static USBD_StatusTypeDef USBD_SetConfig(USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req);
+static void USBD_GetConfig(USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req);
+static void USBD_GetStatus(USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req);
+static void USBD_SetFeature(USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req);
+static void USBD_ClrFeature(USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req);
static uint8_t USBD_GetLen(uint8_t *buf);
/**
@@ -108,7 +97,7 @@ static uint8_t USBD_GetLen(uint8_t *buf);
* @param req: usb request
* @retval status
*/
-USBD_StatusTypeDef USBD_StdDevReq (USBD_HandleTypeDef *pdev , USBD_SetupReqTypedef *req)
+USBD_StatusTypeDef USBD_StdDevReq(USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req)
{
USBD_StatusTypeDef ret = USBD_OK;
@@ -116,41 +105,38 @@ USBD_StatusTypeDef USBD_StdDevReq (USBD_HandleTypeDef *pdev , USBD_SetupReqType
{
case USB_REQ_TYPE_CLASS:
case USB_REQ_TYPE_VENDOR:
- pdev->pClass->Setup(pdev, req);
+ ret = (USBD_StatusTypeDef)pdev->pClass->Setup(pdev, req);
break;
case USB_REQ_TYPE_STANDARD:
-
switch (req->bRequest)
{
case USB_REQ_GET_DESCRIPTOR:
-
- USBD_GetDescriptor (pdev, req);
+ USBD_GetDescriptor(pdev, req);
break;
case USB_REQ_SET_ADDRESS:
- USBD_SetAddress (pdev, req);
+ USBD_SetAddress(pdev, req);
break;
case USB_REQ_SET_CONFIGURATION:
- USBD_SetConfig (pdev, req);
+ ret = USBD_SetConfig(pdev, req);
break;
case USB_REQ_GET_CONFIGURATION:
- USBD_GetConfig (pdev, req);
+ USBD_GetConfig(pdev, req);
break;
case USB_REQ_GET_STATUS:
- USBD_GetStatus (pdev, req);
+ USBD_GetStatus(pdev, req);
break;
-
case USB_REQ_SET_FEATURE:
- USBD_SetFeature (pdev, req);
+ USBD_SetFeature(pdev, req);
break;
case USB_REQ_CLEAR_FEATURE:
- USBD_ClrFeature (pdev, req);
+ USBD_ClrFeature(pdev, req);
break;
default:
@@ -174,7 +160,7 @@ USBD_StatusTypeDef USBD_StdDevReq (USBD_HandleTypeDef *pdev , USBD_SetupReqType
* @param req: usb request
* @retval status
*/
-USBD_StatusTypeDef USBD_StdItfReq (USBD_HandleTypeDef *pdev , USBD_SetupReqTypedef *req)
+USBD_StatusTypeDef USBD_StdItfReq(USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req)
{
USBD_StatusTypeDef ret = USBD_OK;
@@ -191,11 +177,11 @@ USBD_StatusTypeDef USBD_StdItfReq (USBD_HandleTypeDef *pdev , USBD_SetupReqType
if (LOBYTE(req->wIndex) <= USBD_MAX_NUM_INTERFACES)
{
- ret = (USBD_StatusTypeDef)pdev->pClass->Setup (pdev, req);
+ ret = (USBD_StatusTypeDef)pdev->pClass->Setup(pdev, req);
if ((req->wLength == 0U) && (ret == USBD_OK))
{
- USBD_CtlSendStatus(pdev);
+ (void)USBD_CtlSendStatus(pdev);
}
}
else
@@ -215,7 +201,7 @@ USBD_StatusTypeDef USBD_StdItfReq (USBD_HandleTypeDef *pdev , USBD_SetupReqType
break;
}
- return USBD_OK;
+ return ret;
}
/**
@@ -225,43 +211,31 @@ USBD_StatusTypeDef USBD_StdItfReq (USBD_HandleTypeDef *pdev , USBD_SetupReqType
* @param req: usb request
* @retval status
*/
-USBD_StatusTypeDef USBD_StdEPReq (USBD_HandleTypeDef *pdev , USBD_SetupReqTypedef *req)
+USBD_StatusTypeDef USBD_StdEPReq(USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req)
{
-
- uint8_t ep_addr;
+ USBD_EndpointTypeDef *pep;
+ uint8_t ep_addr;
USBD_StatusTypeDef ret = USBD_OK;
- USBD_EndpointTypeDef *pep;
- ep_addr = LOBYTE(req->wIndex);
+ ep_addr = LOBYTE(req->wIndex);
switch (req->bmRequest & USB_REQ_TYPE_MASK)
{
-
case USB_REQ_TYPE_CLASS:
case USB_REQ_TYPE_VENDOR:
- pdev->pClass->Setup (pdev, req);
+ ret = (USBD_StatusTypeDef)pdev->pClass->Setup(pdev, req);
break;
case USB_REQ_TYPE_STANDARD:
- /* Check if it is a class request */
- if ((req->bmRequest & 0x60U) == 0x20U)
- {
- ret = (USBD_StatusTypeDef)pdev->pClass->Setup (pdev, req);
-
- return ret;
- }
-
switch (req->bRequest)
{
-
- case USB_REQ_SET_FEATURE :
-
+ case USB_REQ_SET_FEATURE:
switch (pdev->dev_state)
{
case USBD_STATE_ADDRESSED:
if ((ep_addr != 0x00U) && (ep_addr != 0x80U))
{
- USBD_LL_StallEP(pdev, ep_addr);
- USBD_LL_StallEP(pdev, 0x80U);
+ (void)USBD_LL_StallEP(pdev, ep_addr);
+ (void)USBD_LL_StallEP(pdev, 0x80U);
}
else
{
@@ -274,10 +248,10 @@ USBD_StatusTypeDef USBD_StdEPReq (USBD_HandleTypeDef *pdev , USBD_SetupReqTyped
{
if ((ep_addr != 0x00U) && (ep_addr != 0x80U) && (req->wLength == 0x00U))
{
- USBD_LL_StallEP(pdev, ep_addr);
+ (void)USBD_LL_StallEP(pdev, ep_addr);
}
}
- USBD_CtlSendStatus(pdev);
+ (void)USBD_CtlSendStatus(pdev);
break;
@@ -287,15 +261,15 @@ USBD_StatusTypeDef USBD_StdEPReq (USBD_HandleTypeDef *pdev , USBD_SetupReqTyped
}
break;
- case USB_REQ_CLEAR_FEATURE :
+ case USB_REQ_CLEAR_FEATURE:
switch (pdev->dev_state)
{
case USBD_STATE_ADDRESSED:
if ((ep_addr != 0x00U) && (ep_addr != 0x80U))
{
- USBD_LL_StallEP(pdev, ep_addr);
- USBD_LL_StallEP(pdev, 0x80U);
+ (void)USBD_LL_StallEP(pdev, ep_addr);
+ (void)USBD_LL_StallEP(pdev, 0x80U);
}
else
{
@@ -308,9 +282,10 @@ USBD_StatusTypeDef USBD_StdEPReq (USBD_HandleTypeDef *pdev , USBD_SetupReqTyped
{
if ((ep_addr & 0x7FU) != 0x00U)
{
- USBD_LL_ClearStallEP(pdev, ep_addr);
+ (void)USBD_LL_ClearStallEP(pdev, ep_addr);
}
- USBD_CtlSendStatus(pdev);
+ (void)USBD_CtlSendStatus(pdev);
+ (USBD_StatusTypeDef)pdev->pClass->Setup(pdev, req);
}
break;
@@ -329,16 +304,16 @@ USBD_StatusTypeDef USBD_StdEPReq (USBD_HandleTypeDef *pdev , USBD_SetupReqTyped
USBD_CtlError(pdev, req);
break;
}
- pep = ((ep_addr & 0x80U) == 0x80U) ? &pdev->ep_in[ep_addr & 0x7FU]:\
- &pdev->ep_out[ep_addr & 0x7FU];
+ pep = ((ep_addr & 0x80U) == 0x80U) ? &pdev->ep_in[ep_addr & 0x7FU] : \
+ &pdev->ep_out[ep_addr & 0x7FU];
- pep->status = 0x0000U;
+ pep->status = 0x0000U;
- USBD_CtlSendData (pdev, (uint8_t *)(void *)&pep->status, 2U);
- break;
+ (void)USBD_CtlSendData(pdev, (uint8_t *)&pep->status, 2U);
+ break;
case USBD_STATE_CONFIGURED:
- if((ep_addr & 0x80U) == 0x80U)
+ if ((ep_addr & 0x80U) == 0x80U)
{
if (pdev->ep_in[ep_addr & 0xFU].is_used == 0U)
{
@@ -355,14 +330,14 @@ USBD_StatusTypeDef USBD_StdEPReq (USBD_HandleTypeDef *pdev , USBD_SetupReqTyped
}
}
- pep = ((ep_addr & 0x80U) == 0x80U) ? &pdev->ep_in[ep_addr & 0x7FU]:\
- &pdev->ep_out[ep_addr & 0x7FU];
+ pep = ((ep_addr & 0x80U) == 0x80U) ? &pdev->ep_in[ep_addr & 0x7FU] : \
+ &pdev->ep_out[ep_addr & 0x7FU];
if ((ep_addr == 0x00U) || (ep_addr == 0x80U))
{
pep->status = 0x0000U;
}
- else if(USBD_LL_IsStallEP(pdev, ep_addr))
+ else if (USBD_LL_IsStallEP(pdev, ep_addr) != 0U)
{
pep->status = 0x0001U;
}
@@ -371,7 +346,7 @@ USBD_StatusTypeDef USBD_StdEPReq (USBD_HandleTypeDef *pdev , USBD_SetupReqTyped
pep->status = 0x0000U;
}
- USBD_CtlSendData (pdev, (uint8_t *)(void *)&pep->status, 2U);
+ (void)USBD_CtlSendData(pdev, (uint8_t *)&pep->status, 2U);
break;
default:
@@ -393,6 +368,8 @@ USBD_StatusTypeDef USBD_StdEPReq (USBD_HandleTypeDef *pdev , USBD_SetupReqTyped
return ret;
}
+
+
/**
* @brief USBD_GetDescriptor
* Handle Get Descriptor requests
@@ -400,18 +377,25 @@ USBD_StatusTypeDef USBD_StdEPReq (USBD_HandleTypeDef *pdev , USBD_SetupReqTyped
* @param req: usb request
* @retval status
*/
-static void USBD_GetDescriptor(USBD_HandleTypeDef *pdev ,
- USBD_SetupReqTypedef *req)
+static void USBD_GetDescriptor(USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req)
{
- uint16_t len;
- uint8_t *pbuf;
-
+ uint16_t len = 0U;
+ uint8_t *pbuf = NULL;
+ uint8_t err = 0U;
switch (req->wValue >> 8)
{
-#if (USBD_LPM_ENABLED == 1U)
+#if ((USBD_LPM_ENABLED == 1U) || (USBD_CLASS_BOS_ENABLED == 1U))
case USB_DESC_TYPE_BOS:
- pbuf = pdev->pDesc->GetBOSDescriptor(pdev->dev_speed, &len);
+ if (pdev->pDesc->GetBOSDescriptor != NULL)
+ {
+ pbuf = pdev->pDesc->GetBOSDescriptor(pdev->dev_speed, &len);
+ }
+ else
+ {
+ USBD_CtlError(pdev, req);
+ err++;
+ }
break;
#endif
case USB_DESC_TYPE_DEVICE:
@@ -419,14 +403,14 @@ static void USBD_GetDescriptor(USBD_HandleTypeDef *pdev ,
break;
case USB_DESC_TYPE_CONFIGURATION:
- if(pdev->dev_speed == USBD_SPEED_HIGH )
+ if (pdev->dev_speed == USBD_SPEED_HIGH)
{
- pbuf = (uint8_t *)pdev->pClass->GetHSConfigDescriptor(&len);
+ pbuf = pdev->pClass->GetHSConfigDescriptor(&len);
pbuf[1] = USB_DESC_TYPE_CONFIGURATION;
}
else
{
- pbuf = (uint8_t *)pdev->pClass->GetFSConfigDescriptor(&len);
+ pbuf = pdev->pClass->GetFSConfigDescriptor(&len);
pbuf[1] = USB_DESC_TYPE_CONFIGURATION;
}
break;
@@ -435,81 +419,159 @@ static void USBD_GetDescriptor(USBD_HandleTypeDef *pdev ,
switch ((uint8_t)(req->wValue))
{
case USBD_IDX_LANGID_STR:
- pbuf = pdev->pDesc->GetLangIDStrDescriptor(pdev->dev_speed, &len);
+ if (pdev->pDesc->GetLangIDStrDescriptor != NULL)
+ {
+ pbuf = pdev->pDesc->GetLangIDStrDescriptor(pdev->dev_speed, &len);
+ }
+ else
+ {
+ USBD_CtlError(pdev, req);
+ err++;
+ }
break;
case USBD_IDX_MFC_STR:
- pbuf = pdev->pDesc->GetManufacturerStrDescriptor(pdev->dev_speed, &len);
+ if (pdev->pDesc->GetManufacturerStrDescriptor != NULL)
+ {
+ pbuf = pdev->pDesc->GetManufacturerStrDescriptor(pdev->dev_speed, &len);
+ }
+ else
+ {
+ USBD_CtlError(pdev, req);
+ err++;
+ }
break;
case USBD_IDX_PRODUCT_STR:
- pbuf = pdev->pDesc->GetProductStrDescriptor(pdev->dev_speed, &len);
+ if (pdev->pDesc->GetProductStrDescriptor != NULL)
+ {
+ pbuf = pdev->pDesc->GetProductStrDescriptor(pdev->dev_speed, &len);
+ }
+ else
+ {
+ USBD_CtlError(pdev, req);
+ err++;
+ }
break;
case USBD_IDX_SERIAL_STR:
- pbuf = pdev->pDesc->GetSerialStrDescriptor(pdev->dev_speed, &len);
+ if (pdev->pDesc->GetSerialStrDescriptor != NULL)
+ {
+ pbuf = pdev->pDesc->GetSerialStrDescriptor(pdev->dev_speed, &len);
+ }
+ else
+ {
+ USBD_CtlError(pdev, req);
+ err++;
+ }
break;
case USBD_IDX_CONFIG_STR:
- pbuf = pdev->pDesc->GetConfigurationStrDescriptor(pdev->dev_speed, &len);
+ if (pdev->pDesc->GetConfigurationStrDescriptor != NULL)
+ {
+ pbuf = pdev->pDesc->GetConfigurationStrDescriptor(pdev->dev_speed, &len);
+ }
+ else
+ {
+ USBD_CtlError(pdev, req);
+ err++;
+ }
break;
case USBD_IDX_INTERFACE_STR:
- pbuf = pdev->pDesc->GetInterfaceStrDescriptor(pdev->dev_speed, &len);
+ if (pdev->pDesc->GetInterfaceStrDescriptor != NULL)
+ {
+ pbuf = pdev->pDesc->GetInterfaceStrDescriptor(pdev->dev_speed, &len);
+ }
+ else
+ {
+ USBD_CtlError(pdev, req);
+ err++;
+ }
break;
default:
-#if (USBD_SUPPORT_USER_STRING == 1U)
- pbuf = pdev->pClass->GetUsrStrDescriptor(pdev, (req->wValue) , &len);
- break;
+#if (USBD_SUPPORT_USER_STRING_DESC == 1U)
+ if (pdev->pClass->GetUsrStrDescriptor != NULL)
+ {
+ pbuf = pdev->pClass->GetUsrStrDescriptor(pdev, (req->wValue), &len);
+ }
+ else
+ {
+ USBD_CtlError(pdev, req);
+ err++;
+ }
+#elif (USBD_CLASS_USER_STRING_DESC == 1U)
+ if (pdev->pDesc->GetUserStrDescriptor != NULL)
+ {
+ pbuf = pdev->pDesc->GetUserStrDescriptor(pdev->dev_speed, (req->wValue), &len);
+ }
+ else
+ {
+ USBD_CtlError(pdev, req);
+ err++;
+ }
#else
- USBD_CtlError(pdev , req);
- return;
+ USBD_CtlError(pdev, req);
+ err++;
#endif
+ break;
}
break;
- case USB_DESC_TYPE_DEVICE_QUALIFIER:
- if(pdev->dev_speed == USBD_SPEED_HIGH)
+ case USB_DESC_TYPE_DEVICE_QUALIFIER:
+ if (pdev->dev_speed == USBD_SPEED_HIGH)
{
- pbuf = (uint8_t *)pdev->pClass->GetDeviceQualifierDescriptor(&len);
- break;
+ pbuf = pdev->pClass->GetDeviceQualifierDescriptor(&len);
}
else
{
- USBD_CtlError(pdev , req);
- return;
+ USBD_CtlError(pdev, req);
+ err++;
}
+ break;
case USB_DESC_TYPE_OTHER_SPEED_CONFIGURATION:
- if(pdev->dev_speed == USBD_SPEED_HIGH )
+ if (pdev->dev_speed == USBD_SPEED_HIGH)
{
- pbuf = (uint8_t *)pdev->pClass->GetOtherSpeedConfigDescriptor(&len);
+ pbuf = pdev->pClass->GetOtherSpeedConfigDescriptor(&len);
pbuf[1] = USB_DESC_TYPE_OTHER_SPEED_CONFIGURATION;
- break;
}
else
{
- USBD_CtlError(pdev , req);
- return;
+ USBD_CtlError(pdev, req);
+ err++;
}
+ break;
default:
- USBD_CtlError(pdev , req);
+ USBD_CtlError(pdev, req);
+ err++;
+ break;
+ }
+
+ if (err != 0U)
+ {
return;
}
-
- if((len != 0U) && (req->wLength != 0U))
+ else
{
-
- len = MIN(len, req->wLength);
-
- USBD_CtlSendData (pdev, pbuf, len);
- }
-
- if(req->wLength == 0U)
- {
- USBD_CtlSendStatus(pdev);
+ if (req->wLength != 0U)
+ {
+ if (len != 0U)
+ {
+ len = MIN(len, req->wLength);
+ (void)USBD_CtlSendData(pdev, pbuf, len);
+ }
+ else
+ {
+ USBD_CtlError(pdev, req);
+ }
+ }
+ else
+ {
+ (void)USBD_CtlSendStatus(pdev);
+ }
}
}
@@ -520,8 +582,7 @@ static void USBD_GetDescriptor(USBD_HandleTypeDef *pdev ,
* @param req: usb request
* @retval status
*/
-static void USBD_SetAddress(USBD_HandleTypeDef *pdev ,
- USBD_SetupReqTypedef *req)
+static void USBD_SetAddress(USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req)
{
uint8_t dev_addr;
@@ -531,13 +592,13 @@ static void USBD_SetAddress(USBD_HandleTypeDef *pdev ,
if (pdev->dev_state == USBD_STATE_CONFIGURED)
{
- USBD_CtlError(pdev , req);
+ USBD_CtlError(pdev, req);
}
else
{
pdev->dev_address = dev_addr;
- USBD_LL_SetUSBAddress(pdev, dev_addr);
- USBD_CtlSendStatus(pdev);
+ (void)USBD_LL_SetUSBAddress(pdev, dev_addr);
+ (void)USBD_CtlSendStatus(pdev);
if (dev_addr != 0U)
{
@@ -562,8 +623,9 @@ static void USBD_SetAddress(USBD_HandleTypeDef *pdev ,
* @param req: usb request
* @retval status
*/
-static void USBD_SetConfig(USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req)
+static USBD_StatusTypeDef USBD_SetConfig(USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req)
{
+ USBD_StatusTypeDef ret = USBD_OK;
static uint8_t cfgidx;
cfgidx = (uint8_t)(req->wValue);
@@ -571,63 +633,77 @@ static void USBD_SetConfig(USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req)
if (cfgidx > USBD_MAX_NUM_CONFIGURATION)
{
USBD_CtlError(pdev, req);
+ return USBD_FAIL;
}
- else
+
+ switch (pdev->dev_state)
{
- switch (pdev->dev_state)
+ case USBD_STATE_ADDRESSED:
+ if (cfgidx != 0U)
{
- case USBD_STATE_ADDRESSED:
- if (cfgidx)
+ pdev->dev_config = cfgidx;
+
+ ret = USBD_SetClassConfig(pdev, cfgidx);
+
+ if (ret != USBD_OK)
{
- pdev->dev_config = cfgidx;
+ USBD_CtlError(pdev, req);
+ }
+ else
+ {
+ (void)USBD_CtlSendStatus(pdev);
pdev->dev_state = USBD_STATE_CONFIGURED;
- if(USBD_SetClassConfig(pdev, cfgidx) == USBD_FAIL)
- {
- USBD_CtlError(pdev, req);
- return;
- }
- USBD_CtlSendStatus(pdev);
}
- else
- {
- USBD_CtlSendStatus(pdev);
- }
- break;
-
- case USBD_STATE_CONFIGURED:
- if (cfgidx == 0U)
- {
- pdev->dev_state = USBD_STATE_ADDRESSED;
- pdev->dev_config = cfgidx;
- USBD_ClrClassConfig(pdev, cfgidx);
- USBD_CtlSendStatus(pdev);
- }
- else if (cfgidx != pdev->dev_config)
- {
- /* Clear old configuration */
- USBD_ClrClassConfig(pdev, (uint8_t)pdev->dev_config);
-
- /* set new configuration */
- pdev->dev_config = cfgidx;
- if(USBD_SetClassConfig(pdev, cfgidx) == USBD_FAIL)
- {
- USBD_CtlError(pdev, req);
- return;
- }
- USBD_CtlSendStatus(pdev);
- }
- else
- {
- USBD_CtlSendStatus(pdev);
- }
- break;
-
- default:
- USBD_CtlError(pdev, req);
- USBD_ClrClassConfig(pdev, cfgidx);
- break;
}
+ else
+ {
+ (void)USBD_CtlSendStatus(pdev);
+ }
+ break;
+
+ case USBD_STATE_CONFIGURED:
+ if (cfgidx == 0U)
+ {
+ pdev->dev_state = USBD_STATE_ADDRESSED;
+ pdev->dev_config = cfgidx;
+ (void)USBD_ClrClassConfig(pdev, cfgidx);
+ (void)USBD_CtlSendStatus(pdev);
+ }
+ else if (cfgidx != pdev->dev_config)
+ {
+ /* Clear old configuration */
+ (void)USBD_ClrClassConfig(pdev, (uint8_t)pdev->dev_config);
+
+ /* set new configuration */
+ pdev->dev_config = cfgidx;
+
+ ret = USBD_SetClassConfig(pdev, cfgidx);
+
+ if (ret != USBD_OK)
+ {
+ USBD_CtlError(pdev, req);
+ (void)USBD_ClrClassConfig(pdev, (uint8_t)pdev->dev_config);
+ pdev->dev_state = USBD_STATE_ADDRESSED;
+ }
+ else
+ {
+ (void)USBD_CtlSendStatus(pdev);
+ }
+ }
+ else
+ {
+ (void)USBD_CtlSendStatus(pdev);
+ }
+ break;
+
+ default:
+ USBD_CtlError(pdev, req);
+ (void)USBD_ClrClassConfig(pdev, cfgidx);
+ ret = USBD_FAIL;
+ break;
}
+
+ return ret;
}
/**
@@ -641,7 +717,7 @@ static void USBD_GetConfig(USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req)
{
if (req->wLength != 1U)
{
- USBD_CtlError(pdev , req);
+ USBD_CtlError(pdev, req);
}
else
{
@@ -650,15 +726,15 @@ static void USBD_GetConfig(USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req)
case USBD_STATE_DEFAULT:
case USBD_STATE_ADDRESSED:
pdev->dev_default_config = 0U;
- USBD_CtlSendData (pdev, (uint8_t *)(void *)&pdev->dev_default_config, 1U);
+ (void)USBD_CtlSendData(pdev, (uint8_t *)&pdev->dev_default_config, 1U);
break;
case USBD_STATE_CONFIGURED:
- USBD_CtlSendData (pdev, (uint8_t *)(void *)&pdev->dev_config, 1U);
+ (void)USBD_CtlSendData(pdev, (uint8_t *)&pdev->dev_config, 1U);
break;
default:
- USBD_CtlError(pdev , req);
+ USBD_CtlError(pdev, req);
break;
}
}
@@ -678,28 +754,28 @@ static void USBD_GetStatus(USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req)
case USBD_STATE_DEFAULT:
case USBD_STATE_ADDRESSED:
case USBD_STATE_CONFIGURED:
- if(req->wLength != 0x2U)
+ if (req->wLength != 0x2U)
{
USBD_CtlError(pdev, req);
break;
}
-#if ( USBD_SELF_POWERED == 1U)
+#if (USBD_SELF_POWERED == 1U)
pdev->dev_config_status = USB_CONFIG_SELF_POWERED;
#else
pdev->dev_config_status = 0U;
#endif
- if (pdev->dev_remote_wakeup)
+ if (pdev->dev_remote_wakeup != 0U)
{
pdev->dev_config_status |= USB_CONFIG_REMOTE_WAKEUP;
}
- USBD_CtlSendData (pdev, (uint8_t *)(void *)&pdev->dev_config_status, 2U);
+ (void)USBD_CtlSendData(pdev, (uint8_t *)&pdev->dev_config_status, 2U);
break;
- default :
- USBD_CtlError(pdev , req);
+ default:
+ USBD_CtlError(pdev, req);
break;
}
}
@@ -712,16 +788,13 @@ static void USBD_GetStatus(USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req)
* @param req: usb request
* @retval status
*/
-static void USBD_SetFeature(USBD_HandleTypeDef *pdev ,
- USBD_SetupReqTypedef *req)
+static void USBD_SetFeature(USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req)
{
-
if (req->wValue == USB_FEATURE_REMOTE_WAKEUP)
{
pdev->dev_remote_wakeup = 1U;
- USBD_CtlSendStatus(pdev);
+ (void)USBD_CtlSendStatus(pdev);
}
-
}
@@ -732,24 +805,23 @@ static void USBD_SetFeature(USBD_HandleTypeDef *pdev ,
* @param req: usb request
* @retval status
*/
-static void USBD_ClrFeature(USBD_HandleTypeDef *pdev ,
- USBD_SetupReqTypedef *req)
+static void USBD_ClrFeature(USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req)
{
switch (pdev->dev_state)
{
- case USBD_STATE_DEFAULT:
- case USBD_STATE_ADDRESSED:
- case USBD_STATE_CONFIGURED:
- if (req->wValue == USB_FEATURE_REMOTE_WAKEUP)
- {
- pdev->dev_remote_wakeup = 0U;
- USBD_CtlSendStatus(pdev);
- }
- break;
+ case USBD_STATE_DEFAULT:
+ case USBD_STATE_ADDRESSED:
+ case USBD_STATE_CONFIGURED:
+ if (req->wValue == USB_FEATURE_REMOTE_WAKEUP)
+ {
+ pdev->dev_remote_wakeup = 0U;
+ (void)USBD_CtlSendStatus(pdev);
+ }
+ break;
- default :
- USBD_CtlError(pdev , req);
- break;
+ default:
+ USBD_CtlError(pdev, req);
+ break;
}
}
@@ -763,12 +835,23 @@ static void USBD_ClrFeature(USBD_HandleTypeDef *pdev ,
void USBD_ParseSetupRequest(USBD_SetupReqTypedef *req, uint8_t *pdata)
{
- req->bmRequest = *(uint8_t *) (pdata);
- req->bRequest = *(uint8_t *) (pdata + 1);
- req->wValue = SWAPBYTE (pdata + 2);
- req->wIndex = SWAPBYTE (pdata + 4);
- req->wLength = SWAPBYTE (pdata + 6);
+ uint8_t *pbuff = pdata;
+ req->bmRequest = *(uint8_t *)(pbuff);
+
+ pbuff++;
+ req->bRequest = *(uint8_t *)(pbuff);
+
+ pbuff++;
+ req->wValue = SWAPBYTE(pbuff);
+
+ pbuff++;
+ pbuff++;
+ req->wIndex = SWAPBYTE(pbuff);
+
+ pbuff++;
+ pbuff++;
+ req->wLength = SWAPBYTE(pbuff);
}
/**
@@ -779,11 +862,12 @@ void USBD_ParseSetupRequest(USBD_SetupReqTypedef *req, uint8_t *pdata)
* @retval None
*/
-void USBD_CtlError( USBD_HandleTypeDef *pdev ,
- USBD_SetupReqTypedef *req)
+void USBD_CtlError(USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req)
{
- USBD_LL_StallEP(pdev , 0x80U);
- USBD_LL_StallEP(pdev , 0U);
+ UNUSED(req);
+
+ (void)USBD_LL_StallEP(pdev, 0x80U);
+ (void)USBD_LL_StallEP(pdev, 0U);
}
@@ -798,18 +882,29 @@ void USBD_CtlError( USBD_HandleTypeDef *pdev ,
void USBD_GetString(uint8_t *desc, uint8_t *unicode, uint16_t *len)
{
uint8_t idx = 0U;
+ uint8_t *pdesc;
- if (desc != NULL)
+ if (desc == NULL)
{
- *len = (uint16_t)USBD_GetLen(desc) * 2U + 2U;
- unicode[idx++] = *(uint8_t *)(void *)len;
- unicode[idx++] = USB_DESC_TYPE_STRING;
+ return;
+ }
- while (*desc != '\0')
- {
- unicode[idx++] = *desc++;
- unicode[idx++] = 0U;
- }
+ pdesc = desc;
+ *len = ((uint16_t)USBD_GetLen(pdesc) * 2U) + 2U;
+
+ unicode[idx] = *(uint8_t *)len;
+ idx++;
+ unicode[idx] = USB_DESC_TYPE_STRING;
+ idx++;
+
+ while (*pdesc != (uint8_t)'\0')
+ {
+ unicode[idx] = *pdesc;
+ pdesc++;
+ idx++;
+
+ unicode[idx] = 0U;
+ idx++;
}
}
@@ -821,15 +916,16 @@ void USBD_GetString(uint8_t *desc, uint8_t *unicode, uint16_t *len)
*/
static uint8_t USBD_GetLen(uint8_t *buf)
{
- uint8_t len = 0U;
+ uint8_t len = 0U;
+ uint8_t *pbuff = buf;
- while (*buf != '\0')
- {
- len++;
- buf++;
- }
+ while (*pbuff != (uint8_t)'\0')
+ {
+ len++;
+ pbuff++;
+ }
- return len;
+ return len;
}
/**
* @}
diff --git a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_GCC/Boot/lib/STM32_USB_Device_Library/Core/Src/usbd_ioreq.c b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_GCC/Boot/lib/STM32_USB_Device_Library/Core/Src/usbd_ioreq.c
index 5600c370..4d5c8efe 100644
--- a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_GCC/Boot/lib/STM32_USB_Device_Library/Core/Src/usbd_ioreq.c
+++ b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_GCC/Boot/lib/STM32_USB_Device_Library/Core/Src/usbd_ioreq.c
@@ -12,7 +12,7 @@
* This software component is licensed by ST under Ultimate Liberty license
* SLA0044, the "License"; You may not use this file except in compliance with
* the License. You may obtain a copy of the License at:
- * http://www.st.com/SLA0044
+ * www.st.com/SLA0044
*
******************************************************************************
*/
@@ -84,16 +84,16 @@
* @param len: length of data to be sent
* @retval status
*/
-USBD_StatusTypeDef USBD_CtlSendData (USBD_HandleTypeDef *pdev, uint8_t *pbuf,
- uint16_t len)
+USBD_StatusTypeDef USBD_CtlSendData(USBD_HandleTypeDef *pdev,
+ uint8_t *pbuf, uint32_t len)
{
/* Set EP0 State */
pdev->ep0_state = USBD_EP0_DATA_IN;
pdev->ep_in[0].total_length = len;
- pdev->ep_in[0].rem_length = len;
+ pdev->ep_in[0].rem_length = len;
- /* Start the transfer */
- USBD_LL_Transmit (pdev, 0x00U, pbuf, len);
+ /* Start the transfer */
+ (void)USBD_LL_Transmit(pdev, 0x00U, pbuf, len);
return USBD_OK;
}
@@ -106,11 +106,11 @@ USBD_StatusTypeDef USBD_CtlSendData (USBD_HandleTypeDef *pdev, uint8_t *pbuf,
* @param len: length of data to be sent
* @retval status
*/
-USBD_StatusTypeDef USBD_CtlContinueSendData (USBD_HandleTypeDef *pdev,
- uint8_t *pbuf, uint16_t len)
+USBD_StatusTypeDef USBD_CtlContinueSendData(USBD_HandleTypeDef *pdev,
+ uint8_t *pbuf, uint32_t len)
{
- /* Start the next transfer */
- USBD_LL_Transmit (pdev, 0x00U, pbuf, len);
+ /* Start the next transfer */
+ (void)USBD_LL_Transmit(pdev, 0x00U, pbuf, len);
return USBD_OK;
}
@@ -123,16 +123,16 @@ USBD_StatusTypeDef USBD_CtlContinueSendData (USBD_HandleTypeDef *pdev,
* @param len: length of data to be received
* @retval status
*/
-USBD_StatusTypeDef USBD_CtlPrepareRx (USBD_HandleTypeDef *pdev, uint8_t *pbuf,
- uint16_t len)
+USBD_StatusTypeDef USBD_CtlPrepareRx(USBD_HandleTypeDef *pdev,
+ uint8_t *pbuf, uint32_t len)
{
/* Set EP0 State */
pdev->ep0_state = USBD_EP0_DATA_OUT;
pdev->ep_out[0].total_length = len;
- pdev->ep_out[0].rem_length = len;
+ pdev->ep_out[0].rem_length = len;
/* Start the transfer */
- USBD_LL_PrepareReceive (pdev, 0U, pbuf, len);
+ (void)USBD_LL_PrepareReceive(pdev, 0U, pbuf, len);
return USBD_OK;
}
@@ -145,10 +145,10 @@ USBD_StatusTypeDef USBD_CtlPrepareRx (USBD_HandleTypeDef *pdev, uint8_t *pbuf,
* @param len: length of data to be received
* @retval status
*/
-USBD_StatusTypeDef USBD_CtlContinueRx (USBD_HandleTypeDef *pdev, uint8_t *pbuf,
- uint16_t len)
+USBD_StatusTypeDef USBD_CtlContinueRx(USBD_HandleTypeDef *pdev,
+ uint8_t *pbuf, uint32_t len)
{
- USBD_LL_PrepareReceive(pdev, 0U, pbuf, len);
+ (void)USBD_LL_PrepareReceive(pdev, 0U, pbuf, len);
return USBD_OK;
}
@@ -159,13 +159,13 @@ USBD_StatusTypeDef USBD_CtlContinueRx (USBD_HandleTypeDef *pdev, uint8_t *pbuf,
* @param pdev: device instance
* @retval status
*/
-USBD_StatusTypeDef USBD_CtlSendStatus (USBD_HandleTypeDef *pdev)
+USBD_StatusTypeDef USBD_CtlSendStatus(USBD_HandleTypeDef *pdev)
{
/* Set EP0 State */
pdev->ep0_state = USBD_EP0_STATUS_IN;
/* Start the transfer */
- USBD_LL_Transmit(pdev, 0x00U, NULL, 0U);
+ (void)USBD_LL_Transmit(pdev, 0x00U, NULL, 0U);
return USBD_OK;
}
@@ -176,13 +176,13 @@ USBD_StatusTypeDef USBD_CtlSendStatus (USBD_HandleTypeDef *pdev)
* @param pdev: device instance
* @retval status
*/
-USBD_StatusTypeDef USBD_CtlReceiveStatus (USBD_HandleTypeDef *pdev)
+USBD_StatusTypeDef USBD_CtlReceiveStatus(USBD_HandleTypeDef *pdev)
{
/* Set EP0 State */
pdev->ep0_state = USBD_EP0_STATUS_OUT;
- /* Start the transfer */
- USBD_LL_PrepareReceive (pdev, 0U, NULL, 0U);
+ /* Start the transfer */
+ (void)USBD_LL_PrepareReceive(pdev, 0U, NULL, 0U);
return USBD_OK;
}
@@ -194,7 +194,7 @@ USBD_StatusTypeDef USBD_CtlReceiveStatus (USBD_HandleTypeDef *pdev)
* @param ep_addr: endpoint address
* @retval Rx Data blength
*/
-uint32_t USBD_GetRxCount (USBD_HandleTypeDef *pdev, uint8_t ep_addr)
+uint32_t USBD_GetRxCount(USBD_HandleTypeDef *pdev, uint8_t ep_addr)
{
return USBD_LL_GetRxDataSize(pdev, ep_addr);
}
diff --git a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_GCC/Boot/lib/system_stm32f7xx.c b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_GCC/Boot/lib/system_stm32f7xx.c
index cb4e5662..7282bc83 100644
--- a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_GCC/Boot/lib/system_stm32f7xx.c
+++ b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_GCC/Boot/lib/system_stm32f7xx.c
@@ -1,278 +1,244 @@
-/**
- ******************************************************************************
- * @file system_stm32f7xx.c
- * @author MCD Application Team
- * @brief CMSIS Cortex-M7 Device Peripheral Access Layer System Source File.
- *
- * This file provides two functions and one global variable to be called from
- * user application:
- * - SystemInit(): This function is called at startup just after reset and
- * before branch to main program. This call is made inside
- * the "startup_stm32f7xx.s" file.
- *
- * - SystemCoreClock variable: Contains the core clock (HCLK), it can be used
- * by the user application to setup the SysTick
- * timer or configure other parameters.
- *
- * - SystemCoreClockUpdate(): Updates the variable SystemCoreClock and must
- * be called whenever the core clock is changed
- * during program execution.
- *
- *
- ******************************************************************************
- * @attention
- *
- * © COPYRIGHT 2016 STMicroelectronics
- *
- * Redistribution and use in source and binary forms, with or without modification,
- * are permitted provided that the following conditions are met:
- * 1. Redistributions of source code must retain the above copyright notice,
- * this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright notice,
- * this list of conditions and the following disclaimer in the documentation
- * and/or other materials provided with the distribution.
- * 3. Neither the name of STMicroelectronics nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
- * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
- * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- ******************************************************************************
- */
-
-/** @addtogroup CMSIS
- * @{
- */
-
-/** @addtogroup stm32f7xx_system
- * @{
- */
-
-/** @addtogroup STM32F7xx_System_Private_Includes
- * @{
- */
-
-#include "stm32f7xx.h"
-
-#if !defined (HSE_VALUE)
- #define HSE_VALUE ((uint32_t)25000000) /*!< Default value of the External oscillator in Hz */
-#endif /* HSE_VALUE */
-
-#if !defined (HSI_VALUE)
- #define HSI_VALUE ((uint32_t)16000000) /*!< Value of the Internal oscillator in Hz*/
-#endif /* HSI_VALUE */
-
-/**
- * @}
- */
-
-/** @addtogroup STM32F7xx_System_Private_TypesDefinitions
- * @{
- */
-
-/**
- * @}
- */
-
-/** @addtogroup STM32F7xx_System_Private_Defines
- * @{
- */
-
-/************************* Miscellaneous Configuration ************************/
-
-/*!< Uncomment the following line if you need to relocate your vector Table in
- Internal SRAM. */
-/* #define VECT_TAB_SRAM */
-#define VECT_TAB_OFFSET 0x00 /*!< Vector Table base offset field.
- This value must be a multiple of 0x200. */
-/******************************************************************************/
-
-/**
- * @}
- */
-
-/** @addtogroup STM32F7xx_System_Private_Macros
- * @{
- */
-
-/**
- * @}
- */
-
-/** @addtogroup STM32F7xx_System_Private_Variables
- * @{
- */
-
- /* This variable is updated in three ways:
- 1) by calling CMSIS function SystemCoreClockUpdate()
- 2) by calling HAL API function HAL_RCC_GetHCLKFreq()
- 3) each time HAL_RCC_ClockConfig() is called to configure the system clock frequency
- Note: If you use this function to configure the system clock; then there
- is no need to call the 2 first functions listed above, since SystemCoreClock
- variable is updated automatically.
- */
- uint32_t SystemCoreClock = 16000000;
- const uint8_t AHBPrescTable[16] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 6, 7, 8, 9};
- const uint8_t APBPrescTable[8] = {0, 0, 0, 0, 1, 2, 3, 4};
-
-/**
- * @}
- */
-
-/** @addtogroup STM32F7xx_System_Private_FunctionPrototypes
- * @{
- */
-
-/**
- * @}
- */
-
-/** @addtogroup STM32F7xx_System_Private_Functions
- * @{
- */
-
-/**
- * @brief Setup the microcontroller system
- * Initialize the Embedded Flash Interface, the PLL and update the
- * SystemFrequency variable.
- * @param None
- * @retval None
- */
-void SystemInit(void)
-{
- /* FPU settings ------------------------------------------------------------*/
- #if (__FPU_PRESENT == 1) && (__FPU_USED == 1)
- SCB->CPACR |= ((3UL << 10*2)|(3UL << 11*2)); /* set CP10 and CP11 Full Access */
- #endif
- /* Reset the RCC clock configuration to the default reset state ------------*/
- /* Set HSION bit */
- RCC->CR |= (uint32_t)0x00000001;
-
- /* Reset CFGR register */
- RCC->CFGR = 0x00000000;
-
- /* Reset HSEON, CSSON and PLLON bits */
- RCC->CR &= (uint32_t)0xFEF6FFFF;
-
- /* Reset PLLCFGR register */
- RCC->PLLCFGR = 0x24003010;
-
- /* Reset HSEBYP bit */
- RCC->CR &= (uint32_t)0xFFFBFFFF;
-
- /* Disable all interrupts */
- RCC->CIR = 0x00000000;
-
- /* Configure the Vector Table location add offset address ------------------*/
-#ifdef VECT_TAB_SRAM
- SCB->VTOR = RAMDTCM_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAM */
-#else
- SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal FLASH */
-#endif
-}
-
-/**
- * @brief Update SystemCoreClock variable according to Clock Register Values.
- * The SystemCoreClock variable contains the core clock (HCLK), it can
- * be used by the user application to setup the SysTick timer or configure
- * other parameters.
- *
- * @note Each time the core clock (HCLK) changes, this function must be called
- * to update SystemCoreClock variable value. Otherwise, any configuration
- * based on this variable will be incorrect.
- *
- * @note - The system frequency computed by this function is not the real
- * frequency in the chip. It is calculated based on the predefined
- * constant and the selected clock source:
- *
- * - If SYSCLK source is HSI, SystemCoreClock will contain the HSI_VALUE(*)
- *
- * - If SYSCLK source is HSE, SystemCoreClock will contain the HSE_VALUE(**)
- *
- * - If SYSCLK source is PLL, SystemCoreClock will contain the HSE_VALUE(**)
- * or HSI_VALUE(*) multiplied/divided by the PLL factors.
- *
- * (*) HSI_VALUE is a constant defined in stm32f7xx_hal_conf.h file (default value
- * 16 MHz) but the real value may vary depending on the variations
- * in voltage and temperature.
- *
- * (**) HSE_VALUE is a constant defined in stm32f7xx_hal_conf.h file (default value
- * 25 MHz), user has to ensure that HSE_VALUE is same as the real
- * frequency of the crystal used. Otherwise, this function may
- * have wrong result.
- *
- * - The result of this function could be not correct when using fractional
- * value for HSE crystal.
- *
- * @param None
- * @retval None
- */
-void SystemCoreClockUpdate(void)
-{
- uint32_t tmp = 0, pllvco = 0, pllp = 2, pllsource = 0, pllm = 2;
-
- /* Get SYSCLK source -------------------------------------------------------*/
- tmp = RCC->CFGR & RCC_CFGR_SWS;
-
- switch (tmp)
- {
- case 0x00: /* HSI used as system clock source */
- SystemCoreClock = HSI_VALUE;
- break;
- case 0x04: /* HSE used as system clock source */
- SystemCoreClock = HSE_VALUE;
- break;
- case 0x08: /* PLL used as system clock source */
-
- /* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N
- SYSCLK = PLL_VCO / PLL_P
- */
- pllsource = (RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC) >> 22;
- pllm = RCC->PLLCFGR & RCC_PLLCFGR_PLLM;
-
- if (pllsource != 0)
- {
- /* HSE used as PLL clock source */
- pllvco = (HSE_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6);
- }
- else
- {
- /* HSI used as PLL clock source */
- pllvco = (HSI_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6);
- }
-
- pllp = (((RCC->PLLCFGR & RCC_PLLCFGR_PLLP) >>16) + 1 ) *2;
- SystemCoreClock = pllvco/pllp;
- break;
- default:
- SystemCoreClock = HSI_VALUE;
- break;
- }
- /* Compute HCLK frequency --------------------------------------------------*/
- /* Get HCLK prescaler */
- tmp = AHBPrescTable[((RCC->CFGR & RCC_CFGR_HPRE) >> 4)];
- /* HCLK frequency */
- SystemCoreClock >>= tmp;
-}
-
-/**
- * @}
- */
-
-/**
- * @}
- */
-
-/**
- * @}
- */
-/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
+/**
+ ******************************************************************************
+ * @file system_stm32f7xx.c
+ * @author MCD Application Team
+ * @brief CMSIS Cortex-M7 Device Peripheral Access Layer System Source File.
+ *
+ * This file provides two functions and one global variable to be called from
+ * user application:
+ * - SystemInit(): This function is called at startup just after reset and
+ * before branch to main program. This call is made inside
+ * the "startup_stm32f7xx.s" file.
+ *
+ * - SystemCoreClock variable: Contains the core clock (HCLK), it can be used
+ * by the user application to setup the SysTick
+ * timer or configure other parameters.
+ *
+ * - SystemCoreClockUpdate(): Updates the variable SystemCoreClock and must
+ * be called whenever the core clock is changed
+ * during program execution.
+ *
+ *
+ ******************************************************************************
+ * @attention
+ *
+ * © Copyright (c) 2016 STMicroelectronics.
+ * All rights reserved.
+ *
+ * This software component is licensed by ST under BSD 3-Clause license,
+ * the "License"; You may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at:
+ * opensource.org/licenses/BSD-3-Clause
+ *
+ ******************************************************************************
+ */
+
+/** @addtogroup CMSIS
+ * @{
+ */
+
+/** @addtogroup stm32f7xx_system
+ * @{
+ */
+
+/** @addtogroup STM32F7xx_System_Private_Includes
+ * @{
+ */
+
+#include "stm32f7xx.h"
+
+#if !defined (HSE_VALUE)
+ #define HSE_VALUE ((uint32_t)25000000) /*!< Default value of the External oscillator in Hz */
+#endif /* HSE_VALUE */
+
+#if !defined (HSI_VALUE)
+ #define HSI_VALUE ((uint32_t)16000000) /*!< Value of the Internal oscillator in Hz*/
+#endif /* HSI_VALUE */
+
+/**
+ * @}
+ */
+
+/** @addtogroup STM32F7xx_System_Private_TypesDefinitions
+ * @{
+ */
+
+/**
+ * @}
+ */
+
+/** @addtogroup STM32F7xx_System_Private_Defines
+ * @{
+ */
+
+/************************* Miscellaneous Configuration ************************/
+
+/*!< Uncomment the following line if you need to relocate your vector Table in
+ Internal SRAM. */
+/* #define VECT_TAB_SRAM */
+#define VECT_TAB_OFFSET 0x00 /*!< Vector Table base offset field.
+ This value must be a multiple of 0x200. */
+/******************************************************************************/
+
+/**
+ * @}
+ */
+
+/** @addtogroup STM32F7xx_System_Private_Macros
+ * @{
+ */
+
+/**
+ * @}
+ */
+
+/** @addtogroup STM32F7xx_System_Private_Variables
+ * @{
+ */
+
+ /* This variable is updated in three ways:
+ 1) by calling CMSIS function SystemCoreClockUpdate()
+ 2) by calling HAL API function HAL_RCC_GetHCLKFreq()
+ 3) each time HAL_RCC_ClockConfig() is called to configure the system clock frequency
+ Note: If you use this function to configure the system clock; then there
+ is no need to call the 2 first functions listed above, since SystemCoreClock
+ variable is updated automatically.
+ */
+ uint32_t SystemCoreClock = 16000000;
+ const uint8_t AHBPrescTable[16] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 6, 7, 8, 9};
+ const uint8_t APBPrescTable[8] = {0, 0, 0, 0, 1, 2, 3, 4};
+
+/**
+ * @}
+ */
+
+/** @addtogroup STM32F7xx_System_Private_FunctionPrototypes
+ * @{
+ */
+
+/**
+ * @}
+ */
+
+/** @addtogroup STM32F7xx_System_Private_Functions
+ * @{
+ */
+
+/**
+ * @brief Setup the microcontroller system
+ * Initialize the Embedded Flash Interface, the PLL and update the
+ * SystemFrequency variable.
+ * @param None
+ * @retval None
+ */
+void SystemInit(void)
+{
+ /* FPU settings ------------------------------------------------------------*/
+#if (__FPU_PRESENT == 1) && (__FPU_USED == 1)
+ SCB->CPACR |= ((3UL << 10*2)|(3UL << 11*2)); /* set CP10 and CP11 Full Access */
+#endif
+
+ /* Configure the Vector Table location add offset address ------------------*/
+#ifdef VECT_TAB_SRAM
+ SCB->VTOR = RAMDTCM_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAM */
+#else
+ SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal FLASH */
+#endif
+}
+
+/**
+ * @brief Update SystemCoreClock variable according to Clock Register Values.
+ * The SystemCoreClock variable contains the core clock (HCLK), it can
+ * be used by the user application to setup the SysTick timer or configure
+ * other parameters.
+ *
+ * @note Each time the core clock (HCLK) changes, this function must be called
+ * to update SystemCoreClock variable value. Otherwise, any configuration
+ * based on this variable will be incorrect.
+ *
+ * @note - The system frequency computed by this function is not the real
+ * frequency in the chip. It is calculated based on the predefined
+ * constant and the selected clock source:
+ *
+ * - If SYSCLK source is HSI, SystemCoreClock will contain the HSI_VALUE(*)
+ *
+ * - If SYSCLK source is HSE, SystemCoreClock will contain the HSE_VALUE(**)
+ *
+ * - If SYSCLK source is PLL, SystemCoreClock will contain the HSE_VALUE(**)
+ * or HSI_VALUE(*) multiplied/divided by the PLL factors.
+ *
+ * (*) HSI_VALUE is a constant defined in stm32f7xx_hal_conf.h file (default value
+ * 16 MHz) but the real value may vary depending on the variations
+ * in voltage and temperature.
+ *
+ * (**) HSE_VALUE is a constant defined in stm32f7xx_hal_conf.h file (default value
+ * 25 MHz), user has to ensure that HSE_VALUE is same as the real
+ * frequency of the crystal used. Otherwise, this function may
+ * have wrong result.
+ *
+ * - The result of this function could be not correct when using fractional
+ * value for HSE crystal.
+ *
+ * @param None
+ * @retval None
+ */
+void SystemCoreClockUpdate(void)
+{
+ uint32_t tmp = 0, pllvco = 0, pllp = 2, pllsource = 0, pllm = 2;
+
+ /* Get SYSCLK source -------------------------------------------------------*/
+ tmp = RCC->CFGR & RCC_CFGR_SWS;
+
+ switch (tmp)
+ {
+ case 0x00: /* HSI used as system clock source */
+ SystemCoreClock = HSI_VALUE;
+ break;
+ case 0x04: /* HSE used as system clock source */
+ SystemCoreClock = HSE_VALUE;
+ break;
+ case 0x08: /* PLL used as system clock source */
+
+ /* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N
+ SYSCLK = PLL_VCO / PLL_P
+ */
+ pllsource = (RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC) >> 22;
+ pllm = RCC->PLLCFGR & RCC_PLLCFGR_PLLM;
+
+ if (pllsource != 0)
+ {
+ /* HSE used as PLL clock source */
+ pllvco = (HSE_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6);
+ }
+ else
+ {
+ /* HSI used as PLL clock source */
+ pllvco = (HSI_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6);
+ }
+
+ pllp = (((RCC->PLLCFGR & RCC_PLLCFGR_PLLP) >>16) + 1 ) *2;
+ SystemCoreClock = pllvco/pllp;
+ break;
+ default:
+ SystemCoreClock = HSI_VALUE;
+ break;
+ }
+ /* Compute HCLK frequency --------------------------------------------------*/
+ /* Get HCLK prescaler */
+ tmp = AHBPrescTable[((RCC->CFGR & RCC_CFGR_HPRE) >> 4)];
+ /* HCLK frequency */
+ SystemCoreClock >>= tmp;
+}
+
+/**
+ * @}
+ */
+
+/**
+ * @}
+ */
+
+/**
+ * @}
+ */
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff --git a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_GCC/Boot/usbd_conf.c b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_GCC/Boot/usbd_conf.c
index 2c7b2f09..6738d157 100644
--- a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_GCC/Boot/usbd_conf.c
+++ b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_GCC/Boot/usbd_conf.c
@@ -504,7 +504,7 @@ USBD_StatusTypeDef USBD_LL_SetUSBAddress(USBD_HandleTypeDef *pdev, uint8_t dev_a
* @param size: Data size
* @retval USBD status
*/
-USBD_StatusTypeDef USBD_LL_Transmit(USBD_HandleTypeDef *pdev, uint8_t ep_addr, uint8_t *pbuf, uint16_t size)
+USBD_StatusTypeDef USBD_LL_Transmit(USBD_HandleTypeDef *pdev, uint8_t ep_addr, uint8_t *pbuf, uint32_t size)
{
HAL_StatusTypeDef hal_status = HAL_OK;
USBD_StatusTypeDef usb_status = USBD_OK;
@@ -524,7 +524,7 @@ USBD_StatusTypeDef USBD_LL_Transmit(USBD_HandleTypeDef *pdev, uint8_t ep_addr, u
* @param size: Data size
* @retval USBD status
*/
-USBD_StatusTypeDef USBD_LL_PrepareReceive(USBD_HandleTypeDef *pdev, uint8_t ep_addr, uint8_t *pbuf, uint16_t size)
+USBD_StatusTypeDef USBD_LL_PrepareReceive(USBD_HandleTypeDef *pdev, uint8_t ep_addr, uint8_t *pbuf, uint32_t size)
{
HAL_StatusTypeDef hal_status = HAL_OK;
USBD_StatusTypeDef usb_status = USBD_OK;
diff --git a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_GCC/Boot/usbd_conf.h b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_GCC/Boot/usbd_conf.h
index 457df6b8..13647fbd 100644
--- a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_GCC/Boot/usbd_conf.h
+++ b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_GCC/Boot/usbd_conf.h
@@ -68,8 +68,6 @@
/*---------- -----------*/
#define USBD_MAX_STR_DESC_SIZ 512U
/*---------- -----------*/
-#define USBD_SUPPORT_USER_STRING 0U
-/*---------- -----------*/
#define USBD_DEBUG_LEVEL 0U
/*---------- -----------*/
#define USBD_LPM_ENABLED 0U
@@ -81,6 +79,9 @@
#define DEVICE_FS 0
#define DEVICE_HS 1
+/* Inform USB core that a full speed device is used. */
+#define USE_USB_FS
+
/**
* @}
*/
diff --git a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_GCC/Boot/usbd_desc.c b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_GCC/Boot/usbd_desc.c
index c26b821d..344676bb 100644
--- a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_GCC/Boot/usbd_desc.c
+++ b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_GCC/Boot/usbd_desc.c
@@ -123,11 +123,6 @@ uint8_t * USBD_FS_ProductStrDescriptor(USBD_SpeedTypeDef speed, uint16_t *length
uint8_t * USBD_FS_SerialStrDescriptor(USBD_SpeedTypeDef speed, uint16_t *length);
uint8_t * USBD_FS_ConfigStrDescriptor(USBD_SpeedTypeDef speed, uint16_t *length);
uint8_t * USBD_FS_InterfaceStrDescriptor(USBD_SpeedTypeDef speed, uint16_t *length);
-
-#ifdef USBD_SUPPORT_USER_STRING_DESC
-uint8_t * USBD_FS_USRStringDesc(USBD_SpeedTypeDef speed, uint8_t idx, uint16_t *length);
-#endif /* USBD_SUPPORT_USER_STRING_DESC */
-
#if (USBD_LPM_ENABLED == 1)
uint8_t * USBD_FS_USR_BOSDescriptor(USBD_SpeedTypeDef speed, uint16_t *length);
#endif /* (USBD_LPM_ENABLED == 1) */
@@ -328,7 +323,9 @@ uint8_t * USBD_FS_SerialStrDescriptor(USBD_SpeedTypeDef speed, uint16_t *length)
/* Update the serial number string descriptor with the data from the unique
* ID */
Get_SerialNum();
-
+ /* USER CODE BEGIN USBD_FS_SerialStrDescriptor */
+
+ /* USER CODE END USBD_FS_SerialStrDescriptor */
return (uint8_t *) USBD_StringSerial;
}
diff --git a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_GCC/Prog/bin/demoprog_stm32f746.elf b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_GCC/Prog/bin/demoprog_stm32f746.elf
index cd46f998..0696c3f9 100755
Binary files a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_GCC/Prog/bin/demoprog_stm32f746.elf and b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_GCC/Prog/bin/demoprog_stm32f746.elf differ
diff --git a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_GCC/Prog/bin/demoprog_stm32f746.srec b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_GCC/Prog/bin/demoprog_stm32f746.srec
index abfe5d7f..e2804700 100755
--- a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_GCC/Prog/bin/demoprog_stm32f746.srec
+++ b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_GCC/Prog/bin/demoprog_stm32f746.srec
@@ -2,7 +2,7 @@ S01E000062696E2F64656D6F70726F675F73746D3332663734362E7372656322
S3150800800000000520DD8600082D8700082D8700085A
S315080080102D8700082D8700082D870008000000001E
S315080080200000000000000000000000002D87000886
-S315080080302D870008000000002D870008759C0008A1
+S315080080302D870008000000002D870008E59C000831
S315080080402D8700082D8700082D8700082D87000832
S315080080502D8700082D8700082D8700082D87000822
S315080080602D8700082D8700082D8700082D87000812
@@ -30,8 +30,8 @@ S315080081B02D8700082D8700082D8700082D870008C1
S311080081C02D8700082D870008EE11AA552F
S315080081CC10B5054C237833B9044B13B10448AFF3F7
S315080081DC00800123237010BD380400200000000025
-S315080081EC58A1000808B5034B1BB103490348AFF364
-S315080081FC008008BD000000003C04002058A10008BF
+S315080081ECC8A1000808B5034B1BB103490348AFF3F4
+S315080081FC008008BD000000003C040020C8A100084F
S3150800820C53B94AB9002908BF00281CBF4FF0FF31E3
S3150800821C4FF0FF3000F074B9ADF1080C6DE904CEDF
S3150800822C00F006F8DDF804E0DDE9022304B0704737
@@ -82,9 +82,9 @@ S315080084EC95E76746D8E781467BE7384645E7ACF11A
S315080084FC020C2B4410E702382C4421E73746E8E6F1
S3150800850C704700BF70B50D4E0D4D761BB61006D0D4
S3150800851C0024013455F8043B9847A642F9D1094E74
-S3150800852C094D761B01F012FEB61006D00024013454
-S3150800853C55F8043B9847A642F9D170BDB8A1000876
-S3150800854CB8A10008C0A10008B8A10008F0B48607B5
+S3150800852C094D761B01F04AFEB61006D0002401341C
+S3150800853C55F8043B9847A642F9D170BD28A2000805
+S3150800854C28A2000830A2000828A20008F0B4860762
S3150800855C46D0541E002A3CD0CAB2034602E014F197
S3150800856CFF3436D303F8012B9D07F8D1032C29D9F0
S3150800857CCDB245EA05250F2C45EA054533D9A4F1B4
@@ -99,7 +99,7 @@ S315080085FC024800F005B8704700000000198600080C
S3150800860C002301461A46184600F01EB838B50A4C1F
S3150800861C0A4D641BA4100AD004F18043013B05EBF8
S3150800862C8305013C55F804399847002CF9D1BDE867
-S3150800863C384001F091BD00BFC4A10008C0A10008D4
+S3150800863C384001F0C9BD00BF34A2000830A20008BA
S3150800864C704700BF704700BF2DE9F0411E4C054628
S3150800865C206890461F460E46FFF7F2FF1B4B1A681A
S3150800866CD2F8483133B35A6820681F2A27DC4DB92B
@@ -108,459 +108,459 @@ S3150800868CBDE8F08103EB82010124C1F8888004FA65
S3150800869C02FED3F88841022D44EA0E0CC3F888C1B1
S315080086ACC1F80871E4D1D3F88C114EEA0104C3F869
S315080086BC8C41DDE702F5A673C2F84831D3E7FFF71C
-S315080086CCC1FF4FF0FF30DBE72804002070A100083B
+S315080086CCC1FF4FF0FF30DBE728040020E0A10008CB
S315080086DCDFF834D0002103E00C4B5B5843500431CF
S315080086EC0B480C4B42189A42F6D30B4A02E000236D
S315080086FC42F8043B094B9A42F9D300F013F8FFF7FA
-S3150800870C01FF01F04FFB704700000520C4A10008CB
+S3150800870C01FF01F087FB70470000052034A2000822
S3150800871C00000020380400203804002074050020CE
-S3150800872CFEE7000010B40F4AD2F8883043F4700301
-S3150800873CC2F888300C4B196841F001011960002009
-S3150800874C98601C68094921401960094959601968DB
-S3150800875C21F480211960D8604FF0006393605DF8AE
-S3150800876C044B704700ED00E000380240FFFFF6FEB0
-S3150800877C1030002410B504460E4B18784FF47A7353
-S3150800878CB3FBF0F30C4A1068B0FBF3F000F0EAFD0B
-S3150800879C68B90F2C01D901200AE0002221464FF0B6
-S315080087ACFF3000F0ADFD054B1C60002000E00120F9
-S315080087BC10BD00BF300400202C0400203404002017
-S315080087CC08B5032000F08AFD0020FFF7D3FF01F05F
-S315080087DCF3FA002008BD0000034A1168034B1B7806
-S315080087EC0B441360704700BF70050020300400204E
-S315080087FC014B1868704700BF7005002010B582B091
-S3150800880C1B4B1A6C42F080521A641B6C03F0805393
-S3150800881C0193019B174A136843F480331360FFF7DF
-S3150800882CE7FF0446134B5B6813F4803F08D1FFF748
-S3150800883CDFFF001BB0F57A7FF4D9032002B010BD18
-S3150800884C0C4A136843F400331360FFF7D1FF044650
-S3150800885C084B5B6813F4003F07D1FFF7C9FF001BF1
-S3150800886CB0F57A7FF4D90320E8E70020E6E700BFE5
-S3150800887C0038024000700040002800F0D98170B51D
-S3150800888C82B00446036813F0010F29D0A74B9B68E6
-S3150800889C03F00C03042B1AD0A44B9B6803F00C03AF
-S315080088AC082B0FD06368B3F5803F40D0002B54D10A
-S315080088BC9E4B1A6822F480321A601A6822F48022B7
-S315080088CC1A6039E0994B5B6813F4800FEAD0974B22
-S315080088DC1B6813F4003F03D06368002B00F0AA81D1
-S315080088EC236813F0020F74D0904B9B6813F00C0F8F
-S315080088FC5ED08E4B9B6803F00C03082B53D0E368B1
-S3150800890C002B00F08980894A136843F00103136031
-S3150800891CFFF76EFF0546854B1B6813F0020F72D1E5
-S3150800892CFFF766FF401B0228F5D9032087E17F4A2B
-S3150800893C136843F48033136063682BB3FFF758FF4F
-S3150800894C05467A4B1B6813F4003FC9D1FFF750FF55
-S3150800895C401B6428F5D9032071E1B3F5A02F09D083
-S3150800896C724B1A6822F480321A601A6822F4802232
-S3150800897C1A60E1E76D4B1A6842F480221A601A688D
-S3150800898C42F480321A60D7E7FFF732FF0546674B89
-S3150800899C1B6813F4003FA3D0FFF72AFF401B64287B
-S315080089ACF5D903204BE1614B5B6813F4800FA6D114
-S315080089BC5E4B1B6813F0020F03D0E368012B40F0E3
-S315080089CC3B815A4A136823F0F803216943EAC10329
-S315080089DC1360236813F0080F46D0636983B3534AB0
-S315080089EC536F43F001035367FFF702FF05464F4BDE
-S315080089FC5B6F13F0020F37D1FFF7FAFE401B022804
-S31508008A0CF5D903201BE1494A136823F0F8032169B9
-S31508008A1C43EAC1031360DCE7444A136823F00103F5
-S31508008A2C1360FFF7E5FE0546404B1B6813F0020F73
-S31508008A3CCFD0FFF7DDFE401B0228F5D90320FEE058
-S31508008A4C3A4A536F23F001035367FFF7D1FE0546E5
-S31508008A5C364B5B6F13F0020F06D0FFF7C9FE401BAF
-S31508008A6C0228F5D90320EAE0236813F0040F7DD019
-S31508008A7C2E4B1B6C13F0805F1ED12C4B1A6C42F0DC
-S31508008A8C80521A641B6C03F080530193019B0125D9
-S31508008A9C274B1B6813F4807F10D0A368012B21D0B9
-S31508008AAC002B37D1214B1A6F22F001021A671A6F65
-S31508008ABC22F004021A671AE00025E9E71C4A136833
-S31508008ACC43F480731360FFF793FE0646184B1B6836
-S31508008ADC13F4807FE1D1FFF78BFE801B6428F5D950
-S31508008AEC0320ACE0114A136F43F001031367A36824
-S31508008AFC53B3FFF77DFE06460C4B1B6F13F0020FA4
-S31508008B0C33D1FFF775FE801B41F288339842F3D9AF
-S31508008B1C032094E0052B0DD0044B1A6F22F00102AA
-S31508008B2C1A671A6F22F004021A67E0E70038024047
-S31508008B3C00700040444B1A6F42F004021A671A6F11
-S31508008B4C42F001021A67D2E7FFF752FE06463E4B81
-S31508008B5C1B6F13F0020F08D0FFF74AFE801B41F279
-S31508008B6C88339842F3D9032069E0F5B9A369002B39
-S31508008B7C64D0354A926802F00C02082A61D0022B9E
-S31508008B8C19D0314A136823F080731360FFF730FE4F
-S31508008B9C04462D4B1B6813F0007F47D0FFF728FEC1
-S31508008BAC001B0228F5D9032049E0274A136C23F049
-S31508008BBC80531364DAE7244A136823F0807313602E
-S31508008BCCFFF716FE0546204B1B6813F0007F06D0F0
-S31508008BDCFFF70EFE401B0228F5D903202FE0E369A8
-S31508008BEC226A1343626A43EA8213A26A5208013A5A
-S31508008BFC43EA0243E26A43EA026343F00053124A29
-S31508008C0C5360136843F080731360FFF7F1FD044655
-S31508008C1C0D4B1B6813F0007F06D1FFF7E9FD001B0F
-S31508008C2C0228F5D903200AE0002008E0002006E017
-S31508008C3C01207047012002E0012000E0002002B06C
-S31508008C4C70BD0120FBE700BF00380240314B9B6822
-S31508008C5C03F00C03042B58D0082B58D170B52D4BA8
-S31508008C6C5A6802F03F025B6813F4800F2AD0294B2E
-S31508008C7C5868C0F388100546002643011B1A66EB94
-S31508008C8C0604A10141EA93619801C01A61EB04013B
-S31508008C9CCB0043EA5073C4001946601946EB010130
-S31508008CAC4B0243EAD0534402204619463346FFF793
-S31508008CBCA7FA184B5B68C3F3014301335B00B0FB9F
-S31508008CCCF3F070BD134B5868C0F3881005460026A0
-S31508008CDC43011B1A66EB0604A10141EA936198014C
-S31508008CECC01A61EB0401CB0043EA5073C400194661
-S31508008CFC601946EB01018B0243EA90538402204625
-S31508008D0C19463346FFF77CFAD3E7034870470348FE
-S31508008D1C704700BF0038024000127A000024F400A5
-S31508008D2C002800F09F8070B50446524B1B6803F070
-S31508008D3C0F038B420BD24F4A136823F00F030B43D6
-S31508008D4C1360136803F00F038B4240F08D80236881
-S31508008D5C13F0020F17D013F0040F04D0464A936889
-S31508008D6C43F4E0539360236813F0080F04D0424A87
-S31508008D7C936843F4604393603F4A936823F0F00387
-S31508008D8CA068034393600D46236813F0010F31D096
-S31508008D9C6368012B20D0022B25D0374A126812F0B3
-S31508008DAC020F63D034498A6822F0030213438B609E
-S31508008DBCFFF71EFD0646304B9B6803F00C036268F2
-S31508008DCCB3EB820F16D0FFF713FD801B41F28833E5
-S31508008DDC9842F0D9032044E0274A126812F4003F5F
-S31508008DECE0D101203DE0244A126812F0007FD9D167
-S31508008DFC012036E01F4B1B6803F00F03AB420AD960
-S31508008E0C1C4A136823F00F032B431360136803F0F3
-S31508008E1C0F03AB422CD1236813F0040F06D0164A65
-S31508008E2C936823F4E053E1680B439360236813F0CB
-S31508008E3C080F07D0104A936823F46043216943EA64
-S31508008E4CC1039360FFF702FF0B4B9B68C3F3031335
-S31508008E5C0A4AD35CD8400A4B18600020FFF78AFCF4
-S31508008E6C002070BD012070470120FAE70120F8E7C1
-S31508008E7C0120F6E7003C02400038024074A10008C5
-S31508008E8C2C040020014B1868704700BF2C040020E6
-S31508008E9C08B5FFF7F7FF044B9B68C3F38223034A15
-S31508008EACD35CD84008BD00BF0038024084A1000836
-S31508008EBC08B5FFF7E7FF044B9B68C3F34233034A35
-S31508008ECCD35CD84008BD00BF0038024084A1000816
-S31508008EDC7047002800F0A18038B5044690F8203079
-S31508008EECD3B12268136823F002031360FFF780FCE2
-S31508008EFC054623685A6812F0020F10D0FFF778FC63
-S31508008F0C401B0A28F5D9636A43F4003363620523C8
-S31508008F1C84F82030012038BDFFF7DAFFE1E71A683C
-S31508008F2C42F001021A60FFF763FC054623685A688B
-S31508008F3C12F0010F0DD1FFF75BFC401B0A28F5D97F
-S31508008F4C636A43F400336362052384F820300120F6
-S31508008F5CE1E7227E012A3DD01A6822F080021A60C7
-S31508008F6C637E012B3BD02268136823F04003136001
-S31508008F7CA37E012B39D02268136823F020031360D3
-S31508008F8CE37E012B37D02268136843F01003136075
-S31508008F9C237F012B35D02268136823F0080313604E
-S31508008FAC637F012B33D02268136823F00403136004
-S31508008FBCA368E26813432269134362691343626820
-S31508008FCC013A21681343CB6100206062012384F8BF
-S31508008FDC2030A0E71A6842F080021A60C0E72268BF
-S31508008FEC136843F040031360C2E72268136843F022
-S31508008FFC20031360C4E72268136823F01003136078
-S3150800900CC6E72268136843F008031360C8E72268AA
-S3150800901C136843F004031360CAE701207047000085
-S3150800902C90F82030013BDBB2012B05D9436A43F497
-S3150800903C802343620120704770B4434BD3F8002257
-S3150800904C42F00102C3F80022D3F8002222F47C5223
-S3150800905CC3F80022D3F80022486A42EA0022C3F871
-S3150800906C00224A6902F01F02012000FA02F2D3F824
-S3150800907C1C42D0430440C3F81C42CB69B3B9324BEB
-S3150800908CD3F80C420440C3F80C42CE688D884C6960
-S3150800909C45EA0645483443F834508E680C884D69C1
-S315080090AC44EA0644483503EBC5035C60CB69012BDF
-S315080090BC1DD08B69002B32D1234CD4F804320340D3
-S315080090CCC4F804320B698BBB1F4BD3F814422040EF
-S315080090DCC3F814020B6A012B2FD01B4AD2F80032A4
-S315080090EC23F00103C2F80032002070BC7047164BFF
-S315080090FCD3F80C421443C3F80C420E688D884C699D
-S3150800910C45EA0645483443F834508E688C894D69CF
-S3150800911C44EA0644483503EBC5035C60C9E70A4CC8
-S3150800912CD4F804321343C4F80432CBE70648D0F813
-S3150800913C14321343C0F81432CCE70349D1F81C3265
-S3150800914C1A43C1F81C22C8E70064004038B590F8E9
-S3150800915C2030DBB2012B05D0436A43F4002343626B
-S3150800916C012038BD0446022380F8203002681368B3
-S3150800917C23F001031360FFF73BFB054623685B6886
-S3150800918C13F0010F0DD0FFF733FB401B0A28F5D956
-S3150800919C636A43F400336362052384F820300120A4
-S315080091ACDFE700206062DCE730B490F82040013C31
-S315080091BCE4B2012C00F28A8051B90468E46814F010
-S315080091CC030F10D1436A43F400134362012082E073
-S315080091DC0468246914F0030F05D1436A43F4001399
-S315080091EC4362012077E0056801F11B0424012C5920
-S315080091FC04F004049460002C5AD1056801F11B0490
-S3150800920C24012C59640D1460056801F11B04240112
-S3150800921C2D59C5F34005D560056825446D6805F0DC
-S3150800922C0F051561056825446D68C5F30725956115
-S3150800923C05682C446468240C546104680A011444B7
-S3150800924CD4F8B8411C7004681444D4F8B841C4F373
-S3150800925C07245C7004681444D4F8B841C4F3074472
-S3150800926C9C7004681444D4F8B841240EDC70046865
-S3150800927C1444D4F8BC411C7104681444D4F8BC4199
-S3150800928CC4F307245C7104681444D4F8BC41C4F3D1
-S3150800929C07449C7104682244D2F8BC21120EDA7178
-S315080092AC71B90268D36843F02003D360002012E03A
-S315080092BC056801F11B0424012C59E4085460A3E742
-S315080092CC0268136943F020031361EFE7436A43F41A
-S315080092DC80234362012030BC704700000649CB68E6
-S315080092EC23F4E0631B041B0C000200F4E060034348
-S315080092FC024A1A43CA60704700ED00E00000FA05FE
-S3150800930C30B4154BDB68C3F30223C3F10704042CF2
-S3150800931C28BF04241D1D062D01D9033B00E000239C
-S3150800932C4FF0FF3505FA04F421EA0401994005FAD1
-S3150800933C03F322EA03031943002805DB0901C9B222
-S3150800934C064B195430BC704700F00F000901C9B21E
-S3150800935C034B1954F6E700BF00ED00E000E400E00B
-S3150800936C14ED00E00138B0F1807F0AD2064B586044
-S3150800937C064AF02182F823100020986007221A600A
-S3150800938C70470120704700BF10E000E000ED00E0D8
-S3150800939C042805D0054A136823F0040313607047A4
-S315080093AC024A136843F004031360704710E000E0A8
-S315080093BC704708B5FFF7FCFF08BD000000230F2B0C
-S315080093CC00F2E280F0B482B039E0092200E0002213
-S315080093DCB2403A4302346D4E46F824206C4A14685F
-S315080093ECEA4302EA04064F6817F4803F01D045EABF
-S315080093FC0406674C2660646802EA04064F6817F48C
-S3150800940C003F01D045EA0406614C6660A46802EA8E
-S3150800941C04064F6817F4801F01D045EA04065C4C15
-S3150800942CA660E46822404E6816F4001F01D045EA8F
-S3150800943C0402574CE26001330F2B00F2A280012282
-S3150800944C9A400C6804EA0205AA42F4D14C68122C1C
-S3150800945C18BF022C10D1DE08083650F826C003F0C7
-S3150800946C0704A7000F24BC402CEA040C0C69BC406A
-S3150800947C44EA0C0440F8264004685F000326BE4004
-S3150800948CF64306EA040C4C6804F00304BC4044EAB0
-S3150800949C0C0404604C6804F1FF3C112C18BFBCF199
-S315080094AC010F01D9122C11D1846806EA040CCC6878
-S315080094BCBC4044EA0C048460446824EA020C4C68F8
-S315080094CCC4F300129A4042EA0C024260C268164083
-S315080094DC8A68BA403243C2604A6812F0805FAAD0E2
-S315080094EC2C4A546C44F480445464526C02F4804202
-S315080094FC0192019A9C08A61C244A52F8267003F07D
-S3150800950C030296000F22B24027EA0207224A90422B
-S3150800951C3FF45DAF02F58062904222D002F580627C
-S3150800952C904220D002F5806290421ED002F58062ED
-S3150800953C90421CD002F5806290421AD002F58062E5
-S3150800954C904218D002F58062904216D002F58062DD
-S3150800955C904214D002F5806290423FF436AF0A224C
-S3150800956C36E7012234E7022232E7032230E70422E7
-S3150800957C2EE705222CE706222AE7072228E70822E7
-S3150800958C26E702B0F0BC7047704700BF00380140B0
-S3150800959C003C014000380240000002400AB18161DB
-S315080095AC70470904816170477047000010B504467E
-S315080095BC83680269134342691343C26913430168FA
-S315080095CC08689D4A024013430B602268536823F4CB
-S315080095DC4053E1680B435360A269236A1A43216816
-S315080095EC8B6823F4306313438B602368934A934246
-S315080095FC19D0934A934229D0924A93423ED0924A22
-S3150800960C934264D0914A934276D0914A934200F0A1
-S3150800961C8B80904A934200F09F808F4A934200F0C9
-S3150800962CB38010233EE08D4BD3F8903003F0030340
-S3150800963C032B09D8DFE803F00204C006012331E046
-S3150800964C04232FE008232DE010232BE0834BD3F8BB
-S3150800965C903003F00C030C2B0ED8DFE803F0070D43
-S3150800966C0D0D090D0D0DAF0D0D0D0B00002319E099
-S3150800967C042317E0082315E0102313E0774BD3F8DF
-S3150800968C903003F03003102B00F09A8006D9202B6B
-S3150800969C00F09880302B18D1082303E00BB900236F
-S315080096AC00E01023E269B2F5004F00F0A180082B08
-S315080096BC00F23C81DFE813F0FF0014011E013A01A9
-S315080096CC27013A013A013A0131011023EAE7634BC3
-S315080096DCD3F8903003F0C003402B75D005D9802BF6
-S315080096EC74D0C02B06D10823DCE70BB90023D9E7C5
-S315080096FC1023D7E71023D5E7584BD3F8903003F44B
-S3150800970C4073B3F5807F63D007D9B3F5007F61D07A
-S3150800971CB3F5407F06D10823C4E70BB90023C1E78C
-S3150800972C1023BFE71023BDE74C4BD3F8903003F456
-S3150800973C4063B3F5806F4FD007D9B3F5006F4DD0A2
-S3150800974CB3F5406F06D10823ACE70BB90123A9E79B
-S3150800975C1023A7E71023A5E7404BD3F8903003F462
-S3150800976C4053B3F5805F3BD007D9B3F5005F39D0CA
-S3150800977CB3F5405F06D1082394E70BB9002391E7AC
-S3150800978C10238FE710238DE7344BD3F8903003F46E
-S3150800979C4043B3F5804F27D007D9B3F5004F25D0F2
-S315080097ACB3F5404F06D108237CE70BB9002379E7BC
-S315080097BC102377E7102375E7022373E7022371E773
-S315080097CC04236FE702236DE704236BE7022369E79B
-S315080097DC042367E7022365E7042363E7022361E7AB
-S315080097EC04235FE702235DE704235BE7022359E7BB
-S315080097FC082B5DD8DFE803F005343F5C485C5C5CFD
-S3150800980C5300FFF745FB6268530803EB4003B3FBB1
-S3150800981CF2F39BB20020A3F110014FF6EF729142BE
-S3150800982C00F287809AB222F00F02C3F34203134365
-S3150800983C2268D36050E000BFF369FFEF00100140C7
-S3150800984C0044004000480040004C004000500040D6
-S3150800985C0014014000780040007C004000380240AB
-S3150800986CFFF726FB6268530803EB4003B3FBF2F3DE
-S3150800987C9BB20020CFE76268304B03EB5203B3FB75
-S3150800988CF2F39BB20020C6E7FFF7E0F962685308CB
-S3150800989C03EB4003B3FBF2F39BB20020BBE7626811
-S315080098AC530803F58033B3FBF2F39BB20020B2E7FF
-S315080098BC01200023AFE7FFF7EBFA626800EB5203CF
-S315080098CCB3FBF2F39BB20020A3F110014FF6EF7233
-S315080098DC914230D82268D36000232366636610BD94
-S315080098ECFFF7E6FA626800EB5203B3FBF2F39BB29E
-S315080098FC0020E9E76268124B03EB5203B3FBF2F361
-S3150800990C9BB20020E0E7FFF7A1F9626800EB52036F
-S3150800991CB3FBF2F39BB20020D6E76268530803F553
-S3150800992C0043B3FBF2F39BB20020CDE701200023E2
-S3150800993CCAE70120D0E70120CEE700BF0048E801BE
-S3150800994C0024F400436A13F0010F06D0026853682A
-S3150800995C23F40033816A0B435360436A13F0020FF6
-S3150800996C06D00268536823F48033C16A0B435360EC
-S3150800997C436A13F0040F06D00268536823F4802355
-S3150800998C016B0B435360436A13F0080F06D0026849
-S3150800999C536823F40043416B0B435360436A13F03B
-S315080099AC100F06D00268936823F48053816B0B431F
-S315080099BC9360436A13F0200F06D00268936823F469
-S315080099CC0053C16B0B439360436A13F0400F0AD0E4
-S315080099DC0268536823F48013016C0B435360036CC1
-S315080099ECB3F5801F0BD0436A13F0800F06D00268BC
-S315080099FC536823F40023816C0B4353607047026849
-S31508009A0C536823F4C003416C0B435360EBE72DE911
-S31508009A1CF04105460F4616469846069C2B68DB69A8
-S31508009A2C37EA03030CBF01230023B3421CD1B4F15C
-S31508009A3CFF3FF3D0FEF7DCFEA0EB0800A04201D8EE
-S31508009A4C002CEBD12A68136823F4D07313602A68A8
-S31508009A5C936823F00103936020236B67AB6700239D
-S31508009A6C85F87030032000E00020BDE8F0812DE970
-S31508009A7CF04383B01E46836F202B7ED104460D46D9
-S31508009A8C9046B2FA82F35B09002908BF0123002B22
-S31508009A9C77D190F87030012B75D0012380F870308F
-S31508009AAC0023C36722238367FEF7A2FE0746A4F8A2
-S31508009ABC5880A4F85A80A368B3F5805F06D0A3B97A
-S31508009ACC226972B9FF22A4F85C2014E0226922B933
-S31508009ADC40F2FF12A4F85C200DE0FF22A4F85C20EB
-S31508009AEC09E07F22A4F85C2005E0B3F1805F0AD078
-S31508009AFC0022A4F85C20B4F85C80B3F5805F0CD027
-S31508009B0C4FF000091DE022691AB97F22A4F85C20DF
-S31508009B1CF1E73F22A4F85C20EDE7236913B14FF077
-S31508009B2C00090EE0A94600250BE023685B6A08EAE3
-S31508009B3C030329F8023BB4F85A30013B9BB2A4F84C
-S31508009B4C5A30B4F85A309BB28BB100963B46002279
-S31508009B5C20212046FFF75BFFB8B9002DE5D0236816
-S31508009B6C5A6A5FFA88F3134005F8013BE3E72023AA
-S31508009B7CA367002084F8700000E0022003B0BDE85B
-S31508009B8CF0830120FAE70220F8E70320F6E710B580
-S31508009B9C82B004460023C367FEF72AFE22681268C1
-S31508009BAC12F0080F07D120236367A367002084F8F7
-S31508009BBC700002B010BD6FF07E430093034600227E
-S31508009BCC4FF400112046FFF722FF0028EBD00320A4
-S31508009BDCEFE768B310B50446436F03B324236367F2
-S31508009BEC2268136823F0010313602046FFF7DEFC96
-S31508009BFC012813D0636ABBB92268536823F49043CF
-S31508009C0C53602268936823F02A03936022681368CA
-S31508009C1C43F0010313602046FFF7B9FF10BD80F827
-S31508009C2C7030FFF7C1FCD9E72046FFF78BFEE3E758
-S31508009C3C0120704708B5FFF725F9084BA3FB003040
-S31508009C4C8009FFF78FFB0420FFF7A2FB00221146C1
-S31508009C5C4FF0FF30FFF754FB08BD00BFD34D621021
-S31508009C6C08B5FEF7C5FD08BD08B5FEF7B5FDFFF747
-S31508009C7CA0FB08BD08B5002280210248FFF78EFC20
-S31508009C8C08BD00BF0004024010B5FFF7E9FF0E4BF4
-S31508009C9C1B68C31AB3F5FA7F0CD304460B4B1B7817
-S31508009CAC4BB90122094B1A7080210948FFF776FC3B
-S31508009CBC054B1C6010BD0022044B1A708021044809
-S31508009CCCFFF76CFCF4E700BF58040020540400208E
-S31508009CDC00040240014A024B9A6070470080000853
-S31508009CEC00ED00E000B595B03022002108A8FEF77B
-S31508009CFC2DFC002303930493059306930793214B9A
-S31508009D0C1A6C42F080521A641B6C03F08053019350
-S31508009D1C019B1D4B1A6842F440421A601B6803F4F7
-S31508009D2C40430293029B012308934FF4A023099303
-S31508009D3C02230E934FF480020F92082210924FF4CE
-S31508009D4CD87211921293139308A8FEF795FD00B1D9
-S31508009D5CFEE7FEF753FD00B1FEE70F23039302233C
-S31508009D6C0493002305934FF4A05306934FF48053A2
-S31508009D7C0793072103A8FEF7D3FF00B1FEE715B03A
-S31508009D8C5DF804FB003802400070004008B5FFF788
-S31508009D9CA1FFFEF715FDFFF7A5FFFFF74BFFFFF732
-S31508009DAC69FF08BD08B5FFF7F1FF00F045F9FFF7A5
-S31508009DBC6BFF00F0C5F9FAE72DE9F0418CB0464B7C
-S31508009DCC1A6C42F080521A641A6C02F08052019294
-S31508009DDC019A5A6C42F480425A645A6C02F48042D4
-S31508009DEC0292029A1A6B42F002021A631A6B02F07A
-S31508009DFC02020392039A1A6B42F008021A631A6B50
-S31508009E0C02F008020492049A1A6C42F480221A642C
-S31508009E1C1A6C02F480220592059A1A6C42F00072AA
-S31508009E2C1A641B6C03F000730693069B0320FFF75A
-S31508009E3C55FA002211466FF00B00FFF761FA002263
-S31508009E4C11466FF00A00FFF75BFA002211466FF015
-S31508009E5C0900FFF755FA002211466FF00400FFF7C8
-S31508009E6C4FFA002211466FF00300FFF749FA002259
-S31508009E7C11466FF00100FFF743FA002211464FF026
-S31508009E8CFF30FFF73DFA802307930123089300243C
-S31508009E9C09940A94114D07A92846FFF78FFA4FF42F
-S31508009EAC4078CDF81C8002270897099403260A9651
-S31508009EBC07230B9307A90A48FFF780FACDF81C80ED
-S31508009ECC089709940A9609230B9307A92846FFF7BE
-S31508009EDC75FA0CB0BDE8F081003802400004024067
-S31508009EEC000C024008B50948094B03604FF461435E
-S31508009EFC436000238360C36003610C224261836163
-S31508009F0CC36103624362FFF764FE08BD8404002044
-S31508009F1C004800402DE9F04104460D461746984680
-S31508009F2CFEF7B6FF154BA3FB00308009002201E0B3
-S31508009F3C0132D2B2112A1DD8114B13F8121003EBA9
-S31508009F4C420393F801C001EB0C0303FB0443B0FB7B
-S31508009F5CF3FE03FB1E06002EEAD11FFA8EF32B80A6
-S31508009F6C013B9BB2B3F5806FE2D2397088F800C01A
-S31508009F7C012000E00020BDE8F08100BFD34D62103F
-S31508009F8C8CA1000870B58CB00025ADF82E508DF854
-S31508009F9C2D508DF82C500BAB0DF12D020DF12E0119
-S31508009FAC4FF4FA70FFF7B6FF1A4C1B4B2360257655
-S31508009FBC6576A5760126E67625776577A560E5604C
-S31508009FCC9DF82D30013B1B0423619DF82C30013B79
-S31508009FDC1B056361BDF82E3063602046FEF779FFDA
-S31508009FEC0695079508964CF6E043019302954FF6AD
-S31508009FFCE073039304230493059509960E230A9399
-S3150800A00C01A92046FFF70CF82046FFF79FF80CB07D
-S3150800A01C70BD00BF5C0400200064004008B5002336
-S3150800A02C012201460348FFF722FD08B1002008BDAE
-S3150800A03C0120FCE78404002008B5FFF753FFFFF75F
-S3150800A04CA1FF08BDBFF34F8F0549CA6802F4E06249
-S3150800A05C044B1343CB60BFF34F8F00BFFDE700BF24
-S3150800A06C00ED00E00400FA0508B5214B1B78B3B9DE
-S3150800A07C2048FFF7D3FF012800D008BD1D4B1B78DD
-S3150800A08C013BDBB23F2BF8D8FFF7EAFD1A4B1860F9
-S3150800A09C174B01221A70194B00221A70EDE7174B51
-S3150800A0AC1B78013313481844FFF7B8FF012813D15E
-S3150800A0BC124A13780133DBB213700E4A12789342A4
-S3150800A0CCDBD10B4A002111700A4A5278FF2AD4D1E7
-S3150800A0DC022BD2D1FFF7B6FFFFF7C2FD064B1B6862
-S3150800A0EC64339842C9D9024B00221A70C5E700BFDF
-S3150800A0FC45050020040500204805002046050020DB
-S3150800A10C00B58BB001AB03AA00210C48FFF74CF83D
-S3150800A11C20B9039A40F267639A4202D00BB05DF8F5
-S3150800A12C04FB059B002BF9D19DF80430FF2BF5D1C8
-S3150800A13C079B022BF2D1FFF785FF00BF5C040020BA
-S3150800A14C08B5FFF791FFFFF7DBFF08BDF8B500BFB1
-S3150800A15CF8BC08BC9E467047F8B500BFF8BC08BCEE
-S3090800A16C9E46704746
-S3150800A17000000020000000000000000001020304A7
-S3150800A180060708090000000001020304050206028A
-S3150800A190060307030803090309040A040B040C044D
-S3150800A1A00C050D050E050F050F06100610071008FD
-S30D0800A1B08CE0FF7F01000000AE
-S30D0800A1B8F9850008F181000891
-S3090800A1C0CD81000837
-S3150800A1C400000000EC02002054030020BC03002019
-S3150800A1D4000000000000000000000000000000006D
-S3150800A1E4000000000000000000000000000000005D
-S3150800A1F4000000000000000000000000000000004D
-S3150800A204000000000000000000000000000000003C
-S3150800A214000000000000000000000000000000002C
-S3150800A224000000000000000000000000000000001C
-S3150800A234000000000000000000000000000000000C
+S3150800872CFEE70000054BD3F8882042F47002C3F824
+S3150800873C88204FF000629A60704700BF00ED00E099
+S3150800874C10B504460E4B18784FF47A73B3FBF0F356
+S3150800875C0C4A1068B0FBF3F000F01EFE68B90F2C3B
+S3150800876C01D901200AE0002221464FF0FF3000F023
+S3150800877CE1FD054B1C60002000E0012010BD00BF88
+S3150800878C300400202C0400203404002008B50320F3
+S3150800879C00F0BEFD0020FFF7D3FF01F045FB0020DB
+S315080087AC08BD0000034A1168034B1B780B44136081
+S315080087BC704700BF7005002030040020014B186874
+S315080087CC704700BF7005002010B582B01B4B1A6CA1
+S315080087DC42F080521A641B6C03F080530193019B80
+S315080087EC174A136843F480331360FFF7E7FF044610
+S315080087FC134B5B6813F4803F08D1FFF7DFFF001BB0
+S3150800880CB0F57A7FF4D9032002B010BD0C4A136870
+S3150800881C43F400331360FFF7D1FF0446084B5B683B
+S3150800882C13F4003F07D1FFF7C9FF001BB0F57A7F99
+S3150800883CF4D90320E8E70020E6E700BF0038024039
+S3150800884C00700040002800F0FF8170B582B0044625
+S3150800885C036813F0010F29D0A74B9B6803F00C0390
+S3150800886C042B1AD0A44B9B6803F00C03082B0FD0CF
+S3150800887C6368B3F5803F40D0002B54D19E4B1A68E1
+S3150800888C22F480321A601A6822F480221A6039E0BF
+S3150800889C994B5B6813F4800FEAD0974B1B6813F45B
+S315080088AC003F03D06368002B00F0D081236813F0D7
+S315080088BC020F74D0904B9B6813F00C0F5ED08E4B46
+S315080088CC9B6803F00C03082B53D0E368002B00F0CD
+S315080088DC8980894A136843F001031360FFF76EFF1A
+S315080088EC0546854B1B6813F0020F72D1FFF766FF1E
+S315080088FC401B0228F5D90320ADE17F4A136843F4DF
+S3150800890C8033136063682BB3FFF758FF05467A4B21
+S3150800891C1B6813F4003FC9D1FFF750FF401B6428AE
+S3150800892CF5D9032097E1B3F5A02F09D0724B1A6835
+S3150800893C22F480321A601A6822F480221A60E1E75F
+S3150800894C6D4B1A6842F480221A601A6842F4803217
+S3150800895C1A60D7E7FFF732FF0546674B1B6813F417
+S3150800896C003FA3D0FFF72AFF401B6428F5D9032044
+S3150800897C71E1614B5B6813F4800FA6D15E4B1B68E3
+S3150800898C13F0020F03D0E368012B40F061815A4AB9
+S3150800899C136823F0F803216943EAC10313602368BB
+S315080089AC13F0080F46D0636983B3534A536F43F0E9
+S315080089BC01035367FFF702FF05464F4B5B6F13F036
+S315080089CC020F37D1FFF7FAFE401B0228F5D9032010
+S315080089DC41E1494A136823F0F803216943EAC103C4
+S315080089EC1360DCE7444A136823F001031360FFF7AE
+S315080089FCE5FE0546404B1B6813F0020FCFD0FFF778
+S31508008A0CDDFE401B0228F5D9032024E13A4A536FB0
+S31508008A1C23F001035367FFF7D1FE0546364B5B6F10
+S31508008A2C13F0020F06D0FFF7C9FE401B0228F5D932
+S31508008A3C032010E1236813F0040F7DD02E4B1B6C1A
+S31508008A4C13F0805F1ED12C4B1A6C42F080521A64BC
+S31508008A5C1B6C03F080530193019B0125274B1B6864
+S31508008A6C13F4807F10D0A368012B21D0002B37D1AB
+S31508008A7C214B1A6F22F001021A671A6F22F00402B0
+S31508008A8C1A671AE00025E9E71C4A136843F4807351
+S31508008A9C1360FFF793FE0646184B1B6813F4807F8A
+S31508008AACE1D1FFF78BFE801B6428F5D90320D2E0B1
+S31508008ABC114A136F43F001031367A36853B3FFF707
+S31508008ACC7DFE06460C4B1B6F13F0020F33D1FFF7D6
+S31508008ADC75FE801B41F288339842F3D90320BAE01D
+S31508008AEC052B0DD0044B1A6F22F001021A671A6F68
+S31508008AFC22F004021A67E0E70038024000700040D2
+S31508008B0C5C4B1A6F42F004021A671A6F42F00102A4
+S31508008B1C1A67D2E7FFF752FE0646564B1B6F13F041
+S31508008B2C020F08D0FFF74AFE801B41F288339842A1
+S31508008B3CF3D903208FE0FDB9A369002B00F08A80D6
+S31508008B4C4C4A926802F00C02082A58D0022B19D00B
+S31508008B5C484A136823F080731360FFF72FFE044608
+S31508008B6C444B1B6813F0007F47D0FFF727FE001B0A
+S31508008B7C0228F5D903206EE03E4A136C23F0805385
+S31508008B8C1364D9E73B4A136823F080731360FFF725
+S31508008B9C15FE0546374B1B6813F0007F06D0FFF70A
+S31508008BAC0DFE401B0228F5D9032054E0E369226A1E
+S31508008BBC1343626A43EA8213A26A5208013A43EAE9
+S31508008BCC0243E26A43EA026343F00053294A5360BC
+S31508008BDC136843F080731360FFF7F0FD0446254BCA
+S31508008BEC1B6813F0007F06D1FFF7E8FD001B02286F
+S31508008BFCF5D903202FE000202DE000202BE01D4A9C
+S31508008C0C5268012B29D002F48003E1698B4226D1E4
+S31508008C1C02F03F03216A8B4223D1616A47F6C0737F
+S31508008C2C1340B3EB811F1ED102F44031A36A5B08D3
+S31508008C3C013BB1EB034F18D102F07062E36AB2EB59
+S31508008C4C036F14D1002006E001207047012002E0D2
+S31508008C5C012000E0002002B070BD0120FBE70120D6
+S31508008C6CF9E70120F7E70120F5E70120F3E70120F2
+S31508008C7CF1E700BF00380240314B9B6803F00C0348
+S31508008C8C042B58D0082B58D170B52D4B5A6802F0C6
+S31508008C9C3F025B6813F4800F2AD0294B5868C0F33F
+S31508008CAC88100546002643011B1A66EB0604A1012B
+S31508008CBC41EA93619801C01A61EB0401CB0043EABF
+S31508008CCC5073C4001946601946EB01014B0243EA7E
+S31508008CDCD0534402204619463346FFF791FA184BEF
+S31508008CEC5B68C3F3014301335B00B0FBF3F070BD63
+S31508008CFC134B5868C0F388100546002643011B1A07
+S31508008D0C66EB0604A10141EA93619801C01A61EB6E
+S31508008D1C0401CB0043EA5073C4001946601946EBAC
+S31508008D2C01018B0243EA90538402204619463346C6
+S31508008D3CFFF766FAD3E7034870470348704700BF46
+S31508008D4C0038024000127A000024F400002800F0D3
+S31508008D5CA08070B50446534B1B6803F00F038B4277
+S31508008D6C0BD2504A136823F00F030B431360136896
+S31508008D7C03F00F038B4240F08E80236813F0020F2A
+S31508008D8C17D013F0040F04D0474A936843F4E05302
+S31508008D9C9360236813F0080F04D0434A936843F48E
+S31508008DAC60439360404A936823F0F003A06803433A
+S31508008DBC93600D46236813F0010F31D06368012BBD
+S31508008DCC20D0022B25D0384A126812F0020F64D034
+S31508008DDC35498A6822F0030213438B60FFF7EEFCD1
+S31508008DEC0646314B9B6803F00C036268B3EB820FA3
+S31508008DFC16D0FFF7E3FC801B41F288339842F0D972
+S31508008E0C032045E0284A126812F4003FE0D10120FD
+S31508008E1C3EE0254A126812F0007FD9D1012037E0CE
+S31508008E2C204B1B6803F00F03AB420AD91D4A136883
+S31508008E3C23F00F032B431360136803F00F03AB42A5
+S31508008E4C2DD1236813F0040F06D0174A936823F420
+S31508008E5CE053E1680B439360236813F0080F07D0BF
+S31508008E6C114A936823F46043216943EAC10393606A
+S31508008E7CFFF702FF0C4B9B68C3F303130B4AD35C37
+S31508008E8CD8400B4B18600B4B1868FFF759FC0020A1
+S31508008E9C70BD012070470120FAE70120F8E7012090
+S31508008EACF6E700BF003C024000380240E4A1000887
+S31508008EBC2C04002034040020014B1868704700BFAE
+S31508008ECC2C04002008B5FFF7F7FF044B9B68C3F387
+S31508008EDC8223034AD35CD84008BD00BF0038024041
+S31508008EECF4A1000808B5FFF7E7FF044B9B68C3F32A
+S31508008EFC4233034AD35CD84008BD00BF0038024051
+S31508008F0CF4A100087047002800F0A18038B5044683
+S31508008F1C90F82030D3B12268136823F0020313604B
+S31508008F2CFFF74CFC054623685A6812F0020F10D05E
+S31508008F3CFFF744FC401B0A28F5D9636A43F400334F
+S31508008F4C6362052384F82030012038BDFFF7DAFF69
+S31508008F5CE1E71A6842F001021A60FFF72FFC054692
+S31508008F6C23685A6812F0010F0DD1FFF727FC401B36
+S31508008F7C0A28F5D9636A43F400336362052384F837
+S31508008F8C20300120E1E7227E012A3DD01A6822F022
+S31508008F9C80021A60637E012B3BD02268136823F08B
+S31508008FAC40031360A37E012B39D02268136823F083
+S31508008FBC20031360E37E012B37D02268136843F035
+S31508008FCC10031360237F012B35D02268136823F016
+S31508008FDC08031360637F012B33D02268136823F0D0
+S31508008FEC04031360A368E268134322691343626996
+S31508008FFC13436268013A21681343CB61002060620F
+S3150800900C012384F82030A0E71A6842F080021A601F
+S3150800901CC0E72268136843F040031360C2E722686E
+S3150800902C136843F020031360C4E72268136823F01F
+S3150800903C10031360C6E72268136843F0080313602D
+S3150800904CC8E72268136843F004031360CAE70120D3
+S3150800905C7047000090F82030013BDBB2012B05D994
+S3150800906C436A43F4802343620120704770B4434B30
+S3150800907CD3F8002242F00102C3F80022D3F80022EA
+S3150800908C22F47C52C3F80022D3F80022486A42EA3A
+S3150800909C0022C3F800224A6902F01F02012000FAD6
+S315080090AC02F2D3F81C42D0430440C3F81C42CB69E5
+S315080090BCB3B9324BD3F80C420440C3F80C42CE6811
+S315080090CC8D884C6945EA0645483443F834508E6811
+S315080090DC0C884D6944EA0644483503EBC5035C60C5
+S315080090ECCB69012B1DD08B69002B32D1234CD4F8BC
+S315080090FC04320340C4F804320B698BBB1F4BD3F8FC
+S3150800910C14422040C3F814020B6A012B2FD01B4AB9
+S3150800911CD2F8003223F00103C2F80032002070BCEA
+S3150800912C7047164BD3F80C421443C3F80C420E681E
+S3150800913C8D884C6945EA0645483443F834508E68A0
+S3150800914C8C894D6944EA0644483503EBC5035C60D3
+S3150800915CC9E70A4CD4F804321343C4F80432CBE7F3
+S3150800916C0648D0F814321343C0F81432CCE7034936
+S3150800917CD1F81C321A43C1F81C22C8E70064004017
+S3150800918C38B590F82030DBB2012B05D0436A43F48E
+S3150800919C00234362012038BD0446022380F82030A0
+S315080091AC0268136823F001031360FFF707FB0546F3
+S315080091BC23685B6813F0010F0DD0FFF7FFFA401B0D
+S315080091CC0A28F5D9636A43F400336362052384F8E5
+S315080091DC20300120DFE700206062DCE730B490F82D
+S315080091EC2040013CE4B2012C00F28A8051B9046893
+S315080091FCE46814F0030F10D1436A43F40013436276
+S3150800920C012082E00468246914F0030F05D1436A2F
+S3150800921C43F400134362012077E0056801F11B044F
+S3150800922C24012C5904F004049460002C5AD10568C6
+S3150800923C01F11B0424012C59640D1460056801F115
+S3150800924C1B0424012D5905F00205D5600568254433
+S3150800925C6D6805F00F051561056825446D68C5F33D
+S3150800926C0725956105682C446468240C54610468C8
+S3150800927C0A011444D4F8B8411C7004681444D4F890
+S3150800928CB841C4F307245C7004681444D4F8B84194
+S3150800929CC4F307449C7004681444D4F8B841240EEB
+S315080092ACDC7004681444D4F8BC411C71046814447A
+S315080092BCD4F8BC41C4F307245C7104681444D4F88C
+S315080092CCBC41C4F307449C7104682244D2F8BC21FF
+S315080092DC120EDA7171B90268D36843F02003D360B1
+S315080092EC002012E0056801F11B0424012C59E4083E
+S315080092FC5460A3E70268136943F020031361EFE790
+S3150800930C436A43F480234362012030BC7047000053
+S3150800931C0649CB6823F4E0631B041B0C000200F41B
+S3150800932CE0600343024A1A43CA60704700ED00E046
+S3150800933C0000FA0530B4154BDB68C3F30223C3F1FE
+S3150800934C0704042C28BF04241D1D062D01D9033B34
+S3150800935C00E000234FF0FF3505FA04F421EA040176
+S3150800936C994005FA03F322EA03031943002805DB9F
+S3150800937C0901C9B2064B195430BC704700F00F00EE
+S3150800938C0901C9B2034B1954F6E700BF00ED00E01A
+S3150800939C00E400E014ED00E00138B0F1807F0AD259
+S315080093AC064B5860064AF02182F823100020986074
+S315080093BC07221A6070470120704700BF10E000E0D2
+S315080093CC00ED00E0042805D0054A136823F00403D1
+S315080093DC13607047024A136843F00403136070471E
+S315080093EC10E000E0704708B5FFF7FCFF08BD000069
+S315080093FC00230F2B00F2E180F0B583B039E0092287
+S3150800940C00E00022B2403A4302346C4E46F824205F
+S3150800941C6B4A1468EA4302EA04064F6817F4803F5D
+S3150800942C01D045EA0406664C2660646802EA04061E
+S3150800943C4F6817F4003F01D045EA0406604C666095
+S3150800944CA46802EA04064F6817F4801F01D045EA9F
+S3150800945C04065B4CA660E46822404E6816F4001FAE
+S3150800946C01D045EA0402564CE26001330F2B00F298
+S3150800947CA28001229A400C6804EA0205AA42F4D199
+S3150800948C4C68661E112C18BF012E01D9122C12D14C
+S3150800949C86685F000324BC4026EA0406CC68BC40F8
+S315080094AC34438460466826EA02064C68C4F3001204
+S315080094BC9A4032434260C2685F000326BE40F643B8
+S315080094CC32408C68BC401443C4604A68122A18BFE0
+S315080094DC022A13D1DC08083450F824E003F00702FA
+S315080094EC4FEA820C0F2202FA0CF22EEA020E0A69D5
+S315080094FC02FA0CF242EA0E0240F8242002681640E0
+S3150800950C4A6802F00302BA40324302604A6812F013
+S3150800951C805FAAD02B4A546C44F480445464526C31
+S3150800952C02F480420192019A9C08A61C234A52F81E
+S3150800953C267003F0030296000F22B24027EA0207B0
+S3150800954C214A90423FF45DAF02F58062904222D0E8
+S3150800955C02F58062904220D002F5806290421ED0BD
+S3150800956C02F5806290421CD002F5806290421AD0B5
+S3150800957C02F58062904218D002F58062904216D0AD
+S3150800958C02F58062904214D002F5806290423FF454
+S3150800959C36AF0A2236E7012234E7022232E70322E3
+S315080095AC30E704222EE705222CE706222AE70722B3
+S315080095BC28E7082226E703B0F0BD704700380140BB
+S315080095CC003C014000380240000002400AB18161AB
+S315080095DC70470904816170477047000010B504464E
+S315080095EC83680269134342691343C26913430168CA
+S315080095FC08689D4A024013430B602268536823F49B
+S3150800960C4053E1680B435360A269236A1A432168E5
+S3150800961C8B6823F4306313438B602368934A934215
+S3150800962C19D0934A934229D0924A93423ED0924AF1
+S3150800963C934264D0914A934276D0914A934200F071
+S3150800964C8B80904A934200F09F808F4A934200F099
+S3150800965CB38010233EE08D4BD3F8903003F0030310
+S3150800966C032B09D8DFE803F00204C006012331E016
+S3150800967C04232FE008232DE010232BE0834BD3F88B
+S3150800968C903003F00C030C2B0ED8DFE803F0070D13
+S3150800969C0D0D090D0D0DAF0D0D0D0B00002319E069
+S315080096AC042317E0082315E0102313E0774BD3F8AF
+S315080096BC903003F03003102B00F09A8006D9202B3B
+S315080096CC00F09880302B18D1082303E00BB900233F
+S315080096DC00E01023E269B2F5004F00F0A180082BD8
+S315080096EC00F23C81DFE813F0FF0014011E013A0179
+S315080096FC27013A013A013A0131011023EAE7634B93
+S3150800970CD3F8903003F0C003402B75D005D9802BC5
+S3150800971C74D0C02B06D10823DCE70BB90023D9E794
+S3150800972C1023D7E71023D5E7584BD3F8903003F41A
+S3150800973C4073B3F5807F63D007D9B3F5007F61D04A
+S3150800974CB3F5407F06D10823C4E70BB90023C1E75C
+S3150800975C1023BFE71023BDE74C4BD3F8903003F426
+S3150800976C4063B3F5806F4FD007D9B3F5006F4DD072
+S3150800977CB3F5406F06D10823ACE70BB90123A9E76B
+S3150800978C1023A7E71023A5E7404BD3F8903003F432
+S3150800979C4053B3F5805F3BD007D9B3F5005F39D09A
+S315080097ACB3F5405F06D1082394E70BB9002391E77C
+S315080097BC10238FE710238DE7344BD3F8903003F43E
+S315080097CC4043B3F5804F27D007D9B3F5004F25D0C2
+S315080097DCB3F5404F06D108237CE70BB9002379E78C
+S315080097EC102377E7102375E7022373E7022371E743
+S315080097FC04236FE702236DE704236BE7022369E76B
+S3150800980C042367E7022365E7042363E7022361E77A
+S3150800981C04235FE702235DE704235BE7022359E78A
+S3150800982C082B5DD8DFE803F005343F5C485C5C5CCC
+S3150800983C5300FFF747FB6268530803EB4003B3FB7F
+S3150800984CF2F39BB20020A3F110014FF6EF7291428E
+S3150800985C00F287809AB222F00F02C3F34203134335
+S3150800986C2268D36050E000BFF369FFEF0010014097
+S3150800987C0044004000480040004C004000500040A6
+S3150800988C0014014000780040007C0040003802407B
+S3150800989CFFF728FB6268530803EB4003B3FBF2F3AC
+S315080098AC9BB20020CFE76268304B03EB5203B3FB45
+S315080098BCF2F39BB20020C6E7FFF7DEF9626853089D
+S315080098CC03EB4003B3FBF2F39BB20020BBE76268E1
+S315080098DC530803F58033B3FBF2F39BB20020B2E7CF
+S315080098EC01200023AFE7FFF7EDFA626800EB52039D
+S315080098FCB3FBF2F39BB20020A3F110014FF6EF7203
+S3150800990C914230D82268D36000232366636610BD63
+S3150800991CFFF7E8FA626800EB5203B3FBF2F39BB26B
+S3150800992C0020E9E76268124B03EB5203B3FBF2F330
+S3150800993C9BB20020E0E7FFF79FF9626800EB520341
+S3150800994CB3FBF2F39BB20020D6E76268530803F523
+S3150800995C0043B3FBF2F39BB20020CDE701200023B2
+S3150800996CCAE70120D0E70120CEE700BF0048E8018E
+S3150800997C0024F400436A13F0010F06D002685368FA
+S3150800998C23F40033816A0B435360436A13F0020FC6
+S3150800999C06D00268536823F48033C16A0B435360BC
+S315080099AC436A13F0040F06D00268536823F4802325
+S315080099BC016B0B435360436A13F0080F06D0026819
+S315080099CC536823F40043416B0B435360436A13F00B
+S315080099DC100F06D00268936823F48053816B0B43EF
+S315080099EC9360436A13F0200F06D00268936823F439
+S315080099FC0053C16B0B439360436A13F0400F0AD0B4
+S31508009A0C0268536823F48013016C0B435360036C90
+S31508009A1CB3F5801F0BD0436A13F0800F06D002688B
+S31508009A2C536823F40023816C0B4353607047026818
+S31508009A3C536823F4C003416C0B435360EBE72DE9E1
+S31508009A4CF04104460F4616469846069D2368DB6980
+S31508009A5C37EA03030CBF01230023B3423AD1B5F10D
+S31508009A6CFF3FF3D0FEF7AAFEA0EB0800A8421FD8CA
+S31508009A7CF5B123681A6812F0040FE7D0DA6912F404
+S31508009A8C006FE3D04FF400621A622268136823F45D
+S31508009A9CD07313602268936823F001039360202324
+S31508009AAC6367A367E367002384F87030032012E02A
+S31508009ABC2268136823F4D07313602268936823F022
+S31508009ACC0103936020236367A367002384F870302F
+S31508009ADC032000E00020BDE8F0812DE9F04383B0B7
+S31508009AEC1E46836F202B7FD104460D469046B2FA4C
+S31508009AFC82F35B09002908BF0123002B78D190F863
+S31508009B0C7030012B76D0012380F870300023C367A0
+S31508009B1C22238367FEF752FE0746A4F85880A4F85A
+S31508009B2C5A80A368B3F5805F06D0A3B9226972B9C7
+S31508009B3CFF22A4F85C2014E0226922B940F2FF1235
+S31508009B4CA4F85C200DE0FF22A4F85C2009E07F2233
+S31508009B5CA4F85C2005E0B3F1805F0DD00022A4F8D0
+S31508009B6C5C20B4F85C80B3F5805F0FD04FF0000929
+S31508009B7C002384F870301DE022691AB97F22A4F8F4
+S31508009B8C5C20EEE73F22A4F85C20EAE7236913B1D0
+S31508009B9C4FF00009ECE7A9460025E9E723685B6A5C
+S31508009BAC08EA030329F8023BB4F85A30013B9BB286
+S31508009BBCA4F85A30B4F85A309BB28BB100963B468F
+S31508009BCC002220212046FFF73AFFA8B9002DE5D040
+S31508009BDC23685A6A5FFA88F3134005F8013BE3E7F2
+S31508009BEC2023A367002000E0022003B0BDE8F08321
+S31508009BFC0120FAE70220F8E70320F6E710B582B051
+S31508009C0C04460023C367FEF7D9FD2268126812F0D2
+S31508009C1C080F07D120236367A367002084F8700018
+S31508009C2C02B010BD6FF07E430093034600224FF43A
+S31508009C3C00112046FFF703FF0028EBD00320EFE7BF
+S31508009C4C68B310B50446436F03B3242363672268CD
+S31508009C5C136823F0010313602046FFF7BFFC0128A5
+S31508009C6C13D0636ABBB92268536823F490435360D4
+S31508009C7C2268936823F02A0393602268136843F0DA
+S31508009C8C010313602046FFF7B9FF10BD80F870304A
+S31508009C9CFFF7A2FCD9E72046FFF76CFEE3E70120A5
+S31508009CAC7047000008B5FFF707F9084BA3FB00300F
+S31508009CBC8009FFF771FB0420FFF784FB002211468D
+S31508009CCC4FF0FF30FFF736FB08BD00BFD34D6210CF
+S31508009CDC08B5FEF773FD08BD08B5FEF763FDFFF77B
+S31508009CEC82FB08BD08B5002280210248FFF76EFCEE
+S31508009CFC08BD00BF0004024010B5FFF7E9FF0E4B84
+S31508009D0C1B68C31AB3F5FA7F0CD304460B4B1B78A6
+S31508009D1C4BB90122094B1A7080210948FFF756FCEA
+S31508009D2C054B1C6010BD0022044B1A708021044898
+S31508009D3CFFF74CFCF4E700BF58040020540400203D
+S31508009D4C00040240014A024B9A60704700800008E2
+S31508009D5C00ED00E000B595B03022002108A8FEF70A
+S31508009D6CF5FB002303930493059306930793214B62
+S31508009D7C1A6C42F080521A641B6C03F080530193E0
+S31508009D8C019B1D4B1A6842F440421A601B6803F487
+S31508009D9C40430293029B012308934FF4A023099393
+S31508009DAC02230E934FF480020F92082210924FF45E
+S31508009DBCD87211921293139308A8FEF743FD00B1BB
+S31508009DCCFEE7FEF701FD00B1FEE70F23039302231E
+S31508009DDC0493002305934FF4A05306934FF4805332
+S31508009DEC0793072103A8FEF7B1FF00B1FEE715B0EC
+S31508009DFC5DF804FB003802400070004008B5FFF718
+S31508009E0CA1FFFEF7C3FCFFF7A5FFFFF74BFFFFF714
+S31508009E1C69FF08BD08B5FFF7F1FF00F045F9FFF734
+S31508009E2C6BFF00F0C5F9FAE72DE9F0418CB0464B0B
+S31508009E3C1A6C42F080521A641A6C02F08052019223
+S31508009E4C019A5A6C42F480425A645A6C02F4804263
+S31508009E5C0292029A1A6B42F002021A631A6B02F009
+S31508009E6C02020392039A1A6B42F008021A631A6BDF
+S31508009E7C02F008020492049A1A6C42F480221A64BC
+S31508009E8C1A6C02F480220592059A1A6C42F000723A
+S31508009E9C1A641B6C03F000730693069B0320FFF7EA
+S31508009EAC37FA002211466FF00B00FFF743FA00222F
+S31508009EBC11466FF00A00FFF73DFA002211466FF0C3
+S31508009ECC0900FFF737FA002211466FF00400FFF776
+S31508009EDC31FA002211466FF00300FFF72BFA002225
+S31508009EEC11466FF00100FFF725FA002211464FF0D4
+S31508009EFCFF30FFF71FFA80230793012308930024EA
+S31508009F0C09940A94114D07A92846FFF771FA4FF4DC
+S31508009F1C4078CDF81C8002270897099403260A96E0
+S31508009F2C07230B9307A90A48FFF762FACDF81C809A
+S31508009F3C089709940A9609230B9307A92846FFF74D
+S31508009F4C57FA0CB0BDE8F081003802400004024014
+S31508009F5C000C024008B50948094B03604FF46143ED
+S31508009F6C436000238360C36003610C2242618361F2
+S31508009F7CC36103624362FFF763FE08BD84040020D5
+S31508009F8C004800402DE9F04104460D461746984610
+S31508009F9CFEF798FF154BA3FB00308009002201E061
+S31508009FAC0132D2B2112A1DD8114B13F8121003EB39
+S31508009FBC420393F801C001EB0C0303FB0443B0FB0B
+S31508009FCCF3FE03FB1E06002EEAD11FFA8EF32B8036
+S31508009FDC013B9BB2B3F5806FE2D2397088F800C0AA
+S31508009FEC012000E00020BDE8F08100BFD34D6210CF
+S31508009FFCFCA1000870B58CB00025ADF82E508DF874
+S3150800A00C2D508DF82C500BAB0DF12D020DF12E01A8
+S3150800A01C4FF4FA70FFF7B6FF1A4C1B4B23602576E4
+S3150800A02C6576A5760126E67625776577A560E560DB
+S3150800A03C9DF82D30013B1B0423619DF82C30013B08
+S3150800A04C1B056361BDF82E3063602046FEF75BFF87
+S3150800A05C0695079508964CF6E043019302954FF63C
+S3150800A06CE073039304230493059509960E230A9328
+S3150800A07C01A92046FEF7EEFF2046FFF781F80CB043
+S3150800A08C70BD00BF5C0400200064004008B50023C6
+S3150800A09C012201460348FFF720FD08B1002008BD40
+S3150800A0AC0120FCE78404002008B5FFF753FFFFF7EF
+S3150800A0BCA1FF08BDBFF34F8F0549CA6802F4E062D9
+S3150800A0CC044B1343CB60BFF34F8F00BFFDE700BFB4
+S3150800A0DC00ED00E00400FA0508B5214B1B78B3B96E
+S3150800A0EC2048FFF7D3FF012800D008BD1D4B1B786D
+S3150800A0FC013BDBB23F2BF8D8FFF7EAFD1A4B186089
+S3150800A10C174B01221A70194B00221A70EDE7174BE0
+S3150800A11C1B78013313481844FFF7B8FF012813D1ED
+S3150800A12C124A13780133DBB213700E4A1278934233
+S3150800A13CDBD10B4A002111700A4A5278FF2AD4D176
+S3150800A14C022BD2D1FFF7B6FFFFF7C2FD064B1B68F1
+S3150800A15C64339842C9D9024B00221A70C5E700BF6E
+S3150800A16C450500200405002048050020460500206A
+S3150800A17C00B58BB001AB03AA00210C48FFF72EF8EB
+S3150800A18C20B9039A40F267639A4202D00BB05DF885
+S3150800A19C04FB059B002BF9D19DF80430FF2BF5D158
+S3150800A1AC079B022BF2D1FFF785FF00BF5C0400204A
+S3150800A1BC08B5FFF791FFFFF7DBFF08BDF8B500BF41
+S3150800A1CCF8BC08BC9E467047F8B500BFF8BC08BC7E
+S3090800A1DC9E467047D6
+S3150800A1E00000002000000000000000000102030437
+S3150800A1F0060708090000000001020304050206021A
+S3150800A200060307030803090309040A040B040C04DC
+S3150800A2100C050D050E050F050F061006100710088C
+S30D0800A2201CE0FF7F01000000AD
+S30D0800A228F9850008F181000820
+S3090800A230CD810008C6
+S3150800A23400000000EC02002054030020BC030020A8
S3150800A24400000000000000000000000000000000FC
S3150800A25400000000000000000000000000000000EC
-S3150800A26400000000000000000100000000000000DB
-S3150800A2740E33CDAB34126DE6ECDE05000B000000A0
+S3150800A26400000000000000000000000000000000DC
+S3150800A27400000000000000000000000000000000CC
S3150800A28400000000000000000000000000000000BC
S3150800A29400000000000000000000000000000000AC
S3150800A2A4000000000000000000000000000000009C
S3150800A2B4000000000000000000000000000000008C
S3150800A2C4000000000000000000000000000000007C
-S3150800A2D4000000000000000000000000000000006C
-S3150800A2E4000000000000000000000000000000005C
+S3150800A2D4000000000000000001000000000000006B
+S3150800A2E40E33CDAB34126DE6ECDE05000B00000030
S3150800A2F4000000000000000000000000000000004C
S3150800A304000000000000000000000000000000003B
S3150800A314000000000000000000000000000000002B
@@ -608,6 +608,13 @@ S3150800A5A40000000000000000000000000000000099
S3150800A5B40000000000000000000000000000000089
S3150800A5C40000000000000000000000000000000079
S3150800A5D40000000000000000000000000000000069
-S3150800A5E400000000000000004C0500200024F400D0
-S30D0800A5F4010000001000000040
+S3150800A5E40000000000000000000000000000000059
+S3150800A5F40000000000000000000000000000000049
+S3150800A6040000000000000000000000000000000038
+S3150800A6140000000000000000000000000000000028
+S3150800A6240000000000000000000000000000000018
+S3150800A6340000000000000000000000000000000008
+S3150800A64400000000000000000000000000000000F8
+S3150800A65400000000000000004C0500200024F4005F
+S30D0800A6640100000010000000CF
S705080086DD8F
diff --git a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_GCC/Prog/lib/CMSIS/Device/ST/STM32F7xx/Include/stm32f746xx.h b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_GCC/Prog/lib/CMSIS/Device/ST/STM32F7xx/Include/stm32f746xx.h
index 5de6c6e1..2c47d3f0 100644
--- a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_GCC/Prog/lib/CMSIS/Device/ST/STM32F7xx/Include/stm32f746xx.h
+++ b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_GCC/Prog/lib/CMSIS/Device/ST/STM32F7xx/Include/stm32f746xx.h
@@ -12,29 +12,13 @@
******************************************************************************
* @attention
*
- * © COPYRIGHT(c) 2016 STMicroelectronics
+ * © Copyright (c) 2016 STMicroelectronics.
+ * All rights reserved.
*
- * Redistribution and use in source and binary forms, with or without modification,
- * are permitted provided that the following conditions are met:
- * 1. Redistributions of source code must retain the above copyright notice,
- * this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright notice,
- * this list of conditions and the following disclaimer in the documentation
- * and/or other materials provided with the distribution.
- * 3. Neither the name of STMicroelectronics nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
- * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
- * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ * This software component is licensed by ST under BSD 3-Clause license,
+ * the "License"; You may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at:
+ * opensource.org/licenses/BSD-3-Clause
*
******************************************************************************
*/
@@ -1433,28 +1417,32 @@ typedef struct
/* Analog to Digital Converter */
/* */
/******************************************************************************/
+#define VREFINT_CAL_ADDR_CMSIS ((uint16_t*) (0x1FF0F44A)) /*!© COPYRIGHT(c) 2016 STMicroelectronics
+ * © Copyright (c) 2016 STMicroelectronics.
+ * All rights reserved.
*
- * Redistribution and use in source and binary forms, with or without modification,
- * are permitted provided that the following conditions are met:
- * 1. Redistributions of source code must retain the above copyright notice,
- * this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright notice,
- * this list of conditions and the following disclaimer in the documentation
- * and/or other materials provided with the distribution.
- * 3. Neither the name of STMicroelectronics nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
- * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
- * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ * This software component is licensed by ST under BSD 3-Clause license,
+ * the "License"; You may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at:
+ * opensource.org/licenses/BSD-3-Clause
*
******************************************************************************
*/
@@ -72,10 +56,10 @@
/* Uncomment the line below according to the target STM32 device used in your
application
*/
-#if !defined (STM32F756xx) && !defined (STM32F746xx) && !defined (STM32F745xx) && !defined (STM32F767xx) && \
- !defined (STM32F769xx) && !defined (STM32F777xx) && !defined (STM32F779xx) && !defined (STM32F722xx) && \
- !defined (STM32F723xx) && !defined (STM32F732xx) && !defined (STM32F733xx) && !defined (STM32F730xx) && \
- !defined (STM32F750xx)
+#if !defined (STM32F756xx) && !defined (STM32F746xx) && !defined (STM32F745xx) && !defined (STM32F765xx) && \
+ !defined (STM32F767xx) && !defined (STM32F769xx) && !defined (STM32F777xx) && !defined (STM32F779xx) && \
+ !defined (STM32F722xx) && !defined (STM32F723xx) && !defined (STM32F732xx) && !defined (STM32F733xx) && \
+ !defined (STM32F730xx) && !defined (STM32F750xx)
/* #define STM32F756xx */ /*!< STM32F756VG, STM32F756ZG, STM32F756ZG, STM32F756IG, STM32F756BG,
STM32F756NG Devices */
@@ -113,11 +97,11 @@
#endif /* USE_HAL_DRIVER */
/**
- * @brief CMSIS Device version number V1.2.4
+ * @brief CMSIS Device version number V1.2.5
*/
#define __STM32F7_CMSIS_VERSION_MAIN (0x01) /*!< [31:24] main version */
#define __STM32F7_CMSIS_VERSION_SUB1 (0x02) /*!< [23:16] sub1 version */
-#define __STM32F7_CMSIS_VERSION_SUB2 (0x04) /*!< [15:8] sub2 version */
+#define __STM32F7_CMSIS_VERSION_SUB2 (0x05) /*!< [15:8] sub2 version */
#define __STM32F7_CMSIS_VERSION_RC (0x00) /*!< [7:0] release candidate */
#define __STM32F7_CMSIS_VERSION ((__STM32F7_CMSIS_VERSION_MAIN << 24)\
|(__STM32F7_CMSIS_VERSION_SUB1 << 16)\
diff --git a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_GCC/Prog/lib/STM32F7xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_GCC/Prog/lib/STM32F7xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h
index 13b68bc2..2d265fb6 100644
--- a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_GCC/Prog/lib/STM32F7xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h
+++ b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_GCC/Prog/lib/STM32F7xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h
@@ -7,7 +7,7 @@
******************************************************************************
* @attention
*
- * © Copyright (c) 2018 STMicroelectronics.
+ * © Copyright (c) 2019 STMicroelectronics.
* All rights reserved.
*
* This software component is licensed by ST under BSD 3-Clause license,
@@ -236,6 +236,16 @@
#define DAC_WAVEGENERATION_NOISE DAC_WAVE_NOISE
#define DAC_WAVEGENERATION_TRIANGLE DAC_WAVE_TRIANGLE
+#if defined(STM32G4) || defined(STM32H7)
+#define DAC_CHIPCONNECT_DISABLE DAC_CHIPCONNECT_EXTERNAL
+#define DAC_CHIPCONNECT_ENABLE DAC_CHIPCONNECT_INTERNAL
+#endif
+
+#if defined(STM32L1) || defined(STM32L4) || defined(STM32G0) || defined(STM32L5) || defined(STM32H7) || defined(STM32F4)
+#define HAL_DAC_MSP_INIT_CB_ID HAL_DAC_MSPINIT_CB_ID
+#define HAL_DAC_MSP_DEINIT_CB_ID HAL_DAC_MSPDEINIT_CB_ID
+#endif
+
/**
* @}
*/
@@ -296,8 +306,17 @@
#define HAL_DMAMUX_REQUEST_GEN_FALLING HAL_DMAMUX_REQ_GEN_FALLING
#define HAL_DMAMUX_REQUEST_GEN_RISING_FALLING HAL_DMAMUX_REQ_GEN_RISING_FALLING
+#if defined(STM32L4R5xx) || defined(STM32L4R9xx) || defined(STM32L4R9xx) || defined(STM32L4S5xx) || defined(STM32L4S7xx) || defined(STM32L4S9xx)
+#define DMA_REQUEST_DCMI_PSSI DMA_REQUEST_DCMI
+#endif
+
#endif /* STM32L4 */
+#if defined(STM32G0)
+#define DMA_REQUEST_DAC1_CHANNEL1 DMA_REQUEST_DAC1_CH1
+#define DMA_REQUEST_DAC1_CHANNEL2 DMA_REQUEST_DAC1_CH2
+#endif
+
#if defined(STM32H7)
#define DMA_REQUEST_DAC1 DMA_REQUEST_DAC1_CH1
@@ -355,6 +374,9 @@
#define DFSDM_FILTER_EXT_TRIG_LPTIM2 DFSDM_FILTER_EXT_TRIG_LPTIM2_OUT
#define DFSDM_FILTER_EXT_TRIG_LPTIM3 DFSDM_FILTER_EXT_TRIG_LPTIM3_OUT
+#define DAC_TRIGGER_LP1_OUT DAC_TRIGGER_LPTIM1_OUT
+#define DAC_TRIGGER_LP2_OUT DAC_TRIGGER_LPTIM2_OUT
+
#endif /* STM32H7 */
/**
@@ -450,7 +472,9 @@
#define FLASH_FLAG_SNECCE_BANK2RR FLASH_FLAG_SNECCERR_BANK2
#define FLASH_FLAG_DBECCE_BANK2RR FLASH_FLAG_DBECCERR_BANK2
#define FLASH_FLAG_STRBER_BANK2R FLASH_FLAG_STRBERR_BANK2
-#endif
+#define FLASH_FLAG_WDW FLASH_FLAG_WBNE
+#define OB_WRP_SECTOR_All OB_WRP_SECTOR_ALL
+#endif /* STM32H7 */
/**
* @}
@@ -486,6 +510,13 @@
#define HAL_SYSCFG_FASTMODEPLUS_I2C1 I2C_FASTMODEPLUS_I2C1
#define HAL_SYSCFG_FASTMODEPLUS_I2C2 I2C_FASTMODEPLUS_I2C2
#define HAL_SYSCFG_FASTMODEPLUS_I2C3 I2C_FASTMODEPLUS_I2C3
+#if defined(STM32G4)
+
+#define HAL_SYSCFG_EnableIOAnalogSwitchBooster HAL_SYSCFG_EnableIOSwitchBooster
+#define HAL_SYSCFG_DisableIOAnalogSwitchBooster HAL_SYSCFG_DisableIOSwitchBooster
+#define HAL_SYSCFG_EnableIOAnalogSwitchVDD HAL_SYSCFG_EnableIOSwitchVDD
+#define HAL_SYSCFG_DisableIOAnalogSwitchVDD HAL_SYSCFG_DisableIOSwitchVDD
+#endif /* STM32G4 */
/**
* @}
*/
@@ -494,7 +525,7 @@
/** @defgroup LL_FMC_Aliased_Defines LL FMC Aliased Defines maintained for compatibility purpose
* @{
*/
-#if defined(STM32L4) || defined(STM32F7) || defined(STM32H7)
+#if defined(STM32L4) || defined(STM32F7) || defined(STM32H7) || defined(STM32G4)
#define FMC_NAND_PCC_WAIT_FEATURE_DISABLE FMC_NAND_WAIT_FEATURE_DISABLE
#define FMC_NAND_PCC_WAIT_FEATURE_ENABLE FMC_NAND_WAIT_FEATURE_ENABLE
#define FMC_NAND_PCC_MEM_BUS_WIDTH_8 FMC_NAND_MEM_BUS_WIDTH_8
@@ -547,18 +578,25 @@
#define GPIO_AF9_SDIO2 GPIO_AF9_SDMMC2
#define GPIO_AF10_SDIO2 GPIO_AF10_SDMMC2
#define GPIO_AF11_SDIO2 GPIO_AF11_SDMMC2
-#endif
+
+#if defined (STM32H743xx) || defined (STM32H753xx) || defined (STM32H750xx) || defined (STM32H742xx) || \
+ defined (STM32H745xx) || defined (STM32H755xx) || defined (STM32H747xx) || defined (STM32H757xx)
+#define GPIO_AF10_OTG2_HS GPIO_AF10_OTG2_FS
+#define GPIO_AF10_OTG1_FS GPIO_AF10_OTG1_HS
+#define GPIO_AF12_OTG2_FS GPIO_AF12_OTG1_FS
+#endif /*STM32H743xx || STM32H753xx || STM32H750xx || STM32H742xx || STM32H745xx || STM32H755xx || STM32H747xx || STM32H757xx */
+#endif /* STM32H7 */
#define GPIO_AF0_LPTIM GPIO_AF0_LPTIM1
#define GPIO_AF1_LPTIM GPIO_AF1_LPTIM1
#define GPIO_AF2_LPTIM GPIO_AF2_LPTIM1
-#if defined(STM32L0) || defined(STM32L4) || defined(STM32F4) || defined(STM32F2) || defined(STM32F7) || defined(STM32H7)
+#if defined(STM32L0) || defined(STM32L4) || defined(STM32F4) || defined(STM32F2) || defined(STM32F7) || defined(STM32G4) || defined(STM32H7)
#define GPIO_SPEED_LOW GPIO_SPEED_FREQ_LOW
#define GPIO_SPEED_MEDIUM GPIO_SPEED_FREQ_MEDIUM
#define GPIO_SPEED_FAST GPIO_SPEED_FREQ_HIGH
#define GPIO_SPEED_HIGH GPIO_SPEED_FREQ_VERY_HIGH
-#endif /* STM32L0 || STM32L4 || STM32F4 || STM32F2 || STM32F7 || STM32H7*/
+#endif /* STM32L0 || STM32L4 || STM32F4 || STM32F2 || STM32F7 || STM32G4 || STM32H7*/
#if defined(STM32L1)
#define GPIO_SPEED_VERY_LOW GPIO_SPEED_FREQ_LOW
@@ -599,6 +637,185 @@
#define __HAL_HRTIM_GetClockPrescaler __HAL_HRTIM_GETCLOCKPRESCALER
#define __HAL_HRTIM_SetCompare __HAL_HRTIM_SETCOMPARE
#define __HAL_HRTIM_GetCompare __HAL_HRTIM_GETCOMPARE
+
+#if defined(STM32G4)
+#define HAL_HRTIM_ExternalEventCounterConfig HAL_HRTIM_ExtEventCounterConfig
+#define HAL_HRTIM_ExternalEventCounterEnable HAL_HRTIM_ExtEventCounterEnable
+#define HAL_HRTIM_ExternalEventCounterDisable HAL_HRTIM_ExtEventCounterDisable
+#define HAL_HRTIM_ExternalEventCounterReset HAL_HRTIM_ExtEventCounterReset
+#endif /* STM32G4 */
+
+#if defined(STM32H7)
+#define HRTIM_OUTPUTSET_TIMAEV1_TIMBCMP1 HRTIM_OUTPUTSET_TIMEV_1
+#define HRTIM_OUTPUTSET_TIMAEV2_TIMBCMP2 HRTIM_OUTPUTSET_TIMEV_2
+#define HRTIM_OUTPUTSET_TIMAEV3_TIMCCMP2 HRTIM_OUTPUTSET_TIMEV_3
+#define HRTIM_OUTPUTSET_TIMAEV4_TIMCCMP3 HRTIM_OUTPUTSET_TIMEV_4
+#define HRTIM_OUTPUTSET_TIMAEV5_TIMDCMP1 HRTIM_OUTPUTSET_TIMEV_5
+#define HRTIM_OUTPUTSET_TIMAEV6_TIMDCMP2 HRTIM_OUTPUTSET_TIMEV_6
+#define HRTIM_OUTPUTSET_TIMAEV7_TIMECMP3 HRTIM_OUTPUTSET_TIMEV_7
+#define HRTIM_OUTPUTSET_TIMAEV8_TIMECMP4 HRTIM_OUTPUTSET_TIMEV_8
+#define HRTIM_OUTPUTSET_TIMAEV9_TIMFCMP4 HRTIM_OUTPUTSET_TIMEV_9
+#define HRTIM_OUTPUTSET_TIMBEV1_TIMACMP1 HRTIM_OUTPUTSET_TIMEV_1
+#define HRTIM_OUTPUTSET_TIMBEV2_TIMACMP2 HRTIM_OUTPUTSET_TIMEV_2
+#define HRTIM_OUTPUTSET_TIMBEV3_TIMCCMP3 HRTIM_OUTPUTSET_TIMEV_3
+#define HRTIM_OUTPUTSET_TIMBEV4_TIMCCMP4 HRTIM_OUTPUTSET_TIMEV_4
+#define HRTIM_OUTPUTSET_TIMBEV5_TIMDCMP3 HRTIM_OUTPUTSET_TIMEV_5
+#define HRTIM_OUTPUTSET_TIMBEV6_TIMDCMP4 HRTIM_OUTPUTSET_TIMEV_6
+#define HRTIM_OUTPUTSET_TIMBEV7_TIMECMP1 HRTIM_OUTPUTSET_TIMEV_7
+#define HRTIM_OUTPUTSET_TIMBEV8_TIMECMP2 HRTIM_OUTPUTSET_TIMEV_8
+#define HRTIM_OUTPUTSET_TIMBEV9_TIMFCMP3 HRTIM_OUTPUTSET_TIMEV_9
+#define HRTIM_OUTPUTSET_TIMCEV1_TIMACMP1 HRTIM_OUTPUTSET_TIMEV_1
+#define HRTIM_OUTPUTSET_TIMCEV2_TIMACMP2 HRTIM_OUTPUTSET_TIMEV_2
+#define HRTIM_OUTPUTSET_TIMCEV3_TIMBCMP2 HRTIM_OUTPUTSET_TIMEV_3
+#define HRTIM_OUTPUTSET_TIMCEV4_TIMBCMP3 HRTIM_OUTPUTSET_TIMEV_4
+#define HRTIM_OUTPUTSET_TIMCEV5_TIMDCMP2 HRTIM_OUTPUTSET_TIMEV_5
+#define HRTIM_OUTPUTSET_TIMCEV6_TIMDCMP4 HRTIM_OUTPUTSET_TIMEV_6
+#define HRTIM_OUTPUTSET_TIMCEV7_TIMECMP3 HRTIM_OUTPUTSET_TIMEV_7
+#define HRTIM_OUTPUTSET_TIMCEV8_TIMECMP4 HRTIM_OUTPUTSET_TIMEV_8
+#define HRTIM_OUTPUTSET_TIMCEV9_TIMFCMP2 HRTIM_OUTPUTSET_TIMEV_9
+#define HRTIM_OUTPUTSET_TIMDEV1_TIMACMP1 HRTIM_OUTPUTSET_TIMEV_1
+#define HRTIM_OUTPUTSET_TIMDEV2_TIMACMP4 HRTIM_OUTPUTSET_TIMEV_2
+#define HRTIM_OUTPUTSET_TIMDEV3_TIMBCMP2 HRTIM_OUTPUTSET_TIMEV_3
+#define HRTIM_OUTPUTSET_TIMDEV4_TIMBCMP4 HRTIM_OUTPUTSET_TIMEV_4
+#define HRTIM_OUTPUTSET_TIMDEV5_TIMCCMP4 HRTIM_OUTPUTSET_TIMEV_5
+#define HRTIM_OUTPUTSET_TIMDEV6_TIMECMP1 HRTIM_OUTPUTSET_TIMEV_6
+#define HRTIM_OUTPUTSET_TIMDEV7_TIMECMP4 HRTIM_OUTPUTSET_TIMEV_7
+#define HRTIM_OUTPUTSET_TIMDEV8_TIMFCMP1 HRTIM_OUTPUTSET_TIMEV_8
+#define HRTIM_OUTPUTSET_TIMDEV9_TIMFCMP3 HRTIM_OUTPUTSET_TIMEV_9
+#define HRTIM_OUTPUTSET_TIMEEV1_TIMACMP4 HRTIM_OUTPUTSET_TIMEV_1
+#define HRTIM_OUTPUTSET_TIMEEV2_TIMBCMP3 HRTIM_OUTPUTSET_TIMEV_2
+#define HRTIM_OUTPUTSET_TIMEEV3_TIMBCMP4 HRTIM_OUTPUTSET_TIMEV_3
+#define HRTIM_OUTPUTSET_TIMEEV4_TIMCCMP1 HRTIM_OUTPUTSET_TIMEV_4
+#define HRTIM_OUTPUTSET_TIMEEV5_TIMDCMP2 HRTIM_OUTPUTSET_TIMEV_5
+#define HRTIM_OUTPUTSET_TIMEEV6_TIMDCMP1 HRTIM_OUTPUTSET_TIMEV_6
+#define HRTIM_OUTPUTSET_TIMEEV7_TIMDCMP2 HRTIM_OUTPUTSET_TIMEV_7
+#define HRTIM_OUTPUTSET_TIMEEV8_TIMFCMP3 HRTIM_OUTPUTSET_TIMEV_8
+#define HRTIM_OUTPUTSET_TIMEEV9_TIMFCMP4 HRTIM_OUTPUTSET_TIMEV_9
+#define HRTIM_OUTPUTSET_TIMFEV1_TIMACMP3 HRTIM_OUTPUTSET_TIMEV_1
+#define HRTIM_OUTPUTSET_TIMFEV2_TIMBCMP1 HRTIM_OUTPUTSET_TIMEV_2
+#define HRTIM_OUTPUTSET_TIMFEV3_TIMBCMP4 HRTIM_OUTPUTSET_TIMEV_3
+#define HRTIM_OUTPUTSET_TIMFEV4_TIMCCMP1 HRTIM_OUTPUTSET_TIMEV_4
+#define HRTIM_OUTPUTSET_TIMFEV5_TIMCCMP4 HRTIM_OUTPUTSET_TIMEV_5
+#define HRTIM_OUTPUTSET_TIMFEV6_TIMDCMP3 HRTIM_OUTPUTSET_TIMEV_6
+#define HRTIM_OUTPUTSET_TIMFEV7_TIMDCMP4 HRTIM_OUTPUTSET_TIMEV_7
+#define HRTIM_OUTPUTSET_TIMFEV8_TIMECMP2 HRTIM_OUTPUTSET_TIMEV_8
+#define HRTIM_OUTPUTSET_TIMFEV9_TIMECMP3 HRTIM_OUTPUTSET_TIMEV_9
+
+#define HRTIM_OUTPUTRESET_TIMAEV1_TIMBCMP1 HRTIM_OUTPUTSET_TIMEV_1
+#define HRTIM_OUTPUTRESET_TIMAEV2_TIMBCMP2 HRTIM_OUTPUTSET_TIMEV_2
+#define HRTIM_OUTPUTRESET_TIMAEV3_TIMCCMP2 HRTIM_OUTPUTSET_TIMEV_3
+#define HRTIM_OUTPUTRESET_TIMAEV4_TIMCCMP3 HRTIM_OUTPUTSET_TIMEV_4
+#define HRTIM_OUTPUTRESET_TIMAEV5_TIMDCMP1 HRTIM_OUTPUTSET_TIMEV_5
+#define HRTIM_OUTPUTRESET_TIMAEV6_TIMDCMP2 HRTIM_OUTPUTSET_TIMEV_6
+#define HRTIM_OUTPUTRESET_TIMAEV7_TIMECMP3 HRTIM_OUTPUTSET_TIMEV_7
+#define HRTIM_OUTPUTRESET_TIMAEV8_TIMECMP4 HRTIM_OUTPUTSET_TIMEV_8
+#define HRTIM_OUTPUTRESET_TIMAEV9_TIMFCMP4 HRTIM_OUTPUTSET_TIMEV_9
+#define HRTIM_OUTPUTRESET_TIMBEV1_TIMACMP1 HRTIM_OUTPUTSET_TIMEV_1
+#define HRTIM_OUTPUTRESET_TIMBEV2_TIMACMP2 HRTIM_OUTPUTSET_TIMEV_2
+#define HRTIM_OUTPUTRESET_TIMBEV3_TIMCCMP3 HRTIM_OUTPUTSET_TIMEV_3
+#define HRTIM_OUTPUTRESET_TIMBEV4_TIMCCMP4 HRTIM_OUTPUTSET_TIMEV_4
+#define HRTIM_OUTPUTRESET_TIMBEV5_TIMDCMP3 HRTIM_OUTPUTSET_TIMEV_5
+#define HRTIM_OUTPUTRESET_TIMBEV6_TIMDCMP4 HRTIM_OUTPUTSET_TIMEV_6
+#define HRTIM_OUTPUTRESET_TIMBEV7_TIMECMP1 HRTIM_OUTPUTSET_TIMEV_7
+#define HRTIM_OUTPUTRESET_TIMBEV8_TIMECMP2 HRTIM_OUTPUTSET_TIMEV_8
+#define HRTIM_OUTPUTRESET_TIMBEV9_TIMFCMP3 HRTIM_OUTPUTSET_TIMEV_9
+#define HRTIM_OUTPUTRESET_TIMCEV1_TIMACMP1 HRTIM_OUTPUTSET_TIMEV_1
+#define HRTIM_OUTPUTRESET_TIMCEV2_TIMACMP2 HRTIM_OUTPUTSET_TIMEV_2
+#define HRTIM_OUTPUTRESET_TIMCEV3_TIMBCMP2 HRTIM_OUTPUTSET_TIMEV_3
+#define HRTIM_OUTPUTRESET_TIMCEV4_TIMBCMP3 HRTIM_OUTPUTSET_TIMEV_4
+#define HRTIM_OUTPUTRESET_TIMCEV5_TIMDCMP2 HRTIM_OUTPUTSET_TIMEV_5
+#define HRTIM_OUTPUTRESET_TIMCEV6_TIMDCMP4 HRTIM_OUTPUTSET_TIMEV_6
+#define HRTIM_OUTPUTRESET_TIMCEV7_TIMECMP3 HRTIM_OUTPUTSET_TIMEV_7
+#define HRTIM_OUTPUTRESET_TIMCEV8_TIMECMP4 HRTIM_OUTPUTSET_TIMEV_8
+#define HRTIM_OUTPUTRESET_TIMCEV9_TIMFCMP2 HRTIM_OUTPUTSET_TIMEV_9
+#define HRTIM_OUTPUTRESET_TIMDEV1_TIMACMP1 HRTIM_OUTPUTSET_TIMEV_1
+#define HRTIM_OUTPUTRESET_TIMDEV2_TIMACMP4 HRTIM_OUTPUTSET_TIMEV_2
+#define HRTIM_OUTPUTRESET_TIMDEV3_TIMBCMP2 HRTIM_OUTPUTSET_TIMEV_3
+#define HRTIM_OUTPUTRESET_TIMDEV4_TIMBCMP4 HRTIM_OUTPUTSET_TIMEV_4
+#define HRTIM_OUTPUTRESET_TIMDEV5_TIMCCMP4 HRTIM_OUTPUTSET_TIMEV_5
+#define HRTIM_OUTPUTRESET_TIMDEV6_TIMECMP1 HRTIM_OUTPUTSET_TIMEV_6
+#define HRTIM_OUTPUTRESET_TIMDEV7_TIMECMP4 HRTIM_OUTPUTSET_TIMEV_7
+#define HRTIM_OUTPUTRESET_TIMDEV8_TIMFCMP1 HRTIM_OUTPUTSET_TIMEV_8
+#define HRTIM_OUTPUTRESET_TIMDEV9_TIMFCMP3 HRTIM_OUTPUTSET_TIMEV_9
+#define HRTIM_OUTPUTRESET_TIMEEV1_TIMACMP4 HRTIM_OUTPUTSET_TIMEV_1
+#define HRTIM_OUTPUTRESET_TIMEEV2_TIMBCMP3 HRTIM_OUTPUTSET_TIMEV_2
+#define HRTIM_OUTPUTRESET_TIMEEV3_TIMBCMP4 HRTIM_OUTPUTSET_TIMEV_3
+#define HRTIM_OUTPUTRESET_TIMEEV4_TIMCCMP1 HRTIM_OUTPUTSET_TIMEV_4
+#define HRTIM_OUTPUTRESET_TIMEEV5_TIMDCMP2 HRTIM_OUTPUTSET_TIMEV_5
+#define HRTIM_OUTPUTRESET_TIMEEV6_TIMDCMP1 HRTIM_OUTPUTSET_TIMEV_6
+#define HRTIM_OUTPUTRESET_TIMEEV7_TIMDCMP2 HRTIM_OUTPUTSET_TIMEV_7
+#define HRTIM_OUTPUTRESET_TIMEEV8_TIMFCMP3 HRTIM_OUTPUTSET_TIMEV_8
+#define HRTIM_OUTPUTRESET_TIMEEV9_TIMFCMP4 HRTIM_OUTPUTSET_TIMEV_9
+#define HRTIM_OUTPUTRESET_TIMFEV1_TIMACMP3 HRTIM_OUTPUTSET_TIMEV_1
+#define HRTIM_OUTPUTRESET_TIMFEV2_TIMBCMP1 HRTIM_OUTPUTSET_TIMEV_2
+#define HRTIM_OUTPUTRESET_TIMFEV3_TIMBCMP4 HRTIM_OUTPUTSET_TIMEV_3
+#define HRTIM_OUTPUTRESET_TIMFEV4_TIMCCMP1 HRTIM_OUTPUTSET_TIMEV_4
+#define HRTIM_OUTPUTRESET_TIMFEV5_TIMCCMP4 HRTIM_OUTPUTSET_TIMEV_5
+#define HRTIM_OUTPUTRESET_TIMFEV6_TIMDCMP3 HRTIM_OUTPUTSET_TIMEV_6
+#define HRTIM_OUTPUTRESET_TIMFEV7_TIMDCMP4 HRTIM_OUTPUTSET_TIMEV_7
+#define HRTIM_OUTPUTRESET_TIMFEV8_TIMECMP2 HRTIM_OUTPUTSET_TIMEV_8
+#define HRTIM_OUTPUTRESET_TIMFEV9_TIMECMP3 HRTIM_OUTPUTSET_TIMEV_9
+#endif /* STM32H7 */
+
+#if defined(STM32F3)
+/** @brief Constants defining available sources associated to external events.
+ */
+#define HRTIM_EVENTSRC_1 (0x00000000U)
+#define HRTIM_EVENTSRC_2 (HRTIM_EECR1_EE1SRC_0)
+#define HRTIM_EVENTSRC_3 (HRTIM_EECR1_EE1SRC_1)
+#define HRTIM_EVENTSRC_4 (HRTIM_EECR1_EE1SRC_1 | HRTIM_EECR1_EE1SRC_0)
+
+/** @brief Constants defining the events that can be selected to configure the
+ * set/reset crossbar of a timer output
+ */
+#define HRTIM_OUTPUTSET_TIMEV_1 (HRTIM_SET1R_TIMEVNT1)
+#define HRTIM_OUTPUTSET_TIMEV_2 (HRTIM_SET1R_TIMEVNT2)
+#define HRTIM_OUTPUTSET_TIMEV_3 (HRTIM_SET1R_TIMEVNT3)
+#define HRTIM_OUTPUTSET_TIMEV_4 (HRTIM_SET1R_TIMEVNT4)
+#define HRTIM_OUTPUTSET_TIMEV_5 (HRTIM_SET1R_TIMEVNT5)
+#define HRTIM_OUTPUTSET_TIMEV_6 (HRTIM_SET1R_TIMEVNT6)
+#define HRTIM_OUTPUTSET_TIMEV_7 (HRTIM_SET1R_TIMEVNT7)
+#define HRTIM_OUTPUTSET_TIMEV_8 (HRTIM_SET1R_TIMEVNT8)
+#define HRTIM_OUTPUTSET_TIMEV_9 (HRTIM_SET1R_TIMEVNT9)
+
+#define HRTIM_OUTPUTRESET_TIMEV_1 (HRTIM_RST1R_TIMEVNT1)
+#define HRTIM_OUTPUTRESET_TIMEV_2 (HRTIM_RST1R_TIMEVNT2)
+#define HRTIM_OUTPUTRESET_TIMEV_3 (HRTIM_RST1R_TIMEVNT3)
+#define HRTIM_OUTPUTRESET_TIMEV_4 (HRTIM_RST1R_TIMEVNT4)
+#define HRTIM_OUTPUTRESET_TIMEV_5 (HRTIM_RST1R_TIMEVNT5)
+#define HRTIM_OUTPUTRESET_TIMEV_6 (HRTIM_RST1R_TIMEVNT6)
+#define HRTIM_OUTPUTRESET_TIMEV_7 (HRTIM_RST1R_TIMEVNT7)
+#define HRTIM_OUTPUTRESET_TIMEV_8 (HRTIM_RST1R_TIMEVNT8)
+#define HRTIM_OUTPUTRESET_TIMEV_9 (HRTIM_RST1R_TIMEVNT9)
+
+/** @brief Constants defining the event filtering applied to external events
+ * by a timer
+ */
+#define HRTIM_TIMEVENTFILTER_NONE (0x00000000U)
+#define HRTIM_TIMEVENTFILTER_BLANKINGCMP1 (HRTIM_EEFR1_EE1FLTR_0)
+#define HRTIM_TIMEVENTFILTER_BLANKINGCMP2 (HRTIM_EEFR1_EE1FLTR_1)
+#define HRTIM_TIMEVENTFILTER_BLANKINGCMP3 (HRTIM_EEFR1_EE1FLTR_1 | HRTIM_EEFR1_EE1FLTR_0)
+#define HRTIM_TIMEVENTFILTER_BLANKINGCMP4 (HRTIM_EEFR1_EE1FLTR_2)
+#define HRTIM_TIMEVENTFILTER_BLANKINGFLTR1 (HRTIM_EEFR1_EE1FLTR_2 | HRTIM_EEFR1_EE1FLTR_0)
+#define HRTIM_TIMEVENTFILTER_BLANKINGFLTR2 (HRTIM_EEFR1_EE1FLTR_2 | HRTIM_EEFR1_EE1FLTR_1)
+#define HRTIM_TIMEVENTFILTER_BLANKINGFLTR3 (HRTIM_EEFR1_EE1FLTR_2 | HRTIM_EEFR1_EE1FLTR_1 | HRTIM_EEFR1_EE1FLTR_0)
+#define HRTIM_TIMEVENTFILTER_BLANKINGFLTR4 (HRTIM_EEFR1_EE1FLTR_3)
+#define HRTIM_TIMEVENTFILTER_BLANKINGFLTR5 (HRTIM_EEFR1_EE1FLTR_3 | HRTIM_EEFR1_EE1FLTR_0)
+#define HRTIM_TIMEVENTFILTER_BLANKINGFLTR6 (HRTIM_EEFR1_EE1FLTR_3 | HRTIM_EEFR1_EE1FLTR_1)
+#define HRTIM_TIMEVENTFILTER_BLANKINGFLTR7 (HRTIM_EEFR1_EE1FLTR_3 | HRTIM_EEFR1_EE1FLTR_1 | HRTIM_EEFR1_EE1FLTR_0)
+#define HRTIM_TIMEVENTFILTER_BLANKINGFLTR8 (HRTIM_EEFR1_EE1FLTR_3 | HRTIM_EEFR1_EE1FLTR_2)
+#define HRTIM_TIMEVENTFILTER_WINDOWINGCMP2 (HRTIM_EEFR1_EE1FLTR_3 | HRTIM_EEFR1_EE1FLTR_2 | HRTIM_EEFR1_EE1FLTR_0)
+#define HRTIM_TIMEVENTFILTER_WINDOWINGCMP3 (HRTIM_EEFR1_EE1FLTR_3 | HRTIM_EEFR1_EE1FLTR_2 | HRTIM_EEFR1_EE1FLTR_1)
+#define HRTIM_TIMEVENTFILTER_WINDOWINGTIM (HRTIM_EEFR1_EE1FLTR_3 | HRTIM_EEFR1_EE1FLTR_2 | HRTIM_EEFR1_EE1FLTR_1 | HRTIM_EEFR1_EE1FLTR_0)
+
+/** @brief Constants defining the DLL calibration periods (in micro seconds)
+ */
+#define HRTIM_CALIBRATIONRATE_7300 0x00000000U
+#define HRTIM_CALIBRATIONRATE_910 (HRTIM_DLLCR_CALRTE_0)
+#define HRTIM_CALIBRATIONRATE_114 (HRTIM_DLLCR_CALRTE_1)
+#define HRTIM_CALIBRATIONRATE_14 (HRTIM_DLLCR_CALRTE_1 | HRTIM_DLLCR_CALRTE_0)
+
+#endif /* STM32F3 */
/**
* @}
*/
@@ -738,6 +955,12 @@
#define OPAMP_PGACONNECT_VM0 OPAMP_PGA_CONNECT_INVERTINGINPUT_IO0
#define OPAMP_PGACONNECT_VM1 OPAMP_PGA_CONNECT_INVERTINGINPUT_IO1
+#if defined(STM32L1) || defined(STM32L4) || defined(STM32L5) || defined(STM32H7)
+#define HAL_OPAMP_MSP_INIT_CB_ID HAL_OPAMP_MSPINIT_CB_ID
+#define HAL_OPAMP_MSP_DEINIT_CB_ID HAL_OPAMP_MSPDEINIT_CB_ID
+#endif
+
+
/**
* @}
*/
@@ -753,7 +976,6 @@
#define I2S_FLAG_TXE I2S_FLAG_TXP
#define I2S_FLAG_RXNE I2S_FLAG_RXP
- #define I2S_FLAG_FRE I2S_FLAG_TIFRE
#endif
#if defined(STM32F7)
@@ -824,6 +1046,16 @@
#define RTC_TAMPERPIN_PA0 RTC_TAMPERPIN_POS1
#define RTC_TAMPERPIN_PI8 RTC_TAMPERPIN_POS1
+#if defined(STM32H7)
+#define RTC_TAMPCR_TAMPXE RTC_TAMPER_X
+#define RTC_TAMPCR_TAMPXIE RTC_TAMPER_X_INTERRUPT
+
+#define RTC_TAMPER1_INTERRUPT RTC_IT_TAMP1
+#define RTC_TAMPER2_INTERRUPT RTC_IT_TAMP2
+#define RTC_TAMPER3_INTERRUPT RTC_IT_TAMP3
+#define RTC_ALL_TAMPER_INTERRUPT RTC_IT_TAMPALL
+#endif /* STM32H7 */
+
/**
* @}
*/
@@ -971,6 +1203,24 @@
#define IS_TIM_HALL_INTERFACE_INSTANCE IS_TIM_HALL_SENSOR_INTERFACE_INSTANCE
#endif
+#if defined(STM32H7)
+#define TIM_TIM1_ETR_COMP1_OUT TIM_TIM1_ETR_COMP1
+#define TIM_TIM1_ETR_COMP2_OUT TIM_TIM1_ETR_COMP2
+#define TIM_TIM8_ETR_COMP1_OUT TIM_TIM8_ETR_COMP1
+#define TIM_TIM8_ETR_COMP2_OUT TIM_TIM8_ETR_COMP2
+#define TIM_TIM2_ETR_COMP1_OUT TIM_TIM2_ETR_COMP1
+#define TIM_TIM2_ETR_COMP2_OUT TIM_TIM2_ETR_COMP2
+#define TIM_TIM3_ETR_COMP1_OUT TIM_TIM3_ETR_COMP1
+#define TIM_TIM1_TI1_COMP1_OUT TIM_TIM1_TI1_COMP1
+#define TIM_TIM8_TI1_COMP2_OUT TIM_TIM8_TI1_COMP2
+#define TIM_TIM2_TI4_COMP1_OUT TIM_TIM2_TI4_COMP1
+#define TIM_TIM2_TI4_COMP2_OUT TIM_TIM2_TI4_COMP2
+#define TIM_TIM2_TI4_COMP1COMP2_OUT TIM_TIM2_TI4_COMP1_COMP2
+#define TIM_TIM3_TI1_COMP1_OUT TIM_TIM3_TI1_COMP1
+#define TIM_TIM3_TI1_COMP2_OUT TIM_TIM3_TI1_COMP2
+#define TIM_TIM3_TI1_COMP1COMP2_OUT TIM_TIM3_TI1_COMP1_COMP2
+#endif
+
/**
* @}
*/
@@ -1199,6 +1449,30 @@
#define HASH_HMACKeyType_ShortKey HASH_HMAC_KEYTYPE_SHORTKEY
#define HASH_HMACKeyType_LongKey HASH_HMAC_KEYTYPE_LONGKEY
+
+#if defined(STM32L4) || defined(STM32F4) || defined(STM32F7) || defined(STM32H7)
+
+#define HAL_HASH_MD5_Accumulate HAL_HASH_MD5_Accmlt
+#define HAL_HASH_MD5_Accumulate_End HAL_HASH_MD5_Accmlt_End
+#define HAL_HASH_MD5_Accumulate_IT HAL_HASH_MD5_Accmlt_IT
+#define HAL_HASH_MD5_Accumulate_End_IT HAL_HASH_MD5_Accmlt_End_IT
+
+#define HAL_HASH_SHA1_Accumulate HAL_HASH_SHA1_Accmlt
+#define HAL_HASH_SHA1_Accumulate_End HAL_HASH_SHA1_Accmlt_End
+#define HAL_HASH_SHA1_Accumulate_IT HAL_HASH_SHA1_Accmlt_IT
+#define HAL_HASH_SHA1_Accumulate_End_IT HAL_HASH_SHA1_Accmlt_End_IT
+
+#define HAL_HASHEx_SHA224_Accumulate HAL_HASHEx_SHA224_Accmlt
+#define HAL_HASHEx_SHA224_Accumulate_End HAL_HASHEx_SHA224_Accmlt_End
+#define HAL_HASHEx_SHA224_Accumulate_IT HAL_HASHEx_SHA224_Accmlt_IT
+#define HAL_HASHEx_SHA224_Accumulate_End_IT HAL_HASHEx_SHA224_Accmlt_End_IT
+
+#define HAL_HASHEx_SHA256_Accumulate HAL_HASHEx_SHA256_Accmlt
+#define HAL_HASHEx_SHA256_Accumulate_End HAL_HASHEx_SHA256_Accmlt_End
+#define HAL_HASHEx_SHA256_Accumulate_IT HAL_HASHEx_SHA256_Accmlt_IT
+#define HAL_HASHEx_SHA256_Accumulate_End_IT HAL_HASHEx_SHA256_Accmlt_End_IT
+
+#endif /* STM32L4 || STM32F4 || STM32F7 || STM32H7 */
/**
* @}
*/
@@ -1221,6 +1495,13 @@
#endif
#define HAL_ADC_EnableBuffer_Cmd(cmd) (((cmd)==ENABLE) ? HAL_ADCEx_EnableVREFINT() : HAL_ADCEx_DisableVREFINT())
#define HAL_ADC_EnableBufferSensor_Cmd(cmd) (((cmd)==ENABLE) ? HAL_ADCEx_EnableVREFINTTempSensor() : HAL_ADCEx_DisableVREFINTTempSensor())
+#if defined(STM32H7A3xx) || defined(STM32H7B3xx) || defined(STM32H7B0xx) || defined(STM32H7A3xxQ) || defined(STM32H7B3xxQ) || defined(STM32H7B0xxQ)
+#define HAL_EnableSRDomainDBGStopMode HAL_EnableDomain3DBGStopMode
+#define HAL_DisableSRDomainDBGStopMode HAL_DisableDomain3DBGStopMode
+#define HAL_EnableSRDomainDBGStandbyMode HAL_EnableDomain3DBGStandbyMode
+#define HAL_DisableSRDomainDBGStandbyMode HAL_DisableDomain3DBGStandbyMode
+#endif /* STM32H7A3xx || STM32H7B3xx || STM32H7B0xx || STM32H7A3xxQ || STM32H7B3xxQ || STM32H7B0xxQ */
+
/**
* @}
*/
@@ -1250,16 +1531,18 @@
#define HAL_I2CFastModePlusConfig(SYSCFG_I2CFastModePlus, cmd) (((cmd)==ENABLE)? HAL_I2CEx_EnableFastModePlus(SYSCFG_I2CFastModePlus): HAL_I2CEx_DisableFastModePlus(SYSCFG_I2CFastModePlus))
-#if defined(STM32H7) || defined(STM32WB) || defined(STM32G0) || defined(STM32F4) || defined(STM32F7)
+#if defined(STM32H7) || defined(STM32WB) || defined(STM32G0) || defined(STM32F0) || defined(STM32F1) || defined(STM32F2) || defined(STM32F3) || defined(STM32F4) || defined(STM32F7) || defined(STM32L0) || defined(STM32L4) || defined(STM32L5) || defined(STM32G4)
#define HAL_I2C_Master_Sequential_Transmit_IT HAL_I2C_Master_Seq_Transmit_IT
#define HAL_I2C_Master_Sequential_Receive_IT HAL_I2C_Master_Seq_Receive_IT
#define HAL_I2C_Slave_Sequential_Transmit_IT HAL_I2C_Slave_Seq_Transmit_IT
#define HAL_I2C_Slave_Sequential_Receive_IT HAL_I2C_Slave_Seq_Receive_IT
+#endif /* STM32H7 || STM32WB || STM32G0 || STM32F0 || STM32F1 || STM32F2 || STM32F3 || STM32F4 || STM32F7 || STM32L0 || STM32L4 || STM32L5 || STM32G4 */
+#if defined(STM32H7) || defined(STM32WB) || defined(STM32G0) || defined(STM32F4) || defined(STM32F7) || defined(STM32L0) || defined(STM32L4) || defined(STM32L5) || defined(STM32G4)
#define HAL_I2C_Master_Sequential_Transmit_DMA HAL_I2C_Master_Seq_Transmit_DMA
#define HAL_I2C_Master_Sequential_Receive_DMA HAL_I2C_Master_Seq_Receive_DMA
#define HAL_I2C_Slave_Sequential_Transmit_DMA HAL_I2C_Slave_Seq_Transmit_DMA
#define HAL_I2C_Slave_Sequential_Receive_DMA HAL_I2C_Slave_Seq_Receive_DMA
-#endif /* STM32H7 || STM32WB || STM32G0 || STM32F4 || STM32F7 */
+#endif /* STM32H7 || STM32WB || STM32G0 || STM32F4 || STM32F7 || STM32L0 || STM32L4 || STM32L5 || STM32G4 */
#if defined(STM32F4)
#define HAL_FMPI2C_Master_Sequential_Transmit_IT HAL_FMPI2C_Master_Seq_Transmit_IT
@@ -1278,6 +1561,13 @@
/** @defgroup HAL_PWR_Aliased HAL PWR Aliased maintained for legacy purpose
* @{
*/
+
+#if defined(STM32G0)
+#define HAL_PWR_ConfigPVD HAL_PWREx_ConfigPVD
+#define HAL_PWR_EnablePVD HAL_PWREx_EnablePVD
+#define HAL_PWR_DisablePVD HAL_PWREx_DisablePVD
+#define HAL_PWR_PVD_IRQHandler HAL_PWREx_PVD_IRQHandler
+#endif
#define HAL_PWR_PVDConfig HAL_PWR_ConfigPVD
#define HAL_PWR_DisableBkUpReg HAL_PWREx_DisableBkUpReg
#define HAL_PWR_DisableFlashPowerDown HAL_PWREx_DisableFlashPowerDown
@@ -1350,14 +1640,14 @@
#define HAL_TIM_DMAError TIM_DMAError
#define HAL_TIM_DMACaptureCplt TIM_DMACaptureCplt
#define HAL_TIMEx_DMACommutationCplt TIMEx_DMACommutationCplt
-#if defined(STM32H7) || defined(STM32G0) || defined(STM32F7) || defined(STM32F4) || defined(STM32L0)
+#if defined(STM32H7) || defined(STM32G0) || defined(STM32F0) || defined(STM32F1) || defined(STM32F2) || defined(STM32F3) || defined(STM32F4) || defined(STM32F7) || defined(STM32L0) || defined(STM32L4)
#define HAL_TIM_SlaveConfigSynchronization HAL_TIM_SlaveConfigSynchro
#define HAL_TIM_SlaveConfigSynchronization_IT HAL_TIM_SlaveConfigSynchro_IT
#define HAL_TIMEx_CommutationCallback HAL_TIMEx_CommutCallback
#define HAL_TIMEx_ConfigCommutationEvent HAL_TIMEx_ConfigCommutEvent
#define HAL_TIMEx_ConfigCommutationEvent_IT HAL_TIMEx_ConfigCommutEvent_IT
#define HAL_TIMEx_ConfigCommutationEvent_DMA HAL_TIMEx_ConfigCommutEvent_DMA
-#endif /* STM32H7 || STM32G0 || STM32F7 || STM32F4 || STM32L0 */
+#endif /* STM32H7 || STM32G0 || STM32F0 || STM32F1 || STM32F2 || STM32F3 || STM32F4 || STM32F7 || STM32L0 */
/**
* @}
*/
@@ -2476,12 +2766,28 @@
#define __USB_OTG_FS_CLK_DISABLE __HAL_RCC_USB_OTG_FS_CLK_DISABLE
#define __USB_OTG_FS_CLK_ENABLE __HAL_RCC_USB_OTG_FS_CLK_ENABLE
#define __USB_RELEASE_RESET __HAL_RCC_USB_RELEASE_RESET
+
+#if defined(STM32H7)
+#define __HAL_RCC_WWDG_CLK_DISABLE __HAL_RCC_WWDG1_CLK_DISABLE
+#define __HAL_RCC_WWDG_CLK_ENABLE __HAL_RCC_WWDG1_CLK_ENABLE
+#define __HAL_RCC_WWDG_CLK_SLEEP_DISABLE __HAL_RCC_WWDG1_CLK_SLEEP_DISABLE
+#define __HAL_RCC_WWDG_CLK_SLEEP_ENABLE __HAL_RCC_WWDG1_CLK_SLEEP_ENABLE
+
+#define __HAL_RCC_WWDG_FORCE_RESET ((void)0U) /* Not available on the STM32H7*/
+#define __HAL_RCC_WWDG_RELEASE_RESET ((void)0U) /* Not available on the STM32H7*/
+
+
+#define __HAL_RCC_WWDG_IS_CLK_ENABLED __HAL_RCC_WWDG1_IS_CLK_ENABLED
+#define __HAL_RCC_WWDG_IS_CLK_DISABLED __HAL_RCC_WWDG1_IS_CLK_DISABLED
+#endif
+
#define __WWDG_CLK_DISABLE __HAL_RCC_WWDG_CLK_DISABLE
#define __WWDG_CLK_ENABLE __HAL_RCC_WWDG_CLK_ENABLE
#define __WWDG_CLK_SLEEP_DISABLE __HAL_RCC_WWDG_CLK_SLEEP_DISABLE
#define __WWDG_CLK_SLEEP_ENABLE __HAL_RCC_WWDG_CLK_SLEEP_ENABLE
#define __WWDG_FORCE_RESET __HAL_RCC_WWDG_FORCE_RESET
#define __WWDG_RELEASE_RESET __HAL_RCC_WWDG_RELEASE_RESET
+
#define __TIM21_CLK_ENABLE __HAL_RCC_TIM21_CLK_ENABLE
#define __TIM21_CLK_DISABLE __HAL_RCC_TIM21_CLK_DISABLE
#define __TIM21_FORCE_RESET __HAL_RCC_TIM21_FORCE_RESET
@@ -2814,6 +3120,15 @@
#define __WWDG_IS_CLK_ENABLED __HAL_RCC_WWDG_IS_CLK_ENABLED
#define __WWDG_IS_CLK_DISABLED __HAL_RCC_WWDG_IS_CLK_DISABLED
+#if defined(STM32L1)
+#define __HAL_RCC_CRYP_CLK_DISABLE __HAL_RCC_AES_CLK_DISABLE
+#define __HAL_RCC_CRYP_CLK_ENABLE __HAL_RCC_AES_CLK_ENABLE
+#define __HAL_RCC_CRYP_CLK_SLEEP_DISABLE __HAL_RCC_AES_CLK_SLEEP_DISABLE
+#define __HAL_RCC_CRYP_CLK_SLEEP_ENABLE __HAL_RCC_AES_CLK_SLEEP_ENABLE
+#define __HAL_RCC_CRYP_FORCE_RESET __HAL_RCC_AES_FORCE_RESET
+#define __HAL_RCC_CRYP_RELEASE_RESET __HAL_RCC_AES_RELEASE_RESET
+#endif /* STM32L1 */
+
#if defined(STM32F4)
#define __HAL_RCC_SDMMC1_FORCE_RESET __HAL_RCC_SDIO_FORCE_RESET
#define __HAL_RCC_SDMMC1_RELEASE_RESET __HAL_RCC_SDIO_RELEASE_RESET
@@ -2930,7 +3245,7 @@
#if defined(STM32L4)
#define RCC_RTCCLKSOURCE_NO_CLK RCC_RTCCLKSOURCE_NONE
-#elif defined(STM32WB) || defined(STM32G0)
+#elif defined(STM32WB) || defined(STM32G0) || defined(STM32G4) || defined(STM32L5)
#else
#define RCC_RTCCLKSOURCE_NONE RCC_RTCCLKSOURCE_NO_CLK
#endif
@@ -3058,7 +3373,7 @@
/** @defgroup HAL_RTC_Aliased_Macros HAL RTC Aliased Macros maintained for legacy purpose
* @{
*/
-#if defined (STM32G0) || defined (STM32L412xx) || defined (STM32L422xx) || defined (STM32L4P5xx) || defined (STM32L4Q5xx)
+#if defined (STM32G0) || defined (STM32L5) || defined (STM32L412xx) || defined (STM32L422xx) || defined (STM32L4P5xx) || defined (STM32L4Q5xx) || defined (STM32G4)
#else
#define __HAL_RTC_CLEAR_FLAG __HAL_RTC_EXTI_CLEAR_FLAG
#endif
@@ -3174,14 +3489,14 @@
#define SDIO_IRQHandler SDMMC1_IRQHandler
#endif
-#if defined(STM32F7) || defined(STM32F4) || defined(STM32F2)
+#if defined(STM32F7) || defined(STM32F4) || defined(STM32F2) || defined(STM32L4) || defined(STM32H7)
#define HAL_SD_CardCIDTypedef HAL_SD_CardCIDTypeDef
#define HAL_SD_CardCSDTypedef HAL_SD_CardCSDTypeDef
#define HAL_SD_CardStatusTypedef HAL_SD_CardStatusTypeDef
#define HAL_SD_CardStateTypedef HAL_SD_CardStateTypeDef
#endif
-#if defined(STM32H7)
+#if defined(STM32H7) || defined(STM32L5)
#define HAL_MMCEx_Read_DMADoubleBuffer0CpltCallback HAL_MMCEx_Read_DMADoubleBuf0CpltCallback
#define HAL_MMCEx_Read_DMADoubleBuffer1CpltCallback HAL_MMCEx_Read_DMADoubleBuf1CpltCallback
#define HAL_MMCEx_Write_DMADoubleBuffer0CpltCallback HAL_MMCEx_Write_DMADoubleBuf0CpltCallback
@@ -3421,18 +3736,28 @@
/** @defgroup HAL_HRTIM_Aliased_Functions HAL HRTIM Aliased Functions maintained for legacy purpose
* @{
*/
-#if defined (STM32H7) || defined (STM32F3)
-#define HAL_HRTIM_WaveformCounterStart_IT HAL_HRTIM_WaveformCountStart_IT
-#define HAL_HRTIM_WaveformCounterStart_DMA HAL_HRTIM_WaveformCountStart_DMA
-#define HAL_HRTIM_WaveformCounterStart HAL_HRTIM_WaveformCountStart
-#define HAL_HRTIM_WaveformCounterStop_IT HAL_HRTIM_WaveformCountStop_IT
-#define HAL_HRTIM_WaveformCounterStop_DMA HAL_HRTIM_WaveformCountStop_DMA
-#define HAL_HRTIM_WaveformCounterStop HAL_HRTIM_WaveformCountStop
+#if defined (STM32H7) || defined (STM32G4) || defined (STM32F3)
+#define HAL_HRTIM_WaveformCounterStart_IT HAL_HRTIM_WaveformCountStart_IT
+#define HAL_HRTIM_WaveformCounterStart_DMA HAL_HRTIM_WaveformCountStart_DMA
+#define HAL_HRTIM_WaveformCounterStart HAL_HRTIM_WaveformCountStart
+#define HAL_HRTIM_WaveformCounterStop_IT HAL_HRTIM_WaveformCountStop_IT
+#define HAL_HRTIM_WaveformCounterStop_DMA HAL_HRTIM_WaveformCountStop_DMA
+#define HAL_HRTIM_WaveformCounterStop HAL_HRTIM_WaveformCountStop
#endif
/**
* @}
*/
+/** @defgroup HAL_QSPI_Aliased_Macros HAL QSPI Aliased Macros maintained for legacy purpose
+ * @{
+ */
+#if defined (STM32L4) || defined (STM32F4) || defined (STM32F7)
+#define HAL_QPSI_TIMEOUT_DEFAULT_VALUE HAL_QSPI_TIMEOUT_DEFAULT_VALUE
+#endif /* STM32L4 || STM32F4 || STM32F7 */
+/**
+ * @}
+ */
+
/** @defgroup HAL_PPP_Aliased_Macros HAL PPP Aliased Macros maintained for legacy purpose
* @{
*/
diff --git a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_GCC/Prog/lib/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_exti.h b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_GCC/Prog/lib/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_exti.h
index bf82a38e..c9f137c1 100644
--- a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_GCC/Prog/lib/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_exti.h
+++ b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_GCC/Prog/lib/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_exti.h
@@ -18,8 +18,8 @@
*/
/* Define to prevent recursive inclusion -------------------------------------*/
-#ifndef __STM32F7xx_HAL_EXTI_H
-#define __STM32F7xx_HAL_EXTI_H
+#ifndef STM32F7xx_HAL_EXTI_H
+#define STM32F7xx_HAL_EXTI_H
#ifdef __cplusplus
extern "C" {
@@ -38,14 +38,13 @@ extern "C" {
*/
/* Exported types ------------------------------------------------------------*/
+
/** @defgroup EXTI_Exported_Types EXTI Exported Types
* @{
*/
typedef enum
{
- HAL_EXTI_COMMON_CB_ID = 0x00U,
- HAL_EXTI_RISING_CB_ID = 0x01U,
- HAL_EXTI_FALLING_CB_ID = 0x02U,
+ HAL_EXTI_COMMON_CB_ID = 0x00U
} EXTI_CallbackIDTypeDef;
/**
@@ -68,6 +67,9 @@ typedef struct
This parameter can be a combination of @ref EXTI_Mode */
uint32_t Trigger; /*!< The Exti Trigger to be configured. This parameter
can be a value of @ref EXTI_Trigger */
+ uint32_t GPIOSel; /*!< The Exti GPIO multiplexer selection to be configured.
+ This parameter is only possible for line 0 to 15. It
+ can be a value of @ref EXTI_GPIOSel */
} EXTI_ConfigTypeDef;
/**
@@ -82,48 +84,36 @@ typedef struct
/** @defgroup EXTI_Line EXTI Line
* @{
*/
-#define EXTI_LINE_0 EXTI_IMR_IM0 /*!< External interrupt line 0 */
-#define EXTI_LINE_1 EXTI_IMR_IM1 /*!< External interrupt line 1 */
-#define EXTI_LINE_2 EXTI_IMR_IM2 /*!< External interrupt line 2 */
-#define EXTI_LINE_3 EXTI_IMR_IM3 /*!< External interrupt line 3 */
-#define EXTI_LINE_4 EXTI_IMR_IM4 /*!< External interrupt line 4 */
-#define EXTI_LINE_5 EXTI_IMR_IM5 /*!< External interrupt line 5 */
-#define EXTI_LINE_6 EXTI_IMR_IM6 /*!< External interrupt line 6 */
-#define EXTI_LINE_7 EXTI_IMR_IM7 /*!< External interrupt line 7 */
-#define EXTI_LINE_8 EXTI_IMR_IM8 /*!< External interrupt line 8 */
-#define EXTI_LINE_9 EXTI_IMR_IM9 /*!< External interrupt line 9 */
-#define EXTI_LINE_10 EXTI_IMR_IM10 /*!< External interrupt line 10 */
-#define EXTI_LINE_11 EXTI_IMR_IM11 /*!< External interrupt line 11 */
-#define EXTI_LINE_12 EXTI_IMR_IM12 /*!< External interrupt line 12 */
-#define EXTI_LINE_13 EXTI_IMR_IM13 /*!< External interrupt line 13 */
-#define EXTI_LINE_14 EXTI_IMR_IM14 /*!< External interrupt line 14 */
-#define EXTI_LINE_15 EXTI_IMR_IM15 /*!< External interrupt line 15 */
-#if defined(EXTI_IMR_IM16)
-#define EXTI_LINE_16 EXTI_IMR_IM16 /*!< External interrupt line 16 Connected to the PVD Output */
-#endif /* EXTI_IMR_IM16 */
-#if defined(EXTI_IMR_IM17)
-#define EXTI_LINE_17 EXTI_IMR_IM17 /*!< External interrupt line 17 Connected to the RTC Alarm event */
-#endif /* EXTI_IMR_IM17 */
-#if defined(EXTI_IMR_IM18)
-#define EXTI_LINE_18 EXTI_IMR_IM18 /*!< External interrupt line 18 Connected to the USB OTG FS Wakeup from suspend event */
-#endif /* EXTI_IMR_IM18 */
-#if defined(EXTI_IMR_IM19)
-#define EXTI_LINE_19 EXTI_IMR_IM19 /*!< External interrupt line 19 Connected to the Ethernet Wakeup event */
-#endif /* EXTI_IMR_IM19 */
-#if defined(EXTI_IMR_IM20)
-#define EXTI_LINE_20 EXTI_IMR_IM20 /*!< External interrupt line 20 Connected to the USB OTG HS (configured in FS) Wakeup event */
-#endif /* EXTI_IMR_IM20 */
-#if defined(EXTI_IMR_IM21)
-#define EXTI_LINE_21 EXTI_IMR_IM21 /*!< External interrupt line 21 Connected to the RTC Tamper and Time Stamp events */
-#endif /* EXTI_IMR_IM21 */
-#if defined(EXTI_IMR_IM22)
-#define EXTI_LINE_22 EXTI_IMR_IM22 /*!< External interrupt line 22 Connected to the RTC Wakeup event */
-#endif /* EXTI_IMR_IM22 */
-#if defined(EXTI_IMR_IM23)
-#define EXTI_LINE_23 EXTI_IMR_IM23 /*!< External interrupt line 23 Connected to the LPTIM Wakeup event */
-#endif /* EXTI_IMR_IM23 */
+#define EXTI_LINE_0 (EXTI_GPIO | 0x00u) /*!< External interrupt line 0 */
+#define EXTI_LINE_1 (EXTI_GPIO | 0x01u) /*!< External interrupt line 1 */
+#define EXTI_LINE_2 (EXTI_GPIO | 0x02u) /*!< External interrupt line 2 */
+#define EXTI_LINE_3 (EXTI_GPIO | 0x03u) /*!< External interrupt line 3 */
+#define EXTI_LINE_4 (EXTI_GPIO | 0x04u) /*!< External interrupt line 4 */
+#define EXTI_LINE_5 (EXTI_GPIO | 0x05u) /*!< External interrupt line 5 */
+#define EXTI_LINE_6 (EXTI_GPIO | 0x06u) /*!< External interrupt line 6 */
+#define EXTI_LINE_7 (EXTI_GPIO | 0x07u) /*!< External interrupt line 7 */
+#define EXTI_LINE_8 (EXTI_GPIO | 0x08u) /*!< External interrupt line 8 */
+#define EXTI_LINE_9 (EXTI_GPIO | 0x09u) /*!< External interrupt line 9 */
+#define EXTI_LINE_10 (EXTI_GPIO | 0x0Au) /*!< External interrupt line 10 */
+#define EXTI_LINE_11 (EXTI_GPIO | 0x0Bu) /*!< External interrupt line 11 */
+#define EXTI_LINE_12 (EXTI_GPIO | 0x0Cu) /*!< External interrupt line 12 */
+#define EXTI_LINE_13 (EXTI_GPIO | 0x0Du) /*!< External interrupt line 13 */
+#define EXTI_LINE_14 (EXTI_GPIO | 0x0Eu) /*!< External interrupt line 14 */
+#define EXTI_LINE_15 (EXTI_GPIO | 0x0Fu) /*!< External interrupt line 15 */
+#define EXTI_LINE_16 (EXTI_CONFIG | 0x10u) /*!< External interrupt line 16 Connected to the PVD Output */
+#define EXTI_LINE_17 (EXTI_CONFIG | 0x11u) /*!< External interrupt line 17 Connected to the RTC Alarm event */
+#define EXTI_LINE_18 (EXTI_CONFIG | 0x12u) /*!< External interrupt line 18 Connected to the USB OTG FS Wakeup from suspend event */
+#if defined(ETH)
+#define EXTI_LINE_19 (EXTI_CONFIG | 0x13u) /*!< External interrupt line 19 Connected to the Ethernet Wakeup event */
+#else
+#define EXTI_LINE_19 (EXTI_RESERVED | 0x13u) /*!< No interrupt supported in this line */
+#endif /* ETH */
+#define EXTI_LINE_20 (EXTI_CONFIG | 0x14u) /*!< External interrupt line 20 Connected to the USB OTG HS (configured in FS) Wakeup event */
+#define EXTI_LINE_21 (EXTI_CONFIG | 0x15u) /*!< External interrupt line 21 Connected to the RTC Tamper and Time Stamp events */
+#define EXTI_LINE_22 (EXTI_CONFIG | 0x16u) /*!< External interrupt line 22 Connected to the RTC Wakeup event */
+#define EXTI_LINE_23 (EXTI_CONFIG | 0x17u) /*!< External interrupt line 23 Connected to the LPTIM Wakeup event */
#if defined(EXTI_IMR_IM24)
-#define EXTI_LINE_24 EXTI_IMR_IM24 /*!< External interrupt line 24 Connected to the MDIO Slave global Interrupt Wakeup event */
+#define EXTI_LINE_24 (EXTI_CONFIG | 0x18u) /*!< External interrupt line 24 Connected to the MDIO Slave global Interrupt Wakeup event */
#endif /* EXTI_IMR_IM24 */
/**
* @}
@@ -142,6 +132,7 @@ typedef struct
/** @defgroup EXTI_Trigger EXTI Trigger
* @{
*/
+
#define EXTI_TRIGGER_NONE 0x00000000u
#define EXTI_TRIGGER_RISING 0x00000001u
#define EXTI_TRIGGER_FALLING 0x00000002u
@@ -150,6 +141,24 @@ typedef struct
* @}
*/
+/** @defgroup EXTI_GPIOSel EXTI GPIOSel
+ * @brief
+ * @{
+ */
+#define EXTI_GPIOA 0x00000000u
+#define EXTI_GPIOB 0x00000001u
+#define EXTI_GPIOC 0x00000002u
+#define EXTI_GPIOD 0x00000003u
+#define EXTI_GPIOE 0x00000004u
+#define EXTI_GPIOF 0x00000005u
+#define EXTI_GPIOG 0x00000006u
+#define EXTI_GPIOH 0x00000007u
+#define EXTI_GPIOI 0x00000008u
+#define EXTI_GPIOJ 0x00000009u
+#if defined (GPIOK)
+#define EXTI_GPIOK 0x0000000Au
+#endif /* GPIOK */
+
/**
* @}
*/
@@ -167,6 +176,20 @@ typedef struct
/** @defgroup EXTI_Private_Constants EXTI Private Constants
* @{
*/
+/**
+ * @brief EXTI Line property definition
+ */
+#define EXTI_PROPERTY_SHIFT 24u
+#define EXTI_CONFIG (0x02uL << EXTI_PROPERTY_SHIFT)
+#define EXTI_GPIO ((0x04uL << EXTI_PROPERTY_SHIFT) | EXTI_CONFIG)
+#define EXTI_RESERVED (0x08uL << EXTI_PROPERTY_SHIFT)
+#define EXTI_PROPERTY_MASK (EXTI_CONFIG | EXTI_GPIO)
+
+/**
+ * @brief EXTI bit usage
+ */
+#define EXTI_PIN_MASK 0x0000001Fu
+
/**
* @brief EXTI Mask for interrupt & event mode
*/
@@ -175,12 +198,17 @@ typedef struct
/**
* @brief EXTI Mask for trigger possibilities
*/
-#define EXTI_TRIGGER_MASK (EXTI_TRIGGER_RISING | EXTI_TRIGGER_FALLING | EXTI_TRIGGER_RISING_FALLING)
+#define EXTI_TRIGGER_MASK (EXTI_TRIGGER_RISING | EXTI_TRIGGER_FALLING)
/**
* @brief EXTI Line number
*/
+#if defined(EXTI_IMR_IM24)
#define EXTI_LINE_NB 25u
+#else
+#define EXTI_LINE_NB 24u
+#endif /* EXTI_IMR_IM24 */
+
/**
* @}
@@ -190,16 +218,47 @@ typedef struct
/** @defgroup EXTI_Private_Macros EXTI Private Macros
* @{
*/
-#define IS_EXTI_LINE(__LINE__) ((((__LINE__) & ~EXTI_IMR_IM) == 0x00U) && (__LINE__))
+#define IS_EXTI_LINE(__LINE__) ((((__LINE__) & ~(EXTI_PROPERTY_MASK | EXTI_PIN_MASK)) == 0x00u) && \
+ ((((__LINE__) & EXTI_PROPERTY_MASK) == EXTI_CONFIG) || \
+ (((__LINE__) & EXTI_PROPERTY_MASK) == EXTI_GPIO)) && \
+ (((__LINE__) & EXTI_PIN_MASK) < EXTI_LINE_NB))
-#define IS_EXTI_MODE(__LINE__) ((((__LINE__) & ~EXTI_MODE_MASK) == 0x00U))
+#define IS_EXTI_MODE(__LINE__) ((((__LINE__) & EXTI_MODE_MASK) != 0x00u) && \
+ (((__LINE__) & ~EXTI_MODE_MASK) == 0x00u))
-#define IS_EXTI_TRIGGER(__LINE__) (((__LINE__) & ~EXTI_TRIGGER_MASK) == 0x00U)
+#define IS_EXTI_TRIGGER(__LINE__) (((__LINE__) & ~EXTI_TRIGGER_MASK) == 0x00u)
#define IS_EXTI_PENDING_EDGE(__LINE__) (((__LINE__) == EXTI_TRIGGER_FALLING) || \
((__LINE__) == EXTI_TRIGGER_RISING) || \
((__LINE__) == EXTI_TRIGGER_RISING_FALLING))
+#define IS_EXTI_CONFIG_LINE(__LINE__) (((__LINE__) & EXTI_CONFIG) != 0x00u)
+
+#if defined (GPIOK)
+#define IS_EXTI_GPIO_PORT(__PORT__) (((__PORT__) == EXTI_GPIOA) || \
+ ((__PORT__) == EXTI_GPIOB) || \
+ ((__PORT__) == EXTI_GPIOC) || \
+ ((__PORT__) == EXTI_GPIOD) || \
+ ((__PORT__) == EXTI_GPIOE) || \
+ ((__PORT__) == EXTI_GPIOF) || \
+ ((__PORT__) == EXTI_GPIOG) || \
+ ((__PORT__) == EXTI_GPIOH) || \
+ ((__PORT__) == EXTI_GPIOI) || \
+ ((__PORT__) == EXTI_GPIOJ) || \
+ ((__PORT__) == EXTI_GPIOK))
+#else
+#define IS_EXTI_GPIO_PORT(__PORT__) (((__PORT__) == EXTI_GPIOA) || \
+ ((__PORT__) == EXTI_GPIOB) || \
+ ((__PORT__) == EXTI_GPIOC) || \
+ ((__PORT__) == EXTI_GPIOD) || \
+ ((__PORT__) == EXTI_GPIOE) || \
+ ((__PORT__) == EXTI_GPIOF) || \
+ ((__PORT__) == EXTI_GPIOG) || \
+ ((__PORT__) == EXTI_GPIOH) || \
+ ((__PORT__) == EXTI_GPIOI) || \
+ ((__PORT__) == EXTI_GPIOJ))
+#endif /* GPIOK */
+
#define IS_EXTI_GPIO_PIN(__PIN__) ((__PIN__) < 16U)
/**
* @}
@@ -255,6 +314,6 @@ void HAL_EXTI_GenerateSWI(EXTI_HandleTypeDef *hexti);
}
#endif
-#endif /* __STM32F7xx_HAL_EXTI_H */
+#endif /* STM32F7xx_HAL_EXTI_H */
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff --git a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_GCC/Prog/lib/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_gpio.h b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_GCC/Prog/lib/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_gpio.h
index 3d9de6e2..08e0acb2 100644
--- a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_GCC/Prog/lib/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_gpio.h
+++ b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_GCC/Prog/lib/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_gpio.h
@@ -262,7 +262,7 @@ void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin);
* @{
*/
#define IS_GPIO_PIN_ACTION(ACTION) (((ACTION) == GPIO_PIN_RESET) || ((ACTION) == GPIO_PIN_SET))
-#define IS_GPIO_PIN(__PIN__) ((((__PIN__) & GPIO_PIN_MASK) != (uint32_t)0x00))
+#define IS_GPIO_PIN(__PIN__) ((((uint32_t)(__PIN__) & GPIO_PIN_MASK) != 0x00U))
#define IS_GPIO_MODE(MODE) (((MODE) == GPIO_MODE_INPUT) ||\
((MODE) == GPIO_MODE_OUTPUT_PP) ||\
((MODE) == GPIO_MODE_OUTPUT_OD) ||\
diff --git a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_GCC/Prog/lib/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_i2c_ex.h b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_GCC/Prog/lib/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_i2c_ex.h
index d5d75314..83037894 100644
--- a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_GCC/Prog/lib/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_i2c_ex.h
+++ b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_GCC/Prog/lib/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_i2c_ex.h
@@ -167,6 +167,9 @@ void HAL_I2CEx_DisableFastModePlus(uint32_t ConfigFastModePlus);
(((__CONFIG__) & I2C_FASTMODEPLUS_PB9) == I2C_FASTMODEPLUS_PB9) || \
(((__CONFIG__) & I2C_FASTMODEPLUS_I2C1) == I2C_FASTMODEPLUS_I2C1))
#endif /* SYSCFG_PMC_I2C1_FMP && SYSCFG_PMC_I2C2_FMP && SYSCFG_PMC_I2C3_FMP && SYSCFG_PMC_I2C4_FMP */
+
+
+
/**
* @}
*/
diff --git a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_GCC/Prog/lib/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_tim.h b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_GCC/Prog/lib/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_tim.h
index 6a29ae50..ab067a59 100644
--- a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_GCC/Prog/lib/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_tim.h
+++ b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_GCC/Prog/lib/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_tim.h
@@ -167,7 +167,7 @@ typedef struct
This parameter can be a value of @ref TIM_Encoder_Mode */
uint32_t IC1Polarity; /*!< Specifies the active edge of the input signal.
- This parameter can be a value of @ref TIM_Input_Capture_Polarity */
+ This parameter can be a value of @ref TIM_Encoder_Input_Polarity */
uint32_t IC1Selection; /*!< Specifies the input.
This parameter can be a value of @ref TIM_Input_Capture_Selection */
@@ -179,7 +179,7 @@ typedef struct
This parameter can be a number between Min_Data = 0x0 and Max_Data = 0xF */
uint32_t IC2Polarity; /*!< Specifies the active edge of the input signal.
- This parameter can be a value of @ref TIM_Input_Capture_Polarity */
+ This parameter can be a value of @ref TIM_Encoder_Input_Polarity */
uint32_t IC2Selection; /*!< Specifies the input.
This parameter can be a value of @ref TIM_Input_Capture_Selection */
@@ -235,7 +235,12 @@ typedef struct
uint32_t MasterOutputTrigger2; /*!< Trigger output2 (TRGO2) selection
This parameter can be a value of @ref TIM_Master_Mode_Selection_2 */
uint32_t MasterSlaveMode; /*!< Master/slave mode selection
- This parameter can be a value of @ref TIM_Master_Slave_Mode */
+ This parameter can be a value of @ref TIM_Master_Slave_Mode
+ @note When the Master/slave mode is enabled, the effect of
+ an event on the trigger input (TRGI) is delayed to allow a
+ perfect synchronization between the current timer and its
+ slaves (through TRGO). It is not mandatory in case of timer
+ synchronization mode. */
} TIM_MasterConfigTypeDef;
/**
@@ -518,6 +523,15 @@ typedef void (*pTIM_CallbackTypeDef)(TIM_HandleTypeDef *htim); /*!< pointer to
* @}
*/
+/** @defgroup TIM_Update_Interrupt_Flag_Remap TIM Update Interrupt Flag Remap
+ * @{
+ */
+#define TIM_UIFREMAP_DISABLE 0x00000000U /*!< Update interrupt flag remap disabled */
+#define TIM_UIFREMAP_ENABLE TIM_CR1_UIFREMAP /*!< Update interrupt flag remap enabled */
+/**
+ * @}
+ */
+
/** @defgroup TIM_ClockDivision TIM Clock Division
* @{
*/
@@ -611,6 +625,15 @@ typedef void (*pTIM_CallbackTypeDef)(TIM_HandleTypeDef *htim); /*!< pointer to
* @}
*/
+/** @defgroup TIM_Encoder_Input_Polarity TIM Encoder Input Polarity
+ * @{
+ */
+#define TIM_ENCODERINPUTPOLARITY_RISING TIM_INPUTCHANNELPOLARITY_RISING /*!< Encoder input with rising edge polarity */
+#define TIM_ENCODERINPUTPOLARITY_FALLING TIM_INPUTCHANNELPOLARITY_FALLING /*!< Encoder input with falling edge polarity */
+/**
+ * @}
+ */
+
/** @defgroup TIM_Input_Capture_Selection TIM Input Capture Selection
* @{
*/
@@ -1119,15 +1142,15 @@ typedef void (*pTIM_CallbackTypeDef)(TIM_HandleTypeDef *htim); /*!< pointer to
* @retval None
*/
#define __HAL_TIM_DISABLE(__HANDLE__) \
- do { \
- if (((__HANDLE__)->Instance->CCER & TIM_CCER_CCxE_MASK) == 0UL) \
- { \
- if(((__HANDLE__)->Instance->CCER & TIM_CCER_CCxNE_MASK) == 0UL) \
- { \
- (__HANDLE__)->Instance->CR1 &= ~(TIM_CR1_CEN); \
- } \
- } \
- } while(0)
+ do { \
+ if (((__HANDLE__)->Instance->CCER & TIM_CCER_CCxE_MASK) == 0UL) \
+ { \
+ if(((__HANDLE__)->Instance->CCER & TIM_CCER_CCxNE_MASK) == 0UL) \
+ { \
+ (__HANDLE__)->Instance->CR1 &= ~(TIM_CR1_CEN); \
+ } \
+ } \
+ } while(0)
/**
* @brief Disable the TIM main Output.
@@ -1136,15 +1159,15 @@ typedef void (*pTIM_CallbackTypeDef)(TIM_HandleTypeDef *htim); /*!< pointer to
* @note The Main Output Enable of a timer instance is disabled only if all the CCx and CCxN channels have been disabled
*/
#define __HAL_TIM_MOE_DISABLE(__HANDLE__) \
- do { \
- if (((__HANDLE__)->Instance->CCER & TIM_CCER_CCxE_MASK) == 0UL) \
- { \
- if(((__HANDLE__)->Instance->CCER & TIM_CCER_CCxNE_MASK) == 0UL) \
- { \
- (__HANDLE__)->Instance->BDTR &= ~(TIM_BDTR_MOE); \
- } \
- } \
- } while(0)
+ do { \
+ if (((__HANDLE__)->Instance->CCER & TIM_CCER_CCxE_MASK) == 0UL) \
+ { \
+ if(((__HANDLE__)->Instance->CCER & TIM_CCER_CCxNE_MASK) == 0UL) \
+ { \
+ (__HANDLE__)->Instance->BDTR &= ~(TIM_BDTR_MOE); \
+ } \
+ } \
+ } while(0)
/**
* @brief Disable the TIM main Output.
@@ -1279,7 +1302,8 @@ typedef void (*pTIM_CallbackTypeDef)(TIM_HandleTypeDef *htim); /*!< pointer to
* @arg TIM_IT_BREAK: Break interrupt
* @retval The state of TIM_IT (SET or RESET).
*/
-#define __HAL_TIM_GET_IT_SOURCE(__HANDLE__, __INTERRUPT__) ((((__HANDLE__)->Instance->DIER & (__INTERRUPT__)) == (__INTERRUPT__)) ? SET : RESET)
+#define __HAL_TIM_GET_IT_SOURCE(__HANDLE__, __INTERRUPT__) ((((__HANDLE__)->Instance->DIER & (__INTERRUPT__)) \
+ == (__INTERRUPT__)) ? SET : RESET)
/** @brief Clear the TIM interrupt pending bits.
* @param __HANDLE__ TIM handle
@@ -1297,6 +1321,31 @@ typedef void (*pTIM_CallbackTypeDef)(TIM_HandleTypeDef *htim); /*!< pointer to
*/
#define __HAL_TIM_CLEAR_IT(__HANDLE__, __INTERRUPT__) ((__HANDLE__)->Instance->SR = ~(__INTERRUPT__))
+/**
+ * @brief Force a continuous copy of the update interrupt flag (UIF) into the timer counter register (bit 31).
+ * @note This allows both the counter value and a potential roll-over condition signalled by the UIFCPY flag to be read in an atomic way.
+ * @param __HANDLE__ TIM handle.
+ * @retval None
+mode.
+ */
+#define __HAL_TIM_UIFREMAP_ENABLE(__HANDLE__) (((__HANDLE__)->Instance->CR1 |= TIM_CR1_UIFREMAP))
+
+/**
+ * @brief Disable update interrupt flag (UIF) remapping.
+ * @param __HANDLE__ TIM handle.
+ * @retval None
+mode.
+ */
+#define __HAL_TIM_UIFREMAP_DISABLE(__HANDLE__) (((__HANDLE__)->Instance->CR1 &= ~TIM_CR1_UIFREMAP))
+
+/**
+ * @brief Get update interrupt flag (UIF) copy status.
+ * @param __COUNTER__ Counter value.
+ * @retval The state of UIFCPY (TRUE or FALSE).
+mode.
+ */
+#define __HAL_TIM_GET_UIFCPY(__COUNTER__) (((__COUNTER__) & (TIM_CNT_UIFCPY)) == (TIM_CNT_UIFCPY))
+
/**
* @brief Indicates whether or not the TIM Counter is used as downcounter.
* @param __HANDLE__ TIM handle.
@@ -1316,6 +1365,8 @@ mode.
/**
* @brief Set the TIM Counter Register value on runtime.
+ * Note Please check if the bit 31 of CNT register is used as UIF copy or not, this may affect the counter range in case of 32 bits counter TIM instance.
+ * Bit 31 of CNT can be enabled/disabled using __HAL_TIM_UIFREMAP_ENABLE()/__HAL_TIM_UIFREMAP_DISABLE() macros.
* @param __HANDLE__ TIM handle.
* @param __COUNTER__ specifies the Counter register new value.
* @retval None
@@ -1327,8 +1378,7 @@ mode.
* @param __HANDLE__ TIM handle.
* @retval 16-bit or 32-bit value of the timer counter register (TIMx_CNT)
*/
-#define __HAL_TIM_GET_COUNTER(__HANDLE__) \
- ((__HANDLE__)->Instance->CNT)
+#define __HAL_TIM_GET_COUNTER(__HANDLE__) ((__HANDLE__)->Instance->CNT)
/**
* @brief Set the TIM Autoreload Register value on runtime without calling another time any Init function.
@@ -1337,18 +1387,17 @@ mode.
* @retval None
*/
#define __HAL_TIM_SET_AUTORELOAD(__HANDLE__, __AUTORELOAD__) \
- do{ \
- (__HANDLE__)->Instance->ARR = (__AUTORELOAD__); \
- (__HANDLE__)->Init.Period = (__AUTORELOAD__); \
- } while(0)
+ do{ \
+ (__HANDLE__)->Instance->ARR = (__AUTORELOAD__); \
+ (__HANDLE__)->Init.Period = (__AUTORELOAD__); \
+ } while(0)
/**
* @brief Get the TIM Autoreload Register value on runtime.
* @param __HANDLE__ TIM handle.
* @retval 16-bit or 32-bit value of the timer auto-reload register(TIMx_ARR)
*/
-#define __HAL_TIM_GET_AUTORELOAD(__HANDLE__) \
- ((__HANDLE__)->Instance->ARR)
+#define __HAL_TIM_GET_AUTORELOAD(__HANDLE__) ((__HANDLE__)->Instance->ARR)
/**
* @brief Set the TIM Clock Division value on runtime without calling another time any Init function.
@@ -1361,11 +1410,11 @@ mode.
* @retval None
*/
#define __HAL_TIM_SET_CLOCKDIVISION(__HANDLE__, __CKD__) \
- do{ \
- (__HANDLE__)->Instance->CR1 &= (~TIM_CR1_CKD); \
- (__HANDLE__)->Instance->CR1 |= (__CKD__); \
- (__HANDLE__)->Init.ClockDivision = (__CKD__); \
- } while(0)
+ do{ \
+ (__HANDLE__)->Instance->CR1 &= (~TIM_CR1_CKD); \
+ (__HANDLE__)->Instance->CR1 |= (__CKD__); \
+ (__HANDLE__)->Init.ClockDivision = (__CKD__); \
+ } while(0)
/**
* @brief Get the TIM Clock Division value on runtime.
@@ -1375,8 +1424,7 @@ mode.
* @arg TIM_CLOCKDIVISION_DIV2: tDTS=2*tCK_INT
* @arg TIM_CLOCKDIVISION_DIV4: tDTS=4*tCK_INT
*/
-#define __HAL_TIM_GET_CLOCKDIVISION(__HANDLE__) \
- ((__HANDLE__)->Instance->CR1 & TIM_CR1_CKD)
+#define __HAL_TIM_GET_CLOCKDIVISION(__HANDLE__) ((__HANDLE__)->Instance->CR1 & TIM_CR1_CKD)
/**
* @brief Set the TIM Input Capture prescaler on runtime without calling another time HAL_TIM_IC_ConfigChannel() function.
@@ -1396,10 +1444,10 @@ mode.
* @retval None
*/
#define __HAL_TIM_SET_ICPRESCALER(__HANDLE__, __CHANNEL__, __ICPSC__) \
- do{ \
- TIM_RESET_ICPRESCALERVALUE((__HANDLE__), (__CHANNEL__)); \
- TIM_SET_ICPRESCALERVALUE((__HANDLE__), (__CHANNEL__), (__ICPSC__)); \
- } while(0)
+ do{ \
+ TIM_RESET_ICPRESCALERVALUE((__HANDLE__), (__CHANNEL__)); \
+ TIM_SET_ICPRESCALERVALUE((__HANDLE__), (__CHANNEL__), (__ICPSC__)); \
+ } while(0)
/**
* @brief Get the TIM Input Capture prescaler on runtime.
@@ -1437,12 +1485,12 @@ mode.
* @retval None
*/
#define __HAL_TIM_SET_COMPARE(__HANDLE__, __CHANNEL__, __COMPARE__) \
-(((__CHANNEL__) == TIM_CHANNEL_1) ? ((__HANDLE__)->Instance->CCR1 = (__COMPARE__)) :\
- ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCR2 = (__COMPARE__)) :\
- ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCR3 = (__COMPARE__)) :\
- ((__CHANNEL__) == TIM_CHANNEL_4) ? ((__HANDLE__)->Instance->CCR4 = (__COMPARE__)) :\
- ((__CHANNEL__) == TIM_CHANNEL_5) ? ((__HANDLE__)->Instance->CCR5 = (__COMPARE__)) :\
- ((__HANDLE__)->Instance->CCR6 = (__COMPARE__)))
+ (((__CHANNEL__) == TIM_CHANNEL_1) ? ((__HANDLE__)->Instance->CCR1 = (__COMPARE__)) :\
+ ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCR2 = (__COMPARE__)) :\
+ ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCR3 = (__COMPARE__)) :\
+ ((__CHANNEL__) == TIM_CHANNEL_4) ? ((__HANDLE__)->Instance->CCR4 = (__COMPARE__)) :\
+ ((__CHANNEL__) == TIM_CHANNEL_5) ? ((__HANDLE__)->Instance->CCR5 = (__COMPARE__)) :\
+ ((__HANDLE__)->Instance->CCR6 = (__COMPARE__)))
/**
* @brief Get the TIM Capture Compare Register value on runtime.
@@ -1458,12 +1506,12 @@ mode.
* @retval 16-bit or 32-bit value of the capture/compare register (TIMx_CCRy)
*/
#define __HAL_TIM_GET_COMPARE(__HANDLE__, __CHANNEL__) \
-(((__CHANNEL__) == TIM_CHANNEL_1) ? ((__HANDLE__)->Instance->CCR1) :\
- ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCR2) :\
- ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCR3) :\
- ((__CHANNEL__) == TIM_CHANNEL_4) ? ((__HANDLE__)->Instance->CCR4) :\
- ((__CHANNEL__) == TIM_CHANNEL_5) ? ((__HANDLE__)->Instance->CCR5) :\
- ((__HANDLE__)->Instance->CCR6))
+ (((__CHANNEL__) == TIM_CHANNEL_1) ? ((__HANDLE__)->Instance->CCR1) :\
+ ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCR2) :\
+ ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCR3) :\
+ ((__CHANNEL__) == TIM_CHANNEL_4) ? ((__HANDLE__)->Instance->CCR4) :\
+ ((__CHANNEL__) == TIM_CHANNEL_5) ? ((__HANDLE__)->Instance->CCR5) :\
+ ((__HANDLE__)->Instance->CCR6))
/**
* @brief Set the TIM Output compare preload.
@@ -1479,12 +1527,12 @@ mode.
* @retval None
*/
#define __HAL_TIM_ENABLE_OCxPRELOAD(__HANDLE__, __CHANNEL__) \
- (((__CHANNEL__) == TIM_CHANNEL_1) ? ((__HANDLE__)->Instance->CCMR1 |= TIM_CCMR1_OC1PE) :\
- ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCMR1 |= TIM_CCMR1_OC2PE) :\
- ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCMR2 |= TIM_CCMR2_OC3PE) :\
- ((__CHANNEL__) == TIM_CHANNEL_4) ? ((__HANDLE__)->Instance->CCMR2 |= TIM_CCMR2_OC4PE) :\
- ((__CHANNEL__) == TIM_CHANNEL_5) ? ((__HANDLE__)->Instance->CCMR3 |= TIM_CCMR3_OC5PE) :\
- ((__HANDLE__)->Instance->CCMR3 |= TIM_CCMR3_OC6PE))
+ (((__CHANNEL__) == TIM_CHANNEL_1) ? ((__HANDLE__)->Instance->CCMR1 |= TIM_CCMR1_OC1PE) :\
+ ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCMR1 |= TIM_CCMR1_OC2PE) :\
+ ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCMR2 |= TIM_CCMR2_OC3PE) :\
+ ((__CHANNEL__) == TIM_CHANNEL_4) ? ((__HANDLE__)->Instance->CCMR2 |= TIM_CCMR2_OC4PE) :\
+ ((__CHANNEL__) == TIM_CHANNEL_5) ? ((__HANDLE__)->Instance->CCMR3 |= TIM_CCMR3_OC5PE) :\
+ ((__HANDLE__)->Instance->CCMR3 |= TIM_CCMR3_OC6PE))
/**
* @brief Reset the TIM Output compare preload.
@@ -1500,12 +1548,62 @@ mode.
* @retval None
*/
#define __HAL_TIM_DISABLE_OCxPRELOAD(__HANDLE__, __CHANNEL__) \
- (((__CHANNEL__) == TIM_CHANNEL_1) ? ((__HANDLE__)->Instance->CCMR1 &= (uint16_t)~TIM_CCMR1_OC1PE) :\
- ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCMR1 &= (uint16_t)~TIM_CCMR1_OC2PE) :\
- ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCMR2 &= (uint16_t)~TIM_CCMR2_OC3PE) :\
- ((__CHANNEL__) == TIM_CHANNEL_4) ? ((__HANDLE__)->Instance->CCMR2 &= (uint16_t)~TIM_CCMR2_OC4PE) :\
- ((__CHANNEL__) == TIM_CHANNEL_5) ? ((__HANDLE__)->Instance->CCMR3 &= (uint16_t)~TIM_CCMR3_OC5PE) :\
- ((__HANDLE__)->Instance->CCMR3 &= (uint16_t)~TIM_CCMR3_OC6PE))
+ (((__CHANNEL__) == TIM_CHANNEL_1) ? ((__HANDLE__)->Instance->CCMR1 &= ~TIM_CCMR1_OC1PE) :\
+ ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCMR1 &= ~TIM_CCMR1_OC2PE) :\
+ ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCMR2 &= ~TIM_CCMR2_OC3PE) :\
+ ((__CHANNEL__) == TIM_CHANNEL_4) ? ((__HANDLE__)->Instance->CCMR2 &= ~TIM_CCMR2_OC4PE) :\
+ ((__CHANNEL__) == TIM_CHANNEL_5) ? ((__HANDLE__)->Instance->CCMR3 &= ~TIM_CCMR3_OC5PE) :\
+ ((__HANDLE__)->Instance->CCMR3 &= ~TIM_CCMR3_OC6PE))
+
+/**
+ * @brief Enable fast mode for a given channel.
+ * @param __HANDLE__ TIM handle.
+ * @param __CHANNEL__ TIM Channels to be configured.
+ * This parameter can be one of the following values:
+ * @arg TIM_CHANNEL_1: TIM Channel 1 selected
+ * @arg TIM_CHANNEL_2: TIM Channel 2 selected
+ * @arg TIM_CHANNEL_3: TIM Channel 3 selected
+ * @arg TIM_CHANNEL_4: TIM Channel 4 selected
+ * @arg TIM_CHANNEL_5: TIM Channel 5 selected
+ * @arg TIM_CHANNEL_6: TIM Channel 6 selected
+ * @note When fast mode is enabled an active edge on the trigger input acts
+ * like a compare match on CCx output. Delay to sample the trigger
+ * input and to activate CCx output is reduced to 3 clock cycles.
+ * @note Fast mode acts only if the channel is configured in PWM1 or PWM2 mode.
+ * @retval None
+ */
+#define __HAL_TIM_ENABLE_OCxFAST(__HANDLE__, __CHANNEL__) \
+ (((__CHANNEL__) == TIM_CHANNEL_1) ? ((__HANDLE__)->Instance->CCMR1 |= TIM_CCMR1_OC1FE) :\
+ ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCMR1 |= TIM_CCMR1_OC2FE) :\
+ ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCMR2 |= TIM_CCMR2_OC3FE) :\
+ ((__CHANNEL__) == TIM_CHANNEL_4) ? ((__HANDLE__)->Instance->CCMR2 |= TIM_CCMR2_OC4FE) :\
+ ((__CHANNEL__) == TIM_CHANNEL_5) ? ((__HANDLE__)->Instance->CCMR3 |= TIM_CCMR3_OC5FE) :\
+ ((__HANDLE__)->Instance->CCMR3 |= TIM_CCMR3_OC6FE))
+
+/**
+ * @brief Disable fast mode for a given channel.
+ * @param __HANDLE__ TIM handle.
+ * @param __CHANNEL__ TIM Channels to be configured.
+ * This parameter can be one of the following values:
+ * @arg TIM_CHANNEL_1: TIM Channel 1 selected
+ * @arg TIM_CHANNEL_2: TIM Channel 2 selected
+ * @arg TIM_CHANNEL_3: TIM Channel 3 selected
+ * @arg TIM_CHANNEL_4: TIM Channel 4 selected
+ * @arg TIM_CHANNEL_5: TIM Channel 5 selected
+ * @arg TIM_CHANNEL_6: TIM Channel 6 selected
+ * @note When fast mode is disabled CCx output behaves normally depending
+ * on counter and CCRx values even when the trigger is ON. The minimum
+ * delay to activate CCx output when an active edge occurs on the
+ * trigger input is 5 clock cycles.
+ * @retval None
+ */
+#define __HAL_TIM_DISABLE_OCxFAST(__HANDLE__, __CHANNEL__) \
+ (((__CHANNEL__) == TIM_CHANNEL_1) ? ((__HANDLE__)->Instance->CCMR1 &= ~TIM_CCMR1_OC1FE) :\
+ ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCMR1 &= ~TIM_CCMR1_OC2FE) :\
+ ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCMR2 &= ~TIM_CCMR2_OC3FE) :\
+ ((__CHANNEL__) == TIM_CHANNEL_4) ? ((__HANDLE__)->Instance->CCMR2 &= ~TIM_CCMR2_OC4FE) :\
+ ((__CHANNEL__) == TIM_CHANNEL_5) ? ((__HANDLE__)->Instance->CCMR3 &= ~TIM_CCMR3_OC5FE) :\
+ ((__HANDLE__)->Instance->CCMR3 &= ~TIM_CCMR3_OC6FE))
/**
* @brief Set the Update Request Source (URS) bit of the TIMx_CR1 register.
@@ -1515,8 +1613,7 @@ mode.
* enabled)
* @retval None
*/
-#define __HAL_TIM_URS_ENABLE(__HANDLE__) \
- ((__HANDLE__)->Instance->CR1|= TIM_CR1_URS)
+#define __HAL_TIM_URS_ENABLE(__HANDLE__) ((__HANDLE__)->Instance->CR1|= TIM_CR1_URS)
/**
* @brief Reset the Update Request Source (URS) bit of the TIMx_CR1 register.
@@ -1529,8 +1626,7 @@ mode.
* _ Update generation through the slave mode controller
* @retval None
*/
-#define __HAL_TIM_URS_DISABLE(__HANDLE__) \
- ((__HANDLE__)->Instance->CR1&=~TIM_CR1_URS)
+#define __HAL_TIM_URS_DISABLE(__HANDLE__) ((__HANDLE__)->Instance->CR1&=~TIM_CR1_URS)
/**
* @brief Set the TIM Capture x input polarity on runtime.
@@ -1548,10 +1644,10 @@ mode.
* @retval None
*/
#define __HAL_TIM_SET_CAPTUREPOLARITY(__HANDLE__, __CHANNEL__, __POLARITY__) \
- do{ \
- TIM_RESET_CAPTUREPOLARITY((__HANDLE__), (__CHANNEL__)); \
- TIM_SET_CAPTUREPOLARITY((__HANDLE__), (__CHANNEL__), (__POLARITY__)); \
- }while(0)
+ do{ \
+ TIM_RESET_CAPTUREPOLARITY((__HANDLE__), (__CHANNEL__)); \
+ TIM_SET_CAPTUREPOLARITY((__HANDLE__), (__CHANNEL__), (__POLARITY__)); \
+ }while(0)
/**
* @}
@@ -1579,29 +1675,29 @@ mode.
((__MODE__) == TIM_CLEARINPUTSOURCE_ETR))
#if defined(TIM_AF1_BKINE)&&defined(TIM_AF2_BKINE)
-#define IS_TIM_DMA_BASE(__BASE__) (((__BASE__) == TIM_DMABASE_CR1) || \
- ((__BASE__) == TIM_DMABASE_CR2) || \
- ((__BASE__) == TIM_DMABASE_SMCR) || \
- ((__BASE__) == TIM_DMABASE_DIER) || \
- ((__BASE__) == TIM_DMABASE_SR) || \
- ((__BASE__) == TIM_DMABASE_EGR) || \
- ((__BASE__) == TIM_DMABASE_CCMR1) || \
- ((__BASE__) == TIM_DMABASE_CCMR2) || \
- ((__BASE__) == TIM_DMABASE_CCER) || \
- ((__BASE__) == TIM_DMABASE_CNT) || \
- ((__BASE__) == TIM_DMABASE_PSC) || \
- ((__BASE__) == TIM_DMABASE_ARR) || \
- ((__BASE__) == TIM_DMABASE_RCR) || \
- ((__BASE__) == TIM_DMABASE_CCR1) || \
- ((__BASE__) == TIM_DMABASE_CCR2) || \
- ((__BASE__) == TIM_DMABASE_CCR3) || \
- ((__BASE__) == TIM_DMABASE_CCR4) || \
- ((__BASE__) == TIM_DMABASE_BDTR) || \
- ((__BASE__) == TIM_DMABASE_OR) || \
- ((__BASE__) == TIM_DMABASE_CCMR3) || \
- ((__BASE__) == TIM_DMABASE_CCR5) || \
- ((__BASE__) == TIM_DMABASE_CCR6) || \
- ((__BASE__) == TIM_DMABASE_AF1) || \
+#define IS_TIM_DMA_BASE(__BASE__) (((__BASE__) == TIM_DMABASE_CR1) || \
+ ((__BASE__) == TIM_DMABASE_CR2) || \
+ ((__BASE__) == TIM_DMABASE_SMCR) || \
+ ((__BASE__) == TIM_DMABASE_DIER) || \
+ ((__BASE__) == TIM_DMABASE_SR) || \
+ ((__BASE__) == TIM_DMABASE_EGR) || \
+ ((__BASE__) == TIM_DMABASE_CCMR1) || \
+ ((__BASE__) == TIM_DMABASE_CCMR2) || \
+ ((__BASE__) == TIM_DMABASE_CCER) || \
+ ((__BASE__) == TIM_DMABASE_CNT) || \
+ ((__BASE__) == TIM_DMABASE_PSC) || \
+ ((__BASE__) == TIM_DMABASE_ARR) || \
+ ((__BASE__) == TIM_DMABASE_RCR) || \
+ ((__BASE__) == TIM_DMABASE_CCR1) || \
+ ((__BASE__) == TIM_DMABASE_CCR2) || \
+ ((__BASE__) == TIM_DMABASE_CCR3) || \
+ ((__BASE__) == TIM_DMABASE_CCR4) || \
+ ((__BASE__) == TIM_DMABASE_BDTR) || \
+ ((__BASE__) == TIM_DMABASE_OR) || \
+ ((__BASE__) == TIM_DMABASE_CCMR3) || \
+ ((__BASE__) == TIM_DMABASE_CCR5) || \
+ ((__BASE__) == TIM_DMABASE_CCR6) || \
+ ((__BASE__) == TIM_DMABASE_AF1) || \
((__BASE__) == TIM_DMABASE_AF2))
#else
#define IS_TIM_DMA_BASE(__BASE__) (((__BASE__) == TIM_DMABASE_CR1) || \
@@ -1636,6 +1732,9 @@ mode.
((__MODE__) == TIM_COUNTERMODE_CENTERALIGNED2) || \
((__MODE__) == TIM_COUNTERMODE_CENTERALIGNED3))
+#define IS_TIM_UIFREMAP_MODE(__MODE__) (((__MODE__) == TIM_UIFREMAP_DISABLE) || \
+ ((__MODE__) == TIM_UIFREMAP_ENALE))
+
#define IS_TIM_CLOCKDIVISION_DIV(__DIV__) (((__DIV__) == TIM_CLOCKDIVISION_DIV1) || \
((__DIV__) == TIM_CLOCKDIVISION_DIV2) || \
((__DIV__) == TIM_CLOCKDIVISION_DIV4))
@@ -1658,6 +1757,9 @@ mode.
#define IS_TIM_OCNIDLE_STATE(__STATE__) (((__STATE__) == TIM_OCNIDLESTATE_SET) || \
((__STATE__) == TIM_OCNIDLESTATE_RESET))
+#define IS_TIM_ENCODERINPUT_POLARITY(__POLARITY__) (((__POLARITY__) == TIM_ENCODERINPUTPOLARITY_RISING) || \
+ ((__POLARITY__) == TIM_ENCODERINPUTPOLARITY_FALLING))
+
#define IS_TIM_IC_POLARITY(__POLARITY__) (((__POLARITY__) == TIM_ICPOLARITY_RISING) || \
((__POLARITY__) == TIM_ICPOLARITY_FALLING) || \
((__POLARITY__) == TIM_ICPOLARITY_BOTHEDGE))
@@ -1876,28 +1978,28 @@ mode.
((__TRIGGER__) == TIM_SLAVEMODE_COMBINED_RESETTRIGGER))
#define TIM_SET_ICPRESCALERVALUE(__HANDLE__, __CHANNEL__, __ICPSC__) \
-(((__CHANNEL__) == TIM_CHANNEL_1) ? ((__HANDLE__)->Instance->CCMR1 |= (__ICPSC__)) :\
- ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCMR1 |= ((__ICPSC__) << 8U)) :\
- ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCMR2 |= (__ICPSC__)) :\
- ((__HANDLE__)->Instance->CCMR2 |= ((__ICPSC__) << 8U)))
+ (((__CHANNEL__) == TIM_CHANNEL_1) ? ((__HANDLE__)->Instance->CCMR1 |= (__ICPSC__)) :\
+ ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCMR1 |= ((__ICPSC__) << 8U)) :\
+ ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCMR2 |= (__ICPSC__)) :\
+ ((__HANDLE__)->Instance->CCMR2 |= ((__ICPSC__) << 8U)))
#define TIM_RESET_ICPRESCALERVALUE(__HANDLE__, __CHANNEL__) \
-(((__CHANNEL__) == TIM_CHANNEL_1) ? ((__HANDLE__)->Instance->CCMR1 &= (uint16_t)~TIM_CCMR1_IC1PSC) :\
- ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCMR1 &= (uint16_t)~TIM_CCMR1_IC2PSC) :\
- ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCMR2 &= (uint16_t)~TIM_CCMR2_IC3PSC) :\
- ((__HANDLE__)->Instance->CCMR2 &= (uint16_t)~TIM_CCMR2_IC4PSC))
+ (((__CHANNEL__) == TIM_CHANNEL_1) ? ((__HANDLE__)->Instance->CCMR1 &= ~TIM_CCMR1_IC1PSC) :\
+ ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCMR1 &= ~TIM_CCMR1_IC2PSC) :\
+ ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCMR2 &= ~TIM_CCMR2_IC3PSC) :\
+ ((__HANDLE__)->Instance->CCMR2 &= ~TIM_CCMR2_IC4PSC))
#define TIM_SET_CAPTUREPOLARITY(__HANDLE__, __CHANNEL__, __POLARITY__) \
-(((__CHANNEL__) == TIM_CHANNEL_1) ? ((__HANDLE__)->Instance->CCER |= (__POLARITY__)) :\
- ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCER |= ((__POLARITY__) << 4U)) :\
- ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCER |= ((__POLARITY__) << 8U)) :\
- ((__HANDLE__)->Instance->CCER |= (((__POLARITY__) << 12U))))
+ (((__CHANNEL__) == TIM_CHANNEL_1) ? ((__HANDLE__)->Instance->CCER |= (__POLARITY__)) :\
+ ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCER |= ((__POLARITY__) << 4U)) :\
+ ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCER |= ((__POLARITY__) << 8U)) :\
+ ((__HANDLE__)->Instance->CCER |= (((__POLARITY__) << 12U))))
#define TIM_RESET_CAPTUREPOLARITY(__HANDLE__, __CHANNEL__) \
-(((__CHANNEL__) == TIM_CHANNEL_1) ? ((__HANDLE__)->Instance->CCER &= (uint16_t)~(TIM_CCER_CC1P | TIM_CCER_CC1NP)) :\
- ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCER &= (uint16_t)~(TIM_CCER_CC2P | TIM_CCER_CC2NP)) :\
- ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCER &= (uint16_t)~(TIM_CCER_CC3P | TIM_CCER_CC3NP)) :\
- ((__HANDLE__)->Instance->CCER &= (uint16_t)~(TIM_CCER_CC4P | TIM_CCER_CC4NP)))
+ (((__CHANNEL__) == TIM_CHANNEL_1) ? ((__HANDLE__)->Instance->CCER &= ~(TIM_CCER_CC1P | TIM_CCER_CC1NP)) :\
+ ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCER &= ~(TIM_CCER_CC2P | TIM_CCER_CC2NP)) :\
+ ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCER &= ~(TIM_CCER_CC3P | TIM_CCER_CC3NP)) :\
+ ((__HANDLE__)->Instance->CCER &= ~(TIM_CCER_CC4P | TIM_CCER_CC4NP)))
/**
* @}
@@ -2035,7 +2137,8 @@ HAL_StatusTypeDef HAL_TIM_Encoder_Stop(TIM_HandleTypeDef *htim, uint32_t Channel
HAL_StatusTypeDef HAL_TIM_Encoder_Start_IT(TIM_HandleTypeDef *htim, uint32_t Channel);
HAL_StatusTypeDef HAL_TIM_Encoder_Stop_IT(TIM_HandleTypeDef *htim, uint32_t Channel);
/* Non-Blocking mode: DMA */
-HAL_StatusTypeDef HAL_TIM_Encoder_Start_DMA(TIM_HandleTypeDef *htim, uint32_t Channel, uint32_t *pData1, uint32_t *pData2, uint16_t Length);
+HAL_StatusTypeDef HAL_TIM_Encoder_Start_DMA(TIM_HandleTypeDef *htim, uint32_t Channel, uint32_t *pData1,
+ uint32_t *pData2, uint16_t Length);
HAL_StatusTypeDef HAL_TIM_Encoder_Stop_DMA(TIM_HandleTypeDef *htim, uint32_t Channel);
/**
* @}
@@ -2059,17 +2162,19 @@ void HAL_TIM_IRQHandler(TIM_HandleTypeDef *htim);
HAL_StatusTypeDef HAL_TIM_OC_ConfigChannel(TIM_HandleTypeDef *htim, TIM_OC_InitTypeDef *sConfig, uint32_t Channel);
HAL_StatusTypeDef HAL_TIM_PWM_ConfigChannel(TIM_HandleTypeDef *htim, TIM_OC_InitTypeDef *sConfig, uint32_t Channel);
HAL_StatusTypeDef HAL_TIM_IC_ConfigChannel(TIM_HandleTypeDef *htim, TIM_IC_InitTypeDef *sConfig, uint32_t Channel);
-HAL_StatusTypeDef HAL_TIM_OnePulse_ConfigChannel(TIM_HandleTypeDef *htim, TIM_OnePulse_InitTypeDef *sConfig, uint32_t OutputChannel, uint32_t InputChannel);
-HAL_StatusTypeDef HAL_TIM_ConfigOCrefClear(TIM_HandleTypeDef *htim, TIM_ClearInputConfigTypeDef *sClearInputConfig, uint32_t Channel);
+HAL_StatusTypeDef HAL_TIM_OnePulse_ConfigChannel(TIM_HandleTypeDef *htim, TIM_OnePulse_InitTypeDef *sConfig,
+ uint32_t OutputChannel, uint32_t InputChannel);
+HAL_StatusTypeDef HAL_TIM_ConfigOCrefClear(TIM_HandleTypeDef *htim, TIM_ClearInputConfigTypeDef *sClearInputConfig,
+ uint32_t Channel);
HAL_StatusTypeDef HAL_TIM_ConfigClockSource(TIM_HandleTypeDef *htim, TIM_ClockConfigTypeDef *sClockSourceConfig);
HAL_StatusTypeDef HAL_TIM_ConfigTI1Input(TIM_HandleTypeDef *htim, uint32_t TI1_Selection);
HAL_StatusTypeDef HAL_TIM_SlaveConfigSynchro(TIM_HandleTypeDef *htim, TIM_SlaveConfigTypeDef *sSlaveConfig);
HAL_StatusTypeDef HAL_TIM_SlaveConfigSynchro_IT(TIM_HandleTypeDef *htim, TIM_SlaveConfigTypeDef *sSlaveConfig);
-HAL_StatusTypeDef HAL_TIM_DMABurst_WriteStart(TIM_HandleTypeDef *htim, uint32_t BurstBaseAddress, uint32_t BurstRequestSrc, \
- uint32_t *BurstBuffer, uint32_t BurstLength);
+HAL_StatusTypeDef HAL_TIM_DMABurst_WriteStart(TIM_HandleTypeDef *htim, uint32_t BurstBaseAddress,
+ uint32_t BurstRequestSrc, uint32_t *BurstBuffer, uint32_t BurstLength);
HAL_StatusTypeDef HAL_TIM_DMABurst_WriteStop(TIM_HandleTypeDef *htim, uint32_t BurstRequestSrc);
-HAL_StatusTypeDef HAL_TIM_DMABurst_ReadStart(TIM_HandleTypeDef *htim, uint32_t BurstBaseAddress, uint32_t BurstRequestSrc, \
- uint32_t *BurstBuffer, uint32_t BurstLength);
+HAL_StatusTypeDef HAL_TIM_DMABurst_ReadStart(TIM_HandleTypeDef *htim, uint32_t BurstBaseAddress,
+ uint32_t BurstRequestSrc, uint32_t *BurstBuffer, uint32_t BurstLength);
HAL_StatusTypeDef HAL_TIM_DMABurst_ReadStop(TIM_HandleTypeDef *htim, uint32_t BurstRequestSrc);
HAL_StatusTypeDef HAL_TIM_GenerateEvent(TIM_HandleTypeDef *htim, uint32_t EventSource);
uint32_t HAL_TIM_ReadCapturedValue(TIM_HandleTypeDef *htim, uint32_t Channel);
@@ -2095,7 +2200,8 @@ void HAL_TIM_ErrorCallback(TIM_HandleTypeDef *htim);
/* Callbacks Register/UnRegister functions ***********************************/
#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)
-HAL_StatusTypeDef HAL_TIM_RegisterCallback(TIM_HandleTypeDef *htim, HAL_TIM_CallbackIDTypeDef CallbackID, pTIM_CallbackTypeDef pCallback);
+HAL_StatusTypeDef HAL_TIM_RegisterCallback(TIM_HandleTypeDef *htim, HAL_TIM_CallbackIDTypeDef CallbackID,
+ pTIM_CallbackTypeDef pCallback);
HAL_StatusTypeDef HAL_TIM_UnRegisterCallback(TIM_HandleTypeDef *htim, HAL_TIM_CallbackIDTypeDef CallbackID);
#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */
@@ -2125,8 +2231,8 @@ HAL_TIM_StateTypeDef HAL_TIM_Encoder_GetState(TIM_HandleTypeDef *htim);
/* Private functions----------------------------------------------------------*/
/** @defgroup TIM_Private_Functions TIM Private Functions
-* @{
-*/
+ * @{
+ */
void TIM_Base_SetConfig(TIM_TypeDef *TIMx, TIM_Base_InitTypeDef *Structure);
void TIM_TI1_SetConfig(TIM_TypeDef *TIMx, uint32_t TIM_ICPolarity, uint32_t TIM_ICSelection, uint32_t TIM_ICFilter);
void TIM_OC2_SetConfig(TIM_TypeDef *TIMx, TIM_OC_InitTypeDef *OC_Config);
@@ -2145,8 +2251,8 @@ void TIM_ResetCallback(TIM_HandleTypeDef *htim);
#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */
/**
-* @}
-*/
+ * @}
+ */
/* End of private functions --------------------------------------------------*/
/**
diff --git a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_GCC/Prog/lib/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_tim_ex.h b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_GCC/Prog/lib/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_tim_ex.h
index 598f5c6e..b8d3472e 100644
--- a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_GCC/Prog/lib/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_tim_ex.h
+++ b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_GCC/Prog/lib/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_tim_ex.h
@@ -201,9 +201,9 @@ TIMEx_BreakInputConfigTypeDef;
*/
/** @addtogroup TIMEx_Exported_Functions_Group1 Extended Timer Hall Sensor functions
- * @brief Timer Hall Sensor functions
- * @{
- */
+ * @brief Timer Hall Sensor functions
+ * @{
+ */
/* Timer Hall Sensor functions **********************************************/
HAL_StatusTypeDef HAL_TIMEx_HallSensor_Init(TIM_HandleTypeDef *htim, TIM_HallSensor_InitTypeDef *sConfig);
HAL_StatusTypeDef HAL_TIMEx_HallSensor_DeInit(TIM_HandleTypeDef *htim);
@@ -225,9 +225,9 @@ HAL_StatusTypeDef HAL_TIMEx_HallSensor_Stop_DMA(TIM_HandleTypeDef *htim);
*/
/** @addtogroup TIMEx_Exported_Functions_Group2 Extended Timer Complementary Output Compare functions
- * @brief Timer Complementary Output Compare functions
- * @{
- */
+ * @brief Timer Complementary Output Compare functions
+ * @{
+ */
/* Timer Complementary Output Compare functions *****************************/
/* Blocking mode: Polling */
HAL_StatusTypeDef HAL_TIMEx_OCN_Start(TIM_HandleTypeDef *htim, uint32_t Channel);
@@ -245,9 +245,9 @@ HAL_StatusTypeDef HAL_TIMEx_OCN_Stop_DMA(TIM_HandleTypeDef *htim, uint32_t Chann
*/
/** @addtogroup TIMEx_Exported_Functions_Group3 Extended Timer Complementary PWM functions
- * @brief Timer Complementary PWM functions
- * @{
- */
+ * @brief Timer Complementary PWM functions
+ * @{
+ */
/* Timer Complementary PWM functions ****************************************/
/* Blocking mode: Polling */
HAL_StatusTypeDef HAL_TIMEx_PWMN_Start(TIM_HandleTypeDef *htim, uint32_t Channel);
@@ -264,9 +264,9 @@ HAL_StatusTypeDef HAL_TIMEx_PWMN_Stop_DMA(TIM_HandleTypeDef *htim, uint32_t Chan
*/
/** @addtogroup TIMEx_Exported_Functions_Group4 Extended Timer Complementary One Pulse functions
- * @brief Timer Complementary One Pulse functions
- * @{
- */
+ * @brief Timer Complementary One Pulse functions
+ * @{
+ */
/* Timer Complementary One Pulse functions **********************************/
/* Blocking mode: Polling */
HAL_StatusTypeDef HAL_TIMEx_OnePulseN_Start(TIM_HandleTypeDef *htim, uint32_t OutputChannel);
@@ -280,17 +280,23 @@ HAL_StatusTypeDef HAL_TIMEx_OnePulseN_Stop_IT(TIM_HandleTypeDef *htim, uint32_t
*/
/** @addtogroup TIMEx_Exported_Functions_Group5 Extended Peripheral Control functions
- * @brief Peripheral Control functions
- * @{
- */
+ * @brief Peripheral Control functions
+ * @{
+ */
/* Extended Control functions ************************************************/
-HAL_StatusTypeDef HAL_TIMEx_ConfigCommutEvent(TIM_HandleTypeDef *htim, uint32_t InputTrigger, uint32_t CommutationSource);
-HAL_StatusTypeDef HAL_TIMEx_ConfigCommutEvent_IT(TIM_HandleTypeDef *htim, uint32_t InputTrigger, uint32_t CommutationSource);
-HAL_StatusTypeDef HAL_TIMEx_ConfigCommutEvent_DMA(TIM_HandleTypeDef *htim, uint32_t InputTrigger, uint32_t CommutationSource);
-HAL_StatusTypeDef HAL_TIMEx_MasterConfigSynchronization(TIM_HandleTypeDef *htim, TIM_MasterConfigTypeDef *sMasterConfig);
-HAL_StatusTypeDef HAL_TIMEx_ConfigBreakDeadTime(TIM_HandleTypeDef *htim, TIM_BreakDeadTimeConfigTypeDef *sBreakDeadTimeConfig);
+HAL_StatusTypeDef HAL_TIMEx_ConfigCommutEvent(TIM_HandleTypeDef *htim, uint32_t InputTrigger,
+ uint32_t CommutationSource);
+HAL_StatusTypeDef HAL_TIMEx_ConfigCommutEvent_IT(TIM_HandleTypeDef *htim, uint32_t InputTrigger,
+ uint32_t CommutationSource);
+HAL_StatusTypeDef HAL_TIMEx_ConfigCommutEvent_DMA(TIM_HandleTypeDef *htim, uint32_t InputTrigger,
+ uint32_t CommutationSource);
+HAL_StatusTypeDef HAL_TIMEx_MasterConfigSynchronization(TIM_HandleTypeDef *htim,
+ TIM_MasterConfigTypeDef *sMasterConfig);
+HAL_StatusTypeDef HAL_TIMEx_ConfigBreakDeadTime(TIM_HandleTypeDef *htim,
+ TIM_BreakDeadTimeConfigTypeDef *sBreakDeadTimeConfig);
#if defined(TIM_BREAK_INPUT_SUPPORT)
-HAL_StatusTypeDef HAL_TIMEx_ConfigBreakInput(TIM_HandleTypeDef *htim, uint32_t BreakInput, TIMEx_BreakInputConfigTypeDef *sBreakInputConfig);
+HAL_StatusTypeDef HAL_TIMEx_ConfigBreakInput(TIM_HandleTypeDef *htim, uint32_t BreakInput,
+ TIMEx_BreakInputConfigTypeDef *sBreakInputConfig);
#endif /* TIM_BREAK_INPUT_SUPPORT */
HAL_StatusTypeDef HAL_TIMEx_GroupChannel5(TIM_HandleTypeDef *htim, uint32_t Channels);
HAL_StatusTypeDef HAL_TIMEx_RemapConfig(TIM_HandleTypeDef *htim, uint32_t Remap);
@@ -327,7 +333,7 @@ HAL_TIM_StateTypeDef HAL_TIMEx_HallSensor_GetState(TIM_HandleTypeDef *htim);
/* End of exported functions -------------------------------------------------*/
/* Private functions----------------------------------------------------------*/
-/** @defgroup TIMEx_Private_Functions TIM Extended Private Functions
+/** @addtogroup TIMEx_Private_Functions TIMEx Private Functions
* @{
*/
void TIMEx_DMACommutationCplt(DMA_HandleTypeDef *hdma);
diff --git a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_GCC/Prog/lib/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_uart.h b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_GCC/Prog/lib/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_uart.h
index 4209206e..473ff95e 100644
--- a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_GCC/Prog/lib/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_uart.h
+++ b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_GCC/Prog/lib/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_uart.h
@@ -125,8 +125,6 @@ typedef struct
This parameter can be a value of @ref UART_MSB_First. */
} UART_AdvFeatureInitTypeDef;
-
-
/**
* @brief HAL UART State definition
* @note HAL UART State value is a combination of 2 different substates: gState and RxState (see @ref UART_State_Definition).
@@ -206,10 +204,9 @@ typedef struct __UART_HandleTypeDef
uint16_t Mask; /*!< UART Rx RDR register mask */
+ void (*RxISR)(struct __UART_HandleTypeDef *huart); /*!< Function pointer on Rx IRQ handler */
- void (*RxISR)(struct __UART_HandleTypeDef *huart); /*!< Function pointer on Rx IRQ handler */
-
- void (*TxISR)(struct __UART_HandleTypeDef *huart); /*!< Function pointer on Tx IRQ handler */
+ void (*TxISR)(struct __UART_HandleTypeDef *huart); /*!< Function pointer on Tx IRQ handler */
DMA_HandleTypeDef *hdmatx; /*!< UART Tx DMA Handle parameters */
@@ -313,8 +310,10 @@ typedef void (*pUART_CallbackTypeDef)(UART_HandleTypeDef *huart); /*!< pointer
#define HAL_UART_ERROR_FE ((uint32_t)0x00000004U) /*!< Frame error */
#define HAL_UART_ERROR_ORE ((uint32_t)0x00000008U) /*!< Overrun error */
#define HAL_UART_ERROR_DMA ((uint32_t)0x00000010U) /*!< DMA transfer error */
+#define HAL_UART_ERROR_RTO ((uint32_t)0x00000020U) /*!< Receiver Timeout error */
+
#if (USE_HAL_UART_REGISTER_CALLBACKS == 1)
-#define HAL_UART_ERROR_INVALID_CALLBACK ((uint32_t)0x00000020U) /*!< Invalid Callback error */
+#define HAL_UART_ERROR_INVALID_CALLBACK ((uint32_t)0x00000040U) /*!< Invalid Callback error */
#endif /* USE_HAL_UART_REGISTER_CALLBACKS */
/**
* @}
@@ -400,11 +399,11 @@ typedef void (*pUART_CallbackTypeDef)(UART_HandleTypeDef *huart); /*!< pointer
* @}
*/
-/** @defgroup UART_Receiver_TimeOut UART Receiver TimeOut
+/** @defgroup UART_Receiver_Timeout UART Receiver Timeout
* @{
*/
-#define UART_RECEIVER_TIMEOUT_DISABLE 0x00000000U /*!< UART receiver timeout disable */
-#define UART_RECEIVER_TIMEOUT_ENABLE USART_CR2_RTOEN /*!< UART receiver timeout enable */
+#define UART_RECEIVER_TIMEOUT_DISABLE 0x00000000U /*!< UART Receiver Timeout disable */
+#define UART_RECEIVER_TIMEOUT_ENABLE USART_CR2_RTOEN /*!< UART Receiver Timeout enable */
/**
* @}
*/
@@ -562,6 +561,17 @@ typedef void (*pUART_CallbackTypeDef)(UART_HandleTypeDef *huart); /*!< pointer
/**
* @}
*/
+#if defined(USART_CR1_UESM)
+
+/** @defgroup UART_Stop_Mode_Enable UART Advanced Feature Stop Mode Enable
+ * @{
+ */
+#define UART_ADVFEATURE_STOPMODE_DISABLE 0x00000000U /*!< UART stop mode disable */
+#define UART_ADVFEATURE_STOPMODE_ENABLE USART_CR1_UESM /*!< UART stop mode enable */
+/**
+ * @}
+ */
+#endif /* USART_CR1_UESM */
/** @defgroup UART_Mute_Mode UART Advanced Feature Mute Mode Enable
* @{
@@ -579,6 +589,18 @@ typedef void (*pUART_CallbackTypeDef)(UART_HandleTypeDef *huart); /*!< pointer
/**
* @}
*/
+#if defined(USART_CR1_UESM)
+
+/** @defgroup UART_WakeUp_from_Stop_Selection UART WakeUp From Stop Selection
+ * @{
+ */
+#define UART_WAKEUP_ON_ADDRESS 0x00000000U /*!< UART wake-up on address */
+#define UART_WAKEUP_ON_STARTBIT USART_CR3_WUS_1 /*!< UART wake-up on start bit */
+#define UART_WAKEUP_ON_READDATA_NONEMPTY USART_CR3_WUS /*!< UART wake-up on receive data register not empty or RXFIFO is not empty */
+/**
+ * @}
+ */
+#endif /* USART_CR1_UESM */
/** @defgroup UART_DriverEnable_Polarity UART DriverEnable Polarity
* @{
@@ -626,13 +648,20 @@ typedef void (*pUART_CallbackTypeDef)(UART_HandleTypeDef *huart); /*!< pointer
* - 0xXXXX : Flag mask in the ISR register
* @{
*/
+#if defined(USART_ISR_REACK)
+#define UART_FLAG_REACK USART_ISR_REACK /*!< UART receive enable acknowledge flag */
+#endif /* USART_ISR_REACK */
#define UART_FLAG_TEACK USART_ISR_TEACK /*!< UART transmit enable acknowledge flag */
+#if defined(USART_CR1_UESM)
+#define UART_FLAG_WUF USART_ISR_WUF /*!< UART wake-up from stop mode flag */
+#endif /* USART_CR1_UESM */
#define UART_FLAG_RWU USART_ISR_RWU /*!< UART receiver wake-up from mute mode flag */
#define UART_FLAG_SBKF USART_ISR_SBKF /*!< UART send break flag */
#define UART_FLAG_CMF USART_ISR_CMF /*!< UART character match flag */
#define UART_FLAG_BUSY USART_ISR_BUSY /*!< UART busy flag */
#define UART_FLAG_ABRF USART_ISR_ABRF /*!< UART auto Baud rate flag */
#define UART_FLAG_ABRE USART_ISR_ABRE /*!< UART auto Baud rate error */
+#define UART_FLAG_RTOF USART_ISR_RTOF /*!< UART receiver timeout flag */
#define UART_FLAG_CTS USART_ISR_CTS /*!< UART clear to send flag */
#define UART_FLAG_CTSIF USART_ISR_CTSIF /*!< UART clear to send interrupt flag */
#define UART_FLAG_LBDF USART_ISR_LBDF /*!< UART LIN break detection flag */
@@ -674,6 +703,10 @@ typedef void (*pUART_CallbackTypeDef)(UART_HandleTypeDef *huart); /*!< pointer
#define UART_IT_LBD 0x0846U /*!< UART LIN break detection interruption */
#define UART_IT_CTS 0x096AU /*!< UART CTS interruption */
#define UART_IT_CM 0x112EU /*!< UART character match interruption */
+#if defined(USART_CR1_UESM)
+#define UART_IT_WUF 0x1476U /*!< UART wake-up from stop mode interruption */
+#endif /* USART_CR1_UESM */
+#define UART_IT_RTO 0x0B3AU /*!< UART receiver timeout interruption */
#define UART_IT_ERR 0x0060U /*!< UART error interruption */
@@ -689,13 +722,17 @@ typedef void (*pUART_CallbackTypeDef)(UART_HandleTypeDef *huart); /*!< pointer
*/
#define UART_CLEAR_PEF USART_ICR_PECF /*!< Parity Error Clear Flag */
#define UART_CLEAR_FEF USART_ICR_FECF /*!< Framing Error Clear Flag */
-#define UART_CLEAR_NEF USART_ICR_NCF /*!< Noise Error detected Clear Flag */
+#define UART_CLEAR_NEF USART_ICR_NCF /*!< Noise Error detected Clear Flag */
#define UART_CLEAR_OREF USART_ICR_ORECF /*!< Overrun Error Clear Flag */
#define UART_CLEAR_IDLEF USART_ICR_IDLECF /*!< IDLE line detected Clear Flag */
#define UART_CLEAR_TCF USART_ICR_TCCF /*!< Transmission Complete Clear Flag */
#define UART_CLEAR_LBDF USART_ICR_LBDCF /*!< LIN Break Detection Clear Flag */
#define UART_CLEAR_CTSF USART_ICR_CTSCF /*!< CTS Interrupt Clear Flag */
#define UART_CLEAR_CMF USART_ICR_CMCF /*!< Character Match Clear Flag */
+#if defined(USART_CR1_UESM)
+#define UART_CLEAR_WUF USART_ICR_WUCF /*!< Wake Up from stop mode Clear Flag */
+#endif /* USART_CR1_UESM */
+#define UART_CLEAR_RTOF USART_ICR_RTOCF /*!< UART receiver timeout clear flag */
/**
* @}
*/
@@ -734,9 +771,9 @@ typedef void (*pUART_CallbackTypeDef)(UART_HandleTypeDef *huart); /*!< pointer
*/
#define __HAL_UART_FLUSH_DRREGISTER(__HANDLE__) \
do{ \
- SET_BIT((__HANDLE__)->Instance->RQR, UART_RXDATA_FLUSH_REQUEST); \
- SET_BIT((__HANDLE__)->Instance->RQR, UART_TXDATA_FLUSH_REQUEST); \
- } while(0U)
+ SET_BIT((__HANDLE__)->Instance->RQR, UART_RXDATA_FLUSH_REQUEST); \
+ SET_BIT((__HANDLE__)->Instance->RQR, UART_TXDATA_FLUSH_REQUEST); \
+ } while(0U)
/** @brief Clear the specified UART pending flag.
* @param __HANDLE__ specifies the UART Handle.
@@ -748,9 +785,13 @@ typedef void (*pUART_CallbackTypeDef)(UART_HandleTypeDef *huart); /*!< pointer
* @arg @ref UART_CLEAR_OREF Overrun Error Clear Flag
* @arg @ref UART_CLEAR_IDLEF IDLE line detected Clear Flag
* @arg @ref UART_CLEAR_TCF Transmission Complete Clear Flag
+ * @arg @ref UART_CLEAR_RTOF Receiver Timeout clear flag
* @arg @ref UART_CLEAR_LBDF LIN Break Detection Clear Flag
* @arg @ref UART_CLEAR_CTSF CTS Interrupt Clear Flag
* @arg @ref UART_CLEAR_CMF Character Match Clear Flag
+#if defined(USART_CR1_UESM)
+ * @arg @ref UART_CLEAR_WUF Wake Up from stop mode Clear Flag
+#endif
* @retval None
*/
#define __HAL_UART_CLEAR_FLAG(__HANDLE__, __FLAG__) ((__HANDLE__)->Instance->ICR = (__FLAG__))
@@ -790,7 +831,13 @@ typedef void (*pUART_CallbackTypeDef)(UART_HandleTypeDef *huart); /*!< pointer
* @param __HANDLE__ specifies the UART Handle.
* @param __FLAG__ specifies the flag to check.
* This parameter can be one of the following values:
+#if defined(USART_ISR_REACK)
+ * @arg @ref UART_FLAG_REACK Receive enable acknowledge flag
+#endif
* @arg @ref UART_FLAG_TEACK Transmit enable acknowledge flag
+ #if defined(USART_CR1_UESM)
+ * @arg @ref UART_FLAG_WUF Wake up from stop mode flag
+ #endif
* @arg @ref UART_FLAG_RWU Receiver wake up flag (if the UART in mute mode)
* @arg @ref UART_FLAG_SBKF Send Break flag
* @arg @ref UART_FLAG_CMF Character match flag
@@ -802,6 +849,7 @@ typedef void (*pUART_CallbackTypeDef)(UART_HandleTypeDef *huart); /*!< pointer
* @arg @ref UART_FLAG_TXE Transmit data register empty flag
* @arg @ref UART_FLAG_TC Transmission Complete flag
* @arg @ref UART_FLAG_RXNE Receive data register not empty flag
+ * @arg @ref UART_FLAG_RTOF Receiver Timeout flag
* @arg @ref UART_FLAG_IDLE Idle Line detection flag
* @arg @ref UART_FLAG_ORE Overrun Error flag
* @arg @ref UART_FLAG_NE Noise Error flag
@@ -815,12 +863,16 @@ typedef void (*pUART_CallbackTypeDef)(UART_HandleTypeDef *huart); /*!< pointer
* @param __HANDLE__ specifies the UART Handle.
* @param __INTERRUPT__ specifies the UART interrupt source to enable.
* This parameter can be one of the following values:
+#if defined(USART_CR1_UESM)
+ * @arg @ref UART_IT_WUF Wakeup from stop mode interrupt
+#endif
* @arg @ref UART_IT_CM Character match interrupt
* @arg @ref UART_IT_CTS CTS change interrupt
* @arg @ref UART_IT_LBD LIN Break detection interrupt
* @arg @ref UART_IT_TXE Transmit Data Register empty interrupt
* @arg @ref UART_IT_TC Transmission complete interrupt
* @arg @ref UART_IT_RXNE Receive Data register not empty interrupt
+ * @arg @ref UART_IT_RTO Receive Timeout interrupt
* @arg @ref UART_IT_IDLE Idle line detection interrupt
* @arg @ref UART_IT_PE Parity Error interrupt
* @arg @ref UART_IT_ERR Error interrupt (frame error, noise error, overrun error)
@@ -835,12 +887,16 @@ typedef void (*pUART_CallbackTypeDef)(UART_HandleTypeDef *huart); /*!< pointer
* @param __HANDLE__ specifies the UART Handle.
* @param __INTERRUPT__ specifies the UART interrupt source to disable.
* This parameter can be one of the following values:
+#if defined(USART_CR1_UESM)
+ * @arg @ref UART_IT_WUF Wakeup from stop mode interrupt
+#endif
* @arg @ref UART_IT_CM Character match interrupt
* @arg @ref UART_IT_CTS CTS change interrupt
* @arg @ref UART_IT_LBD LIN Break detection interrupt
* @arg @ref UART_IT_TXE Transmit Data Register empty interrupt
* @arg @ref UART_IT_TC Transmission complete interrupt
* @arg @ref UART_IT_RXNE Receive Data register not empty interrupt
+ * @arg @ref UART_IT_RTO Receive Timeout interrupt
* @arg @ref UART_IT_IDLE Idle line detection interrupt
* @arg @ref UART_IT_PE Parity Error interrupt
* @arg @ref UART_IT_ERR Error interrupt (Frame error, noise error, overrun error)
@@ -854,37 +910,46 @@ typedef void (*pUART_CallbackTypeDef)(UART_HandleTypeDef *huart); /*!< pointer
* @param __HANDLE__ specifies the UART Handle.
* @param __INTERRUPT__ specifies the UART interrupt to check.
* This parameter can be one of the following values:
+#if defined(USART_CR1_UESM)
+ * @arg @ref UART_IT_WUF Wakeup from stop mode interrupt
+#endif
* @arg @ref UART_IT_CM Character match interrupt
* @arg @ref UART_IT_CTS CTS change interrupt
* @arg @ref UART_IT_LBD LIN Break detection interrupt
* @arg @ref UART_IT_TXE Transmit Data Register empty interrupt
* @arg @ref UART_IT_TC Transmission complete interrupt
* @arg @ref UART_IT_RXNE Receive Data register not empty interrupt
+ * @arg @ref UART_IT_RTO Receive Timeout interrupt
* @arg @ref UART_IT_IDLE Idle line detection interrupt
* @arg @ref UART_IT_PE Parity Error interrupt
* @arg @ref UART_IT_ERR Error interrupt (Frame error, noise error, overrun error)
* @retval The new state of __INTERRUPT__ (SET or RESET).
*/
-#define __HAL_UART_GET_IT(__HANDLE__, __INTERRUPT__) ((((__HANDLE__)->Instance->ISR & (1U << ((__INTERRUPT__)>> 8U))) != RESET) ? SET : RESET)
+#define __HAL_UART_GET_IT(__HANDLE__, __INTERRUPT__) ((((__HANDLE__)->Instance->ISR\
+ & (1U << ((__INTERRUPT__)>> 8U))) != RESET) ? SET : RESET)
/** @brief Check whether the specified UART interrupt source is enabled or not.
* @param __HANDLE__ specifies the UART Handle.
* @param __INTERRUPT__ specifies the UART interrupt source to check.
* This parameter can be one of the following values:
+#if defined(USART_CR1_UESM)
+ * @arg @ref UART_IT_WUF Wakeup from stop mode interrupt
+#endif
* @arg @ref UART_IT_CM Character match interrupt
* @arg @ref UART_IT_CTS CTS change interrupt
* @arg @ref UART_IT_LBD LIN Break detection interrupt
* @arg @ref UART_IT_TXE Transmit Data Register empty interrupt
* @arg @ref UART_IT_TC Transmission complete interrupt
* @arg @ref UART_IT_RXNE Receive Data register not empty interrupt
+ * @arg @ref UART_IT_RTO Receive Timeout interrupt
* @arg @ref UART_IT_IDLE Idle line detection interrupt
* @arg @ref UART_IT_PE Parity Error interrupt
* @arg @ref UART_IT_ERR Error interrupt (Frame error, noise error, overrun error)
* @retval The new state of __INTERRUPT__ (SET or RESET).
*/
#define __HAL_UART_GET_IT_SOURCE(__HANDLE__, __INTERRUPT__) ((((((((uint8_t)(__INTERRUPT__)) >> 5U) == 1U) ? (__HANDLE__)->Instance->CR1 : \
- (((((uint8_t)(__INTERRUPT__)) >> 5U) == 2U) ? (__HANDLE__)->Instance->CR2 : \
- (__HANDLE__)->Instance->CR3)) & (1U << (((uint16_t)(__INTERRUPT__)) & UART_IT_MASK))) != RESET) ? SET : RESET)
+ (((((uint8_t)(__INTERRUPT__)) >> 5U) == 2U) ? (__HANDLE__)->Instance->CR2 : \
+ (__HANDLE__)->Instance->CR3)) & (1U << (((uint16_t)(__INTERRUPT__)) & UART_IT_MASK))) != RESET) ? SET : RESET)
/** @brief Clear the specified UART ISR flag, in setting the proper ICR register flag.
* @param __HANDLE__ specifies the UART Handle.
@@ -896,10 +961,14 @@ typedef void (*pUART_CallbackTypeDef)(UART_HandleTypeDef *huart); /*!< pointer
* @arg @ref UART_CLEAR_NEF Noise detected Clear Flag
* @arg @ref UART_CLEAR_OREF Overrun Error Clear Flag
* @arg @ref UART_CLEAR_IDLEF IDLE line detected Clear Flag
+ * @arg @ref UART_CLEAR_RTOF Receiver timeout clear flag
* @arg @ref UART_CLEAR_TCF Transmission Complete Clear Flag
* @arg @ref UART_CLEAR_LBDF LIN Break Detection Clear Flag
* @arg @ref UART_CLEAR_CTSF CTS Interrupt Clear Flag
* @arg @ref UART_CLEAR_CMF Character Match Clear Flag
+ #if defined(USART_CR1_UESM)
+ * @arg @ref UART_CLEAR_WUF Wake Up from stop mode Clear Flag
+#endif
* @retval None
*/
#define __HAL_UART_CLEAR_IT(__HANDLE__, __IT_CLEAR__) ((__HANDLE__)->Instance->ICR = (uint32_t)(__IT_CLEAR__))
@@ -1083,10 +1152,10 @@ typedef void (*pUART_CallbackTypeDef)(UART_HandleTypeDef *huart); /*!< pointer
* @retval SET (__CONTROL__ is valid) or RESET (__CONTROL__ is invalid)
*/
#define IS_UART_HARDWARE_FLOW_CONTROL(__CONTROL__)\
- (((__CONTROL__) == UART_HWCONTROL_NONE) || \
- ((__CONTROL__) == UART_HWCONTROL_RTS) || \
- ((__CONTROL__) == UART_HWCONTROL_CTS) || \
- ((__CONTROL__) == UART_HWCONTROL_RTS_CTS))
+ (((__CONTROL__) == UART_HWCONTROL_NONE) || \
+ ((__CONTROL__) == UART_HWCONTROL_RTS) || \
+ ((__CONTROL__) == UART_HWCONTROL_CTS) || \
+ ((__CONTROL__) == UART_HWCONTROL_RTS_CTS))
/**
* @brief Ensure that UART communication mode is valid.
@@ -1134,8 +1203,15 @@ typedef void (*pUART_CallbackTypeDef)(UART_HandleTypeDef *huart); /*!< pointer
* @param __TIMEOUT__ UART receiver timeout setting.
* @retval SET (__TIMEOUT__ is valid) or RESET (__TIMEOUT__ is invalid)
*/
-#define IS_UART_RECEIVER_TIMEOUT(__TIMEOUT__) (((__TIMEOUT__) == UART_RECEIVER_TIMEOUT_DISABLE) || \
- ((__TIMEOUT__) == UART_RECEIVER_TIMEOUT_ENABLE))
+#define IS_UART_RECEIVER_TIMEOUT(__TIMEOUT__) (((__TIMEOUT__) == UART_RECEIVER_TIMEOUT_DISABLE) || \
+ ((__TIMEOUT__) == UART_RECEIVER_TIMEOUT_ENABLE))
+
+/** @brief Check the receiver timeout value.
+ * @note The maximum UART receiver timeout value is 0xFFFFFF.
+ * @param __TIMEOUTVALUE__ receiver timeout value.
+ * @retval Test result (TRUE or FALSE)
+ */
+#define IS_UART_RECEIVER_TIMEOUT_VALUE(__TIMEOUTVALUE__) ((__TIMEOUTVALUE__) <= 0xFFFFFFU)
/**
* @brief Ensure that UART LIN state is valid.
@@ -1275,6 +1351,16 @@ typedef void (*pUART_CallbackTypeDef)(UART_HandleTypeDef *huart); /*!< pointer
#define IS_UART_ADVFEATURE_MSBFIRST(__MSBFIRST__) (((__MSBFIRST__) == UART_ADVFEATURE_MSBFIRST_DISABLE) || \
((__MSBFIRST__) == UART_ADVFEATURE_MSBFIRST_ENABLE))
+#if defined(USART_CR1_UESM)
+/**
+ * @brief Ensure that UART stop mode state is valid.
+ * @param __STOPMODE__ UART stop mode state.
+ * @retval SET (__STOPMODE__ is valid) or RESET (__STOPMODE__ is invalid)
+ */
+#define IS_UART_ADVFEATURE_STOPMODE(__STOPMODE__) (((__STOPMODE__) == UART_ADVFEATURE_STOPMODE_DISABLE) || \
+ ((__STOPMODE__) == UART_ADVFEATURE_STOPMODE_ENABLE))
+
+#endif /* USART_CR1_UESM */
/**
* @brief Ensure that UART mute mode state is valid.
* @param __MUTE__ UART mute mode state.
@@ -1282,6 +1368,17 @@ typedef void (*pUART_CallbackTypeDef)(UART_HandleTypeDef *huart); /*!< pointer
*/
#define IS_UART_MUTE_MODE(__MUTE__) (((__MUTE__) == UART_ADVFEATURE_MUTEMODE_DISABLE) || \
((__MUTE__) == UART_ADVFEATURE_MUTEMODE_ENABLE))
+#if defined(USART_CR1_UESM)
+
+/**
+ * @brief Ensure that UART wake-up selection is valid.
+ * @param __WAKE__ UART wake-up selection.
+ * @retval SET (__WAKE__ is valid) or RESET (__WAKE__ is invalid)
+ */
+#define IS_UART_WAKEUP_SELECTION(__WAKE__) (((__WAKE__) == UART_WAKEUP_ON_ADDRESS) || \
+ ((__WAKE__) == UART_WAKEUP_ON_STARTBIT) || \
+ ((__WAKE__) == UART_WAKEUP_ON_READDATA_NONEMPTY))
+#endif /* USART_CR1_UESM */
/**
* @brief Ensure that UART driver enable polarity is valid.
@@ -1320,7 +1417,8 @@ void HAL_UART_MspDeInit(UART_HandleTypeDef *huart);
/* Callbacks Register/UnRegister functions ***********************************/
#if (USE_HAL_UART_REGISTER_CALLBACKS == 1)
-HAL_StatusTypeDef HAL_UART_RegisterCallback(UART_HandleTypeDef *huart, HAL_UART_CallbackIDTypeDef CallbackID, pUART_CallbackTypeDef pCallback);
+HAL_StatusTypeDef HAL_UART_RegisterCallback(UART_HandleTypeDef *huart, HAL_UART_CallbackIDTypeDef CallbackID,
+ pUART_CallbackTypeDef pCallback);
HAL_StatusTypeDef HAL_UART_UnRegisterCallback(UART_HandleTypeDef *huart, HAL_UART_CallbackIDTypeDef CallbackID);
#endif /* USE_HAL_UART_REGISTER_CALLBACKS */
@@ -1369,6 +1467,10 @@ void HAL_UART_AbortReceiveCpltCallback(UART_HandleTypeDef *huart);
*/
/* Peripheral Control functions ************************************************/
+void HAL_UART_ReceiverTimeout_Config(UART_HandleTypeDef *huart, uint32_t TimeoutValue);
+HAL_StatusTypeDef HAL_UART_EnableReceiverTimeout(UART_HandleTypeDef *huart);
+HAL_StatusTypeDef HAL_UART_DisableReceiverTimeout(UART_HandleTypeDef *huart);
+
HAL_StatusTypeDef HAL_LIN_SendBreak(UART_HandleTypeDef *huart);
HAL_StatusTypeDef HAL_MultiProcessor_EnableMuteMode(UART_HandleTypeDef *huart);
HAL_StatusTypeDef HAL_MultiProcessor_DisableMuteMode(UART_HandleTypeDef *huart);
@@ -1405,7 +1507,8 @@ void UART_InitCallbacksToDefault(UART_HandleTypeDef *huart);
#endif /* USE_HAL_UART_REGISTER_CALLBACKS */
HAL_StatusTypeDef UART_SetConfig(UART_HandleTypeDef *huart);
HAL_StatusTypeDef UART_CheckIdleState(UART_HandleTypeDef *huart);
-HAL_StatusTypeDef UART_WaitOnFlagUntilTimeout(UART_HandleTypeDef *huart, uint32_t Flag, FlagStatus Status, uint32_t Tickstart, uint32_t Timeout);
+HAL_StatusTypeDef UART_WaitOnFlagUntilTimeout(UART_HandleTypeDef *huart, uint32_t Flag, FlagStatus Status,
+ uint32_t Tickstart, uint32_t Timeout);
void UART_AdvFeatureConfig(UART_HandleTypeDef *huart);
/**
diff --git a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_GCC/Prog/lib/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_uart_ex.h b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_GCC/Prog/lib/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_uart_ex.h
index a5907f57..866a490f 100644
--- a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_GCC/Prog/lib/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_uart_ex.h
+++ b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_GCC/Prog/lib/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_uart_ex.h
@@ -41,7 +41,24 @@ extern "C" {
* @{
*/
+#if defined(USART_CR1_UESM)
+/**
+ * @brief UART wake up from stop mode parameters
+ */
+typedef struct
+{
+ uint32_t WakeUpEvent; /*!< Specifies which event will activate the Wakeup from Stop mode flag (WUF).
+ This parameter can be a value of @ref UART_WakeUp_from_Stop_Selection.
+ If set to UART_WAKEUP_ON_ADDRESS, the two other fields below must
+ be filled up. */
+ uint16_t AddressLength; /*!< Specifies whether the address is 4 or 7-bit long.
+ This parameter can be a value of @ref UARTEx_WakeUp_Address_Length. */
+
+ uint8_t Address; /*!< UART/USART node address (7-bit long max). */
+} UART_WakeUpTypeDef;
+
+#endif /* USART_CR1_UESM */
/**
* @}
*/
@@ -54,9 +71,9 @@ extern "C" {
/** @defgroup UARTEx_Word_Length UARTEx Word Length
* @{
*/
-#define UART_WORDLENGTH_7B USART_CR1_M1 /*!< 7-bit long UART frame */
-#define UART_WORDLENGTH_8B 0x00000000U /*!< 8-bit long UART frame */
-#define UART_WORDLENGTH_9B USART_CR1_M0 /*!< 9-bit long UART frame */
+#define UART_WORDLENGTH_7B USART_CR1_M1 /*!< 7-bit long UART frame */
+#define UART_WORDLENGTH_8B 0x00000000U /*!< 8-bit long UART frame */
+#define UART_WORDLENGTH_9B USART_CR1_M0 /*!< 9-bit long UART frame */
/**
* @}
*/
@@ -64,13 +81,12 @@ extern "C" {
/** @defgroup UARTEx_WakeUp_Address_Length UARTEx WakeUp Address Length
* @{
*/
-#define UART_ADDRESS_DETECT_4B 0x00000000U /*!< 4-bit long wake-up address */
-#define UART_ADDRESS_DETECT_7B USART_CR2_ADDM7 /*!< 7-bit long wake-up address */
+#define UART_ADDRESS_DETECT_4B 0x00000000U /*!< 4-bit long wake-up address */
+#define UART_ADDRESS_DETECT_7B USART_CR2_ADDM7 /*!< 7-bit long wake-up address */
/**
* @}
*/
-
/**
* @}
*/
@@ -86,7 +102,8 @@ extern "C" {
*/
/* Initialization and de-initialization functions ****************************/
-HAL_StatusTypeDef HAL_RS485Ex_Init(UART_HandleTypeDef *huart, uint32_t Polarity, uint32_t AssertionTime, uint32_t DeassertionTime);
+HAL_StatusTypeDef HAL_RS485Ex_Init(UART_HandleTypeDef *huart, uint32_t Polarity, uint32_t AssertionTime,
+ uint32_t DeassertionTime);
/**
* @}
@@ -96,6 +113,10 @@ HAL_StatusTypeDef HAL_RS485Ex_Init(UART_HandleTypeDef *huart, uint32_t Polarity,
* @{
*/
+#if defined(USART_CR1_UESM)
+void HAL_UARTEx_WakeupCallback(UART_HandleTypeDef *huart);
+
+#endif /* USART_CR1_UESM */
/**
* @}
@@ -106,8 +127,20 @@ HAL_StatusTypeDef HAL_RS485Ex_Init(UART_HandleTypeDef *huart, uint32_t Polarity,
*/
/* Peripheral Control functions **********************************************/
+#if defined(USART_CR1_UESM)
+HAL_StatusTypeDef HAL_UARTEx_StopModeWakeUpSourceConfig(UART_HandleTypeDef *huart, UART_WakeUpTypeDef WakeUpSelection);
+HAL_StatusTypeDef HAL_UARTEx_EnableStopMode(UART_HandleTypeDef *huart);
+HAL_StatusTypeDef HAL_UARTEx_DisableStopMode(UART_HandleTypeDef *huart);
+
+#endif/* USART_CR1_UESM */
+#if defined(USART_CR3_UCESM)
+HAL_StatusTypeDef HAL_UARTEx_EnableClockStopMode(UART_HandleTypeDef *huart);
+HAL_StatusTypeDef HAL_UARTEx_DisableClockStopMode(UART_HandleTypeDef *huart);
+
+#endif /* USART_CR3_UCESM */
HAL_StatusTypeDef HAL_MultiProcessorEx_AddressLength_Set(UART_HandleTypeDef *huart, uint32_t AddressLength);
+
/**
* @}
*/
@@ -126,12 +159,12 @@ HAL_StatusTypeDef HAL_MultiProcessorEx_AddressLength_Set(UART_HandleTypeDef *hua
* @param __CLOCKSOURCE__ output variable.
* @retval UART clocking source, written in __CLOCKSOURCE__.
*/
-#define UART_GETCLOCKSOURCE(__HANDLE__,__CLOCKSOURCE__) \
+#define UART_GETCLOCKSOURCE(__HANDLE__,__CLOCKSOURCE__) \
do { \
if((__HANDLE__)->Instance == USART1) \
{ \
- switch(__HAL_RCC_GET_USART1_SOURCE()) \
- { \
+ switch(__HAL_RCC_GET_USART1_SOURCE()) \
+ { \
case RCC_USART1CLKSOURCE_PCLK2: \
(__CLOCKSOURCE__) = UART_CLOCKSOURCE_PCLK2; \
break; \
@@ -147,12 +180,12 @@ HAL_StatusTypeDef HAL_MultiProcessorEx_AddressLength_Set(UART_HandleTypeDef *hua
default: \
(__CLOCKSOURCE__) = UART_CLOCKSOURCE_UNDEFINED; \
break; \
- } \
+ } \
} \
else if((__HANDLE__)->Instance == USART2) \
{ \
- switch(__HAL_RCC_GET_USART2_SOURCE()) \
- { \
+ switch(__HAL_RCC_GET_USART2_SOURCE()) \
+ { \
case RCC_USART2CLKSOURCE_PCLK1: \
(__CLOCKSOURCE__) = UART_CLOCKSOURCE_PCLK1; \
break; \
@@ -168,12 +201,12 @@ HAL_StatusTypeDef HAL_MultiProcessorEx_AddressLength_Set(UART_HandleTypeDef *hua
default: \
(__CLOCKSOURCE__) = UART_CLOCKSOURCE_UNDEFINED; \
break; \
- } \
+ } \
} \
else if((__HANDLE__)->Instance == USART3) \
{ \
- switch(__HAL_RCC_GET_USART3_SOURCE()) \
- { \
+ switch(__HAL_RCC_GET_USART3_SOURCE()) \
+ { \
case RCC_USART3CLKSOURCE_PCLK1: \
(__CLOCKSOURCE__) = UART_CLOCKSOURCE_PCLK1; \
break; \
@@ -189,12 +222,12 @@ HAL_StatusTypeDef HAL_MultiProcessorEx_AddressLength_Set(UART_HandleTypeDef *hua
default: \
(__CLOCKSOURCE__) = UART_CLOCKSOURCE_UNDEFINED; \
break; \
- } \
+ } \
} \
else if((__HANDLE__)->Instance == UART4) \
{ \
- switch(__HAL_RCC_GET_UART4_SOURCE()) \
- { \
+ switch(__HAL_RCC_GET_UART4_SOURCE()) \
+ { \
case RCC_UART4CLKSOURCE_PCLK1: \
(__CLOCKSOURCE__) = UART_CLOCKSOURCE_PCLK1; \
break; \
@@ -210,12 +243,12 @@ HAL_StatusTypeDef HAL_MultiProcessorEx_AddressLength_Set(UART_HandleTypeDef *hua
default: \
(__CLOCKSOURCE__) = UART_CLOCKSOURCE_UNDEFINED; \
break; \
- } \
+ } \
} \
else if ((__HANDLE__)->Instance == UART5) \
{ \
- switch(__HAL_RCC_GET_UART5_SOURCE()) \
- { \
+ switch(__HAL_RCC_GET_UART5_SOURCE()) \
+ { \
case RCC_UART5CLKSOURCE_PCLK1: \
(__CLOCKSOURCE__) = UART_CLOCKSOURCE_PCLK1; \
break; \
@@ -231,12 +264,12 @@ HAL_StatusTypeDef HAL_MultiProcessorEx_AddressLength_Set(UART_HandleTypeDef *hua
default: \
(__CLOCKSOURCE__) = UART_CLOCKSOURCE_UNDEFINED; \
break; \
- } \
+ } \
} \
else if((__HANDLE__)->Instance == USART6) \
{ \
- switch(__HAL_RCC_GET_USART6_SOURCE()) \
- { \
+ switch(__HAL_RCC_GET_USART6_SOURCE()) \
+ { \
case RCC_USART6CLKSOURCE_PCLK2: \
(__CLOCKSOURCE__) = UART_CLOCKSOURCE_PCLK2; \
break; \
@@ -252,12 +285,12 @@ HAL_StatusTypeDef HAL_MultiProcessorEx_AddressLength_Set(UART_HandleTypeDef *hua
default: \
(__CLOCKSOURCE__) = UART_CLOCKSOURCE_UNDEFINED; \
break; \
- } \
+ } \
} \
else if ((__HANDLE__)->Instance == UART7) \
{ \
- switch(__HAL_RCC_GET_UART7_SOURCE()) \
- { \
+ switch(__HAL_RCC_GET_UART7_SOURCE()) \
+ { \
case RCC_UART7CLKSOURCE_PCLK1: \
(__CLOCKSOURCE__) = UART_CLOCKSOURCE_PCLK1; \
break; \
@@ -273,12 +306,12 @@ HAL_StatusTypeDef HAL_MultiProcessorEx_AddressLength_Set(UART_HandleTypeDef *hua
default: \
(__CLOCKSOURCE__) = UART_CLOCKSOURCE_UNDEFINED; \
break; \
- } \
+ } \
} \
else if ((__HANDLE__)->Instance == UART8) \
{ \
- switch(__HAL_RCC_GET_UART8_SOURCE()) \
- { \
+ switch(__HAL_RCC_GET_UART8_SOURCE()) \
+ { \
case RCC_UART8CLKSOURCE_PCLK1: \
(__CLOCKSOURCE__) = UART_CLOCKSOURCE_PCLK1; \
break; \
@@ -294,7 +327,7 @@ HAL_StatusTypeDef HAL_MultiProcessorEx_AddressLength_Set(UART_HandleTypeDef *hua
default: \
(__CLOCKSOURCE__) = UART_CLOCKSOURCE_UNDEFINED; \
break; \
- } \
+ } \
} \
else \
{ \
@@ -313,44 +346,44 @@ HAL_StatusTypeDef HAL_MultiProcessorEx_AddressLength_Set(UART_HandleTypeDef *hua
*/
#define UART_MASK_COMPUTATION(__HANDLE__) \
do { \
- if ((__HANDLE__)->Init.WordLength == UART_WORDLENGTH_9B) \
- { \
- if ((__HANDLE__)->Init.Parity == UART_PARITY_NONE) \
- { \
+ if ((__HANDLE__)->Init.WordLength == UART_WORDLENGTH_9B) \
+ { \
+ if ((__HANDLE__)->Init.Parity == UART_PARITY_NONE) \
+ { \
(__HANDLE__)->Mask = 0x01FFU ; \
- } \
- else \
- { \
+ } \
+ else \
+ { \
(__HANDLE__)->Mask = 0x00FFU ; \
- } \
- } \
- else if ((__HANDLE__)->Init.WordLength == UART_WORDLENGTH_8B) \
- { \
- if ((__HANDLE__)->Init.Parity == UART_PARITY_NONE) \
- { \
+ } \
+ } \
+ else if ((__HANDLE__)->Init.WordLength == UART_WORDLENGTH_8B) \
+ { \
+ if ((__HANDLE__)->Init.Parity == UART_PARITY_NONE) \
+ { \
(__HANDLE__)->Mask = 0x00FFU ; \
- } \
- else \
- { \
+ } \
+ else \
+ { \
(__HANDLE__)->Mask = 0x007FU ; \
- } \
- } \
- else if ((__HANDLE__)->Init.WordLength == UART_WORDLENGTH_7B) \
- { \
- if ((__HANDLE__)->Init.Parity == UART_PARITY_NONE) \
- { \
+ } \
+ } \
+ else if ((__HANDLE__)->Init.WordLength == UART_WORDLENGTH_7B) \
+ { \
+ if ((__HANDLE__)->Init.Parity == UART_PARITY_NONE) \
+ { \
(__HANDLE__)->Mask = 0x007FU ; \
- } \
- else \
- { \
+ } \
+ else \
+ { \
(__HANDLE__)->Mask = 0x003FU ; \
- } \
- } \
- else \
- { \
- (__HANDLE__)->Mask = 0x0000U; \
- } \
-} while(0U)
+ } \
+ } \
+ else \
+ { \
+ (__HANDLE__)->Mask = 0x0000U; \
+ } \
+ } while(0U)
/**
* @brief Ensure that UART frame length is valid.
@@ -369,7 +402,6 @@ HAL_StatusTypeDef HAL_MultiProcessorEx_AddressLength_Set(UART_HandleTypeDef *hua
#define IS_UART_ADDRESSLENGTH_DETECT(__ADDRESS__) (((__ADDRESS__) == UART_ADDRESS_DETECT_4B) || \
((__ADDRESS__) == UART_ADDRESS_DETECT_7B))
-
/**
* @}
*/
diff --git a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_GCC/Prog/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal.c b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_GCC/Prog/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal.c
index 81a39d76..48bbd535 100644
--- a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_GCC/Prog/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal.c
+++ b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_GCC/Prog/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal.c
@@ -50,11 +50,11 @@
* @{
*/
/**
- * @brief STM32F7xx HAL Driver version number V1.2.7
+ * @brief STM32F7xx HAL Driver version number V1.2.8
*/
#define __STM32F7xx_HAL_VERSION_MAIN (0x01) /*!< [31:24] main version */
#define __STM32F7xx_HAL_VERSION_SUB1 (0x02) /*!< [23:16] sub1 version */
-#define __STM32F7xx_HAL_VERSION_SUB2 (0x07) /*!< [15:8] sub2 version */
+#define __STM32F7xx_HAL_VERSION_SUB2 (0x08) /*!< [15:8] sub2 version */
#define __STM32F7xx_HAL_VERSION_RC (0x00) /*!< [7:0] release candidate */
#define __STM32F7xx_HAL_VERSION ((__STM32F7xx_HAL_VERSION_MAIN << 24)\
|(__STM32F7xx_HAL_VERSION_SUB1 << 16)\
@@ -319,14 +319,26 @@ uint32_t HAL_GetTickPrio(void)
HAL_StatusTypeDef HAL_SetTickFreq(HAL_TickFreqTypeDef Freq)
{
HAL_StatusTypeDef status = HAL_OK;
+ HAL_TickFreqTypeDef prevTickFreq;
+
assert_param(IS_TICKFREQ(Freq));
if (uwTickFreq != Freq)
{
+ /* Back up uwTickFreq frequency */
+ prevTickFreq = uwTickFreq;
+
+ /* Update uwTickFreq global variable used by HAL_InitTick() */
uwTickFreq = Freq;
/* Apply the new tick Freq */
status = HAL_InitTick(uwTickPrio);
+
+ if (status != HAL_OK)
+ {
+ /* Restore previous tick frequency */
+ uwTickFreq = prevTickFreq;
+ }
}
return status;
diff --git a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_GCC/Prog/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_can.c b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_GCC/Prog/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_can.c
index 6978c4da..a381dfc4 100644
--- a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_GCC/Prog/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_can.c
+++ b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_GCC/Prog/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_can.c
@@ -1556,7 +1556,7 @@ HAL_StatusTypeDef HAL_CAN_GetRxMessage(CAN_HandleTypeDef *hcan, uint32_t RxFifo,
{
pHeader->ExtId = ((CAN_RI0R_EXID | CAN_RI0R_STID) & hcan->Instance->sFIFOMailBox[RxFifo].RIR) >> CAN_RI0R_EXID_Pos;
}
- pHeader->RTR = (CAN_RI0R_RTR & hcan->Instance->sFIFOMailBox[RxFifo].RIR) >> CAN_RI0R_RTR_Pos;
+ pHeader->RTR = (CAN_RI0R_RTR & hcan->Instance->sFIFOMailBox[RxFifo].RIR);
pHeader->DLC = (CAN_RDT0R_DLC & hcan->Instance->sFIFOMailBox[RxFifo].RDTR) >> CAN_RDT0R_DLC_Pos;
pHeader->FilterMatchIndex = (CAN_RDT0R_FMI & hcan->Instance->sFIFOMailBox[RxFifo].RDTR) >> CAN_RDT0R_FMI_Pos;
pHeader->Timestamp = (CAN_RDT0R_TIME & hcan->Instance->sFIFOMailBox[RxFifo].RDTR) >> CAN_RDT0R_TIME_Pos;
diff --git a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_GCC/Prog/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_exti.c b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_GCC/Prog/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_exti.c
index 07e53536..246f4562 100644
--- a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_GCC/Prog/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_exti.c
+++ b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_GCC/Prog/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_exti.c
@@ -85,7 +85,6 @@
/* Includes ------------------------------------------------------------------*/
#include "stm32f7xx_hal.h"
-#include "stm32f7xx_hal_exti.h"
/** @addtogroup STM32F7xx_HAL_Driver
* @{
@@ -105,7 +104,7 @@
#ifdef HAL_EXTI_MODULE_ENABLED
/* Private typedef -----------------------------------------------------------*/
-/* Private defines ------------------------------------------------------------*/
+/* Private defines -----------------------------------------------------------*/
/** @defgroup EXTI_Private_Constants EXTI Private Constants
* @{
*/
@@ -144,6 +143,8 @@
HAL_StatusTypeDef HAL_EXTI_SetConfigLine(EXTI_HandleTypeDef *hexti, EXTI_ConfigTypeDef *pExtiConfig)
{
uint32_t regval;
+ uint32_t linepos;
+ uint32_t maskline;
/* Check null pointer */
if ((hexti == NULL) || (pExtiConfig == NULL))
@@ -154,37 +155,77 @@ HAL_StatusTypeDef HAL_EXTI_SetConfigLine(EXTI_HandleTypeDef *hexti, EXTI_ConfigT
/* Check parameters */
assert_param(IS_EXTI_LINE(pExtiConfig->Line));
assert_param(IS_EXTI_MODE(pExtiConfig->Mode));
- assert_param(IS_EXTI_TRIGGER(pExtiConfig->Trigger));
-
+
/* Assign line number to handle */
hexti->Line = pExtiConfig->Line;
-
- /* Clear EXTI line configuration */
- EXTI->IMR &= ~pExtiConfig->Line;
- EXTI->EMR &= ~pExtiConfig->Line;
-
- /* Select the Mode for the selected external interrupts */
- regval = (uint32_t)EXTI_BASE;
- regval += pExtiConfig->Mode;
- *(__IO uint32_t *) regval |= pExtiConfig->Line;
-
- /* Clear Rising Falling edge configuration */
- EXTI->RTSR &= ~pExtiConfig->Line;
- EXTI->FTSR &= ~pExtiConfig->Line;
-
- /* Select the trigger for the selected external interrupts */
- if (pExtiConfig->Trigger == EXTI_TRIGGER_RISING_FALLING)
+
+ /* Compute line mask */
+ linepos = (pExtiConfig->Line & EXTI_PIN_MASK);
+ maskline = (1uL << linepos);
+
+ /* Configure triggers for configurable lines */
+ if ((pExtiConfig->Line & EXTI_CONFIG) != 0x00u)
{
- /* Rising Falling edge */
- EXTI->RTSR |= pExtiConfig->Line;
- EXTI->FTSR |= pExtiConfig->Line;
+ assert_param(IS_EXTI_TRIGGER(pExtiConfig->Trigger));
+
+ /* Configure rising trigger */
+ /* Mask or set line */
+ if ((pExtiConfig->Trigger & EXTI_TRIGGER_RISING) != 0x00u)
+ {
+ EXTI->RTSR |= maskline;
+ }
+ else
+ {
+ EXTI->RTSR &= ~maskline;
+ }
+
+ /* Configure falling trigger */
+ /* Mask or set line */
+ if ((pExtiConfig->Trigger & EXTI_TRIGGER_FALLING) != 0x00u)
+ {
+ EXTI->FTSR |= maskline;
+ }
+ else
+ {
+ EXTI->FTSR &= ~maskline;
+ }
+
+
+ /* Configure gpio port selection in case of gpio exti line */
+ if ((pExtiConfig->Line & EXTI_GPIO) == EXTI_GPIO)
+ {
+ assert_param(IS_EXTI_GPIO_PORT(pExtiConfig->GPIOSel));
+ assert_param(IS_EXTI_GPIO_PIN(linepos));
+
+ regval = SYSCFG->EXTICR[linepos >> 2u];
+ regval &= ~(SYSCFG_EXTICR1_EXTI0 << (SYSCFG_EXTICR1_EXTI1_Pos * (linepos & 0x03u)));
+ regval |= (pExtiConfig->GPIOSel << (SYSCFG_EXTICR1_EXTI1_Pos * (linepos & 0x03u)));
+ SYSCFG->EXTICR[linepos >> 2u] = regval;
+ }
+ }
+
+ /* Configure interrupt mode : read current mode */
+ /* Mask or set line */
+ if ((pExtiConfig->Mode & EXTI_MODE_INTERRUPT) != 0x00u)
+ {
+ EXTI->IMR |= maskline;
}
else
{
- regval = (uint32_t)EXTI_BASE;
- regval += pExtiConfig->Trigger;
- *(__IO uint32_t *) regval |= pExtiConfig->Line;
+ EXTI->IMR &= ~maskline;
}
+
+ /* Configure event mode : read current mode */
+ /* Mask or set line */
+ if ((pExtiConfig->Mode & EXTI_MODE_EVENT) != 0x00u)
+ {
+ EXTI->EMR |= maskline;
+ }
+ else
+ {
+ EXTI->EMR &= ~maskline;
+ }
+
return HAL_OK;
}
@@ -196,6 +237,10 @@ HAL_StatusTypeDef HAL_EXTI_SetConfigLine(EXTI_HandleTypeDef *hexti, EXTI_ConfigT
*/
HAL_StatusTypeDef HAL_EXTI_GetConfigLine(EXTI_HandleTypeDef *hexti, EXTI_ConfigTypeDef *pExtiConfig)
{
+ uint32_t regval;
+ uint32_t linepos;
+ uint32_t maskline;
+
/* Check null pointer */
if ((hexti == NULL) || (pExtiConfig == NULL))
{
@@ -208,41 +253,67 @@ HAL_StatusTypeDef HAL_EXTI_GetConfigLine(EXTI_HandleTypeDef *hexti, EXTI_ConfigT
/* Store handle line number to configuration structure */
pExtiConfig->Line = hexti->Line;
- /* Get EXTI mode to configiguration structure */
- if ((EXTI->IMR & hexti->Line) == hexti->Line)
+ /* Compute line mask */
+ linepos = (pExtiConfig->Line & EXTI_PIN_MASK);
+ maskline = (1uL << linepos);
+
+ /* 1] Get core mode : interrupt */
+
+ /* Check if selected line is enable */
+ if ((EXTI->IMR & maskline) != 0x00u)
{
pExtiConfig->Mode = EXTI_MODE_INTERRUPT;
}
- else if ((EXTI->EMR & hexti->Line) == hexti->Line)
- {
- pExtiConfig->Mode = EXTI_MODE_EVENT;
- }
else
{
- /* No MODE selected */
- pExtiConfig->Mode = 0x0Bu;
+ pExtiConfig->Mode = EXTI_MODE_NONE;
}
- /* Get EXTI Trigger to configiguration structure */
- if ((EXTI->RTSR & hexti->Line) == hexti->Line)
+ /* Get event mode */
+ /* Check if selected line is enable */
+ if ((EXTI->EMR & maskline) != 0x00u)
{
- if ((EXTI->FTSR & hexti->Line) == hexti->Line)
- {
- pExtiConfig->Trigger = EXTI_TRIGGER_RISING_FALLING;
- }
- else
+ pExtiConfig->Mode |= EXTI_MODE_EVENT;
+ }
+
+ /* 2] Get trigger for configurable lines : rising */
+ if ((pExtiConfig->Line & EXTI_CONFIG) != 0x00u)
+ {
+ /* Check if configuration of selected line is enable */
+ if ((EXTI->RTSR & maskline) != 0x00u)
{
pExtiConfig->Trigger = EXTI_TRIGGER_RISING;
}
- }
- else if ((EXTI->FTSR & hexti->Line) == hexti->Line)
- {
- pExtiConfig->Trigger = EXTI_TRIGGER_FALLING;
+ else
+ {
+ pExtiConfig->Trigger = EXTI_TRIGGER_NONE;
+ }
+
+ /* Get falling configuration */
+ /* Check if configuration of selected line is enable */
+ if ((EXTI->FTSR & maskline) != 0x00u)
+ {
+ pExtiConfig->Trigger |= EXTI_TRIGGER_FALLING;
+ }
+
+ /* Get Gpio port selection for gpio lines */
+ if ((pExtiConfig->Line & EXTI_GPIO) == EXTI_GPIO)
+ {
+ assert_param(IS_EXTI_GPIO_PIN(linepos));
+
+ regval = SYSCFG->EXTICR[linepos >> 2u];
+ pExtiConfig->GPIOSel = ((regval << (SYSCFG_EXTICR1_EXTI1_Pos * (3uL - (linepos & 0x03u)))) >> 24);
+ }
+ else
+ {
+ pExtiConfig->GPIOSel = 0x00u;
+ }
}
else
{
/* No Trigger selected */
- pExtiConfig->Trigger = 0x00u;
+ pExtiConfig->Trigger = EXTI_TRIGGER_NONE;
+ pExtiConfig->GPIOSel = 0x00u;
}
return HAL_OK;
@@ -255,6 +326,10 @@ HAL_StatusTypeDef HAL_EXTI_GetConfigLine(EXTI_HandleTypeDef *hexti, EXTI_ConfigT
*/
HAL_StatusTypeDef HAL_EXTI_ClearConfigLine(EXTI_HandleTypeDef *hexti)
{
+ uint32_t regval;
+ uint32_t linepos;
+ uint32_t maskline;
+
/* Check null pointer */
if (hexti == NULL)
{
@@ -264,15 +339,32 @@ HAL_StatusTypeDef HAL_EXTI_ClearConfigLine(EXTI_HandleTypeDef *hexti)
/* Check the parameter */
assert_param(IS_EXTI_LINE(hexti->Line));
+ /* compute line mask */
+ linepos = (hexti->Line & EXTI_PIN_MASK);
+ maskline = (1uL << linepos);
+
/* 1] Clear interrupt mode */
- EXTI->IMR = (EXTI->IMR & ~hexti->Line);
+ EXTI->IMR = (EXTI->IMR & ~maskline);
/* 2] Clear event mode */
- EXTI->EMR = (EXTI->EMR & ~hexti->Line);
+ EXTI->EMR = (EXTI->EMR & ~maskline);
- /* 3] Clear triggers */
- EXTI->RTSR = (EXTI->RTSR & ~hexti->Line);
- EXTI->FTSR = (EXTI->FTSR & ~hexti->Line);
+ /* 3] Clear triggers in case of configurable lines */
+ if ((hexti->Line & EXTI_CONFIG) != 0x00u)
+ {
+ EXTI->RTSR = (EXTI->RTSR & ~maskline);
+ EXTI->FTSR = (EXTI->FTSR & ~maskline);
+
+ /* Get Gpio port selection for gpio lines */
+ if ((hexti->Line & EXTI_GPIO) == EXTI_GPIO)
+ {
+ assert_param(IS_EXTI_GPIO_PIN(linepos));
+
+ regval = SYSCFG->EXTICR[linepos >> 2u];
+ regval &= ~(SYSCFG_EXTICR1_EXTI0 << (SYSCFG_EXTICR1_EXTI1_Pos * (linepos & 0x03u)));
+ SYSCFG->EXTICR[linepos >> 2u] = regval;
+ }
+ }
return HAL_OK;
}
@@ -352,17 +444,18 @@ HAL_StatusTypeDef HAL_EXTI_GetHandle(EXTI_HandleTypeDef *hexti, uint32_t ExtiLin
*/
void HAL_EXTI_IRQHandler(EXTI_HandleTypeDef *hexti)
{
- __IO uint32_t *regaddr;
uint32_t regval;
+ uint32_t maskline;
+
+ /* Compute line mask */
+ maskline = (1uL << (hexti->Line & EXTI_PIN_MASK));
/* Get pending bit */
- regaddr = (&EXTI->PR);
- regval = (*regaddr & hexti->Line);
-
+ regval = (EXTI->PR & maskline);
if (regval != 0x00u)
{
/* Clear pending bit */
- *regaddr = hexti->Line;
+ EXTI->PR = maskline;
/* Call callback */
if (hexti->PendingCallback != NULL)
@@ -383,19 +476,21 @@ void HAL_EXTI_IRQHandler(EXTI_HandleTypeDef *hexti)
*/
uint32_t HAL_EXTI_GetPending(EXTI_HandleTypeDef *hexti, uint32_t Edge)
{
- __IO uint32_t *regaddr;
uint32_t regval;
+ uint32_t linepos;
+ uint32_t maskline;
/* Check parameters */
assert_param(IS_EXTI_LINE(hexti->Line));
+ assert_param(IS_EXTI_CONFIG_LINE(hexti->Line));
assert_param(IS_EXTI_PENDING_EDGE(Edge));
- /* Get pending bit */
- regaddr = &EXTI->PR;
+ /* Compute line mask */
+ linepos = (hexti->Line & EXTI_PIN_MASK);
+ maskline = (1uL << linepos);
/* return 1 if bit is set else 0 */
- regval = ((*regaddr & hexti->Line) >> POSITION_VAL(hexti->Line));
-
+ regval = ((EXTI->PR & maskline) >> linepos);
return regval;
}
@@ -410,12 +505,18 @@ uint32_t HAL_EXTI_GetPending(EXTI_HandleTypeDef *hexti, uint32_t Edge)
*/
void HAL_EXTI_ClearPending(EXTI_HandleTypeDef *hexti, uint32_t Edge)
{
+ uint32_t maskline;
+
/* Check parameters */
assert_param(IS_EXTI_LINE(hexti->Line));
+ assert_param(IS_EXTI_CONFIG_LINE(hexti->Line));
assert_param(IS_EXTI_PENDING_EDGE(Edge));
-
+
+ /* Compute line mask */
+ maskline = (1uL << (hexti->Line & EXTI_PIN_MASK));
+
/* Clear Pending bit */
- EXTI->PR = hexti->Line;
+ EXTI->PR = maskline;
}
/**
@@ -425,10 +526,17 @@ void HAL_EXTI_ClearPending(EXTI_HandleTypeDef *hexti, uint32_t Edge)
*/
void HAL_EXTI_GenerateSWI(EXTI_HandleTypeDef *hexti)
{
+ uint32_t maskline;
+
/* Check parameters */
assert_param(IS_EXTI_LINE(hexti->Line));
+ assert_param(IS_EXTI_CONFIG_LINE(hexti->Line));
- EXTI->SWIER = hexti->Line;
+ /* Compute line mask */
+ maskline = (1uL << (hexti->Line & EXTI_PIN_MASK));
+
+ /* Generate Software interrupt */
+ EXTI->SWIER = maskline;
}
/**
diff --git a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_GCC/Prog/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_gpio.c b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_GCC/Prog/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_gpio.c
index ffc617dd..0afa1df1 100644
--- a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_GCC/Prog/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_gpio.c
+++ b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_GCC/Prog/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_gpio.c
@@ -190,25 +190,6 @@ void HAL_GPIO_Init(GPIO_TypeDef *GPIOx, GPIO_InitTypeDef *GPIO_Init)
if(iocurrent == ioposition)
{
/*--------------------- GPIO Mode Configuration ------------------------*/
- /* In case of Alternate function mode selection */
- if((GPIO_Init->Mode == GPIO_MODE_AF_PP) || (GPIO_Init->Mode == GPIO_MODE_AF_OD))
- {
- /* Check the Alternate function parameter */
- assert_param(IS_GPIO_AF(GPIO_Init->Alternate));
-
- /* Configure Alternate function mapped with the current IO */
- temp = GPIOx->AFR[position >> 3];
- temp &= ~((uint32_t)0xF << ((uint32_t)(position & (uint32_t)0x07) * 4)) ;
- temp |= ((uint32_t)(GPIO_Init->Alternate) << (((uint32_t)position & (uint32_t)0x07) * 4));
- GPIOx->AFR[position >> 3] = temp;
- }
-
- /* Configure IO Direction mode (Input, Output, Alternate or Analog) */
- temp = GPIOx->MODER;
- temp &= ~(GPIO_MODER_MODER0 << (position * 2));
- temp |= ((GPIO_Init->Mode & GPIO_MODE) << (position * 2));
- GPIOx->MODER = temp;
-
/* In case of Output or Alternate function mode selection */
if((GPIO_Init->Mode == GPIO_MODE_OUTPUT_PP) || (GPIO_Init->Mode == GPIO_MODE_AF_PP) ||
(GPIO_Init->Mode == GPIO_MODE_OUTPUT_OD) || (GPIO_Init->Mode == GPIO_MODE_AF_OD))
@@ -234,6 +215,25 @@ void HAL_GPIO_Init(GPIO_TypeDef *GPIOx, GPIO_InitTypeDef *GPIO_Init)
temp |= ((GPIO_Init->Pull) << (position * 2));
GPIOx->PUPDR = temp;
+ /* In case of Alternate function mode selection */
+ if((GPIO_Init->Mode == GPIO_MODE_AF_PP) || (GPIO_Init->Mode == GPIO_MODE_AF_OD))
+ {
+ /* Check the Alternate function parameter */
+ assert_param(IS_GPIO_AF(GPIO_Init->Alternate));
+
+ /* Configure Alternate function mapped with the current IO */
+ temp = GPIOx->AFR[position >> 3];
+ temp &= ~((uint32_t)0xF << ((uint32_t)(position & (uint32_t)0x07) * 4)) ;
+ temp |= ((uint32_t)(GPIO_Init->Alternate) << (((uint32_t)position & (uint32_t)0x07) * 4));
+ GPIOx->AFR[position >> 3] = temp;
+ }
+
+ /* Configure IO Direction mode (Input, Output, Alternate or Analog) */
+ temp = GPIOx->MODER;
+ temp &= ~(GPIO_MODER_MODER0 << (position * 2));
+ temp |= ((GPIO_Init->Mode & GPIO_MODE) << (position * 2));
+ GPIOx->MODER = temp;
+
/*--------------------- EXTI Mode Configuration ------------------------*/
/* Configure the External Interrupt or event for the current IO */
if((GPIO_Init->Mode & EXTI_MODE) == EXTI_MODE)
@@ -300,7 +300,7 @@ void HAL_GPIO_DeInit(GPIO_TypeDef *GPIOx, uint32_t GPIO_Pin)
/* Check the parameters */
assert_param(IS_GPIO_ALL_INSTANCE(GPIOx));
-
+
/* Configure the port pins */
for(position = 0; position < GPIO_NUMBER; position++)
{
@@ -316,10 +316,6 @@ void HAL_GPIO_DeInit(GPIO_TypeDef *GPIOx, uint32_t GPIO_Pin)
tmp &= (((uint32_t)0x0F) << (4 * (position & 0x03)));
if(tmp == ((uint32_t)(GPIO_GET_INDEX(GPIOx)) << (4 * (position & 0x03))))
{
- /* Configure the External Interrupt or event for the current IO */
- tmp = ((uint32_t)0x0F) << (4 * (position & 0x03));
- SYSCFG->EXTICR[position >> 2] &= ~tmp;
-
/* Clear EXTI line configuration */
EXTI->IMR &= ~((uint32_t)iocurrent);
EXTI->EMR &= ~((uint32_t)iocurrent);
@@ -327,6 +323,10 @@ void HAL_GPIO_DeInit(GPIO_TypeDef *GPIOx, uint32_t GPIO_Pin)
/* Clear Rising Falling edge configuration */
EXTI->RTSR &= ~((uint32_t)iocurrent);
EXTI->FTSR &= ~((uint32_t)iocurrent);
+
+ /* Configure the External Interrupt or event for the current IO */
+ tmp = ((uint32_t)0x0F) << (4 * (position & 0x03));
+ SYSCFG->EXTICR[position >> 2] &= ~tmp;
}
/*------------------------- GPIO Mode Configuration --------------------*/
/* Configure IO Direction in Input Floating Mode */
@@ -335,14 +335,14 @@ void HAL_GPIO_DeInit(GPIO_TypeDef *GPIOx, uint32_t GPIO_Pin)
/* Configure the default Alternate Function in current IO */
GPIOx->AFR[position >> 3] &= ~((uint32_t)0xF << ((uint32_t)(position & (uint32_t)0x07) * 4)) ;
- /* Configure the default value for IO Speed */
- GPIOx->OSPEEDR &= ~(GPIO_OSPEEDER_OSPEEDR0 << (position * 2));
+ /* Deactivate the Pull-up and Pull-down resistor for the current IO */
+ GPIOx->PUPDR &= ~(GPIO_PUPDR_PUPDR0 << (position * 2));
/* Configure the default value IO Output Type */
GPIOx->OTYPER &= ~(GPIO_OTYPER_OT_0 << position) ;
- /* Deactivate the Pull-up and Pull-down resistor for the current IO */
- GPIOx->PUPDR &= ~(GPIO_PUPDR_PUPDR0 << (position * 2));
+ /* Configure the default value for IO Speed */
+ GPIOx->OSPEEDR &= ~(GPIO_OSPEEDER_OSPEEDR0 << (position * 2));
}
}
}
@@ -431,13 +431,13 @@ void HAL_GPIO_TogglePin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
/* Check the parameters */
assert_param(IS_GPIO_PIN(GPIO_Pin));
- if ((GPIOx->ODR & GPIO_Pin) == GPIO_Pin)
+ if ((GPIOx->ODR & GPIO_Pin) != 0X00u)
{
GPIOx->BSRR = (uint32_t)GPIO_Pin << GPIO_NUMBER;
}
else
{
- GPIOx->BSRR = GPIO_Pin;
+ GPIOx->BSRR = (uint32_t)GPIO_Pin;
}
}
@@ -467,10 +467,11 @@ HAL_StatusTypeDef HAL_GPIO_LockPin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
GPIOx->LCKR = GPIO_Pin;
/* Set LCKx bit(s): LCKK='1' + LCK[15-0] */
GPIOx->LCKR = tmp;
- /* Read LCKK bit*/
+ /* Read LCKR register. This read is mandatory to complete key lock sequence */
tmp = GPIOx->LCKR;
- if((GPIOx->LCKR & GPIO_LCKR_LCKK) != RESET)
+ /* Read again in order to confirm lock is active */
+ if((GPIOx->LCKR & GPIO_LCKR_LCKK) != RESET)
{
return HAL_OK;
}
diff --git a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_GCC/Prog/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_i2c.c b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_GCC/Prog/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_i2c.c
index 775bff23..ef049ec4 100644
--- a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_GCC/Prog/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_i2c.c
+++ b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_GCC/Prog/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_i2c.c
@@ -223,12 +223,12 @@
*** Callback registration ***
=============================================
-
+ [..]
The compilation flag USE_HAL_I2C_REGISTER_CALLBACKS when set to 1
allows the user to configure dynamically the driver callbacks.
Use Functions @ref HAL_I2C_RegisterCallback() or @ref HAL_I2C_RegisterAddrCallback()
to register an interrupt callback.
-
+ [..]
Function @ref HAL_I2C_RegisterCallback() allows to register following callbacks:
(+) MasterTxCpltCallback : callback for Master transmission end of transfer.
(+) MasterRxCpltCallback : callback for Master reception end of transfer.
@@ -243,9 +243,9 @@
(+) MspDeInitCallback : callback for Msp DeInit.
This function takes as parameters the HAL peripheral handle, the Callback ID
and a pointer to the user callback function.
-
+ [..]
For specific callback AddrCallback use dedicated register callbacks : @ref HAL_I2C_RegisterAddrCallback().
-
+ [..]
Use function @ref HAL_I2C_UnRegisterCallback to reset a callback to the default
weak function.
@ref HAL_I2C_UnRegisterCallback takes as parameters the HAL peripheral handle,
@@ -262,9 +262,9 @@
(+) AbortCpltCallback : callback for abort completion process.
(+) MspInitCallback : callback for Msp Init.
(+) MspDeInitCallback : callback for Msp DeInit.
-
+ [..]
For callback AddrCallback use dedicated register callbacks : @ref HAL_I2C_UnRegisterAddrCallback().
-
+ [..]
By default, after the @ref HAL_I2C_Init() and when the state is @ref HAL_I2C_STATE_RESET
all callbacks are set to the corresponding weak functions:
examples @ref HAL_I2C_MasterTxCpltCallback(), @ref HAL_I2C_MasterRxCpltCallback().
@@ -273,7 +273,7 @@
these callbacks are null (not registered beforehand).
If MspInit or MspDeInit are not null, the @ref HAL_I2C_Init()/ @ref HAL_I2C_DeInit()
keep and use the user MspInit/MspDeInit callbacks (registered beforehand) whatever the state.
-
+ [..]
Callbacks can be registered/unregistered in @ref HAL_I2C_STATE_READY state only.
Exception done MspInit/MspDeInit functions that can be registered/unregistered
in @ref HAL_I2C_STATE_READY or @ref HAL_I2C_STATE_RESET state,
@@ -281,7 +281,7 @@
Then, the user first registers the MspInit/MspDeInit user callbacks
using @ref HAL_I2C_RegisterCallback() before calling @ref HAL_I2C_DeInit()
or @ref HAL_I2C_Init() function.
-
+ [..]
When the compilation flag USE_HAL_I2C_REGISTER_CALLBACKS is set to 0 or
not defined, the callback registration feature is not available and all callbacks
are set to the corresponding weak functions.
@@ -4737,6 +4737,13 @@ static HAL_StatusTypeDef I2C_Slave_ISR_IT(struct __I2C_HandleTypeDef *hi2c, uint
/* Process locked */
__HAL_LOCK(hi2c);
+ /* Check if STOPF is set */
+ if ((I2C_CHECK_FLAG(tmpITFlags, I2C_FLAG_STOPF) != RESET) && (I2C_CHECK_IT_SOURCE(ITSources, I2C_IT_STOPI) != RESET))
+ {
+ /* Call I2C Slave complete process */
+ I2C_ITSlaveCplt(hi2c, tmpITFlags);
+ }
+
if ((I2C_CHECK_FLAG(tmpITFlags, I2C_FLAG_AF) != RESET) && (I2C_CHECK_IT_SOURCE(ITSources, I2C_IT_NACKI) != RESET))
{
/* Check that I2C transfer finished */
@@ -4788,9 +4795,6 @@ static HAL_StatusTypeDef I2C_Slave_ISR_IT(struct __I2C_HandleTypeDef *hi2c, uint
{
if (hi2c->XferCount > 0U)
{
- /* Remove RXNE flag on temporary variable as read done */
- tmpITFlags &= ~I2C_FLAG_RXNE;
-
/* Read data from RXDR */
*hi2c->pBuffPtr = (uint8_t)hi2c->Instance->RXDR;
@@ -4844,13 +4848,6 @@ static HAL_StatusTypeDef I2C_Slave_ISR_IT(struct __I2C_HandleTypeDef *hi2c, uint
/* Nothing to do */
}
- /* Check if STOPF is set */
- if ((I2C_CHECK_FLAG(tmpITFlags, I2C_FLAG_STOPF) != RESET) && (I2C_CHECK_IT_SOURCE(ITSources, I2C_IT_STOPI) != RESET))
- {
- /* Call I2C Slave complete process */
- I2C_ITSlaveCplt(hi2c, tmpITFlags);
- }
-
/* Process Unlocked */
__HAL_UNLOCK(hi2c);
@@ -5008,6 +5005,13 @@ static HAL_StatusTypeDef I2C_Slave_ISR_DMA(struct __I2C_HandleTypeDef *hi2c, uin
/* Process locked */
__HAL_LOCK(hi2c);
+ /* Check if STOPF is set */
+ if ((I2C_CHECK_FLAG(ITFlags, I2C_FLAG_STOPF) != RESET) && (I2C_CHECK_IT_SOURCE(ITSources, I2C_IT_STOPI) != RESET))
+ {
+ /* Call I2C Slave complete process */
+ I2C_ITSlaveCplt(hi2c, ITFlags);
+ }
+
if ((I2C_CHECK_FLAG(ITFlags, I2C_FLAG_AF) != RESET) && (I2C_CHECK_IT_SOURCE(ITSources, I2C_IT_NACKI) != RESET))
{
/* Check that I2C transfer finished */
@@ -5092,11 +5096,6 @@ static HAL_StatusTypeDef I2C_Slave_ISR_DMA(struct __I2C_HandleTypeDef *hi2c, uin
{
I2C_ITAddrCplt(hi2c, ITFlags);
}
- else if ((I2C_CHECK_FLAG(ITFlags, I2C_FLAG_STOPF) != RESET) && (I2C_CHECK_IT_SOURCE(ITSources, I2C_IT_STOPI) != RESET))
- {
- /* Call I2C Slave complete process */
- I2C_ITSlaveCplt(hi2c, ITFlags);
- }
else
{
/* Nothing to do */
diff --git a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_GCC/Prog/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_rcc.c b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_GCC/Prog/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_rcc.c
index bf33cff4..d63a6f4e 100644
--- a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_GCC/Prog/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_rcc.c
+++ b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_GCC/Prog/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_rcc.c
@@ -317,7 +317,7 @@ HAL_StatusTypeDef HAL_RCC_DeInit(void)
SystemCoreClock = HSI_VALUE;
/* Adapt Systick interrupt period */
- if(HAL_InitTick(TICK_INT_PRIORITY) != HAL_OK)
+ if (HAL_InitTick(uwTickPrio) != HAL_OK)
{
return HAL_ERROR;
}
@@ -344,10 +344,11 @@ HAL_StatusTypeDef HAL_RCC_DeInit(void)
HAL_StatusTypeDef HAL_RCC_OscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct)
{
uint32_t tickstart;
+ uint32_t pll_config;
FlagStatus pwrclkchanged = RESET;
/* Check Null pointer */
- if(RCC_OscInitStruct == NULL)
+ if (RCC_OscInitStruct == NULL)
{
return HAL_ERROR;
}
@@ -356,15 +357,15 @@ HAL_StatusTypeDef HAL_RCC_OscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct)
assert_param(IS_RCC_OSCILLATORTYPE(RCC_OscInitStruct->OscillatorType));
/*------------------------------- HSE Configuration ------------------------*/
- if(((RCC_OscInitStruct->OscillatorType) & RCC_OSCILLATORTYPE_HSE) == RCC_OSCILLATORTYPE_HSE)
+ if (((RCC_OscInitStruct->OscillatorType) & RCC_OSCILLATORTYPE_HSE) == RCC_OSCILLATORTYPE_HSE)
{
/* Check the parameters */
assert_param(IS_RCC_HSE(RCC_OscInitStruct->HSEState));
/* When the HSE is used as system clock or clock source for PLL, It can not be disabled */
- if((__HAL_RCC_GET_SYSCLK_SOURCE() == RCC_SYSCLKSOURCE_STATUS_HSE)
- || ((__HAL_RCC_GET_SYSCLK_SOURCE() == RCC_SYSCLKSOURCE_STATUS_PLLCLK) && ((RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC) == RCC_PLLCFGR_PLLSRC_HSE)))
+ if ((__HAL_RCC_GET_SYSCLK_SOURCE() == RCC_SYSCLKSOURCE_STATUS_HSE)
+ || ((__HAL_RCC_GET_SYSCLK_SOURCE() == RCC_SYSCLKSOURCE_STATUS_PLLCLK) && ((RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC) == RCC_PLLCFGR_PLLSRC_HSE)))
{
- if((__HAL_RCC_GET_FLAG(RCC_FLAG_HSERDY) != RESET) && (RCC_OscInitStruct->HSEState == RCC_HSE_OFF))
+ if ((__HAL_RCC_GET_FLAG(RCC_FLAG_HSERDY) != RESET) && (RCC_OscInitStruct->HSEState == RCC_HSE_OFF))
{
return HAL_ERROR;
}
@@ -375,15 +376,15 @@ HAL_StatusTypeDef HAL_RCC_OscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct)
__HAL_RCC_HSE_CONFIG(RCC_OscInitStruct->HSEState);
/* Check the HSE State */
- if(RCC_OscInitStruct->HSEState != RCC_HSE_OFF)
+ if (RCC_OscInitStruct->HSEState != RCC_HSE_OFF)
{
/* Get Start Tick*/
tickstart = HAL_GetTick();
/* Wait till HSE is ready */
- while(__HAL_RCC_GET_FLAG(RCC_FLAG_HSERDY) == RESET)
+ while (__HAL_RCC_GET_FLAG(RCC_FLAG_HSERDY) == RESET)
{
- if((HAL_GetTick() - tickstart ) > HSE_TIMEOUT_VALUE)
+ if ((HAL_GetTick() - tickstart) > HSE_TIMEOUT_VALUE)
{
return HAL_TIMEOUT;
}
@@ -395,9 +396,9 @@ HAL_StatusTypeDef HAL_RCC_OscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct)
tickstart = HAL_GetTick();
/* Wait till HSE is bypassed or disabled */
- while(__HAL_RCC_GET_FLAG(RCC_FLAG_HSERDY) != RESET)
+ while (__HAL_RCC_GET_FLAG(RCC_FLAG_HSERDY) != RESET)
{
- if((HAL_GetTick() - tickstart ) > HSE_TIMEOUT_VALUE)
+ if ((HAL_GetTick() - tickstart) > HSE_TIMEOUT_VALUE)
{
return HAL_TIMEOUT;
}
@@ -406,18 +407,18 @@ HAL_StatusTypeDef HAL_RCC_OscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct)
}
}
/*----------------------------- HSI Configuration --------------------------*/
- if(((RCC_OscInitStruct->OscillatorType) & RCC_OSCILLATORTYPE_HSI) == RCC_OSCILLATORTYPE_HSI)
+ if (((RCC_OscInitStruct->OscillatorType) & RCC_OSCILLATORTYPE_HSI) == RCC_OSCILLATORTYPE_HSI)
{
/* Check the parameters */
assert_param(IS_RCC_HSI(RCC_OscInitStruct->HSIState));
assert_param(IS_RCC_CALIBRATION_VALUE(RCC_OscInitStruct->HSICalibrationValue));
/* Check if HSI is used as system clock or as PLL source when PLL is selected as system clock */
- if((__HAL_RCC_GET_SYSCLK_SOURCE() == RCC_SYSCLKSOURCE_STATUS_HSI)
- || ((__HAL_RCC_GET_SYSCLK_SOURCE() == RCC_SYSCLKSOURCE_STATUS_PLLCLK) && ((RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC) == RCC_PLLCFGR_PLLSRC_HSI)))
+ if ((__HAL_RCC_GET_SYSCLK_SOURCE() == RCC_SYSCLKSOURCE_STATUS_HSI)
+ || ((__HAL_RCC_GET_SYSCLK_SOURCE() == RCC_SYSCLKSOURCE_STATUS_PLLCLK) && ((RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC) == RCC_PLLCFGR_PLLSRC_HSI)))
{
/* When HSI is used as system clock it will not disabled */
- if((__HAL_RCC_GET_FLAG(RCC_FLAG_HSIRDY) != RESET) && (RCC_OscInitStruct->HSIState != RCC_HSI_ON))
+ if ((__HAL_RCC_GET_FLAG(RCC_FLAG_HSIRDY) != RESET) && (RCC_OscInitStruct->HSIState != RCC_HSI_ON))
{
return HAL_ERROR;
}
@@ -431,7 +432,7 @@ HAL_StatusTypeDef HAL_RCC_OscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct)
else
{
/* Check the HSI State */
- if((RCC_OscInitStruct->HSIState)!= RCC_HSI_OFF)
+ if ((RCC_OscInitStruct->HSIState) != RCC_HSI_OFF)
{
/* Enable the Internal High Speed oscillator (HSI). */
__HAL_RCC_HSI_ENABLE();
@@ -440,9 +441,9 @@ HAL_StatusTypeDef HAL_RCC_OscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct)
tickstart = HAL_GetTick();
/* Wait till HSI is ready */
- while(__HAL_RCC_GET_FLAG(RCC_FLAG_HSIRDY) == RESET)
+ while (__HAL_RCC_GET_FLAG(RCC_FLAG_HSIRDY) == RESET)
{
- if((HAL_GetTick() - tickstart ) > HSI_TIMEOUT_VALUE)
+ if ((HAL_GetTick() - tickstart) > HSI_TIMEOUT_VALUE)
{
return HAL_TIMEOUT;
}
@@ -460,9 +461,9 @@ HAL_StatusTypeDef HAL_RCC_OscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct)
tickstart = HAL_GetTick();
/* Wait till HSI is ready */
- while(__HAL_RCC_GET_FLAG(RCC_FLAG_HSIRDY) != RESET)
+ while (__HAL_RCC_GET_FLAG(RCC_FLAG_HSIRDY) != RESET)
{
- if((HAL_GetTick() - tickstart ) > HSI_TIMEOUT_VALUE)
+ if ((HAL_GetTick() - tickstart) > HSI_TIMEOUT_VALUE)
{
return HAL_TIMEOUT;
}
@@ -471,13 +472,13 @@ HAL_StatusTypeDef HAL_RCC_OscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct)
}
}
/*------------------------------ LSI Configuration -------------------------*/
- if(((RCC_OscInitStruct->OscillatorType) & RCC_OSCILLATORTYPE_LSI) == RCC_OSCILLATORTYPE_LSI)
+ if (((RCC_OscInitStruct->OscillatorType) & RCC_OSCILLATORTYPE_LSI) == RCC_OSCILLATORTYPE_LSI)
{
/* Check the parameters */
assert_param(IS_RCC_LSI(RCC_OscInitStruct->LSIState));
/* Check the LSI State */
- if((RCC_OscInitStruct->LSIState)!= RCC_LSI_OFF)
+ if ((RCC_OscInitStruct->LSIState) != RCC_LSI_OFF)
{
/* Enable the Internal Low Speed oscillator (LSI). */
__HAL_RCC_LSI_ENABLE();
@@ -486,9 +487,9 @@ HAL_StatusTypeDef HAL_RCC_OscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct)
tickstart = HAL_GetTick();
/* Wait till LSI is ready */
- while(__HAL_RCC_GET_FLAG(RCC_FLAG_LSIRDY) == RESET)
+ while (__HAL_RCC_GET_FLAG(RCC_FLAG_LSIRDY) == RESET)
{
- if((HAL_GetTick() - tickstart ) > LSI_TIMEOUT_VALUE)
+ if ((HAL_GetTick() - tickstart) > LSI_TIMEOUT_VALUE)
{
return HAL_TIMEOUT;
}
@@ -503,9 +504,9 @@ HAL_StatusTypeDef HAL_RCC_OscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct)
tickstart = HAL_GetTick();
/* Wait till LSI is ready */
- while(__HAL_RCC_GET_FLAG(RCC_FLAG_LSIRDY) != RESET)
+ while (__HAL_RCC_GET_FLAG(RCC_FLAG_LSIRDY) != RESET)
{
- if((HAL_GetTick() - tickstart ) > LSI_TIMEOUT_VALUE)
+ if ((HAL_GetTick() - tickstart) > LSI_TIMEOUT_VALUE)
{
return HAL_TIMEOUT;
}
@@ -513,21 +514,21 @@ HAL_StatusTypeDef HAL_RCC_OscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct)
}
}
/*------------------------------ LSE Configuration -------------------------*/
- if(((RCC_OscInitStruct->OscillatorType) & RCC_OSCILLATORTYPE_LSE) == RCC_OSCILLATORTYPE_LSE)
+ if (((RCC_OscInitStruct->OscillatorType) & RCC_OSCILLATORTYPE_LSE) == RCC_OSCILLATORTYPE_LSE)
{
/* Check the parameters */
assert_param(IS_RCC_LSE(RCC_OscInitStruct->LSEState));
/* Update LSE configuration in Backup Domain control register */
/* Requires to enable write access to Backup Domain of necessary */
- if(__HAL_RCC_PWR_IS_CLK_DISABLED())
+ if (__HAL_RCC_PWR_IS_CLK_DISABLED())
{
/* Enable Power Clock*/
__HAL_RCC_PWR_CLK_ENABLE();
pwrclkchanged = SET;
}
- if(HAL_IS_BIT_CLR(PWR->CR1, PWR_CR1_DBP))
+ if (HAL_IS_BIT_CLR(PWR->CR1, PWR_CR1_DBP))
{
/* Enable write access to Backup domain */
PWR->CR1 |= PWR_CR1_DBP;
@@ -535,9 +536,9 @@ HAL_StatusTypeDef HAL_RCC_OscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct)
/* Wait for Backup domain Write protection disable */
tickstart = HAL_GetTick();
- while(HAL_IS_BIT_CLR(PWR->CR1, PWR_CR1_DBP))
+ while (HAL_IS_BIT_CLR(PWR->CR1, PWR_CR1_DBP))
{
- if((HAL_GetTick() - tickstart ) > RCC_DBP_TIMEOUT_VALUE)
+ if ((HAL_GetTick() - tickstart) > RCC_DBP_TIMEOUT_VALUE)
{
return HAL_TIMEOUT;
}
@@ -547,15 +548,15 @@ HAL_StatusTypeDef HAL_RCC_OscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct)
/* Set the new LSE configuration -----------------------------------------*/
__HAL_RCC_LSE_CONFIG(RCC_OscInitStruct->LSEState);
/* Check the LSE State */
- if((RCC_OscInitStruct->LSEState) != RCC_LSE_OFF)
+ if ((RCC_OscInitStruct->LSEState) != RCC_LSE_OFF)
{
/* Get Start Tick*/
tickstart = HAL_GetTick();
/* Wait till LSE is ready */
- while(__HAL_RCC_GET_FLAG(RCC_FLAG_LSERDY) == RESET)
+ while (__HAL_RCC_GET_FLAG(RCC_FLAG_LSERDY) == RESET)
{
- if((HAL_GetTick() - tickstart ) > RCC_LSE_TIMEOUT_VALUE)
+ if ((HAL_GetTick() - tickstart) > RCC_LSE_TIMEOUT_VALUE)
{
return HAL_TIMEOUT;
}
@@ -567,9 +568,9 @@ HAL_StatusTypeDef HAL_RCC_OscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct)
tickstart = HAL_GetTick();
/* Wait till LSE is ready */
- while(__HAL_RCC_GET_FLAG(RCC_FLAG_LSERDY) != RESET)
+ while (__HAL_RCC_GET_FLAG(RCC_FLAG_LSERDY) != RESET)
{
- if((HAL_GetTick() - tickstart ) > RCC_LSE_TIMEOUT_VALUE)
+ if ((HAL_GetTick() - tickstart) > RCC_LSE_TIMEOUT_VALUE)
{
return HAL_TIMEOUT;
}
@@ -577,7 +578,7 @@ HAL_StatusTypeDef HAL_RCC_OscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct)
}
/* Restore clock configuration if changed */
- if(pwrclkchanged == SET)
+ if (pwrclkchanged == SET)
{
__HAL_RCC_PWR_CLK_DISABLE();
}
@@ -588,9 +589,9 @@ HAL_StatusTypeDef HAL_RCC_OscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct)
if ((RCC_OscInitStruct->PLL.PLLState) != RCC_PLL_NONE)
{
/* Check if the PLL is used as system clock or not */
- if(__HAL_RCC_GET_SYSCLK_SOURCE() != RCC_SYSCLKSOURCE_STATUS_PLLCLK)
+ if (__HAL_RCC_GET_SYSCLK_SOURCE() != RCC_SYSCLKSOURCE_STATUS_PLLCLK)
{
- if((RCC_OscInitStruct->PLL.PLLState) == RCC_PLL_ON)
+ if ((RCC_OscInitStruct->PLL.PLLState) == RCC_PLL_ON)
{
/* Check the parameters */
assert_param(IS_RCC_PLLSOURCE(RCC_OscInitStruct->PLL.PLLSource));
@@ -609,9 +610,9 @@ HAL_StatusTypeDef HAL_RCC_OscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct)
tickstart = HAL_GetTick();
/* Wait till PLL is ready */
- while(__HAL_RCC_GET_FLAG(RCC_FLAG_PLLRDY) != RESET)
+ while (__HAL_RCC_GET_FLAG(RCC_FLAG_PLLRDY) != RESET)
{
- if((HAL_GetTick() - tickstart ) > PLL_TIMEOUT_VALUE)
+ if ((HAL_GetTick() - tickstart) > PLL_TIMEOUT_VALUE)
{
return HAL_TIMEOUT;
}
@@ -640,9 +641,9 @@ HAL_StatusTypeDef HAL_RCC_OscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct)
tickstart = HAL_GetTick();
/* Wait till PLL is ready */
- while(__HAL_RCC_GET_FLAG(RCC_FLAG_PLLRDY) == RESET)
+ while (__HAL_RCC_GET_FLAG(RCC_FLAG_PLLRDY) == RESET)
{
- if((HAL_GetTick() - tickstart ) > PLL_TIMEOUT_VALUE)
+ if ((HAL_GetTick() - tickstart) > PLL_TIMEOUT_VALUE)
{
return HAL_TIMEOUT;
}
@@ -657,9 +658,9 @@ HAL_StatusTypeDef HAL_RCC_OscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct)
tickstart = HAL_GetTick();
/* Wait till PLL is ready */
- while(__HAL_RCC_GET_FLAG(RCC_FLAG_PLLRDY) != RESET)
+ while (__HAL_RCC_GET_FLAG(RCC_FLAG_PLLRDY) != RESET)
{
- if((HAL_GetTick() - tickstart ) > PLL_TIMEOUT_VALUE)
+ if ((HAL_GetTick() - tickstart) > PLL_TIMEOUT_VALUE)
{
return HAL_TIMEOUT;
}
@@ -668,7 +669,27 @@ HAL_StatusTypeDef HAL_RCC_OscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct)
}
else
{
- return HAL_ERROR;
+ /* Do not return HAL_ERROR if request repeats the current configuration */
+ pll_config = RCC->PLLCFGR;
+#if defined (RCC_PLLCFGR_PLLR)
+ if (((RCC_OscInitStruct->PLL.PLLState) == RCC_PLL_OFF) ||
+ (READ_BIT(pll_config, RCC_PLLCFGR_PLLSRC) != RCC_OscInitStruct->PLL.PLLSource) ||
+ (READ_BIT(pll_config, RCC_PLLCFGR_PLLM) != RCC_OscInitStruct->PLL.PLLM) ||
+ (READ_BIT(pll_config, RCC_PLLCFGR_PLLN) != (RCC_OscInitStruct->PLL.PLLN << RCC_PLLCFGR_PLLN_Pos)) ||
+ (READ_BIT(pll_config, RCC_PLLCFGR_PLLP) != ((((RCC_OscInitStruct->PLL.PLLP) >> 1U) - 1U) << RCC_PLLCFGR_PLLP_Pos)) ||
+ (READ_BIT(pll_config, RCC_PLLCFGR_PLLQ) != (RCC_OscInitStruct->PLL.PLLQ << RCC_PLLCFGR_PLLQ_Pos)) ||
+ (READ_BIT(pll_config, RCC_PLLCFGR_PLLR) != (RCC_OscInitStruct->PLL.PLLR << RCC_PLLCFGR_PLLR_Pos)))
+#else
+ if (((RCC_OscInitStruct->PLL.PLLState) == RCC_PLL_OFF) ||
+ (READ_BIT(pll_config, RCC_PLLCFGR_PLLSRC) != RCC_OscInitStruct->PLL.PLLSource) ||
+ (READ_BIT(pll_config, RCC_PLLCFGR_PLLM) != RCC_OscInitStruct->PLL.PLLM) ||
+ (READ_BIT(pll_config, RCC_PLLCFGR_PLLN) != (RCC_OscInitStruct->PLL.PLLN << RCC_PLLCFGR_PLLN_Pos)) ||
+ (READ_BIT(pll_config, RCC_PLLCFGR_PLLP) != ((((RCC_OscInitStruct->PLL.PLLP) >> 1U) - 1U) << RCC_PLLCFGR_PLLP_Pos)) ||
+ (READ_BIT(pll_config, RCC_PLLCFGR_PLLQ) != (RCC_OscInitStruct->PLL.PLLQ << RCC_PLLCFGR_PLLQ_Pos)))
+#endif
+ {
+ return HAL_ERROR;
+ }
}
}
return HAL_OK;
@@ -705,7 +726,7 @@ HAL_StatusTypeDef HAL_RCC_ClockConfig(RCC_ClkInitTypeDef *RCC_ClkInitStruct, ui
uint32_t tickstart = 0;
/* Check Null pointer */
- if(RCC_ClkInitStruct == NULL)
+ if (RCC_ClkInitStruct == NULL)
{
return HAL_ERROR;
}
@@ -719,30 +740,30 @@ HAL_StatusTypeDef HAL_RCC_ClockConfig(RCC_ClkInitTypeDef *RCC_ClkInitStruct, ui
(HCLK) and the supply voltage of the device. */
/* Increasing the CPU frequency */
- if(FLatency > __HAL_FLASH_GET_LATENCY())
+ if (FLatency > __HAL_FLASH_GET_LATENCY())
{
/* Program the new number of wait states to the LATENCY bits in the FLASH_ACR register */
__HAL_FLASH_SET_LATENCY(FLatency);
/* Check that the new number of wait states is taken into account to access the Flash
memory by reading the FLASH_ACR register */
- if(__HAL_FLASH_GET_LATENCY() != FLatency)
+ if (__HAL_FLASH_GET_LATENCY() != FLatency)
{
return HAL_ERROR;
}
}
/*-------------------------- HCLK Configuration --------------------------*/
- if(((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_HCLK) == RCC_CLOCKTYPE_HCLK)
+ if (((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_HCLK) == RCC_CLOCKTYPE_HCLK)
{
/* Set the highest APBx dividers in order to ensure that we do not go through
a non-spec phase whatever we decrease or increase HCLK. */
- if(((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_PCLK1) == RCC_CLOCKTYPE_PCLK1)
+ if (((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_PCLK1) == RCC_CLOCKTYPE_PCLK1)
{
MODIFY_REG(RCC->CFGR, RCC_CFGR_PPRE1, RCC_HCLK_DIV16);
}
- if(((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_PCLK2) == RCC_CLOCKTYPE_PCLK2)
+ if (((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_PCLK2) == RCC_CLOCKTYPE_PCLK2)
{
MODIFY_REG(RCC->CFGR, RCC_CFGR_PPRE2, (RCC_HCLK_DIV16 << 3));
}
@@ -753,24 +774,24 @@ HAL_StatusTypeDef HAL_RCC_ClockConfig(RCC_ClkInitTypeDef *RCC_ClkInitStruct, ui
}
/*------------------------- SYSCLK Configuration ---------------------------*/
- if(((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_SYSCLK) == RCC_CLOCKTYPE_SYSCLK)
+ if (((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_SYSCLK) == RCC_CLOCKTYPE_SYSCLK)
{
assert_param(IS_RCC_SYSCLKSOURCE(RCC_ClkInitStruct->SYSCLKSource));
/* HSE is selected as System Clock Source */
- if(RCC_ClkInitStruct->SYSCLKSource == RCC_SYSCLKSOURCE_HSE)
+ if (RCC_ClkInitStruct->SYSCLKSource == RCC_SYSCLKSOURCE_HSE)
{
/* Check the HSE ready flag */
- if(__HAL_RCC_GET_FLAG(RCC_FLAG_HSERDY) == RESET)
+ if (__HAL_RCC_GET_FLAG(RCC_FLAG_HSERDY) == RESET)
{
return HAL_ERROR;
}
}
/* PLL is selected as System Clock Source */
- else if(RCC_ClkInitStruct->SYSCLKSource == RCC_SYSCLKSOURCE_PLLCLK)
+ else if (RCC_ClkInitStruct->SYSCLKSource == RCC_SYSCLKSOURCE_PLLCLK)
{
/* Check the PLL ready flag */
- if(__HAL_RCC_GET_FLAG(RCC_FLAG_PLLRDY) == RESET)
+ if (__HAL_RCC_GET_FLAG(RCC_FLAG_PLLRDY) == RESET)
{
return HAL_ERROR;
}
@@ -779,7 +800,7 @@ HAL_StatusTypeDef HAL_RCC_ClockConfig(RCC_ClkInitTypeDef *RCC_ClkInitStruct, ui
else
{
/* Check the HSI ready flag */
- if(__HAL_RCC_GET_FLAG(RCC_FLAG_HSIRDY) == RESET)
+ if (__HAL_RCC_GET_FLAG(RCC_FLAG_HSIRDY) == RESET)
{
return HAL_ERROR;
}
@@ -800,38 +821,38 @@ HAL_StatusTypeDef HAL_RCC_ClockConfig(RCC_ClkInitTypeDef *RCC_ClkInitStruct, ui
}
/* Decreasing the number of wait states because of lower CPU frequency */
- if(FLatency < __HAL_FLASH_GET_LATENCY())
+ if (FLatency < __HAL_FLASH_GET_LATENCY())
{
/* Program the new number of wait states to the LATENCY bits in the FLASH_ACR register */
__HAL_FLASH_SET_LATENCY(FLatency);
/* Check that the new number of wait states is taken into account to access the Flash
memory by reading the FLASH_ACR register */
- if(__HAL_FLASH_GET_LATENCY() != FLatency)
+ if (__HAL_FLASH_GET_LATENCY() != FLatency)
{
return HAL_ERROR;
}
}
/*-------------------------- PCLK1 Configuration ---------------------------*/
- if(((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_PCLK1) == RCC_CLOCKTYPE_PCLK1)
+ if (((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_PCLK1) == RCC_CLOCKTYPE_PCLK1)
{
assert_param(IS_RCC_PCLK(RCC_ClkInitStruct->APB1CLKDivider));
MODIFY_REG(RCC->CFGR, RCC_CFGR_PPRE1, RCC_ClkInitStruct->APB1CLKDivider);
}
/*-------------------------- PCLK2 Configuration ---------------------------*/
- if(((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_PCLK2) == RCC_CLOCKTYPE_PCLK2)
+ if (((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_PCLK2) == RCC_CLOCKTYPE_PCLK2)
{
assert_param(IS_RCC_PCLK(RCC_ClkInitStruct->APB2CLKDivider));
MODIFY_REG(RCC->CFGR, RCC_CFGR_PPRE2, ((RCC_ClkInitStruct->APB2CLKDivider) << 3));
}
/* Update the SystemCoreClock global variable */
- SystemCoreClock = HAL_RCC_GetSysClockFreq() >> AHBPrescTable[(RCC->CFGR & RCC_CFGR_HPRE)>> RCC_CFGR_HPRE_Pos];
+ SystemCoreClock = HAL_RCC_GetSysClockFreq() >> AHBPrescTable[(RCC->CFGR & RCC_CFGR_HPRE) >> RCC_CFGR_HPRE_Pos];
/* Configure the source of time base considering new system clocks settings*/
- HAL_InitTick (TICK_INT_PRIORITY);
+ HAL_InitTick(uwTickPrio);
return HAL_OK;
}
@@ -888,7 +909,7 @@ void HAL_RCC_MCOConfig(uint32_t RCC_MCOx, uint32_t RCC_MCOSource, uint32_t RCC_M
assert_param(IS_RCC_MCO(RCC_MCOx));
assert_param(IS_RCC_MCODIV(RCC_MCODiv));
/* RCC_MCO1 */
- if(RCC_MCOx == RCC_MCO1)
+ if (RCC_MCOx == RCC_MCO1)
{
assert_param(IS_RCC_MCO1SOURCE(RCC_MCOSource));
@@ -990,7 +1011,7 @@ uint32_t HAL_RCC_GetSysClockFreq(void)
case RCC_SYSCLKSOURCE_STATUS_HSI: /* HSI used as system clock source */
{
sysclockfreq = HSI_VALUE;
- break;
+ break;
}
case RCC_SYSCLKSOURCE_STATUS_HSE: /* HSE used as system clock source */
{
@@ -1005,16 +1026,16 @@ uint32_t HAL_RCC_GetSysClockFreq(void)
if (__HAL_RCC_GET_PLL_OSCSOURCE() != RCC_PLLCFGR_PLLSRC_HSI)
{
/* HSE used as PLL clock source */
- pllvco = (uint32_t) ((((uint64_t) HSE_VALUE * ((uint64_t) ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> RCC_PLLCFGR_PLLN_Pos)))) / (uint64_t)pllm);
+ pllvco = (uint32_t)((((uint64_t) HSE_VALUE * ((uint64_t)((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> RCC_PLLCFGR_PLLN_Pos)))) / (uint64_t)pllm);
}
else
{
/* HSI used as PLL clock source */
- pllvco = (uint32_t) ((((uint64_t) HSI_VALUE * ((uint64_t) ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> RCC_PLLCFGR_PLLN_Pos)))) / (uint64_t)pllm);
+ pllvco = (uint32_t)((((uint64_t) HSI_VALUE * ((uint64_t)((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> RCC_PLLCFGR_PLLN_Pos)))) / (uint64_t)pllm);
}
- pllp = ((((RCC->PLLCFGR & RCC_PLLCFGR_PLLP) >> RCC_PLLCFGR_PLLP_Pos) + 1 ) *2);
+ pllp = ((((RCC->PLLCFGR & RCC_PLLCFGR_PLLP) >> RCC_PLLCFGR_PLLP_Pos) + 1) * 2);
- sysclockfreq = pllvco/pllp;
+ sysclockfreq = pllvco / pllp;
break;
}
default:
@@ -1047,7 +1068,7 @@ uint32_t HAL_RCC_GetHCLKFreq(void)
uint32_t HAL_RCC_GetPCLK1Freq(void)
{
/* Get HCLK source and Compute PCLK1 frequency ---------------------------*/
- return (HAL_RCC_GetHCLKFreq() >> APBPrescTable[(RCC->CFGR & RCC_CFGR_PPRE1)>> RCC_CFGR_PPRE1_Pos]);
+ return (HAL_RCC_GetHCLKFreq() >> APBPrescTable[(RCC->CFGR & RCC_CFGR_PPRE1) >> RCC_CFGR_PPRE1_Pos]);
}
/**
@@ -1059,7 +1080,7 @@ uint32_t HAL_RCC_GetPCLK1Freq(void)
uint32_t HAL_RCC_GetPCLK2Freq(void)
{
/* Get HCLK source and Compute PCLK2 frequency ---------------------------*/
- return (HAL_RCC_GetHCLKFreq()>> APBPrescTable[(RCC->CFGR & RCC_CFGR_PPRE2)>> RCC_CFGR_PPRE2_Pos]);
+ return (HAL_RCC_GetHCLKFreq() >> APBPrescTable[(RCC->CFGR & RCC_CFGR_PPRE2) >> RCC_CFGR_PPRE2_Pos]);
}
/**
@@ -1075,11 +1096,11 @@ void HAL_RCC_GetOscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct)
RCC_OscInitStruct->OscillatorType = RCC_OSCILLATORTYPE_HSE | RCC_OSCILLATORTYPE_HSI | RCC_OSCILLATORTYPE_LSE | RCC_OSCILLATORTYPE_LSI;
/* Get the HSE configuration -----------------------------------------------*/
- if((RCC->CR &RCC_CR_HSEBYP) == RCC_CR_HSEBYP)
+ if ((RCC->CR & RCC_CR_HSEBYP) == RCC_CR_HSEBYP)
{
RCC_OscInitStruct->HSEState = RCC_HSE_BYPASS;
}
- else if((RCC->CR &RCC_CR_HSEON) == RCC_CR_HSEON)
+ else if ((RCC->CR & RCC_CR_HSEON) == RCC_CR_HSEON)
{
RCC_OscInitStruct->HSEState = RCC_HSE_ON;
}
@@ -1089,7 +1110,7 @@ void HAL_RCC_GetOscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct)
}
/* Get the HSI configuration -----------------------------------------------*/
- if((RCC->CR &RCC_CR_HSION) == RCC_CR_HSION)
+ if ((RCC->CR & RCC_CR_HSION) == RCC_CR_HSION)
{
RCC_OscInitStruct->HSIState = RCC_HSI_ON;
}
@@ -1098,14 +1119,14 @@ void HAL_RCC_GetOscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct)
RCC_OscInitStruct->HSIState = RCC_HSI_OFF;
}
- RCC_OscInitStruct->HSICalibrationValue = (uint32_t)((RCC->CR &RCC_CR_HSITRIM) >> RCC_CR_HSITRIM_Pos);
+ RCC_OscInitStruct->HSICalibrationValue = (uint32_t)((RCC->CR & RCC_CR_HSITRIM) >> RCC_CR_HSITRIM_Pos);
/* Get the LSE configuration -----------------------------------------------*/
- if((RCC->BDCR &RCC_BDCR_LSEBYP) == RCC_BDCR_LSEBYP)
+ if ((RCC->BDCR & RCC_BDCR_LSEBYP) == RCC_BDCR_LSEBYP)
{
RCC_OscInitStruct->LSEState = RCC_LSE_BYPASS;
}
- else if((RCC->BDCR &RCC_BDCR_LSEON) == RCC_BDCR_LSEON)
+ else if ((RCC->BDCR & RCC_BDCR_LSEON) == RCC_BDCR_LSEON)
{
RCC_OscInitStruct->LSEState = RCC_LSE_ON;
}
@@ -1115,7 +1136,7 @@ void HAL_RCC_GetOscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct)
}
/* Get the LSI configuration -----------------------------------------------*/
- if((RCC->CSR &RCC_CSR_LSION) == RCC_CSR_LSION)
+ if ((RCC->CSR & RCC_CSR_LSION) == RCC_CSR_LSION)
{
RCC_OscInitStruct->LSIState = RCC_LSI_ON;
}
@@ -1125,7 +1146,7 @@ void HAL_RCC_GetOscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct)
}
/* Get the PLL configuration -----------------------------------------------*/
- if((RCC->CR &RCC_CR_PLLON) == RCC_CR_PLLON)
+ if ((RCC->CR & RCC_CR_PLLON) == RCC_CR_PLLON)
{
RCC_OscInitStruct->PLL.PLLState = RCC_PLL_ON;
}
@@ -1180,7 +1201,7 @@ void HAL_RCC_GetClockConfig(RCC_ClkInitTypeDef *RCC_ClkInitStruct, uint32_t *pF
void HAL_RCC_NMI_IRQHandler(void)
{
/* Check RCC CSSF flag */
- if(__HAL_RCC_GET_IT(RCC_IT_CSS))
+ if (__HAL_RCC_GET_IT(RCC_IT_CSS))
{
/* RCC Clock Security System interrupt user callback */
HAL_RCC_CSSCallback();
diff --git a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_GCC/Prog/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_tim.c b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_GCC/Prog/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_tim.c
index c4676923..29de7d5b 100644
--- a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_GCC/Prog/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_tim.c
+++ b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_GCC/Prog/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_tim.c
@@ -98,18 +98,22 @@
*** Callback registration ***
=============================================
+ [..]
The compilation define USE_HAL_TIM_REGISTER_CALLBACKS when set to 1
allows the user to configure dynamically the driver callbacks.
+ [..]
Use Function @ref HAL_TIM_RegisterCallback() to register a callback.
@ref HAL_TIM_RegisterCallback() takes as parameters the HAL peripheral handle,
the Callback ID and a pointer to the user callback function.
+ [..]
Use function @ref HAL_TIM_UnRegisterCallback() to reset a callback to the default
weak function.
@ref HAL_TIM_UnRegisterCallback takes as parameters the HAL peripheral handle,
and the Callback ID.
+ [..]
These functions allow to register/unregister following callbacks:
(+) Base_MspInitCallback : TIM Base Msp Init Callback.
(+) Base_MspDeInitCallback : TIM Base Msp DeInit Callback.
@@ -140,15 +144,18 @@
(+) BreakCallback : TIM Break Callback.
(+) Break2Callback : TIM Break2 Callback.
+ [..]
By default, after the Init and when the state is HAL_TIM_STATE_RESET
all interrupt callbacks are set to the corresponding weak functions:
examples @ref HAL_TIM_TriggerCallback(), @ref HAL_TIM_ErrorCallback().
+ [..]
Exception done for MspInit and MspDeInit functions that are reset to the legacy weak
functionalities in the Init / DeInit only when these callbacks are null
(not registered beforehand). If not, MspInit or MspDeInit are not null, the Init / DeInit
keep and use the user MspInit / MspDeInit callbacks(registered beforehand)
+ [..]
Callbacks can be registered / unregistered in HAL_TIM_STATE_READY state only.
Exception done MspInit / MspDeInit that can be registered / unregistered
in HAL_TIM_STATE_READY or HAL_TIM_STATE_RESET state,
@@ -156,6 +163,7 @@ all interrupt callbacks are set to the corresponding weak functions:
In that case first register the MspInit/MspDeInit user callbacks
using @ref HAL_TIM_RegisterCallback() before calling DeInit or Init function.
+ [..]
When The compilation define USE_HAL_TIM_REGISTER_CALLBACKS is set to 0 or
not defined, the callback registration feature is not available and all callbacks
are set to the corresponding weak functions.
@@ -216,7 +224,7 @@ static void TIM_DMAPeriodElapsedHalfCplt(DMA_HandleTypeDef *hdma);
static void TIM_DMATriggerCplt(DMA_HandleTypeDef *hdma);
static void TIM_DMATriggerHalfCplt(DMA_HandleTypeDef *hdma);
static HAL_StatusTypeDef TIM_SlaveTimer_SetConfig(TIM_HandleTypeDef *htim,
- TIM_SlaveConfigTypeDef *sSlaveConfig);
+ TIM_SlaveConfigTypeDef *sSlaveConfig);
/**
* @}
*/
@@ -227,8 +235,8 @@ static HAL_StatusTypeDef TIM_SlaveTimer_SetConfig(TIM_HandleTypeDef *htim,
*/
/** @defgroup TIM_Exported_Functions_Group1 TIM Time Base functions
- * @brief Time Base functions
- *
+ * @brief Time Base functions
+ *
@verbatim
==============================================================================
##### Time Base functions #####
@@ -482,11 +490,11 @@ HAL_StatusTypeDef HAL_TIM_Base_Start_DMA(TIM_HandleTypeDef *htim, uint32_t *pDat
/* Check the parameters */
assert_param(IS_TIM_DMA_INSTANCE(htim->Instance));
- if ((htim->State == HAL_TIM_STATE_BUSY))
+ if (htim->State == HAL_TIM_STATE_BUSY)
{
return HAL_BUSY;
}
- else if ((htim->State == HAL_TIM_STATE_READY))
+ else if (htim->State == HAL_TIM_STATE_READY)
{
if ((pData == NULL) && (Length > 0U))
{
@@ -559,8 +567,8 @@ HAL_StatusTypeDef HAL_TIM_Base_Stop_DMA(TIM_HandleTypeDef *htim)
*/
/** @defgroup TIM_Exported_Functions_Group2 TIM Output Compare functions
- * @brief TIM Output Compare functions
- *
+ * @brief TIM Output Compare functions
+ *
@verbatim
==============================================================================
##### TIM Output Compare functions #####
@@ -929,16 +937,16 @@ HAL_StatusTypeDef HAL_TIM_OC_Stop_IT(TIM_HandleTypeDef *htim, uint32_t Channel)
*/
HAL_StatusTypeDef HAL_TIM_OC_Start_DMA(TIM_HandleTypeDef *htim, uint32_t Channel, uint32_t *pData, uint16_t Length)
{
- uint32_t tmpsmcr;
+ uint32_t tmpsmcr;
/* Check the parameters */
assert_param(IS_TIM_CCX_INSTANCE(htim->Instance, Channel));
- if ((htim->State == HAL_TIM_STATE_BUSY))
+ if (htim->State == HAL_TIM_STATE_BUSY)
{
return HAL_BUSY;
}
- else if ((htim->State == HAL_TIM_STATE_READY))
+ else if (htim->State == HAL_TIM_STATE_READY)
{
if ((pData == NULL) && (Length > 0U))
{
@@ -1136,8 +1144,8 @@ HAL_StatusTypeDef HAL_TIM_OC_Stop_DMA(TIM_HandleTypeDef *htim, uint32_t Channel)
*/
/** @defgroup TIM_Exported_Functions_Group3 TIM PWM functions
- * @brief TIM PWM functions
- *
+ * @brief TIM PWM functions
+ *
@verbatim
==============================================================================
##### TIM PWM functions #####
@@ -1513,11 +1521,11 @@ HAL_StatusTypeDef HAL_TIM_PWM_Start_DMA(TIM_HandleTypeDef *htim, uint32_t Channe
/* Check the parameters */
assert_param(IS_TIM_CCX_INSTANCE(htim->Instance, Channel));
- if ((htim->State == HAL_TIM_STATE_BUSY))
+ if (htim->State == HAL_TIM_STATE_BUSY)
{
return HAL_BUSY;
}
- else if ((htim->State == HAL_TIM_STATE_READY))
+ else if (htim->State == HAL_TIM_STATE_READY)
{
if ((pData == NULL) && (Length > 0U))
{
@@ -1714,8 +1722,8 @@ HAL_StatusTypeDef HAL_TIM_PWM_Stop_DMA(TIM_HandleTypeDef *htim, uint32_t Channel
*/
/** @defgroup TIM_Exported_Functions_Group4 TIM Input Capture functions
- * @brief TIM Input Capture functions
- *
+ * @brief TIM Input Capture functions
+ *
@verbatim
==============================================================================
##### TIM Input Capture functions #####
@@ -2061,11 +2069,11 @@ HAL_StatusTypeDef HAL_TIM_IC_Start_DMA(TIM_HandleTypeDef *htim, uint32_t Channel
assert_param(IS_TIM_CCX_INSTANCE(htim->Instance, Channel));
assert_param(IS_TIM_DMA_CC_INSTANCE(htim->Instance));
- if ((htim->State == HAL_TIM_STATE_BUSY))
+ if (htim->State == HAL_TIM_STATE_BUSY)
{
return HAL_BUSY;
}
- else if ((htim->State == HAL_TIM_STATE_READY))
+ else if (htim->State == HAL_TIM_STATE_READY)
{
if ((pData == NULL) && (Length > 0U))
{
@@ -2249,8 +2257,8 @@ HAL_StatusTypeDef HAL_TIM_IC_Stop_DMA(TIM_HandleTypeDef *htim, uint32_t Channel)
*/
/** @defgroup TIM_Exported_Functions_Group5 TIM One Pulse functions
- * @brief TIM One Pulse functions
- *
+ * @brief TIM One Pulse functions
+ *
@verbatim
==============================================================================
##### TIM One Pulse functions #####
@@ -2563,8 +2571,8 @@ HAL_StatusTypeDef HAL_TIM_OnePulse_Stop_IT(TIM_HandleTypeDef *htim, uint32_t Out
*/
/** @defgroup TIM_Exported_Functions_Group6 TIM Encoder functions
- * @brief TIM Encoder functions
- *
+ * @brief TIM Encoder functions
+ *
@verbatim
==============================================================================
##### TIM Encoder functions #####
@@ -2609,15 +2617,15 @@ HAL_StatusTypeDef HAL_TIM_Encoder_Init(TIM_HandleTypeDef *htim, TIM_Encoder_Ini
}
/* Check the parameters */
+ assert_param(IS_TIM_ENCODER_INTERFACE_INSTANCE(htim->Instance));
assert_param(IS_TIM_COUNTER_MODE(htim->Init.CounterMode));
assert_param(IS_TIM_CLOCKDIVISION_DIV(htim->Init.ClockDivision));
assert_param(IS_TIM_AUTORELOAD_PRELOAD(htim->Init.AutoReloadPreload));
- assert_param(IS_TIM_CC2_INSTANCE(htim->Instance));
assert_param(IS_TIM_ENCODER_MODE(sConfig->EncoderMode));
assert_param(IS_TIM_IC_SELECTION(sConfig->IC1Selection));
assert_param(IS_TIM_IC_SELECTION(sConfig->IC2Selection));
- assert_param(IS_TIM_IC_POLARITY(sConfig->IC1Polarity));
- assert_param(IS_TIM_IC_POLARITY(sConfig->IC2Polarity));
+ assert_param(IS_TIM_ENCODERINPUT_POLARITY(sConfig->IC1Polarity));
+ assert_param(IS_TIM_ENCODERINPUT_POLARITY(sConfig->IC2Polarity));
assert_param(IS_TIM_IC_PRESCALER(sConfig->IC1Prescaler));
assert_param(IS_TIM_IC_PRESCALER(sConfig->IC2Prescaler));
assert_param(IS_TIM_IC_FILTER(sConfig->IC1Filter));
@@ -2775,7 +2783,7 @@ __weak void HAL_TIM_Encoder_MspDeInit(TIM_HandleTypeDef *htim)
HAL_StatusTypeDef HAL_TIM_Encoder_Start(TIM_HandleTypeDef *htim, uint32_t Channel)
{
/* Check the parameters */
- assert_param(IS_TIM_CC2_INSTANCE(htim->Instance));
+ assert_param(IS_TIM_ENCODER_INTERFACE_INSTANCE(htim->Instance));
/* Enable the encoder interface channels */
switch (Channel)
@@ -2819,7 +2827,7 @@ HAL_StatusTypeDef HAL_TIM_Encoder_Start(TIM_HandleTypeDef *htim, uint32_t Channe
HAL_StatusTypeDef HAL_TIM_Encoder_Stop(TIM_HandleTypeDef *htim, uint32_t Channel)
{
/* Check the parameters */
- assert_param(IS_TIM_CC2_INSTANCE(htim->Instance));
+ assert_param(IS_TIM_ENCODER_INTERFACE_INSTANCE(htim->Instance));
/* Disable the Input Capture channels 1 and 2
(in the EncoderInterface the two possible channels that can be used are TIM_CHANNEL_1 and TIM_CHANNEL_2) */
@@ -2865,7 +2873,7 @@ HAL_StatusTypeDef HAL_TIM_Encoder_Stop(TIM_HandleTypeDef *htim, uint32_t Channel
HAL_StatusTypeDef HAL_TIM_Encoder_Start_IT(TIM_HandleTypeDef *htim, uint32_t Channel)
{
/* Check the parameters */
- assert_param(IS_TIM_CC2_INSTANCE(htim->Instance));
+ assert_param(IS_TIM_ENCODER_INTERFACE_INSTANCE(htim->Instance));
/* Enable the encoder interface channels */
/* Enable the capture compare Interrupts 1 and/or 2 */
@@ -2915,7 +2923,7 @@ HAL_StatusTypeDef HAL_TIM_Encoder_Start_IT(TIM_HandleTypeDef *htim, uint32_t Cha
HAL_StatusTypeDef HAL_TIM_Encoder_Stop_IT(TIM_HandleTypeDef *htim, uint32_t Channel)
{
/* Check the parameters */
- assert_param(IS_TIM_CC2_INSTANCE(htim->Instance));
+ assert_param(IS_TIM_ENCODER_INTERFACE_INSTANCE(htim->Instance));
/* Disable the Input Capture channels 1 and 2
(in the EncoderInterface the two possible channels that can be used are TIM_CHANNEL_1 and TIM_CHANNEL_2) */
@@ -2966,16 +2974,17 @@ HAL_StatusTypeDef HAL_TIM_Encoder_Stop_IT(TIM_HandleTypeDef *htim, uint32_t Chan
* @param Length The length of data to be transferred from TIM peripheral to memory.
* @retval HAL status
*/
-HAL_StatusTypeDef HAL_TIM_Encoder_Start_DMA(TIM_HandleTypeDef *htim, uint32_t Channel, uint32_t *pData1, uint32_t *pData2, uint16_t Length)
+HAL_StatusTypeDef HAL_TIM_Encoder_Start_DMA(TIM_HandleTypeDef *htim, uint32_t Channel, uint32_t *pData1,
+ uint32_t *pData2, uint16_t Length)
{
/* Check the parameters */
- assert_param(IS_TIM_DMA_CC_INSTANCE(htim->Instance));
+ assert_param(IS_TIM_ENCODER_INTERFACE_INSTANCE(htim->Instance));
- if ((htim->State == HAL_TIM_STATE_BUSY))
+ if (htim->State == HAL_TIM_STATE_BUSY)
{
return HAL_BUSY;
}
- else if ((htim->State == HAL_TIM_STATE_READY))
+ else if (htim->State == HAL_TIM_STATE_READY)
{
if ((((pData1 == NULL) || (pData2 == NULL))) && (Length > 0U))
{
@@ -3103,7 +3112,7 @@ HAL_StatusTypeDef HAL_TIM_Encoder_Start_DMA(TIM_HandleTypeDef *htim, uint32_t Ch
HAL_StatusTypeDef HAL_TIM_Encoder_Stop_DMA(TIM_HandleTypeDef *htim, uint32_t Channel)
{
/* Check the parameters */
- assert_param(IS_TIM_DMA_CC_INSTANCE(htim->Instance));
+ assert_param(IS_TIM_ENCODER_INTERFACE_INSTANCE(htim->Instance));
/* Disable the Input Capture channels 1 and 2
(in the EncoderInterface the two possible channels that can be used are TIM_CHANNEL_1 and TIM_CHANNEL_2) */
@@ -3149,8 +3158,8 @@ HAL_StatusTypeDef HAL_TIM_Encoder_Stop_DMA(TIM_HandleTypeDef *htim, uint32_t Cha
* @}
*/
/** @defgroup TIM_Exported_Functions_Group7 TIM IRQ handler management
- * @brief TIM IRQ handler management
- *
+ * @brief TIM IRQ handler management
+ *
@verbatim
==============================================================================
##### IRQ handler management #####
@@ -3363,8 +3372,8 @@ void HAL_TIM_IRQHandler(TIM_HandleTypeDef *htim)
*/
/** @defgroup TIM_Exported_Functions_Group8 TIM Peripheral Control functions
- * @brief TIM Peripheral Control functions
- *
+ * @brief TIM Peripheral Control functions
+ *
@verbatim
==============================================================================
##### Peripheral Control functions #####
@@ -3738,9 +3747,14 @@ HAL_StatusTypeDef HAL_TIM_PWM_ConfigChannel(TIM_HandleTypeDef *htim,
* This parameter can be one of the following values:
* @arg TIM_CHANNEL_1: TIM Channel 1 selected
* @arg TIM_CHANNEL_2: TIM Channel 2 selected
+ * @note To output a waveform with a minimum delay user can enable the fast
+ * mode by calling the @ref __HAL_TIM_ENABLE_OCxFAST macro. Then CCx
+ * output is forced in response to the edge detection on TIx input,
+ * without taking in account the comparison.
* @retval HAL status
*/
-HAL_StatusTypeDef HAL_TIM_OnePulse_ConfigChannel(TIM_HandleTypeDef *htim, TIM_OnePulse_InitTypeDef *sConfig, uint32_t OutputChannel, uint32_t InputChannel)
+HAL_StatusTypeDef HAL_TIM_OnePulse_ConfigChannel(TIM_HandleTypeDef *htim, TIM_OnePulse_InitTypeDef *sConfig,
+ uint32_t OutputChannel, uint32_t InputChannel)
{
TIM_OC_InitTypeDef temp1;
@@ -3894,11 +3908,11 @@ HAL_StatusTypeDef HAL_TIM_DMABurst_WriteStart(TIM_HandleTypeDef *htim, uint32_t
assert_param(IS_TIM_DMA_SOURCE(BurstRequestSrc));
assert_param(IS_TIM_DMA_LENGTH(BurstLength));
- if ((htim->State == HAL_TIM_STATE_BUSY))
+ if (htim->State == HAL_TIM_STATE_BUSY)
{
return HAL_BUSY;
}
- else if ((htim->State == HAL_TIM_STATE_READY))
+ else if (htim->State == HAL_TIM_STATE_READY)
{
if ((BurstBuffer == NULL) && (BurstLength > 0U))
{
@@ -3941,7 +3955,8 @@ HAL_StatusTypeDef HAL_TIM_DMABurst_WriteStart(TIM_HandleTypeDef *htim, uint32_t
htim->hdma[TIM_DMA_ID_CC1]->XferErrorCallback = TIM_DMAError ;
/* Enable the DMA stream */
- if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC1], (uint32_t)BurstBuffer, (uint32_t)&htim->Instance->DMAR, ((BurstLength) >> 8U) + 1U) != HAL_OK)
+ if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC1], (uint32_t)BurstBuffer,
+ (uint32_t)&htim->Instance->DMAR, ((BurstLength) >> 8U) + 1U) != HAL_OK)
{
return HAL_ERROR;
}
@@ -3957,7 +3972,8 @@ HAL_StatusTypeDef HAL_TIM_DMABurst_WriteStart(TIM_HandleTypeDef *htim, uint32_t
htim->hdma[TIM_DMA_ID_CC2]->XferErrorCallback = TIM_DMAError ;
/* Enable the DMA stream */
- if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC2], (uint32_t)BurstBuffer, (uint32_t)&htim->Instance->DMAR, ((BurstLength) >> 8U) + 1U) != HAL_OK)
+ if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC2], (uint32_t)BurstBuffer,
+ (uint32_t)&htim->Instance->DMAR, ((BurstLength) >> 8U) + 1U) != HAL_OK)
{
return HAL_ERROR;
}
@@ -3973,7 +3989,8 @@ HAL_StatusTypeDef HAL_TIM_DMABurst_WriteStart(TIM_HandleTypeDef *htim, uint32_t
htim->hdma[TIM_DMA_ID_CC3]->XferErrorCallback = TIM_DMAError ;
/* Enable the DMA stream */
- if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC3], (uint32_t)BurstBuffer, (uint32_t)&htim->Instance->DMAR, ((BurstLength) >> 8U) + 1U) != HAL_OK)
+ if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC3], (uint32_t)BurstBuffer,
+ (uint32_t)&htim->Instance->DMAR, ((BurstLength) >> 8U) + 1U) != HAL_OK)
{
return HAL_ERROR;
}
@@ -3989,7 +4006,8 @@ HAL_StatusTypeDef HAL_TIM_DMABurst_WriteStart(TIM_HandleTypeDef *htim, uint32_t
htim->hdma[TIM_DMA_ID_CC4]->XferErrorCallback = TIM_DMAError ;
/* Enable the DMA stream */
- if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC4], (uint32_t)BurstBuffer, (uint32_t)&htim->Instance->DMAR, ((BurstLength) >> 8U) + 1U) != HAL_OK)
+ if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC4], (uint32_t)BurstBuffer,
+ (uint32_t)&htim->Instance->DMAR, ((BurstLength) >> 8U) + 1U) != HAL_OK)
{
return HAL_ERROR;
}
@@ -4005,7 +4023,8 @@ HAL_StatusTypeDef HAL_TIM_DMABurst_WriteStart(TIM_HandleTypeDef *htim, uint32_t
htim->hdma[TIM_DMA_ID_COMMUTATION]->XferErrorCallback = TIM_DMAError ;
/* Enable the DMA stream */
- if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_COMMUTATION], (uint32_t)BurstBuffer, (uint32_t)&htim->Instance->DMAR, ((BurstLength) >> 8U) + 1U) != HAL_OK)
+ if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_COMMUTATION], (uint32_t)BurstBuffer,
+ (uint32_t)&htim->Instance->DMAR, ((BurstLength) >> 8U) + 1U) != HAL_OK)
{
return HAL_ERROR;
}
@@ -4021,7 +4040,8 @@ HAL_StatusTypeDef HAL_TIM_DMABurst_WriteStart(TIM_HandleTypeDef *htim, uint32_t
htim->hdma[TIM_DMA_ID_TRIGGER]->XferErrorCallback = TIM_DMAError ;
/* Enable the DMA stream */
- if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_TRIGGER], (uint32_t)BurstBuffer, (uint32_t)&htim->Instance->DMAR, ((BurstLength) >> 8U) + 1U) != HAL_OK)
+ if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_TRIGGER], (uint32_t)BurstBuffer,
+ (uint32_t)&htim->Instance->DMAR, ((BurstLength) >> 8U) + 1U) != HAL_OK)
{
return HAL_ERROR;
}
@@ -4151,8 +4171,8 @@ HAL_StatusTypeDef HAL_TIM_DMABurst_WriteStop(TIM_HandleTypeDef *htim, uint32_t B
* @note This function should be used only when BurstLength is equal to DMA data transfer length.
* @retval HAL status
*/
-HAL_StatusTypeDef HAL_TIM_DMABurst_ReadStart(TIM_HandleTypeDef *htim, uint32_t BurstBaseAddress, uint32_t BurstRequestSrc,
- uint32_t *BurstBuffer, uint32_t BurstLength)
+HAL_StatusTypeDef HAL_TIM_DMABurst_ReadStart(TIM_HandleTypeDef *htim, uint32_t BurstBaseAddress,
+ uint32_t BurstRequestSrc, uint32_t *BurstBuffer, uint32_t BurstLength)
{
/* Check the parameters */
assert_param(IS_TIM_DMABURST_INSTANCE(htim->Instance));
@@ -4160,11 +4180,11 @@ HAL_StatusTypeDef HAL_TIM_DMABurst_ReadStart(TIM_HandleTypeDef *htim, uint32_t B
assert_param(IS_TIM_DMA_SOURCE(BurstRequestSrc));
assert_param(IS_TIM_DMA_LENGTH(BurstLength));
- if ((htim->State == HAL_TIM_STATE_BUSY))
+ if (htim->State == HAL_TIM_STATE_BUSY)
{
return HAL_BUSY;
}
- else if ((htim->State == HAL_TIM_STATE_READY))
+ else if (htim->State == HAL_TIM_STATE_READY)
{
if ((BurstBuffer == NULL) && (BurstLength > 0U))
{
@@ -4465,7 +4485,7 @@ HAL_StatusTypeDef HAL_TIM_ConfigOCrefClear(TIM_HandleTypeDef *htim,
/* When OCRef clear feature is used with ETR source, ETR prescaler must be off */
if (sClearInputConfig->ClearInputPrescaler != TIM_CLEARINPUTPRESCALER_DIV1)
{
- htim->State = HAL_TIM_STATE_READY;
+ htim->State = HAL_TIM_STATE_READY;
__HAL_UNLOCK(htim);
return HAL_ERROR;
}
@@ -4780,9 +4800,9 @@ HAL_StatusTypeDef HAL_TIM_SlaveConfigSynchro(TIM_HandleTypeDef *htim, TIM_SlaveC
htim->State = HAL_TIM_STATE_BUSY;
- if(TIM_SlaveTimer_SetConfig(htim, sSlaveConfig) != HAL_OK)
+ if (TIM_SlaveTimer_SetConfig(htim, sSlaveConfig) != HAL_OK)
{
- htim->State = HAL_TIM_STATE_READY;
+ htim->State = HAL_TIM_STATE_READY;
__HAL_UNLOCK(htim);
return HAL_ERROR;
}
@@ -4810,7 +4830,7 @@ HAL_StatusTypeDef HAL_TIM_SlaveConfigSynchro(TIM_HandleTypeDef *htim, TIM_SlaveC
* @retval HAL status
*/
HAL_StatusTypeDef HAL_TIM_SlaveConfigSynchro_IT(TIM_HandleTypeDef *htim,
- TIM_SlaveConfigTypeDef *sSlaveConfig)
+ TIM_SlaveConfigTypeDef *sSlaveConfig)
{
/* Check the parameters */
assert_param(IS_TIM_SLAVE_INSTANCE(htim->Instance));
@@ -4821,9 +4841,9 @@ HAL_StatusTypeDef HAL_TIM_SlaveConfigSynchro_IT(TIM_HandleTypeDef *htim,
htim->State = HAL_TIM_STATE_BUSY;
- if(TIM_SlaveTimer_SetConfig(htim, sSlaveConfig) != HAL_OK)
+ if (TIM_SlaveTimer_SetConfig(htim, sSlaveConfig) != HAL_OK)
{
- htim->State = HAL_TIM_STATE_READY;
+ htim->State = HAL_TIM_STATE_READY;
__HAL_UNLOCK(htim);
return HAL_ERROR;
}
@@ -4913,8 +4933,8 @@ uint32_t HAL_TIM_ReadCapturedValue(TIM_HandleTypeDef *htim, uint32_t Channel)
*/
/** @defgroup TIM_Exported_Functions_Group9 TIM Callbacks functions
- * @brief TIM Callbacks functions
- *
+ * @brief TIM Callbacks functions
+ *
@verbatim
==============================================================================
##### TIM Callbacks functions #####
@@ -5118,7 +5138,8 @@ __weak void HAL_TIM_ErrorCallback(TIM_HandleTypeDef *htim)
* @param pCallback pointer to the callback function
* @retval status
*/
-HAL_StatusTypeDef HAL_TIM_RegisterCallback(TIM_HandleTypeDef *htim, HAL_TIM_CallbackIDTypeDef CallbackID, pTIM_CallbackTypeDef pCallback)
+HAL_StatusTypeDef HAL_TIM_RegisterCallback(TIM_HandleTypeDef *htim, HAL_TIM_CallbackIDTypeDef CallbackID,
+ pTIM_CallbackTypeDef pCallback)
{
HAL_StatusTypeDef status = HAL_OK;
@@ -5578,8 +5599,8 @@ HAL_StatusTypeDef HAL_TIM_UnRegisterCallback(TIM_HandleTypeDef *htim, HAL_TIM_Ca
*/
/** @defgroup TIM_Exported_Functions_Group10 TIM Peripheral State functions
- * @brief TIM Peripheral State functions
- *
+ * @brief TIM Peripheral State functions
+ *
@verbatim
==============================================================================
##### Peripheral State functions #####
@@ -6365,7 +6386,7 @@ static void TIM_OC6_SetConfig(TIM_TypeDef *TIMx,
* @retval None
*/
static HAL_StatusTypeDef TIM_SlaveTimer_SetConfig(TIM_HandleTypeDef *htim,
- TIM_SlaveConfigTypeDef *sSlaveConfig)
+ TIM_SlaveConfigTypeDef *sSlaveConfig)
{
uint32_t tmpsmcr;
uint32_t tmpccmr1;
diff --git a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_GCC/Prog/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_tim_ex.c b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_GCC/Prog/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_tim_ex.c
index 271f11ec..f2d976ae 100644
--- a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_GCC/Prog/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_tim_ex.c
+++ b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_GCC/Prog/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_tim_ex.c
@@ -73,7 +73,7 @@
* opensource.org/licenses/BSD-3-Clause
*
******************************************************************************
-*/
+ */
/* Includes ------------------------------------------------------------------*/
#include "stm32f7xx_hal.h"
@@ -397,11 +397,11 @@ HAL_StatusTypeDef HAL_TIMEx_HallSensor_Start_DMA(TIM_HandleTypeDef *htim, uint32
/* Check the parameters */
assert_param(IS_TIM_HALL_SENSOR_INTERFACE_INSTANCE(htim->Instance));
- if ((htim->State == HAL_TIM_STATE_BUSY))
+ if (htim->State == HAL_TIM_STATE_BUSY)
{
return HAL_BUSY;
}
- else if ((htim->State == HAL_TIM_STATE_READY))
+ else if (htim->State == HAL_TIM_STATE_READY)
{
if (((uint32_t)pData == 0U) && (Length > 0U))
{
@@ -709,11 +709,11 @@ HAL_StatusTypeDef HAL_TIMEx_OCN_Start_DMA(TIM_HandleTypeDef *htim, uint32_t Chan
/* Check the parameters */
assert_param(IS_TIM_CCXN_INSTANCE(htim->Instance, Channel));
- if ((htim->State == HAL_TIM_STATE_BUSY))
+ if (htim->State == HAL_TIM_STATE_BUSY)
{
return HAL_BUSY;
}
- else if ((htim->State == HAL_TIM_STATE_READY))
+ else if (htim->State == HAL_TIM_STATE_READY)
{
if (((uint32_t)pData == 0U) && (Length > 0U))
{
@@ -1117,11 +1117,11 @@ HAL_StatusTypeDef HAL_TIMEx_PWMN_Start_DMA(TIM_HandleTypeDef *htim, uint32_t Cha
/* Check the parameters */
assert_param(IS_TIM_CCXN_INSTANCE(htim->Instance, Channel));
- if ((htim->State == HAL_TIM_STATE_BUSY))
+ if (htim->State == HAL_TIM_STATE_BUSY)
{
return HAL_BUSY;
}
- else if ((htim->State == HAL_TIM_STATE_READY))
+ else if (htim->State == HAL_TIM_STATE_READY)
{
if (((uint32_t)pData == 0U) && (Length > 0U))
{
@@ -1466,7 +1466,8 @@ HAL_StatusTypeDef HAL_TIMEx_OnePulseN_Stop_IT(TIM_HandleTypeDef *htim, uint32_t
* @arg TIM_COMMUTATION_SOFTWARE: Commutation source is set by software using the COMG bit
* @retval HAL status
*/
-HAL_StatusTypeDef HAL_TIMEx_ConfigCommutEvent(TIM_HandleTypeDef *htim, uint32_t InputTrigger, uint32_t CommutationSource)
+HAL_StatusTypeDef HAL_TIMEx_ConfigCommutEvent(TIM_HandleTypeDef *htim, uint32_t InputTrigger,
+ uint32_t CommutationSource)
{
/* Check the parameters */
assert_param(IS_TIM_COMMUTATION_EVENT_INSTANCE(htim->Instance));
@@ -1521,7 +1522,8 @@ HAL_StatusTypeDef HAL_TIMEx_ConfigCommutEvent(TIM_HandleTypeDef *htim, uint32_t
* @arg TIM_COMMUTATION_SOFTWARE: Commutation source is set by software using the COMG bit
* @retval HAL status
*/
-HAL_StatusTypeDef HAL_TIMEx_ConfigCommutEvent_IT(TIM_HandleTypeDef *htim, uint32_t InputTrigger, uint32_t CommutationSource)
+HAL_StatusTypeDef HAL_TIMEx_ConfigCommutEvent_IT(TIM_HandleTypeDef *htim, uint32_t InputTrigger,
+ uint32_t CommutationSource)
{
/* Check the parameters */
assert_param(IS_TIM_COMMUTATION_EVENT_INSTANCE(htim->Instance));
@@ -1577,7 +1579,8 @@ HAL_StatusTypeDef HAL_TIMEx_ConfigCommutEvent_IT(TIM_HandleTypeDef *htim, uint32
* @arg TIM_COMMUTATION_SOFTWARE: Commutation source is set by software using the COMG bit
* @retval HAL status
*/
-HAL_StatusTypeDef HAL_TIMEx_ConfigCommutEvent_DMA(TIM_HandleTypeDef *htim, uint32_t InputTrigger, uint32_t CommutationSource)
+HAL_StatusTypeDef HAL_TIMEx_ConfigCommutEvent_DMA(TIM_HandleTypeDef *htim, uint32_t InputTrigger,
+ uint32_t CommutationSource)
{
/* Check the parameters */
assert_param(IS_TIM_COMMUTATION_EVENT_INSTANCE(htim->Instance));
@@ -1632,7 +1635,7 @@ HAL_StatusTypeDef HAL_TIMEx_MasterConfigSynchronization(TIM_HandleTypeDef *htim,
uint32_t tmpsmcr;
/* Check the parameters */
- assert_param(IS_TIM_SYNCHRO_INSTANCE(htim->Instance));
+ assert_param(IS_TIM_MASTER_INSTANCE(htim->Instance));
assert_param(IS_TIM_TRGO_SOURCE(sMasterConfig->MasterOutputTrigger));
assert_param(IS_TIM_MSM_STATE(sMasterConfig->MasterSlaveMode));
@@ -1665,16 +1668,19 @@ HAL_StatusTypeDef HAL_TIMEx_MasterConfigSynchronization(TIM_HandleTypeDef *htim,
/* Select the TRGO source */
tmpcr2 |= sMasterConfig->MasterOutputTrigger;
- /* Reset the MSM Bit */
- tmpsmcr &= ~TIM_SMCR_MSM;
- /* Set master mode */
- tmpsmcr |= sMasterConfig->MasterSlaveMode;
-
/* Update TIMx CR2 */
htim->Instance->CR2 = tmpcr2;
- /* Update TIMx SMCR */
- htim->Instance->SMCR = tmpsmcr;
+ if (IS_TIM_SLAVE_INSTANCE(htim->Instance))
+ {
+ /* Reset the MSM Bit */
+ tmpsmcr &= ~TIM_SMCR_MSM;
+ /* Set master mode */
+ tmpsmcr |= sMasterConfig->MasterSlaveMode;
+
+ /* Update TIMx SMCR */
+ htim->Instance->SMCR = tmpsmcr;
+ }
/* Change the htim state */
htim->State = HAL_TIM_STATE_READY;
@@ -1690,6 +1696,9 @@ HAL_StatusTypeDef HAL_TIMEx_MasterConfigSynchronization(TIM_HandleTypeDef *htim,
* @param htim TIM handle
* @param sBreakDeadTimeConfig pointer to a TIM_ConfigBreakDeadConfigTypeDef structure that
* contains the BDTR Register configuration information for the TIM peripheral.
+ * @note Interrupts can be generated when an active level is detected on the
+ * break input, the break 2 input or the system break input. Break
+ * interrupt can be enabled by calling the @ref __HAL_TIM_ENABLE_IT macro.
* @retval HAL status
*/
HAL_StatusTypeDef HAL_TIMEx_ConfigBreakDeadTime(TIM_HandleTypeDef *htim,
@@ -1763,10 +1772,10 @@ HAL_StatusTypeDef HAL_TIMEx_ConfigBreakInput(TIM_HandleTypeDef *htim,
{
uint32_t tmporx;
- uint32_t bkin_enable_mask = 0U;
- uint32_t bkin_polarity_mask = 0U;
- uint32_t bkin_enable_bitpos = 0U;
- uint32_t bkin_polarity_bitpos = 0U;
+ uint32_t bkin_enable_mask;
+ uint32_t bkin_polarity_mask;
+ uint32_t bkin_enable_bitpos;
+ uint32_t bkin_polarity_bitpos;
/* Check the parameters */
assert_param(IS_TIM_BREAK_INSTANCE(htim->Instance));
@@ -1800,11 +1809,19 @@ HAL_StatusTypeDef HAL_TIMEx_ConfigBreakInput(TIM_HandleTypeDef *htim,
{
bkin_enable_mask = TIM1_AF1_BKDF1BKE;
bkin_enable_bitpos = 8;
+ bkin_polarity_mask = 0U;
+ bkin_polarity_bitpos = 0U;
break;
}
default:
+ {
+ bkin_enable_mask = 0U;
+ bkin_polarity_mask = 0U;
+ bkin_enable_bitpos = 0U;
+ bkin_polarity_bitpos = 0U;
break;
+ }
}
switch (BreakInput)
@@ -2054,7 +2071,7 @@ HAL_TIM_StateTypeDef HAL_TIMEx_HallSensor_GetState(TIM_HandleTypeDef *htim)
*/
/* Private functions ---------------------------------------------------------*/
-/** @defgroup TIMEx_Private_Functions TIM Extended Private Functions
+/** @defgroup TIMEx_Private_Functions TIMEx Private Functions
* @{
*/
diff --git a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_GCC/Prog/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_uart.c b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_GCC/Prog/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_uart.c
index 76efbf84..25a901fe 100644
--- a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_GCC/Prog/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_uart.c
+++ b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_GCC/Prog/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_uart.c
@@ -326,7 +326,6 @@ HAL_StatusTypeDef HAL_UART_Init(UART_HandleTypeDef *huart)
huart->gState = HAL_UART_STATE_BUSY;
- /* Disable the Peripheral */
__HAL_UART_DISABLE(huart);
/* Set the UART Communication parameters */
@@ -346,7 +345,6 @@ HAL_StatusTypeDef HAL_UART_Init(UART_HandleTypeDef *huart)
CLEAR_BIT(huart->Instance->CR2, (USART_CR2_LINEN | USART_CR2_CLKEN));
CLEAR_BIT(huart->Instance->CR3, (USART_CR3_SCEN | USART_CR3_HDSEL | USART_CR3_IREN));
- /* Enable the Peripheral */
__HAL_UART_ENABLE(huart);
/* TEACK and/or REACK to check before moving huart->gState and huart->RxState to Ready */
@@ -393,7 +391,6 @@ HAL_StatusTypeDef HAL_HalfDuplex_Init(UART_HandleTypeDef *huart)
huart->gState = HAL_UART_STATE_BUSY;
- /* Disable the Peripheral */
__HAL_UART_DISABLE(huart);
/* Set the UART Communication parameters */
@@ -416,7 +413,6 @@ HAL_StatusTypeDef HAL_HalfDuplex_Init(UART_HandleTypeDef *huart)
/* Enable the Half-Duplex mode by setting the HDSEL bit in the CR3 register */
SET_BIT(huart->Instance->CR3, USART_CR3_HDSEL);
- /* Enable the Peripheral */
__HAL_UART_ENABLE(huart);
/* TEACK and/or REACK to check before moving huart->gState and huart->RxState to Ready */
@@ -481,7 +477,6 @@ HAL_StatusTypeDef HAL_LIN_Init(UART_HandleTypeDef *huart, uint32_t BreakDetectLe
huart->gState = HAL_UART_STATE_BUSY;
- /* Disable the Peripheral */
__HAL_UART_DISABLE(huart);
/* Set the UART Communication parameters */
@@ -507,7 +502,6 @@ HAL_StatusTypeDef HAL_LIN_Init(UART_HandleTypeDef *huart, uint32_t BreakDetectLe
/* Set the USART LIN Break detection length. */
MODIFY_REG(huart->Instance->CR2, USART_CR2_LBDL, BreakDetectLength);
- /* Enable the Peripheral */
__HAL_UART_ENABLE(huart);
/* TEACK and/or REACK to check before moving huart->gState and huart->RxState to Ready */
@@ -567,7 +561,6 @@ HAL_StatusTypeDef HAL_MultiProcessor_Init(UART_HandleTypeDef *huart, uint8_t Add
huart->gState = HAL_UART_STATE_BUSY;
- /* Disable the Peripheral */
__HAL_UART_DISABLE(huart);
/* Set the UART Communication parameters */
@@ -596,7 +589,6 @@ HAL_StatusTypeDef HAL_MultiProcessor_Init(UART_HandleTypeDef *huart, uint8_t Add
/* Set the wake up method by setting the WAKE bit in the CR1 register */
MODIFY_REG(huart->Instance->CR1, USART_CR1_WAKE, WakeUpMethod);
- /* Enable the Peripheral */
__HAL_UART_ENABLE(huart);
/* TEACK and/or REACK to check before moving huart->gState and huart->RxState to Ready */
@@ -622,7 +614,6 @@ HAL_StatusTypeDef HAL_UART_DeInit(UART_HandleTypeDef *huart)
huart->gState = HAL_UART_STATE_BUSY;
- /* Disable the Peripheral */
__HAL_UART_DISABLE(huart);
huart->Instance->CR1 = 0x0U;
@@ -645,7 +636,6 @@ HAL_StatusTypeDef HAL_UART_DeInit(UART_HandleTypeDef *huart)
huart->gState = HAL_UART_STATE_RESET;
huart->RxState = HAL_UART_STATE_RESET;
- /* Process Unlock */
__HAL_UNLOCK(huart);
return HAL_OK;
@@ -704,18 +694,18 @@ __weak void HAL_UART_MspDeInit(UART_HandleTypeDef *huart)
* @param pCallback pointer to the Callback function
* @retval HAL status
*/
-HAL_StatusTypeDef HAL_UART_RegisterCallback(UART_HandleTypeDef *huart, HAL_UART_CallbackIDTypeDef CallbackID, pUART_CallbackTypeDef pCallback)
+HAL_StatusTypeDef HAL_UART_RegisterCallback(UART_HandleTypeDef *huart, HAL_UART_CallbackIDTypeDef CallbackID,
+ pUART_CallbackTypeDef pCallback)
{
HAL_StatusTypeDef status = HAL_OK;
if (pCallback == NULL)
{
- /* Update the error code */
huart->ErrorCode |= HAL_UART_ERROR_INVALID_CALLBACK;
return HAL_ERROR;
}
- /* Process locked */
+
__HAL_LOCK(huart);
if (huart->gState == HAL_UART_STATE_READY)
@@ -768,10 +758,8 @@ HAL_StatusTypeDef HAL_UART_RegisterCallback(UART_HandleTypeDef *huart, HAL_UART_
break;
default :
- /* Update the error code */
huart->ErrorCode |= HAL_UART_ERROR_INVALID_CALLBACK;
- /* Return error status */
status = HAL_ERROR;
break;
}
@@ -789,24 +777,19 @@ HAL_StatusTypeDef HAL_UART_RegisterCallback(UART_HandleTypeDef *huart, HAL_UART_
break;
default :
- /* Update the error code */
huart->ErrorCode |= HAL_UART_ERROR_INVALID_CALLBACK;
- /* Return error status */
status = HAL_ERROR;
break;
}
}
else
{
- /* Update the error code */
huart->ErrorCode |= HAL_UART_ERROR_INVALID_CALLBACK;
- /* Return error status */
status = HAL_ERROR;
}
- /* Release Lock */
__HAL_UNLOCK(huart);
return status;
@@ -837,7 +820,6 @@ HAL_StatusTypeDef HAL_UART_UnRegisterCallback(UART_HandleTypeDef *huart, HAL_UAR
{
HAL_StatusTypeDef status = HAL_OK;
- /* Process locked */
__HAL_LOCK(huart);
if (HAL_UART_STATE_READY == huart->gState)
@@ -876,6 +858,12 @@ HAL_StatusTypeDef HAL_UART_UnRegisterCallback(UART_HandleTypeDef *huart, HAL_UAR
huart->AbortReceiveCpltCallback = HAL_UART_AbortReceiveCpltCallback; /* Legacy weak AbortReceiveCpltCallback */
break;
+#if defined(USART_CR1_UESM)
+ case HAL_UART_WAKEUP_CB_ID :
+ huart->WakeupCallback = HAL_UARTEx_WakeupCallback; /* Legacy weak WakeupCallback */
+ break;
+
+#endif /* USART_CR1_UESM */
case HAL_UART_MSPINIT_CB_ID :
huart->MspInitCallback = HAL_UART_MspInit; /* Legacy weak MspInitCallback */
break;
@@ -885,10 +873,8 @@ HAL_StatusTypeDef HAL_UART_UnRegisterCallback(UART_HandleTypeDef *huart, HAL_UAR
break;
default :
- /* Update the error code */
huart->ErrorCode |= HAL_UART_ERROR_INVALID_CALLBACK;
- /* Return error status */
status = HAL_ERROR;
break;
}
@@ -906,24 +892,19 @@ HAL_StatusTypeDef HAL_UART_UnRegisterCallback(UART_HandleTypeDef *huart, HAL_UAR
break;
default :
- /* Update the error code */
huart->ErrorCode |= HAL_UART_ERROR_INVALID_CALLBACK;
- /* Return error status */
status = HAL_ERROR;
break;
}
}
else
{
- /* Update the error code */
huart->ErrorCode |= HAL_UART_ERROR_INVALID_CALLBACK;
- /* Return error status */
status = HAL_ERROR;
}
- /* Release Lock */
__HAL_UNLOCK(huart);
return status;
@@ -992,6 +973,11 @@ HAL_StatusTypeDef HAL_UART_UnRegisterCallback(UART_HandleTypeDef *huart, HAL_UAR
(+) HAL_UART_AbortCpltCallback()
(+) HAL_UART_AbortTransmitCpltCallback()
(+) HAL_UART_AbortReceiveCpltCallback()
+#if defined(USART_CR1_UESM)
+
+ (#) Wakeup from Stop mode Callback:
+ (+) HAL_UARTEx_WakeupCallback()
+#endif
(#) In Non-Blocking mode transfers, possible errors are split into 2 categories.
Errors are handled as follows :
@@ -1013,9 +999,12 @@ HAL_StatusTypeDef HAL_UART_UnRegisterCallback(UART_HandleTypeDef *huart, HAL_UAR
/**
* @brief Send an amount of data in blocking mode.
+ * @note When UART parity is not enabled (PCE = 0), and Word Length is configured to 9 bits (M1-M0 = 01),
+ * the sent data is handled as a set of u16. In this case, Size must indicate the number
+ * of u16 provided through pData.
* @param huart UART handle.
- * @param pData Pointer to data buffer.
- * @param Size Amount of data to be sent.
+ * @param pData Pointer to data buffer (u8 or u16 data elements).
+ * @param Size Amount of data elements (u8 or u16) to be sent.
* @param Timeout Timeout duration.
* @retval HAL status
*/
@@ -1033,7 +1022,6 @@ HAL_StatusTypeDef HAL_UART_Transmit(UART_HandleTypeDef *huart, uint8_t *pData, u
return HAL_ERROR;
}
- /* Process Locked */
__HAL_LOCK(huart);
huart->ErrorCode = HAL_UART_ERROR_NONE;
@@ -1045,7 +1033,7 @@ HAL_StatusTypeDef HAL_UART_Transmit(UART_HandleTypeDef *huart, uint8_t *pData, u
huart->TxXferSize = Size;
huart->TxXferCount = Size;
- /* In case of 9bits/No Parity transfer, pData needs to be handled as a uint16_t pointer */
+ /* In case of 9bits/No Parity transfer, pData needs to be handled as a uint16_t pointer */
if ((huart->Init.WordLength == UART_WORDLENGTH_9B) && (huart->Init.Parity == UART_PARITY_NONE))
{
pdata8bits = NULL;
@@ -1057,6 +1045,8 @@ HAL_StatusTypeDef HAL_UART_Transmit(UART_HandleTypeDef *huart, uint8_t *pData, u
pdata16bits = NULL;
}
+ __HAL_UNLOCK(huart);
+
while (huart->TxXferCount > 0U)
{
if (UART_WaitOnFlagUntilTimeout(huart, UART_FLAG_TXE, RESET, tickstart, Timeout) != HAL_OK)
@@ -1084,9 +1074,6 @@ HAL_StatusTypeDef HAL_UART_Transmit(UART_HandleTypeDef *huart, uint8_t *pData, u
/* At end of Tx process, restore huart->gState to Ready */
huart->gState = HAL_UART_STATE_READY;
- /* Process Unlocked */
- __HAL_UNLOCK(huart);
-
return HAL_OK;
}
else
@@ -1097,9 +1084,12 @@ HAL_StatusTypeDef HAL_UART_Transmit(UART_HandleTypeDef *huart, uint8_t *pData, u
/**
* @brief Receive an amount of data in blocking mode.
+ * @note When UART parity is not enabled (PCE = 0), and Word Length is configured to 9 bits (M1-M0 = 01),
+ * the received data is handled as a set of u16. In this case, Size must indicate the number
+ * of u16 available through pData.
* @param huart UART handle.
- * @param pData Pointer to data buffer.
- * @param Size Amount of data to be received.
+ * @param pData Pointer to data buffer (u8 or u16 data elements).
+ * @param Size Amount of data elements (u8 or u16) to be received.
* @param Timeout Timeout duration.
* @retval HAL status
*/
@@ -1118,7 +1108,6 @@ HAL_StatusTypeDef HAL_UART_Receive(UART_HandleTypeDef *huart, uint8_t *pData, ui
return HAL_ERROR;
}
- /* Process Locked */
__HAL_LOCK(huart);
huart->ErrorCode = HAL_UART_ERROR_NONE;
@@ -1146,6 +1135,8 @@ HAL_StatusTypeDef HAL_UART_Receive(UART_HandleTypeDef *huart, uint8_t *pData, ui
pdata16bits = NULL;
}
+ __HAL_UNLOCK(huart);
+
/* as long as data have to be received */
while (huart->RxXferCount > 0U)
{
@@ -1169,9 +1160,6 @@ HAL_StatusTypeDef HAL_UART_Receive(UART_HandleTypeDef *huart, uint8_t *pData, ui
/* At end of Rx process, restore huart->RxState to Ready */
huart->RxState = HAL_UART_STATE_READY;
- /* Process Unlocked */
- __HAL_UNLOCK(huart);
-
return HAL_OK;
}
else
@@ -1182,9 +1170,12 @@ HAL_StatusTypeDef HAL_UART_Receive(UART_HandleTypeDef *huart, uint8_t *pData, ui
/**
* @brief Send an amount of data in interrupt mode.
+ * @note When UART parity is not enabled (PCE = 0), and Word Length is configured to 9 bits (M1-M0 = 01),
+ * the sent data is handled as a set of u16. In this case, Size must indicate the number
+ * of u16 provided through pData.
* @param huart UART handle.
- * @param pData Pointer to data buffer.
- * @param Size Amount of data to be sent.
+ * @param pData Pointer to data buffer (u8 or u16 data elements).
+ * @param Size Amount of data elements (u8 or u16) to be sent.
* @retval HAL status
*/
HAL_StatusTypeDef HAL_UART_Transmit_IT(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size)
@@ -1197,7 +1188,6 @@ HAL_StatusTypeDef HAL_UART_Transmit_IT(UART_HandleTypeDef *huart, uint8_t *pData
return HAL_ERROR;
}
- /* Process Locked */
__HAL_LOCK(huart);
huart->pTxBuffPtr = pData;
@@ -1218,7 +1208,6 @@ HAL_StatusTypeDef HAL_UART_Transmit_IT(UART_HandleTypeDef *huart, uint8_t *pData
huart->TxISR = UART_TxISR_8BIT;
}
- /* Process Unlocked */
__HAL_UNLOCK(huart);
/* Enable the Transmit Data Register Empty interrupt */
@@ -1234,9 +1223,12 @@ HAL_StatusTypeDef HAL_UART_Transmit_IT(UART_HandleTypeDef *huart, uint8_t *pData
/**
* @brief Receive an amount of data in interrupt mode.
+ * @note When UART parity is not enabled (PCE = 0), and Word Length is configured to 9 bits (M1-M0 = 01),
+ * the received data is handled as a set of u16. In this case, Size must indicate the number
+ * of u16 available through pData.
* @param huart UART handle.
- * @param pData Pointer to data buffer.
- * @param Size Amount of data to be received.
+ * @param pData Pointer to data buffer (u8 or u16 data elements).
+ * @param Size Amount of data elements (u8 or u16) to be received.
* @retval HAL status
*/
HAL_StatusTypeDef HAL_UART_Receive_IT(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size)
@@ -1249,7 +1241,6 @@ HAL_StatusTypeDef HAL_UART_Receive_IT(UART_HandleTypeDef *huart, uint8_t *pData,
return HAL_ERROR;
}
- /* Process Locked */
__HAL_LOCK(huart);
huart->pRxBuffPtr = pData;
@@ -1276,7 +1267,6 @@ HAL_StatusTypeDef HAL_UART_Receive_IT(UART_HandleTypeDef *huart, uint8_t *pData,
huart->RxISR = UART_RxISR_8BIT;
}
- /* Process Unlocked */
__HAL_UNLOCK(huart);
/* Enable the UART Parity Error interrupt and Data Register Not Empty interrupt */
@@ -1292,9 +1282,12 @@ HAL_StatusTypeDef HAL_UART_Receive_IT(UART_HandleTypeDef *huart, uint8_t *pData,
/**
* @brief Send an amount of data in DMA mode.
+ * @note When UART parity is not enabled (PCE = 0), and Word Length is configured to 9 bits (M1-M0 = 01),
+ * the sent data is handled as a set of u16. In this case, Size must indicate the number
+ * of u16 provided through pData.
* @param huart UART handle.
- * @param pData Pointer to data buffer.
- * @param Size Amount of data to be sent.
+ * @param pData Pointer to data buffer (u8 or u16 data elements).
+ * @param Size Amount of data elements (u8 or u16) to be sent.
* @retval HAL status
*/
HAL_StatusTypeDef HAL_UART_Transmit_DMA(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size)
@@ -1307,7 +1300,6 @@ HAL_StatusTypeDef HAL_UART_Transmit_DMA(UART_HandleTypeDef *huart, uint8_t *pDat
return HAL_ERROR;
}
- /* Process Locked */
__HAL_LOCK(huart);
huart->pTxBuffPtr = pData;
@@ -1337,7 +1329,6 @@ HAL_StatusTypeDef HAL_UART_Transmit_DMA(UART_HandleTypeDef *huart, uint8_t *pDat
/* Set error code to DMA */
huart->ErrorCode = HAL_UART_ERROR_DMA;
- /* Process Unlocked */
__HAL_UNLOCK(huart);
/* Restore huart->gState to ready */
@@ -1349,7 +1340,6 @@ HAL_StatusTypeDef HAL_UART_Transmit_DMA(UART_HandleTypeDef *huart, uint8_t *pDat
/* Clear the TC flag in the ICR register */
__HAL_UART_CLEAR_FLAG(huart, UART_CLEAR_TCF);
- /* Process Unlocked */
__HAL_UNLOCK(huart);
/* Enable the DMA transfer for transmit request by setting the DMAT bit
@@ -1368,9 +1358,12 @@ HAL_StatusTypeDef HAL_UART_Transmit_DMA(UART_HandleTypeDef *huart, uint8_t *pDat
* @brief Receive an amount of data in DMA mode.
* @note When the UART parity is enabled (PCE = 1), the received data contain
* the parity bit (MSB position).
+ * @note When UART parity is not enabled (PCE = 0), and Word Length is configured to 9 bits (M1-M0 = 01),
+ * the received data is handled as a set of u16. In this case, Size must indicate the number
+ * of u16 available through pData.
* @param huart UART handle.
- * @param pData Pointer to data buffer.
- * @param Size Amount of data to be received.
+ * @param pData Pointer to data buffer (u8 or u16 data elements).
+ * @param Size Amount of data elements (u8 or u16) to be received.
* @retval HAL status
*/
HAL_StatusTypeDef HAL_UART_Receive_DMA(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size)
@@ -1383,7 +1376,6 @@ HAL_StatusTypeDef HAL_UART_Receive_DMA(UART_HandleTypeDef *huart, uint8_t *pData
return HAL_ERROR;
}
- /* Process Locked */
__HAL_LOCK(huart);
huart->pRxBuffPtr = pData;
@@ -1412,7 +1404,6 @@ HAL_StatusTypeDef HAL_UART_Receive_DMA(UART_HandleTypeDef *huart, uint8_t *pData
/* Set error code to DMA */
huart->ErrorCode = HAL_UART_ERROR_DMA;
- /* Process Unlocked */
__HAL_UNLOCK(huart);
/* Restore huart->gState to ready */
@@ -1421,7 +1412,6 @@ HAL_StatusTypeDef HAL_UART_Receive_DMA(UART_HandleTypeDef *huart, uint8_t *pData
return HAL_ERROR;
}
}
- /* Process Unlocked */
__HAL_UNLOCK(huart);
/* Enable the UART Parity Error Interrupt */
@@ -1452,7 +1442,6 @@ HAL_StatusTypeDef HAL_UART_DMAPause(UART_HandleTypeDef *huart)
const HAL_UART_StateTypeDef gstate = huart->gState;
const HAL_UART_StateTypeDef rxstate = huart->RxState;
- /* Process Locked */
__HAL_LOCK(huart);
if ((HAL_IS_BIT_SET(huart->Instance->CR3, USART_CR3_DMAT)) &&
@@ -1472,7 +1461,6 @@ HAL_StatusTypeDef HAL_UART_DMAPause(UART_HandleTypeDef *huart)
CLEAR_BIT(huart->Instance->CR3, USART_CR3_DMAR);
}
- /* Process Unlocked */
__HAL_UNLOCK(huart);
return HAL_OK;
@@ -1485,7 +1473,6 @@ HAL_StatusTypeDef HAL_UART_DMAPause(UART_HandleTypeDef *huart)
*/
HAL_StatusTypeDef HAL_UART_DMAResume(UART_HandleTypeDef *huart)
{
- /* Process Locked */
__HAL_LOCK(huart);
if (huart->gState == HAL_UART_STATE_BUSY_TX)
@@ -1506,7 +1493,6 @@ HAL_StatusTypeDef HAL_UART_DMAResume(UART_HandleTypeDef *huart)
SET_BIT(huart->Instance->CR3, USART_CR3_DMAR);
}
- /* Process Unlocked */
__HAL_UNLOCK(huart);
return HAL_OK;
@@ -1591,7 +1577,7 @@ HAL_StatusTypeDef HAL_UART_DMAStop(UART_HandleTypeDef *huart)
* - Set handle State to READY
* @note This procedure is executed in blocking mode : when exiting function, Abort is considered as completed.
* @retval HAL status
-*/
+ */
HAL_StatusTypeDef HAL_UART_Abort(UART_HandleTypeDef *huart)
{
/* Disable TXEIE, TCIE, RXNE, PE and ERR (Frame error, noise error, overrun error) interrupts */
@@ -1663,7 +1649,6 @@ HAL_StatusTypeDef HAL_UART_Abort(UART_HandleTypeDef *huart)
huart->gState = HAL_UART_STATE_READY;
huart->RxState = HAL_UART_STATE_READY;
- /* Reset Handle ErrorCode to No Error */
huart->ErrorCode = HAL_UART_ERROR_NONE;
return HAL_OK;
@@ -1680,7 +1665,7 @@ HAL_StatusTypeDef HAL_UART_Abort(UART_HandleTypeDef *huart)
* - Set handle State to READY
* @note This procedure is executed in blocking mode : when exiting function, Abort is considered as completed.
* @retval HAL status
-*/
+ */
HAL_StatusTypeDef HAL_UART_AbortTransmit(UART_HandleTypeDef *huart)
{
/* Disable TXEIE and TCIE interrupts */
@@ -1732,7 +1717,7 @@ HAL_StatusTypeDef HAL_UART_AbortTransmit(UART_HandleTypeDef *huart)
* - Set handle State to READY
* @note This procedure is executed in blocking mode : when exiting function, Abort is considered as completed.
* @retval HAL status
-*/
+ */
HAL_StatusTypeDef HAL_UART_AbortReceive(UART_HandleTypeDef *huart)
{
/* Disable RXNE, PE and ERR (Frame error, noise error, overrun error) interrupts */
@@ -1792,7 +1777,7 @@ HAL_StatusTypeDef HAL_UART_AbortReceive(UART_HandleTypeDef *huart)
* @note This procedure is executed in Interrupt mode, meaning that abort procedure could be
* considered as completed only when user abort complete callback is executed (not when exiting function).
* @retval HAL status
-*/
+ */
HAL_StatusTypeDef HAL_UART_Abort_IT(UART_HandleTypeDef *huart)
{
uint32_t abortcplt = 1U;
@@ -1931,7 +1916,7 @@ HAL_StatusTypeDef HAL_UART_Abort_IT(UART_HandleTypeDef *huart)
* @note This procedure is executed in Interrupt mode, meaning that abort procedure could be
* considered as completed only when user abort complete callback is executed (not when exiting function).
* @retval HAL status
-*/
+ */
HAL_StatusTypeDef HAL_UART_AbortTransmit_IT(UART_HandleTypeDef *huart)
{
/* Disable interrupts */
@@ -2015,7 +2000,7 @@ HAL_StatusTypeDef HAL_UART_AbortTransmit_IT(UART_HandleTypeDef *huart)
* @note This procedure is executed in Interrupt mode, meaning that abort procedure could be
* considered as completed only when user abort complete callback is executed (not when exiting function).
* @retval HAL status
-*/
+ */
HAL_StatusTypeDef HAL_UART_AbortReceive_IT(UART_HandleTypeDef *huart)
{
/* Disable RXNE, PE and ERR (Frame error, noise error, overrun error) interrupts */
@@ -2110,7 +2095,7 @@ void HAL_UART_IRQHandler(UART_HandleTypeDef *huart)
uint32_t errorcode;
/* If no error occurs */
- errorflags = (isrflags & (uint32_t)(USART_ISR_PE | USART_ISR_FE | USART_ISR_ORE | USART_ISR_NE));
+ errorflags = (isrflags & (uint32_t)(USART_ISR_PE | USART_ISR_FE | USART_ISR_ORE | USART_ISR_NE | USART_ISR_RTOF));
if (errorflags == 0U)
{
/* UART in mode Receiver ---------------------------------------------------*/
@@ -2164,10 +2149,18 @@ void HAL_UART_IRQHandler(UART_HandleTypeDef *huart)
huart->ErrorCode |= HAL_UART_ERROR_ORE;
}
- /* Call UART Error Call back function if need be --------------------------*/
+ /* UART Receiver Timeout interrupt occurred ---------------------------------*/
+ if (((isrflags & USART_ISR_RTOF) != 0U) && ((cr1its & USART_CR1_RTOIE) != 0U))
+ {
+ __HAL_UART_CLEAR_FLAG(huart, UART_CLEAR_RTOF);
+
+ huart->ErrorCode |= HAL_UART_ERROR_RTO;
+ }
+
+ /* Call UART Error Call back function if need be ----------------------------*/
if (huart->ErrorCode != HAL_UART_ERROR_NONE)
{
- /* UART in mode Receiver ---------------------------------------------------*/
+ /* UART in mode Receiver --------------------------------------------------*/
if (((isrflags & USART_ISR_RXNE) != 0U)
&& ((cr1its & USART_CR1_RXNEIE) != 0U))
{
@@ -2177,11 +2170,14 @@ void HAL_UART_IRQHandler(UART_HandleTypeDef *huart)
}
}
- /* If Overrun error occurs, or if any error occurs in DMA mode reception,
- consider error as blocking */
+ /* If Error is to be considered as blocking :
+ - Receiver Timeout error in Reception
+ - Overrun error in Reception
+ - any error occurs in DMA mode reception
+ */
errorcode = huart->ErrorCode;
if ((HAL_IS_BIT_SET(huart->Instance->CR3, USART_CR3_DMAR)) ||
- ((errorcode & HAL_UART_ERROR_ORE) != 0U))
+ ((errorcode & (HAL_UART_ERROR_RTO | HAL_UART_ERROR_ORE)) != 0U))
{
/* Blocking error : transfer is aborted
Set the UART state ready to be able to start again the process,
@@ -2249,6 +2245,26 @@ void HAL_UART_IRQHandler(UART_HandleTypeDef *huart)
return;
} /* End if some error occurs */
+#if defined(USART_CR1_UESM)
+
+ /* UART wakeup from Stop mode interrupt occurred ---------------------------*/
+ if (((isrflags & USART_ISR_WUF) != 0U) && ((cr3its & USART_CR3_WUFIE) != 0U))
+ {
+ __HAL_UART_CLEAR_FLAG(huart, UART_CLEAR_WUF);
+
+ /* UART Rx state is not reset as a reception process might be ongoing.
+ If UART handle state fields need to be reset to READY, this could be done in Wakeup callback */
+
+#if (USE_HAL_UART_REGISTER_CALLBACKS == 1)
+ /* Call registered Wakeup Callback */
+ huart->WakeupCallback(huart);
+#else
+ /* Call legacy weak Wakeup Callback */
+ HAL_UARTEx_WakeupCallback(huart);
+#endif /* USE_HAL_UART_REGISTER_CALLBACKS */
+ return;
+ }
+#endif /* USART_CR1_UESM */
/* UART in mode Transmitter ------------------------------------------------*/
if (((isrflags & USART_ISR_TXE) != 0U)
@@ -2390,6 +2406,23 @@ __weak void HAL_UART_AbortReceiveCpltCallback(UART_HandleTypeDef *huart)
*/
}
+#if defined(USART_CR1_UESM)
+/**
+ * @brief UART wakeup from Stop mode callback.
+ * @param huart UART handle.
+ * @retval None
+ */
+__weak void HAL_UARTEx_WakeupCallback(UART_HandleTypeDef *huart)
+{
+ /* Prevent unused argument(s) compilation warning */
+ UNUSED(huart);
+
+ /* NOTE : This function should not be modified, when the callback is needed,
+ the HAL_UARTEx_WakeupCallback can be implemented in the user file.
+ */
+}
+
+#endif /* USART_CR1_UESM */
/**
* @}
*/
@@ -2403,6 +2436,9 @@ __weak void HAL_UART_AbortReceiveCpltCallback(UART_HandleTypeDef *huart)
===============================================================================
[..]
This subsection provides a set of functions allowing to control the UART.
+ (+) HAL_UART_ReceiverTimeout_Config() API allows to configure the receiver timeout value on the fly
+ (+) HAL_UART_EnableReceiverTimeout() API enables the receiver timeout feature
+ (+) HAL_UART_DisableReceiverTimeout() API disables the receiver timeout feature
(+) HAL_MultiProcessor_EnableMuteMode() API enables mute mode
(+) HAL_MultiProcessor_DisableMuteMode() API disables mute mode
(+) HAL_MultiProcessor_EnterMuteMode() API enters mute mode
@@ -2416,6 +2452,82 @@ __weak void HAL_UART_AbortReceiveCpltCallback(UART_HandleTypeDef *huart)
* @{
*/
+/**
+ * @brief Update on the fly the receiver timeout value in RTOR register.
+ * @param huart Pointer to a UART_HandleTypeDef structure that contains
+ * the configuration information for the specified UART module.
+ * @param TimeoutValue receiver timeout value in number of baud blocks. The timeout
+ * value must be less or equal to 0x0FFFFFFFF.
+ * @retval None
+ */
+void HAL_UART_ReceiverTimeout_Config(UART_HandleTypeDef *huart, uint32_t TimeoutValue)
+{
+ assert_param(IS_UART_RECEIVER_TIMEOUT_VALUE(TimeoutValue));
+ MODIFY_REG(huart->Instance->RTOR, USART_RTOR_RTO, TimeoutValue);
+}
+
+/**
+ * @brief Enable the UART receiver timeout feature.
+ * @param huart Pointer to a UART_HandleTypeDef structure that contains
+ * the configuration information for the specified UART module.
+ * @retval HAL status
+ */
+HAL_StatusTypeDef HAL_UART_EnableReceiverTimeout(UART_HandleTypeDef *huart)
+{
+ if (huart->gState == HAL_UART_STATE_READY)
+ {
+ /* Process Locked */
+ __HAL_LOCK(huart);
+
+ huart->gState = HAL_UART_STATE_BUSY;
+
+ /* Set the USART RTOEN bit */
+ SET_BIT(huart->Instance->CR2, USART_CR2_RTOEN);
+
+ huart->gState = HAL_UART_STATE_READY;
+
+ /* Process Unlocked */
+ __HAL_UNLOCK(huart);
+
+ return HAL_OK;
+ }
+ else
+ {
+ return HAL_BUSY;
+ }
+}
+
+/**
+ * @brief Disable the UART receiver timeout feature.
+ * @param huart Pointer to a UART_HandleTypeDef structure that contains
+ * the configuration information for the specified UART module.
+ * @retval HAL status
+ */
+HAL_StatusTypeDef HAL_UART_DisableReceiverTimeout(UART_HandleTypeDef *huart)
+{
+ if (huart->gState == HAL_UART_STATE_READY)
+ {
+ /* Process Locked */
+ __HAL_LOCK(huart);
+
+ huart->gState = HAL_UART_STATE_BUSY;
+
+ /* Clear the USART RTOEN bit */
+ CLEAR_BIT(huart->Instance->CR2, USART_CR2_RTOEN);
+
+ huart->gState = HAL_UART_STATE_READY;
+
+ /* Process Unlocked */
+ __HAL_UNLOCK(huart);
+
+ return HAL_OK;
+ }
+ else
+ {
+ return HAL_BUSY;
+ }
+}
+
/**
* @brief Enable UART in mute mode (does not mean UART enters mute mode;
* to enter mute mode, HAL_MultiProcessor_EnterMuteMode() API must be called).
@@ -2424,7 +2536,6 @@ __weak void HAL_UART_AbortReceiveCpltCallback(UART_HandleTypeDef *huart)
*/
HAL_StatusTypeDef HAL_MultiProcessor_EnableMuteMode(UART_HandleTypeDef *huart)
{
- /* Process Locked */
__HAL_LOCK(huart);
huart->gState = HAL_UART_STATE_BUSY;
@@ -2445,7 +2556,6 @@ HAL_StatusTypeDef HAL_MultiProcessor_EnableMuteMode(UART_HandleTypeDef *huart)
*/
HAL_StatusTypeDef HAL_MultiProcessor_DisableMuteMode(UART_HandleTypeDef *huart)
{
- /* Process Locked */
__HAL_LOCK(huart);
huart->gState = HAL_UART_STATE_BUSY;
@@ -2476,7 +2586,6 @@ void HAL_MultiProcessor_EnterMuteMode(UART_HandleTypeDef *huart)
*/
HAL_StatusTypeDef HAL_HalfDuplex_EnableTransmitter(UART_HandleTypeDef *huart)
{
- /* Process Locked */
__HAL_LOCK(huart);
huart->gState = HAL_UART_STATE_BUSY;
@@ -2488,7 +2597,6 @@ HAL_StatusTypeDef HAL_HalfDuplex_EnableTransmitter(UART_HandleTypeDef *huart)
huart->gState = HAL_UART_STATE_READY;
- /* Process Unlocked */
__HAL_UNLOCK(huart);
return HAL_OK;
@@ -2501,7 +2609,6 @@ HAL_StatusTypeDef HAL_HalfDuplex_EnableTransmitter(UART_HandleTypeDef *huart)
*/
HAL_StatusTypeDef HAL_HalfDuplex_EnableReceiver(UART_HandleTypeDef *huart)
{
- /* Process Locked */
__HAL_LOCK(huart);
huart->gState = HAL_UART_STATE_BUSY;
@@ -2513,7 +2620,6 @@ HAL_StatusTypeDef HAL_HalfDuplex_EnableReceiver(UART_HandleTypeDef *huart)
huart->gState = HAL_UART_STATE_READY;
- /* Process Unlocked */
__HAL_UNLOCK(huart);
return HAL_OK;
@@ -2530,7 +2636,6 @@ HAL_StatusTypeDef HAL_LIN_SendBreak(UART_HandleTypeDef *huart)
/* Check the parameters */
assert_param(IS_UART_LIN_INSTANCE(huart->Instance));
- /* Process Locked */
__HAL_LOCK(huart);
huart->gState = HAL_UART_STATE_BUSY;
@@ -2540,7 +2645,6 @@ HAL_StatusTypeDef HAL_LIN_SendBreak(UART_HandleTypeDef *huart)
huart->gState = HAL_UART_STATE_READY;
- /* Process Unlocked */
__HAL_UNLOCK(huart);
return HAL_OK;
@@ -2551,8 +2655,8 @@ HAL_StatusTypeDef HAL_LIN_SendBreak(UART_HandleTypeDef *huart)
*/
/** @defgroup UART_Exported_Functions_Group4 Peripheral State and Error functions
- * @brief UART Peripheral State functions
- *
+ * @brief UART Peripheral State functions
+ *
@verbatim
==============================================================================
##### Peripheral State and Error functions #####
@@ -2574,7 +2678,8 @@ HAL_StatusTypeDef HAL_LIN_SendBreak(UART_HandleTypeDef *huart)
*/
HAL_UART_StateTypeDef HAL_UART_GetState(UART_HandleTypeDef *huart)
{
- uint32_t temp1, temp2;
+ uint32_t temp1;
+ uint32_t temp2;
temp1 = huart->gState;
temp2 = huart->RxState;
@@ -2586,7 +2691,7 @@ HAL_UART_StateTypeDef HAL_UART_GetState(UART_HandleTypeDef *huart)
* @param huart Pointer to a UART_HandleTypeDef structure that contains
* the configuration information for the specified UART.
* @retval UART Error Code
-*/
+ */
uint32_t HAL_UART_GetError(UART_HandleTypeDef *huart)
{
return huart->ErrorCode;
@@ -2620,6 +2725,9 @@ void UART_InitCallbacksToDefault(UART_HandleTypeDef *huart)
huart->AbortCpltCallback = HAL_UART_AbortCpltCallback; /* Legacy weak AbortCpltCallback */
huart->AbortTransmitCpltCallback = HAL_UART_AbortTransmitCpltCallback; /* Legacy weak AbortTransmitCpltCallback */
huart->AbortReceiveCpltCallback = HAL_UART_AbortReceiveCpltCallback; /* Legacy weak AbortReceiveCpltCallback */
+#if defined(USART_CR1_UESM)
+ huart->WakeupCallback = HAL_UARTEx_WakeupCallback; /* Legacy weak WakeupCallback */
+#endif /* USART_CR1_UESM */
}
#endif /* USE_HAL_UART_REGISTER_CALLBACKS */
@@ -2636,6 +2744,7 @@ HAL_StatusTypeDef UART_SetConfig(UART_HandleTypeDef *huart)
UART_ClockSourceTypeDef clocksource;
uint32_t usartdiv = 0x00000000U;
HAL_StatusTypeDef ret = HAL_OK;
+ uint32_t pclk;
/* Check the parameters */
assert_param(IS_UART_BAUDRATE(huart->Init.BaudRate));
@@ -2683,21 +2792,23 @@ HAL_StatusTypeDef UART_SetConfig(UART_HandleTypeDef *huart)
switch (clocksource)
{
case UART_CLOCKSOURCE_PCLK1:
- usartdiv = (uint16_t)(UART_DIV_SAMPLING8(HAL_RCC_GetPCLK1Freq(), huart->Init.BaudRate));
+ pclk = HAL_RCC_GetPCLK1Freq();
+ usartdiv = (uint16_t)(UART_DIV_SAMPLING8(pclk, huart->Init.BaudRate));
break;
case UART_CLOCKSOURCE_PCLK2:
- usartdiv = (uint16_t)(UART_DIV_SAMPLING8(HAL_RCC_GetPCLK2Freq(), huart->Init.BaudRate));
+ pclk = HAL_RCC_GetPCLK2Freq();
+ usartdiv = (uint16_t)(UART_DIV_SAMPLING8(pclk, huart->Init.BaudRate));
break;
case UART_CLOCKSOURCE_HSI:
usartdiv = (uint16_t)(UART_DIV_SAMPLING8(HSI_VALUE, huart->Init.BaudRate));
break;
case UART_CLOCKSOURCE_SYSCLK:
- usartdiv = (uint16_t)(UART_DIV_SAMPLING8(HAL_RCC_GetSysClockFreq(), huart->Init.BaudRate));
+ pclk = HAL_RCC_GetSysClockFreq();
+ usartdiv = (uint16_t)(UART_DIV_SAMPLING8(pclk, huart->Init.BaudRate));
break;
case UART_CLOCKSOURCE_LSE:
usartdiv = (uint16_t)(UART_DIV_SAMPLING8(LSE_VALUE, huart->Init.BaudRate));
break;
- case UART_CLOCKSOURCE_UNDEFINED:
default:
ret = HAL_ERROR;
break;
@@ -2720,21 +2831,23 @@ HAL_StatusTypeDef UART_SetConfig(UART_HandleTypeDef *huart)
switch (clocksource)
{
case UART_CLOCKSOURCE_PCLK1:
- usartdiv = (uint16_t)(UART_DIV_SAMPLING16(HAL_RCC_GetPCLK1Freq(), huart->Init.BaudRate));
+ pclk = HAL_RCC_GetPCLK1Freq();
+ usartdiv = (uint16_t)(UART_DIV_SAMPLING16(pclk, huart->Init.BaudRate));
break;
case UART_CLOCKSOURCE_PCLK2:
- usartdiv = (uint16_t)(UART_DIV_SAMPLING16(HAL_RCC_GetPCLK2Freq(), huart->Init.BaudRate));
+ pclk = HAL_RCC_GetPCLK2Freq();
+ usartdiv = (uint16_t)(UART_DIV_SAMPLING16(pclk, huart->Init.BaudRate));
break;
case UART_CLOCKSOURCE_HSI:
usartdiv = (uint16_t)(UART_DIV_SAMPLING16(HSI_VALUE, huart->Init.BaudRate));
break;
case UART_CLOCKSOURCE_SYSCLK:
- usartdiv = (uint16_t)(UART_DIV_SAMPLING16(HAL_RCC_GetSysClockFreq(), huart->Init.BaudRate));
+ pclk = HAL_RCC_GetSysClockFreq();
+ usartdiv = (uint16_t)(UART_DIV_SAMPLING16(pclk, huart->Init.BaudRate));
break;
case UART_CLOCKSOURCE_LSE:
usartdiv = (uint16_t)(UART_DIV_SAMPLING16(LSE_VALUE, huart->Init.BaudRate));
break;
- case UART_CLOCKSOURCE_UNDEFINED:
default:
ret = HAL_ERROR;
break;
@@ -2858,12 +2971,24 @@ HAL_StatusTypeDef UART_CheckIdleState(UART_HandleTypeDef *huart)
return HAL_TIMEOUT;
}
}
+#if defined(USART_ISR_REACK)
+
+ /* Check if the Receiver is enabled */
+ if ((huart->Instance->CR1 & USART_CR1_RE) == USART_CR1_RE)
+ {
+ /* Wait until REACK flag is set */
+ if (UART_WaitOnFlagUntilTimeout(huart, USART_ISR_REACK, RESET, tickstart, HAL_UART_TIMEOUT_VALUE) != HAL_OK)
+ {
+ /* Timeout occurred */
+ return HAL_TIMEOUT;
+ }
+ }
+#endif
/* Initialize the UART State */
huart->gState = HAL_UART_STATE_READY;
huart->RxState = HAL_UART_STATE_READY;
- /* Process Unlocked */
__HAL_UNLOCK(huart);
return HAL_OK;
@@ -2878,7 +3003,8 @@ HAL_StatusTypeDef UART_CheckIdleState(UART_HandleTypeDef *huart)
* @param Timeout Timeout duration
* @retval HAL status
*/
-HAL_StatusTypeDef UART_WaitOnFlagUntilTimeout(UART_HandleTypeDef *huart, uint32_t Flag, FlagStatus Status, uint32_t Tickstart, uint32_t Timeout)
+HAL_StatusTypeDef UART_WaitOnFlagUntilTimeout(UART_HandleTypeDef *huart, uint32_t Flag, FlagStatus Status,
+ uint32_t Tickstart, uint32_t Timeout)
{
/* Wait until flag is set */
while ((__HAL_UART_GET_FLAG(huart, Flag) ? SET : RESET) == Status)
@@ -2895,11 +3021,32 @@ HAL_StatusTypeDef UART_WaitOnFlagUntilTimeout(UART_HandleTypeDef *huart, uint32_
huart->gState = HAL_UART_STATE_READY;
huart->RxState = HAL_UART_STATE_READY;
- /* Process Unlocked */
__HAL_UNLOCK(huart);
return HAL_TIMEOUT;
}
+
+ if (READ_BIT(huart->Instance->CR1, USART_CR1_RE) != 0U)
+ {
+ if (__HAL_UART_GET_FLAG(huart, UART_FLAG_RTOF) == SET)
+ {
+ /* Clear Receiver Timeout flag*/
+ __HAL_UART_CLEAR_FLAG(huart, UART_CLEAR_RTOF);
+
+ /* Disable TXE, RXNE, PE and ERR (Frame error, noise error, overrun error) interrupts for the interrupt process */
+ CLEAR_BIT(huart->Instance->CR1, (USART_CR1_RXNEIE | USART_CR1_PEIE | USART_CR1_TXEIE));
+ CLEAR_BIT(huart->Instance->CR3, USART_CR3_EIE);
+
+ huart->gState = HAL_UART_STATE_READY;
+ huart->RxState = HAL_UART_STATE_READY;
+ huart->ErrorCode = HAL_UART_ERROR_RTO;
+
+ /* Process Unlocked */
+ __HAL_UNLOCK(huart);
+
+ return HAL_TIMEOUT;
+ }
+ }
}
}
return HAL_OK;
diff --git a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_GCC/Prog/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_uart_ex.c b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_GCC/Prog/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_uart_ex.c
index 415fb56b..fcbcf4fd 100644
--- a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_GCC/Prog/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_uart_ex.c
+++ b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_GCC/Prog/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_uart_ex.c
@@ -57,6 +57,9 @@
/** @defgroup UARTEx_Private_Functions UARTEx Private Functions
* @{
*/
+#if defined(USART_CR1_UESM)
+static void UARTEx_Wakeup_AddressConfig(UART_HandleTypeDef *huart, UART_WakeUpTypeDef WakeUpSelection);
+#endif /* USART_CR1_UESM */
/**
* @}
*/
@@ -144,7 +147,8 @@
* oversampling rate).
* @retval HAL status
*/
-HAL_StatusTypeDef HAL_RS485Ex_Init(UART_HandleTypeDef *huart, uint32_t Polarity, uint32_t AssertionTime, uint32_t DeassertionTime)
+HAL_StatusTypeDef HAL_RS485Ex_Init(UART_HandleTypeDef *huart, uint32_t Polarity, uint32_t AssertionTime,
+ uint32_t DeassertionTime)
{
uint32_t temp;
@@ -224,42 +228,74 @@ HAL_StatusTypeDef HAL_RS485Ex_Init(UART_HandleTypeDef *huart, uint32_t Polarity,
* @}
*/
-/** @defgroup UARTEx_Exported_Functions_Group2 IO operation functions
- * @brief Extended functions
- *
-@verbatim
- ===============================================================================
- ##### IO operation functions #####
- ===============================================================================
- This subsection provides a set of Wakeup and FIFO mode related callback functions.
-
-@endverbatim
- * @{
- */
-
-
-/**
- * @}
- */
/** @defgroup UARTEx_Exported_Functions_Group3 Peripheral Control functions
* @brief Extended Peripheral Control functions
- *
+ *
@verbatim
===============================================================================
##### Peripheral Control functions #####
===============================================================================
[..] This section provides the following functions:
+ (+) HAL_UARTEx_EnableClockStopMode() API enables the UART clock (HSI or LSE only) during stop mode
+ (+) HAL_UARTEx_DisableClockStopMode() API disables the above functionality
(+) HAL_MultiProcessorEx_AddressLength_Set() API optionally sets the UART node address
detection length to more than 4 bits for multiprocessor address mark wake up.
+#if defined(USART_CR1_UESM)
+ (+) HAL_UARTEx_StopModeWakeUpSourceConfig() API defines the wake-up from stop mode
+ trigger: address match, Start Bit detection or RXNE bit status.
+ (+) HAL_UARTEx_EnableStopMode() API enables the UART to wake up the MCU from stop mode
+ (+) HAL_UARTEx_DisableStopMode() API disables the above functionality
+#endif
@endverbatim
* @{
*/
+#if defined(USART_CR3_UCESM)
+/**
+ * @brief Keep UART Clock enabled when in Stop Mode.
+ * @note When the USART clock source is configured to be LSE or HSI, it is possible to keep enabled
+ * this clock during STOP mode by setting the UCESM bit in USART_CR3 control register.
+ * @note When LPUART is used to wakeup from stop with LSE is selected as LPUART clock source,
+ * and desired baud rate is 9600 baud, the bit UCESM bit in LPUART_CR3 control register must be set.
+ * @param huart UART handle.
+ * @retval HAL status
+ */
+HAL_StatusTypeDef HAL_UARTEx_EnableClockStopMode(UART_HandleTypeDef *huart)
+{
+ /* Process Locked */
+ __HAL_LOCK(huart);
+ /* Set UCESM bit */
+ SET_BIT(huart->Instance->CR3, USART_CR3_UCESM);
+ /* Process Unlocked */
+ __HAL_UNLOCK(huart);
+ return HAL_OK;
+}
+
+/**
+ * @brief Disable UART Clock when in Stop Mode.
+ * @param huart UART handle.
+ * @retval HAL status
+ */
+HAL_StatusTypeDef HAL_UARTEx_DisableClockStopMode(UART_HandleTypeDef *huart)
+{
+ /* Process Locked */
+ __HAL_LOCK(huart);
+
+ /* Clear UCESM bit */
+ CLEAR_BIT(huart->Instance->CR3, USART_CR3_UCESM);
+
+ /* Process Unlocked */
+ __HAL_UNLOCK(huart);
+
+ return HAL_OK;
+}
+
+#endif /* USART_CR3_UCESM */
/**
* @brief By default in multiprocessor mode, when the wake up method is set
* to address mark, the UART handles only 4-bit long addresses detection;
@@ -299,8 +335,108 @@ HAL_StatusTypeDef HAL_MultiProcessorEx_AddressLength_Set(UART_HandleTypeDef *hua
return (UART_CheckIdleState(huart));
}
+#if defined(USART_CR1_UESM)
+/**
+ * @brief Set Wakeup from Stop mode interrupt flag selection.
+ * @note It is the application responsibility to enable the interrupt used as
+ * usart_wkup interrupt source before entering low-power mode.
+ * @param huart UART handle.
+ * @param WakeUpSelection Address match, Start Bit detection or RXNE/RXFNE bit status.
+ * This parameter can be one of the following values:
+ * @arg @ref UART_WAKEUP_ON_ADDRESS
+ * @arg @ref UART_WAKEUP_ON_STARTBIT
+ * @arg @ref UART_WAKEUP_ON_READDATA_NONEMPTY
+ * @retval HAL status
+ */
+HAL_StatusTypeDef HAL_UARTEx_StopModeWakeUpSourceConfig(UART_HandleTypeDef *huart, UART_WakeUpTypeDef WakeUpSelection)
+{
+ HAL_StatusTypeDef status = HAL_OK;
+ uint32_t tickstart;
+ /* check the wake-up from stop mode UART instance */
+ assert_param(IS_UART_WAKEUP_FROMSTOP_INSTANCE(huart->Instance));
+ /* check the wake-up selection parameter */
+ assert_param(IS_UART_WAKEUP_SELECTION(WakeUpSelection.WakeUpEvent));
+ /* Process Locked */
+ __HAL_LOCK(huart);
+
+ huart->gState = HAL_UART_STATE_BUSY;
+
+ /* Disable the Peripheral */
+ __HAL_UART_DISABLE(huart);
+
+ /* Set the wake-up selection scheme */
+ MODIFY_REG(huart->Instance->CR3, USART_CR3_WUS, WakeUpSelection.WakeUpEvent);
+
+ if (WakeUpSelection.WakeUpEvent == UART_WAKEUP_ON_ADDRESS)
+ {
+ UARTEx_Wakeup_AddressConfig(huart, WakeUpSelection);
+ }
+
+ /* Enable the Peripheral */
+ __HAL_UART_ENABLE(huart);
+
+ /* Init tickstart for timeout managment*/
+ tickstart = HAL_GetTick();
+
+ /* Wait until REACK flag is set */
+ if (UART_WaitOnFlagUntilTimeout(huart, USART_ISR_REACK, RESET, tickstart, HAL_UART_TIMEOUT_VALUE) != HAL_OK)
+ {
+ status = HAL_TIMEOUT;
+ }
+ else
+ {
+ /* Initialize the UART State */
+ huart->gState = HAL_UART_STATE_READY;
+ }
+
+ /* Process Unlocked */
+ __HAL_UNLOCK(huart);
+
+ return status;
+}
+
+/**
+ * @brief Enable UART Stop Mode.
+ * @note The UART is able to wake up the MCU from Stop 1 mode as long as UART clock is HSI or LSE.
+ * @param huart UART handle.
+ * @retval HAL status
+ */
+HAL_StatusTypeDef HAL_UARTEx_EnableStopMode(UART_HandleTypeDef *huart)
+{
+ /* Process Locked */
+ __HAL_LOCK(huart);
+
+ /* Set UESM bit */
+ SET_BIT(huart->Instance->CR1, USART_CR1_UESM);
+
+ /* Process Unlocked */
+ __HAL_UNLOCK(huart);
+
+ return HAL_OK;
+}
+
+/**
+ * @brief Disable UART Stop Mode.
+ * @param huart UART handle.
+ * @retval HAL status
+ */
+HAL_StatusTypeDef HAL_UARTEx_DisableStopMode(UART_HandleTypeDef *huart)
+{
+ /* Process Locked */
+ __HAL_LOCK(huart);
+
+ /* Clear UESM bit */
+ CLEAR_BIT(huart->Instance->CR1, USART_CR1_UESM);
+
+ /* Process Unlocked */
+ __HAL_UNLOCK(huart);
+
+ return HAL_OK;
+}
+
+#endif /* USART_CR1_UESM */
/**
* @}
*/
@@ -312,6 +448,25 @@ HAL_StatusTypeDef HAL_MultiProcessorEx_AddressLength_Set(UART_HandleTypeDef *hua
/** @addtogroup UARTEx_Private_Functions
* @{
*/
+#if defined(USART_CR1_UESM)
+
+/**
+ * @brief Initialize the UART wake-up from stop mode parameters when triggered by address detection.
+ * @param huart UART handle.
+ * @param WakeUpSelection UART wake up from stop mode parameters.
+ * @retval None
+ */
+static void UARTEx_Wakeup_AddressConfig(UART_HandleTypeDef *huart, UART_WakeUpTypeDef WakeUpSelection)
+{
+ assert_param(IS_UART_ADDRESSLENGTH_DETECT(WakeUpSelection.AddressLength));
+
+ /* Set the USART address length */
+ MODIFY_REG(huart->Instance->CR2, USART_CR2_ADDM7, WakeUpSelection.AddressLength);
+
+ /* Set the USART address node */
+ MODIFY_REG(huart->Instance->CR2, USART_CR2_ADD, ((uint32_t)WakeUpSelection.Address << UART_CR2_ADDRESS_LSB_POS));
+}
+#endif /* USART_CR1_UESM */
/**
* @}
diff --git a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_GCC/Prog/lib/system_stm32f7xx.c b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_GCC/Prog/lib/system_stm32f7xx.c
index cb4e5662..7282bc83 100644
--- a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_GCC/Prog/lib/system_stm32f7xx.c
+++ b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_GCC/Prog/lib/system_stm32f7xx.c
@@ -1,278 +1,244 @@
-/**
- ******************************************************************************
- * @file system_stm32f7xx.c
- * @author MCD Application Team
- * @brief CMSIS Cortex-M7 Device Peripheral Access Layer System Source File.
- *
- * This file provides two functions and one global variable to be called from
- * user application:
- * - SystemInit(): This function is called at startup just after reset and
- * before branch to main program. This call is made inside
- * the "startup_stm32f7xx.s" file.
- *
- * - SystemCoreClock variable: Contains the core clock (HCLK), it can be used
- * by the user application to setup the SysTick
- * timer or configure other parameters.
- *
- * - SystemCoreClockUpdate(): Updates the variable SystemCoreClock and must
- * be called whenever the core clock is changed
- * during program execution.
- *
- *
- ******************************************************************************
- * @attention
- *
- * © COPYRIGHT 2016 STMicroelectronics
- *
- * Redistribution and use in source and binary forms, with or without modification,
- * are permitted provided that the following conditions are met:
- * 1. Redistributions of source code must retain the above copyright notice,
- * this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright notice,
- * this list of conditions and the following disclaimer in the documentation
- * and/or other materials provided with the distribution.
- * 3. Neither the name of STMicroelectronics nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
- * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
- * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- ******************************************************************************
- */
-
-/** @addtogroup CMSIS
- * @{
- */
-
-/** @addtogroup stm32f7xx_system
- * @{
- */
-
-/** @addtogroup STM32F7xx_System_Private_Includes
- * @{
- */
-
-#include "stm32f7xx.h"
-
-#if !defined (HSE_VALUE)
- #define HSE_VALUE ((uint32_t)25000000) /*!< Default value of the External oscillator in Hz */
-#endif /* HSE_VALUE */
-
-#if !defined (HSI_VALUE)
- #define HSI_VALUE ((uint32_t)16000000) /*!< Value of the Internal oscillator in Hz*/
-#endif /* HSI_VALUE */
-
-/**
- * @}
- */
-
-/** @addtogroup STM32F7xx_System_Private_TypesDefinitions
- * @{
- */
-
-/**
- * @}
- */
-
-/** @addtogroup STM32F7xx_System_Private_Defines
- * @{
- */
-
-/************************* Miscellaneous Configuration ************************/
-
-/*!< Uncomment the following line if you need to relocate your vector Table in
- Internal SRAM. */
-/* #define VECT_TAB_SRAM */
-#define VECT_TAB_OFFSET 0x00 /*!< Vector Table base offset field.
- This value must be a multiple of 0x200. */
-/******************************************************************************/
-
-/**
- * @}
- */
-
-/** @addtogroup STM32F7xx_System_Private_Macros
- * @{
- */
-
-/**
- * @}
- */
-
-/** @addtogroup STM32F7xx_System_Private_Variables
- * @{
- */
-
- /* This variable is updated in three ways:
- 1) by calling CMSIS function SystemCoreClockUpdate()
- 2) by calling HAL API function HAL_RCC_GetHCLKFreq()
- 3) each time HAL_RCC_ClockConfig() is called to configure the system clock frequency
- Note: If you use this function to configure the system clock; then there
- is no need to call the 2 first functions listed above, since SystemCoreClock
- variable is updated automatically.
- */
- uint32_t SystemCoreClock = 16000000;
- const uint8_t AHBPrescTable[16] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 6, 7, 8, 9};
- const uint8_t APBPrescTable[8] = {0, 0, 0, 0, 1, 2, 3, 4};
-
-/**
- * @}
- */
-
-/** @addtogroup STM32F7xx_System_Private_FunctionPrototypes
- * @{
- */
-
-/**
- * @}
- */
-
-/** @addtogroup STM32F7xx_System_Private_Functions
- * @{
- */
-
-/**
- * @brief Setup the microcontroller system
- * Initialize the Embedded Flash Interface, the PLL and update the
- * SystemFrequency variable.
- * @param None
- * @retval None
- */
-void SystemInit(void)
-{
- /* FPU settings ------------------------------------------------------------*/
- #if (__FPU_PRESENT == 1) && (__FPU_USED == 1)
- SCB->CPACR |= ((3UL << 10*2)|(3UL << 11*2)); /* set CP10 and CP11 Full Access */
- #endif
- /* Reset the RCC clock configuration to the default reset state ------------*/
- /* Set HSION bit */
- RCC->CR |= (uint32_t)0x00000001;
-
- /* Reset CFGR register */
- RCC->CFGR = 0x00000000;
-
- /* Reset HSEON, CSSON and PLLON bits */
- RCC->CR &= (uint32_t)0xFEF6FFFF;
-
- /* Reset PLLCFGR register */
- RCC->PLLCFGR = 0x24003010;
-
- /* Reset HSEBYP bit */
- RCC->CR &= (uint32_t)0xFFFBFFFF;
-
- /* Disable all interrupts */
- RCC->CIR = 0x00000000;
-
- /* Configure the Vector Table location add offset address ------------------*/
-#ifdef VECT_TAB_SRAM
- SCB->VTOR = RAMDTCM_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAM */
-#else
- SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal FLASH */
-#endif
-}
-
-/**
- * @brief Update SystemCoreClock variable according to Clock Register Values.
- * The SystemCoreClock variable contains the core clock (HCLK), it can
- * be used by the user application to setup the SysTick timer or configure
- * other parameters.
- *
- * @note Each time the core clock (HCLK) changes, this function must be called
- * to update SystemCoreClock variable value. Otherwise, any configuration
- * based on this variable will be incorrect.
- *
- * @note - The system frequency computed by this function is not the real
- * frequency in the chip. It is calculated based on the predefined
- * constant and the selected clock source:
- *
- * - If SYSCLK source is HSI, SystemCoreClock will contain the HSI_VALUE(*)
- *
- * - If SYSCLK source is HSE, SystemCoreClock will contain the HSE_VALUE(**)
- *
- * - If SYSCLK source is PLL, SystemCoreClock will contain the HSE_VALUE(**)
- * or HSI_VALUE(*) multiplied/divided by the PLL factors.
- *
- * (*) HSI_VALUE is a constant defined in stm32f7xx_hal_conf.h file (default value
- * 16 MHz) but the real value may vary depending on the variations
- * in voltage and temperature.
- *
- * (**) HSE_VALUE is a constant defined in stm32f7xx_hal_conf.h file (default value
- * 25 MHz), user has to ensure that HSE_VALUE is same as the real
- * frequency of the crystal used. Otherwise, this function may
- * have wrong result.
- *
- * - The result of this function could be not correct when using fractional
- * value for HSE crystal.
- *
- * @param None
- * @retval None
- */
-void SystemCoreClockUpdate(void)
-{
- uint32_t tmp = 0, pllvco = 0, pllp = 2, pllsource = 0, pllm = 2;
-
- /* Get SYSCLK source -------------------------------------------------------*/
- tmp = RCC->CFGR & RCC_CFGR_SWS;
-
- switch (tmp)
- {
- case 0x00: /* HSI used as system clock source */
- SystemCoreClock = HSI_VALUE;
- break;
- case 0x04: /* HSE used as system clock source */
- SystemCoreClock = HSE_VALUE;
- break;
- case 0x08: /* PLL used as system clock source */
-
- /* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N
- SYSCLK = PLL_VCO / PLL_P
- */
- pllsource = (RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC) >> 22;
- pllm = RCC->PLLCFGR & RCC_PLLCFGR_PLLM;
-
- if (pllsource != 0)
- {
- /* HSE used as PLL clock source */
- pllvco = (HSE_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6);
- }
- else
- {
- /* HSI used as PLL clock source */
- pllvco = (HSI_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6);
- }
-
- pllp = (((RCC->PLLCFGR & RCC_PLLCFGR_PLLP) >>16) + 1 ) *2;
- SystemCoreClock = pllvco/pllp;
- break;
- default:
- SystemCoreClock = HSI_VALUE;
- break;
- }
- /* Compute HCLK frequency --------------------------------------------------*/
- /* Get HCLK prescaler */
- tmp = AHBPrescTable[((RCC->CFGR & RCC_CFGR_HPRE) >> 4)];
- /* HCLK frequency */
- SystemCoreClock >>= tmp;
-}
-
-/**
- * @}
- */
-
-/**
- * @}
- */
-
-/**
- * @}
- */
-/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
+/**
+ ******************************************************************************
+ * @file system_stm32f7xx.c
+ * @author MCD Application Team
+ * @brief CMSIS Cortex-M7 Device Peripheral Access Layer System Source File.
+ *
+ * This file provides two functions and one global variable to be called from
+ * user application:
+ * - SystemInit(): This function is called at startup just after reset and
+ * before branch to main program. This call is made inside
+ * the "startup_stm32f7xx.s" file.
+ *
+ * - SystemCoreClock variable: Contains the core clock (HCLK), it can be used
+ * by the user application to setup the SysTick
+ * timer or configure other parameters.
+ *
+ * - SystemCoreClockUpdate(): Updates the variable SystemCoreClock and must
+ * be called whenever the core clock is changed
+ * during program execution.
+ *
+ *
+ ******************************************************************************
+ * @attention
+ *
+ * © Copyright (c) 2016 STMicroelectronics.
+ * All rights reserved.
+ *
+ * This software component is licensed by ST under BSD 3-Clause license,
+ * the "License"; You may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at:
+ * opensource.org/licenses/BSD-3-Clause
+ *
+ ******************************************************************************
+ */
+
+/** @addtogroup CMSIS
+ * @{
+ */
+
+/** @addtogroup stm32f7xx_system
+ * @{
+ */
+
+/** @addtogroup STM32F7xx_System_Private_Includes
+ * @{
+ */
+
+#include "stm32f7xx.h"
+
+#if !defined (HSE_VALUE)
+ #define HSE_VALUE ((uint32_t)25000000) /*!< Default value of the External oscillator in Hz */
+#endif /* HSE_VALUE */
+
+#if !defined (HSI_VALUE)
+ #define HSI_VALUE ((uint32_t)16000000) /*!< Value of the Internal oscillator in Hz*/
+#endif /* HSI_VALUE */
+
+/**
+ * @}
+ */
+
+/** @addtogroup STM32F7xx_System_Private_TypesDefinitions
+ * @{
+ */
+
+/**
+ * @}
+ */
+
+/** @addtogroup STM32F7xx_System_Private_Defines
+ * @{
+ */
+
+/************************* Miscellaneous Configuration ************************/
+
+/*!< Uncomment the following line if you need to relocate your vector Table in
+ Internal SRAM. */
+/* #define VECT_TAB_SRAM */
+#define VECT_TAB_OFFSET 0x00 /*!< Vector Table base offset field.
+ This value must be a multiple of 0x200. */
+/******************************************************************************/
+
+/**
+ * @}
+ */
+
+/** @addtogroup STM32F7xx_System_Private_Macros
+ * @{
+ */
+
+/**
+ * @}
+ */
+
+/** @addtogroup STM32F7xx_System_Private_Variables
+ * @{
+ */
+
+ /* This variable is updated in three ways:
+ 1) by calling CMSIS function SystemCoreClockUpdate()
+ 2) by calling HAL API function HAL_RCC_GetHCLKFreq()
+ 3) each time HAL_RCC_ClockConfig() is called to configure the system clock frequency
+ Note: If you use this function to configure the system clock; then there
+ is no need to call the 2 first functions listed above, since SystemCoreClock
+ variable is updated automatically.
+ */
+ uint32_t SystemCoreClock = 16000000;
+ const uint8_t AHBPrescTable[16] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 6, 7, 8, 9};
+ const uint8_t APBPrescTable[8] = {0, 0, 0, 0, 1, 2, 3, 4};
+
+/**
+ * @}
+ */
+
+/** @addtogroup STM32F7xx_System_Private_FunctionPrototypes
+ * @{
+ */
+
+/**
+ * @}
+ */
+
+/** @addtogroup STM32F7xx_System_Private_Functions
+ * @{
+ */
+
+/**
+ * @brief Setup the microcontroller system
+ * Initialize the Embedded Flash Interface, the PLL and update the
+ * SystemFrequency variable.
+ * @param None
+ * @retval None
+ */
+void SystemInit(void)
+{
+ /* FPU settings ------------------------------------------------------------*/
+#if (__FPU_PRESENT == 1) && (__FPU_USED == 1)
+ SCB->CPACR |= ((3UL << 10*2)|(3UL << 11*2)); /* set CP10 and CP11 Full Access */
+#endif
+
+ /* Configure the Vector Table location add offset address ------------------*/
+#ifdef VECT_TAB_SRAM
+ SCB->VTOR = RAMDTCM_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAM */
+#else
+ SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal FLASH */
+#endif
+}
+
+/**
+ * @brief Update SystemCoreClock variable according to Clock Register Values.
+ * The SystemCoreClock variable contains the core clock (HCLK), it can
+ * be used by the user application to setup the SysTick timer or configure
+ * other parameters.
+ *
+ * @note Each time the core clock (HCLK) changes, this function must be called
+ * to update SystemCoreClock variable value. Otherwise, any configuration
+ * based on this variable will be incorrect.
+ *
+ * @note - The system frequency computed by this function is not the real
+ * frequency in the chip. It is calculated based on the predefined
+ * constant and the selected clock source:
+ *
+ * - If SYSCLK source is HSI, SystemCoreClock will contain the HSI_VALUE(*)
+ *
+ * - If SYSCLK source is HSE, SystemCoreClock will contain the HSE_VALUE(**)
+ *
+ * - If SYSCLK source is PLL, SystemCoreClock will contain the HSE_VALUE(**)
+ * or HSI_VALUE(*) multiplied/divided by the PLL factors.
+ *
+ * (*) HSI_VALUE is a constant defined in stm32f7xx_hal_conf.h file (default value
+ * 16 MHz) but the real value may vary depending on the variations
+ * in voltage and temperature.
+ *
+ * (**) HSE_VALUE is a constant defined in stm32f7xx_hal_conf.h file (default value
+ * 25 MHz), user has to ensure that HSE_VALUE is same as the real
+ * frequency of the crystal used. Otherwise, this function may
+ * have wrong result.
+ *
+ * - The result of this function could be not correct when using fractional
+ * value for HSE crystal.
+ *
+ * @param None
+ * @retval None
+ */
+void SystemCoreClockUpdate(void)
+{
+ uint32_t tmp = 0, pllvco = 0, pllp = 2, pllsource = 0, pllm = 2;
+
+ /* Get SYSCLK source -------------------------------------------------------*/
+ tmp = RCC->CFGR & RCC_CFGR_SWS;
+
+ switch (tmp)
+ {
+ case 0x00: /* HSI used as system clock source */
+ SystemCoreClock = HSI_VALUE;
+ break;
+ case 0x04: /* HSE used as system clock source */
+ SystemCoreClock = HSE_VALUE;
+ break;
+ case 0x08: /* PLL used as system clock source */
+
+ /* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N
+ SYSCLK = PLL_VCO / PLL_P
+ */
+ pllsource = (RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC) >> 22;
+ pllm = RCC->PLLCFGR & RCC_PLLCFGR_PLLM;
+
+ if (pllsource != 0)
+ {
+ /* HSE used as PLL clock source */
+ pllvco = (HSE_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6);
+ }
+ else
+ {
+ /* HSI used as PLL clock source */
+ pllvco = (HSI_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6);
+ }
+
+ pllp = (((RCC->PLLCFGR & RCC_PLLCFGR_PLLP) >>16) + 1 ) *2;
+ SystemCoreClock = pllvco/pllp;
+ break;
+ default:
+ SystemCoreClock = HSI_VALUE;
+ break;
+ }
+ /* Compute HCLK frequency --------------------------------------------------*/
+ /* Get HCLK prescaler */
+ tmp = AHBPrescTable[((RCC->CFGR & RCC_CFGR_HPRE) >> 4)];
+ /* HCLK frequency */
+ SystemCoreClock >>= tmp;
+}
+
+/**
+ * @}
+ */
+
+/**
+ * @}
+ */
+
+/**
+ * @}
+ */
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff --git a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_IAR/Boot/bin/openblt_stm32f746.out b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_IAR/Boot/bin/openblt_stm32f746.out
index a9b4e1a2..cb7f13c5 100644
Binary files a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_IAR/Boot/bin/openblt_stm32f746.out and b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_IAR/Boot/bin/openblt_stm32f746.out differ
diff --git a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_IAR/Boot/bin/openblt_stm32f746.srec b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_IAR/Boot/bin/openblt_stm32f746.srec
index a778048e..df9ad22b 100644
--- a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_IAR/Boot/bin/openblt_stm32f746.srec
+++ b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_IAR/Boot/bin/openblt_stm32f746.srec
@@ -1,1537 +1,1562 @@
S01900006F70656E626C745F73746D3332663734362E73726563F8
-S3150800000020140020795D0008AD5D0008B15D000888
-S31508000010B55D0008B95D0008BD5D00080000000078
-S31508000020000000000000000000000000C15D00089C
-S31508000030C55D000800000000C95D0008BD10000885
-S31508000040CD5D0008D15D0008D55D0008D95D0008C2
-S31508000050DD5D0008E15D0008E55D0008E95D000872
-S31508000060ED5D0008F15D0008F55D0008F95D000822
-S31508000070FD5D0008015E0008055E0008095E0008CF
-S315080000800D5E0008115E0008155E0008195E00087E
-S315080000901D5E0008215E0008255E0008295E00082E
-S315080000A02D5E0008315E0008355E0008395E0008DE
-S315080000B03D5E0008415E0008455E0008495E00088E
-S315080000C04D5E0008515E0008555E0008595E00083E
-S315080000D05D5E0008615E0008655E0008695E0008EE
-S315080000E06D5E0008715E0008755E0008795E00089E
-S315080000F07D5E0008815E0008855E0008895E00084E
-S315080001008D5E0008915E0008955E0008995E0008FD
-S315080001109D5E0008A15E0008A55E0008A95E0008AD
-S31508000120AD5E0008B15E0008B55E0008B95E00085D
-S31508000130BD5E0008C15E0008C55E0008C95E00080D
-S31508000140CD5E0008D15E0008D55E0008D95E0008BD
-S31508000150DD5E0008E15E0008E55E0008E95E00086D
-S31508000160ED5E0008F15E0008F55E0008F95E00081D
-S31508000170FD5E0008015F0008055F0008000000003A
-S31508000180095F00080D5F0008115F0008155F000889
-S31508000190195F00081D5F0008215F0008255F000839
-S315080001A0295F00082D5F0008315F0008355F0008E9
-S315080001B0395F00083D5F0008415F0008455F000899
-S315080001C0495F00084D5F00080EB418B5040008988A
+S3150800000050140020055F0008395F00083D5F0008AE
+S31508000010415F0008455F0008495F000800000000CE
+S315080000200000000000000000000000004D5F00080E
+S31508000030515F000800000000555F000871110008B4
+S31508000040595F00085D5F0008615F0008655F00088A
+S31508000050695F00086D5F0008715F0008755F00083A
+S31508000060795F00087D5F0008815F0008855F0008EA
+S31508000070895F00088D5F0008915F0008955F00089A
+S31508000080995F00089D5F0008A15F0008A55F00084A
+S31508000090A95F0008AD5F0008B15F0008B55F0008FA
+S315080000A0B95F0008BD5F0008C15F0008C55F0008AA
+S315080000B0C95F0008CD5F0008D15F0008D55F00085A
+S315080000C0D95F0008DD5F0008E15F0008E55F00080A
+S315080000D0E95F0008ED5F0008F15F0008F55F0008BA
+S315080000E0F95F0008FD5F0008016000080560000868
+S315080000F0096000080D600008116000081560000816
+S31508000100196000081D6000082160000825600008C5
+S31508000110296000082D600008316000083560000875
+S31508000120396000083D600008416000084560000825
+S31508000130496000084D6000085160000855600008D5
+S31508000140596000085D600008616000086560000885
+S31508000150696000086D600008716000087560000835
+S31508000160796000087D6000088160000885600008E5
+S31508000170896000088D600008916000080000000092
+S3150800018095600008996000089D600008A160000855
+S31508000190A5600008A9600008AD600008B160000805
+S315080001A0B5600008B9600008BD600008C1600008B5
+S315080001B0C5600008C9600008CD600008D160000865
+S315080001C0D5600008D96000080EB418B50400089870
S315080001D0012817D1A06B30F48030A063E168DFF8FE
-S315080001E078080140E160E06830F44010E0600F985C
+S315080001E030090140E160E06830F44010E0600F98A3
S315080001F0012803D1E06850F48010E060200000F088
-S31508000200F0FE0AE0E06850F04000E060200000F0F0
-S31508000210E8FEA16B51F48031A1630699012907D143
+S315080002004BFF0AE0E06850F04000E060200000F094
+S3150800021043FFA16B51F48031A1630699012907D1E7
S31508000220A16851F00601A160A16851F02001A16002
S31508000230C0B212BC5DF810FB1300DBB2022B52D120
-S31508000240DFF818288A1ADFF818389A4201D20F21DF
-S315080002504FE0DFF810288A1ADFF80C389A4201D2E4
-S315080002600E2146E0DFF804288A1ADFF804389A4295
-S3150800027001D20D213DE0DFF8FC278A1ADFF8F837AE
-S315080002809A4201D20C2134E0DFF8F0278A1ADFF807
-S31508000290F0379A4201D20B212BE0DFF8E8278A1AB9
-S315080002A0DFF8E4379A4201D20A2122E0DFF8DC2798
-S315080002B08A1ADFF8DC379A4201D2092119E0DFF8F9
-S315080002C0D4278A1ADFF8D0379A4201D2082110E0DB
-S315080002D0DFF8C827891ADFF8C827914201D2072113
+S31508000240DFF8D0288A1ADFF8D0389A4201D20F216F
+S315080002504FE0DFF8C8288A1ADFF8C4389A4201D274
+S315080002600E2146E0DFF8BC288A1ADFF8BC389A4225
+S3150800027001D20D213DE0DFF8B4288A1ADFF8B0383C
+S315080002809A4201D20C2134E0DFF8A8288A1ADFF84E
+S31508000290A8389A4201D20B212BE0DFF8A0288A1A47
+S315080002A0DFF89C389A4201D20A2122E0DFF8942826
+S315080002B08A1ADFF894389A4201D2092119E0DFF840
+S315080002C08C288A1ADFF888389A4201D2082110E069
+S315080002D0DFF88028891ADFF88028914201D20721A1
S315080002E007E0062105E0D2B2002A01D1092100E083
S315080002F00921C26832F47052C260C268890211F4D8
S3150800030070511143C16000207047816851F00101A6
S315080003108160002070478168490849008160002093
S31508000320704780B5C26832F0C042C2600A00D2B2D5
S31508000330012A08D1C16851F00051C160322000F08D
-S3150800034077FE002002BDC9B2002904D1C16851F068
+S31508000340D1FE002002BDC9B2002904D1C16851F00E
S315080003508041C160F2E70120F4E70EB478B50400E5
S3150800036000252600002005E0002104EB8002C2F8E3
-S315080003700411401C0F28F7D30F9800280CD1A06B46
-S3150800038030F40010A063206850F040002060206818
-S3150800039050F08000206003E0A06B50F40010A063CA
-S315080003A0002016F56061086016F50060006816F50D
-S315080003B0006108600A9801280CD10798002804D122
-S315080003C00021200000F0F7F818E00121200000F0D5
-S315080003D0F2F813E00A9803280CD10798002804D1EC
-S315080003E00021200000F0E7F808E00121200000F0D5
-S315080003F0E2F803E00321200000F0DDF810212000D8
-S3150800040000F0B9F8002800D00125200000F0C4F853
-S31508000410002800D00125002016F50061086100209B
-S3150800042016F500614861002016F50061C8610020D4
-S315080004301BE0002116EB401212F51062116006E06F
-S315080004405FF0904116EB401212F51062116016EB40
-S31508000450401111F5106100220A6116EB401111F5E1
-S3150800046010614FF67F328A60401C0599884210D287
-S3150800047016EB401111F5106109680029D9D5002835
-S31508000480DED15FF0006116EB401212F510621160C2
-S31508000490DDE700201BE0002116EB401212F5306262
-S315080004A0116006E05FF0904116EB401212F53062DB
-S315080004B0116016EB401111F5306100220A6116EB46
-S315080004C0401111F530614FF67F328A60401C05995C
-S315080004D0884210D216EB401111F5306109680029DF
-S315080004E0D9D50028DED15FF0006116EB401212F56F
-S315080004F030621160DDE716F50060006930F480703F
-S3150800050016F500610861089801280ED1DFF8040B7A
-S3150800051016F50061086316F50060006B40F480303C
-S3150800052050F0030016F5006630630020A0617FF0E6
-S31508000530804060610898002803D1A06950F0100037
-S31508000540A061A169DFF8D00A0143A1610B980028D0
-S3150800055003D0A06950F00800A0610F98012805D1C2
-S31508000560A06940F0804050F00400A0612800C0B2A5
-S3150800057072BC5DF810FB0022890151F0200101616F
-S31508000580521CDFF8981A8A4204D201698906F7D400
-S31508000590002070470320FCE7002110220261491C55
-S315080005A0DFF8782A914204D20269D206F7D40020ED
-S315080005B070470320FCE710F500621268C9B21143C0
-S315080005C010F5006001600020704710F50060806833
-S315080005D010F00600002801D1002006E0022801D00C
-S315080005E0062801D1022000E00020C0B2704730B4CE
-S315080005F00A784B78012B2BD110F50063DB690124AF
-S315080006000D7815F00F05AC40A4B2234310F500642D
-S31508000610E36110EB421313F510631B681B0440D407
-S3150800062010EB421313F510631B688C686405640DA0
-S31508000630C97854EA814454EA825444F0805454F404
-S315080006400044234310EB421010F51060036028E0C5
-S3150800065010F50063DB6901240D7815F00F05AC4031
-S3150800066053EA044310F50064E36110EB421313F5F3
-S3150800067030631B681B0414D410EB421313F5306364
-S315080006801B688C686405640DC97854EA814444F093
-S31508000690805454F40044234310EB421010F53060A4
-S315080006A00360002030BC704730B40A784B78012BC1
-S315080006B028D1012310F50064E46B0D7815F00F05B9
-S315080006C013FA05F5ADB2AC4310F50065EC6310F509
-S315080006D00064E469097811F00F018B409BB234EA93
-S315080006E0030310F50061CB6110EB421111F510619F
-S315080006F00B68DFF82C190B4010EB421010F5106050
-S31508000700036026E0012310F50064E46B0D7815F00C
-S315080007100F0513FA05F534EA054410F50065EC6390
-S3150800072010F50064E469097811F00F018B4034EA8A
-S31508000730034410F50061CC6110EB421111F53061EC
-S315080007400B68DFF8E0180B4010EB421010F530602C
-S315080007500360002030BC7047F8B504000D784B786C
-S31508000760012B40F0DD804B69002B24D114EB451397
-S3150800077013F5106314EB451616F5106636696FF314
-S31508000780DC461E6114EB451313F5106314EB45168E
-S3150800079016F51066366956F400261E6114EB4513E5
-S315080007A013F5106314EB451616F510663669F60C44
-S315080007B0F6041E615AE014EB451313F5106314EBA7
-S315080007C0451616F510663669F60CF6041E6114EB26
-S315080007D0451313F5106314EB451616F510663669BE
-S315080007E06FF3DC461E6114EB451616F5106614EB1E
-S315080007F0451313F510631F69D1F814C08B6813EB02
-S315080008000C0CBCF1010C8B68BCFBF3F3DFF818C8C1
-S315080008101CEAC34C5CEA0707376114EB451313F56A
-S31508000820106314EB451616F5106636694F697F0393
-S315080008307F0B3E431E61CB78012B17D114EB451372
-S3150800084013F5106314EB451616F51066366936F07F
-S31508000850C0461E6114EB451313F5106314EB4516D9
-S3150800086016F51066366956F000561E611300DBB29F
-S31508000870012B09D10B69002B18D014EB451313F57E
-S3150800088010630E695E6111E0CB78012B0ED04B69BF
-S31508000890002B0BD014F500635B6B01260F7817F05D
-S315080008A00F07BE40334314F500667363CB78012BFC
-S315080008B01DD114F500639B68DB050CD414EB4513B6
-S315080008C013F510631B6853F0005314EB451616F521
-S315080008D0106633600BE014EB451313F510631B68C1
-S315080008E053F0805314EB451616F51066336014EB77
-S315080008F0451313F510631B6853F0044314EB4514B2
-S3150800090014F510642360CB78012B40F0A280D2B294
-S3150800091000924B699BB20A78C96800F0A5F998E07D
-S3150800092014EB451010F5306014EB451313F53063DE
-S315080009301B69DB0CDB04036114EB451010F5306012
-S3150800094014EB451313F530631B696FF3DC4303613E
-S31508000950486900281AD114EB451010F5306014EBDD
-S31508000960451313F530631B698E687603760B33439C
-S31508000970036114EB451010F5306014EB451313F5BD
-S3150800098030631B6953F40023036129E04B698868C7
-S31508000990C3185B1E8868B3FBF0F014EB451313F518
-S315080009A0306314EB451616F5306636690700BFB294
-S315080009B0DFF874C61CEAC74C5CEA06061E6114EB2F
-S315080009C0451313F5306314EB451616F5306636698C
-S315080009D08F6880B200FB07F04003400B3043186174
-S315080009E0D2B2012A08D1C868002805D014EB4510F0
-S315080009F010F53060CA684261C87801281DD114F51F
-S31508000A0000608068C0050CD414EB451010F5306002
-S31508000A10006850F0005014EB451111F5306108607C
-S31508000A200BE014EB451010F53060006850F080506C
-S31508000A3014EB451111F53061086014EB451010F5FB
-S31508000A403060006850F0044014EB451414F5306427
-S31508000A5020600020F2BD0000BFFFBDFFC0ACD8007B
-S31508000A6000350C00C0E1E40040420F000024F40009
-S31508000A70804F12008073060120D61300A0491A0180
-S31508000A8060E31600002D310140771B0040A44C019D
-S31508000A90C091210000366E012075380020ABA601F2
-S31508000AA0E09C410070B40B001C785978012940F08D
-S31508000AB089805969002924D110EB441111F5106178
-S31508000AC010EB441515F510652D696FF3DC450D61BE
-S31508000AD010EB441111F5106110EB441515F510656E
-S31508000AE02D6955F400250D6110EB441111F51061BF
-S31508000AF010EB441515F510652D69ED0CED040D6127
-S31508000B0037E010EB441111F5106110EB441515F59B
-S31508000B1010652D69ED0CED040D6110EB441111F50E
-S31508000B20106110EB441515F510652D696FF3DC455A
-S31508000B300D6199685D69A94201D29968596110EBFE
-S31508000B40441111F5106110EB441515F510652D6962
-S31508000B5055F400250D6110EB441111F5106110EBE9
-S31508000B60441515F510652D695E697603760B3543D0
-S31508000B700D61D2B2012A09D11969002915D010EBE5
-S31508000B80441111F510611A694A610EE05969002984
-S31508000B900BD010F50061496B01221B7813F00F0387
-S31508000BA09A40114310F50062516310EB441111F598
-S31508000BB01061096851F0044110EB441010F51060FB
-S31508000BC001604EE010EB441111F5306110EB44154D
-S31508000BD015F530652D69ED0CED040D6110EB44112A
-S31508000BE011F5306110EB441515F530652D696FF375
-S31508000BF0DC450D615969002901D09968596110EBE6
-S31508000C00441111F5306110EB441515F530652D6961
-S31508000C1055F400250D6110EB441111F5306110EB08
-S31508000C20441515F530652D699E687603760B3543B0
-S31508000C300D61D2B2012A08D1D968002905D010EB76
-S31508000C40441111F53061DA684A6110EB441111F567
-S31508000C503061096851F0044110EB441010F530601A
-S31508000C600160002070BC7047F0B4049CE4B2002C0C
-S31508000C7012D19BB2DB1C9B0800250BE00E681700FF
-S31508000C80FFB24FF4805404FB070717F580573E6000
-S31508000C90091D6D1C9D42F1D30020F0BC704710B4AD
-S31508000CA092B2D21C9208002305E010F580542468FD
-S31508000CB00C60091D5B1C9342F7D3080010BC7047F3
-S31508000CC0020008784978012921D112EB401111F563
-S31508000CD01061096800290DD400280BD012EB4011C9
-S31508000CE011F51061096831F0804112EB401313F5D4
-S31508000CF01063196012EB401111F51061096851F47F
-S31508000D00001112EB401212F51062116020E012EB8E
-S31508000D10401111F53061096800290DD400280BD05F
-S31508000D2012EB401111F53061096831F0804112EB80
-S31508000D30401313F53063196012EB401111F5306159
-S31508000D40096851F4001112EB401212F53062116075
-S31508000D500020704710B40A784B78012B1ED110EB8F
-S31508000D60421313F510631B6833F4001310EB421497
-S31508000D7014F510642360CB78032B02D0C9780229B6
-S31508000D802AD110EB421111F51061096851F0805112
-S31508000D9010EB421010F5106001601DE010EB4213D5
-S31508000DA013F530631B6833F4001310EB421414F583
-S31508000DB030642360CB78032B02D0C97802290BD183
-S31508000DC010EB421111F53061096851F0805110EBB2
-S31508000DD0421010F530600160002010BC704710B555
-S31508000DE00400200000210CE04FF67F3210EB41137F
-S31508000DF013F510639A6010EB411313F530639A608C
-S31508000E00491C0F29F0D3002110F500621161002159
-S31508000E1010F500625161002110F50060C1612000E3
-S31508000E20FFF7BAFB0100C9B2002901D0C0B20AE037
-S31508000E3010212000FFF79FFB0100C9B2002901D04D
-S31508000E40C0B200E0C0B210BD10F50062126832F4FC
-S31508000E50FE6210F500631A6010F500621268C9B2E6
-S31508000E60090111F4FE61114310F5006001600020CC
-S31508000E70704780B510F50061496831F0020110F538
-S31508000E8000604160032000F0D3F8002002BD80B561
-S31508000E9010F50061496851F0020110F500604160E3
-S31508000EA0032000F0C5F8002002BD010048698969E1
-S31508000EB008407047010011F50060806911F500616E
-S31508000EC0C9690840000C7047010011F50060806987
-S31508000ED011F50061C969084080B270470200C9B2BD
-S31508000EE012EB411010F53060806812F50062516906
-S31508000EF00840704710B410F50062126910F50063D7
-S31508000F005B6B11F00F04E340DB0113F080031A4317
-S31508000F10C9B210EB411010F510608068104010BC83
-S31508000F207047406910F00100704710F510610968B4
-S31508000F30C90AC90210F51062116010F500618968C6
-S31508000F4011F00601042907D110F51061096851F05E
-S31508000F50030110F51062116010F50061496851F43B
-S31508000F60807110F5006041600020704710B40300DE
-S31508000F70006CDFF8B840A04206D313F5306000686D
-S31508000F80002801D500202AE0002013F530642061EE
-S31508000F9013F53060006950F4002013F530642061C1
-S31508000FA013F53060006950F0180013F530642061BD
-S31508000FB013F53060006950F0C04013F530642061C5
-S31508000FC0C9B201290AD113F53060426113F53060C0
-S31508000FD0006850F0802013F530631860002010BCBC
-S31508000FE070470021491C0D4A91420FD20369002B14
-S31508000FF0F8D50021036953F001030361491C9142A6
-S3150800100006D20369DB07F9D4002070470320FCE702
-S315080010100320FAE70001800000383C80410D0300F8
-S31508001020007833EC0078F3EF0000F81F0B30544FCC
-S3150800103038B5040000F03EF8050014F1010F02D09F
-S3150800104004480078241800F035F8401BA042FAD36B
-S3150800105031BD00BFBD00002080B500F00DF8104876
-S315080010601049086000201049086005200F490860EB
-S3150800107000200F49086001BD00200C490860704730
-S315080010800A480068C00303D509480168491C01607D
-S31508001090704780B5FFF7F4FF0548006802BD0000F9
-S315080010A0BF4B030014E000E018E000E010E000E0A9
-S315080010B00410002080B5FFF7ECFF02BD704730B47E
-S315080010C0002513E050F8042BD30744BFA9F1010308
-S315080010D09A18091F042942F8045BFAD213468C07AA
-S315080010E044BF15809B1CC90748BF1D7050F8041BD8
-S315080010F00029E7D130BC704710B58AB00400002C2F
-S3150800110001D10120B0E094F8BD03002805D10020E4
-S3150800111084F8BC03200000F051FE032084F8BD03C8
-S315080011202068FFF7F8F8211D83B06846342200F0DE
-S3150800113047FE0EBC2068FFF747F8002804D00220B7
-S3150800114084F8BD0301208FE000212068FFF7E9F845
-S31508001150002130E01C200A00D2B242432244012377
-S3150800116082F83D300A00D2B24243224482F83C104B
-S315080011700A00D2B2424322440B00DBB2A2F8423044
-S315080011800A00D2B242432244002382F83F300A00C2
-S31508001190D2B242432244002353640A00D2B24243E5
-S315080011A02244002393640A00D2B200FB02F02044D2
-S315080011B000220265491C0800C0B262689042C9D381
-S315080011C000212BE01C200A00D2B24243224400230D
-S315080011D082F8FD310A00D2B24243224482F8FC1159
-S315080011E00A00D2B242432244002382F8FF310A00A1
-S315080011F0D2B2424322440023C2F804320A00D2B2D1
-S31508001200424322440023C2F808320A00D2B200FB45
-S3150800121002F020440022C0F81022491C0800C0B27F
-S3150800122062689042CED3211D83B06846342200F00E
-S31508001230C7FD0EBC2068FFF790F8002804D00220EE
-S3150800124084F8BD0301200FE0002084F8380001204F
-S3150800125084F8BD03606A012802D1200000F029FE47
-S315080012602068FFF714FE00200AB010BD10B5040070
-S31508001270002C01D101200CE0032084F8BD032000D6
-S3150800128000F01EF8200000F028FE002084F8BD03B8
-S31508001290002010BD10B5040094F8BC03012801D144
-S315080012A002200CE0012084F8BC032068FFF7E1FD6A
-S315080012B02068FFF72AF8002084F8BC03002010BD38
-S315080012C010B5040094F8BC03012801D1022016E0E9
-S315080012D0012084F8BC032068FFF71DF82068FFF793
-S315080012E07EFD002804D0002084F8BC03012006E017
-S315080012F02068FFF7CCFD002084F8BC03002010BD51
-S315080013002DE9F84306003768B84600243068FFF729
-S3150800131008FE002840F06C823068FFF7C6FD0028FA
-S3150800132000F066823068FFF7C0FD800705D5306893
-S31508001330406910F00200316848613068FFF7B5FD72
-S31508001340000350D500243068FFF7B4FD050048E0D7
-S31508001350E80744D52100C9B23068FFF7BFFD8146CA
-S315080013605FEAC97009D518EB441010F53060012101
-S3150800137081602100300000F046FC5FEA097009D55B
-S315080013802100300000F0DEFC18EB441010F5306048
-S31508001390082181605FEAC96005D518EB441010F58D
-S315080013A03060102181605FEA89600ED530690128B6
-S315080013B005D116F5717201213068FFF7D7FD18EBD4
-S315080013C0441010F53060202181605FEA894006D517
-S315080013D018EB441010F530604FF400518160641C1E
-S315080013E06D08002DB4D13068FFF75FFD40037AD54C
-S315080013F03068FFF769FD0500002472E0E8076ED53E
-S315080014002100C9B23068FFF775FD81465FEAC970E9
-S315080014103AD5012114F00F0011FA00F018F5006111
-S31508001420496B31EA000018F50061486318EB44106F
-S3150800143010F5106001218160306901280DD11C204A
-S3150800144000FB04F13144896C00FB04F23244526C0F
-S31508001450114400FB04F0304481642100C9B2300015
-S3150800146000F053FD306901280ED1002C0CD11C2048
-S3150800147000FB04F03044006D002805D116F57172A2
-S3150800148001213068FFF772FD5FEA097005D518EB90
-S31508001490441010F51060082181605FEAC96005D51F
-S315080014A018EB441010F51060102181605FEA49605E
-S315080014B005D518EB441010F51060402181605FEAED
-S315080014C0897005D518EB441010F51060022181606B
-S315080014D05FEA096003D52100300000F020FB641C98
-S315080014E06D08002D8AD13068FFF7DFFC00281CD56F
-S315080014F018F5006040684008400018F5006148602B
-S3150800150096F8F403012807D1002086F8F403002191
-S31508001510300000F0E1FC02E0300000F041FD3068E8
-S31508001520406910F00040316848613068FFF7BDFC3B
-S3150800153000050DD518F500608068C00702D5300093
-S3150800154000F013FD3068406910F4006031684861A6
-S315080015503068FFF7AAFC00011AD53068406910F018
-S3150800156000603168486196F8F40300280DD101201F
-S3150800157086F8F4033068406DC0F38300C6F8F803B4
-S315080015800121300000F0A8FC02E0300000F0EDFC7C
-S315080015903068FFF78AFCC0047BD518F50060406800
-S315080015A04008400018F50061486010213068FEF7D1
-S315080015B0E2FF002024E04FF67F3118EB401212F5C7
-S315080015C01062916018EB401212F51062126832F43C
-S315080015D0001218EB401313F510631A6018EB40124B
-S315080015E012F53062916018EB401111F53061096807
-S315080015F031F4001118EB401212F530621160401CEC
-S3150800160071688842D7D318F50060C06950F0011098
-S3150800161018F50061C861306B002812D018F5006013
-S31508001620D0F8840050F00B0018F50061C1F884006A
-S3150800163018F50060406C50F00B0018F5006148641E
-S3150800164011E018F50060406940F4005050F02B0096
-S3150800165018F50061486118F50060006950F00B0044
-S3150800166018F50061086118F50060006830F4FE603E
-S3150800167018F50068C8F8000016F571723169C9B224
-S315080016803068FFF773FC3068406910F480503168A1
-S3150800169048613068FFF709FC800417D53068FFF702
-S315080016A044FC3068FEF791FFF06000F09FFD0100F2
-S315080016B0F268D2B23068FEF7BFFD300000F039FCA0
-S315080016C03068406910F40050316848613068FFF7A7
-S315080016D0ECFBC0063FD53068806930F010003168F1
-S315080016E08861D7F8208018F00F011C20414306EBCB
-S315080016F0010010F5FE75C8F34340022816D147F6D7
-S31508001700F07018EA000F20D0C8F30A1292B2E968FE
-S315080017103800FFF7C4FAE868C8F30A110844E86015
-S31508001720A969C8F30A104118A9610EE0C8F3434035
-S3150800173006280AD1082216F571713800FFF7AFFAA4
-S31508001740A969C8F30A104118A9613068806950F080
-S315080017501000316888613068FFF7A7FB000708D5D5
-S31508001760300000F0E0FB3068406910F0080031688E
-S3150800177048613068FFF799FBC0020AD52100C9B253
-S31508001780300000F01DFC3068406910F480103168A4
-S3150800179048613068FFF789FB80020AD52100C9B283
-S315080017A0300000F006FC3068406910F4001031681B
-S315080017B048613068FFF779FB400008D5300000F033
-S315080017C006FC3068406910F080403168486130682E
-S315080017D0FFF76BFB40070BD530684468600702D5F6
-S315080017E0300000F0FEFB306840680443306844600F
-S315080017F0BDE8F18310B5040094F8BC03012801D1B3
-S31508001800022009E0012084F8BC032068FFF731FBB9
-S31508001810002084F8BC03002010BD10B5040094F81D
-S31508001820BC03012801D1022009E0012084F8BC0389
-S315080018302068FFF72CFB002084F8BC03002010BDAD
-S3150800184010B5040094F8BC03012801D102200CE06D
-S31508001850012084F8BC0384F83810C9B22068FFF761
-S31508001860F3FA002084F8BC03002010BD70B505000B
-S3150800187000260800C0B200060CD50C00E4B214F02D
-S315080018800F041C20444305EB040010F13C0401201E
-S3150800189060700BE00C00E4B214F00F041C20444303
-S315080018A005EB040010F5FE740020607011F00F01BE
-S315080018B0217092B2A260E3706078002801D0207887
-S315080018C0E080DBB2022B01D10020207195F8BC0321
-S315080018D0012801D102200BE0012085F8BC03210074
-S315080018E02868FEF784FE002085F8BC033000C0B2E5
-S315080018F070BD10B504000800C0B200060BD50A007A
-S31508001900D2B212F00F021C20424304EB02003C3014
-S31508001910012242700BE00A00D2B212F00F021C201C
-S31508001920424304EB020010F5FE700022427011F0EB
-S315080019300F01017094F8BC13012901D102200AE0B5
-S31508001940012184F8BC1301002068FEF7ADFE0020D3
-S3150800195084F8BC03002010BD38B51C000D00EDB29C
-S3150800196015F00F051C235D4300EB050313F5FE7305
-S31508001970DA605C6100249C6100245C7011F00F043D
-S315080019801C700469012C00D11A6111F00F0F06D1E1
-S315080019900269D2B219000068FFF784F805E0026907
-S315080019A0D2B219000068FEF7D7FE002032BDC9B2D0
-S315080019B011F00F011C2251430844D0F81402704755
-S315080019C038B51C000D00EDB215F00F051C235D435C
-S315080019D000EB05033C33DA605C6100249C6101245A
-S315080019E05C7011F00F041C700469012C00D11A6197
-S315080019F011F00F0F06D10269D2B219000068FFF77D
-S31508001A0051F805E00269D2B219000068FEF7A4FE93
-S31508001A10002032BD38B504000D0060682900C9B23F
-S31508001A2011F00F01884201D2012039E02800C0B226
-S31508001A3000060CD52900C9B211F00F011C2041433C
-S31508001A4004EB010010F13C010120487009E029006F
-S31508001A50C9B21C20414304EB010010F5FE710020B9
-S31508001A6048700120887015F00F00087094F8BC03C0
-S31508001A70012801D1022013E0012084F8BC03206864
-S31508001A80FFF71EF915F00F0F06D114F571722169CB
-S31508001A90C9B22068FFF76AFA002084F8BC03002060
-S31508001AA032BD10B5040060680A00D2B212F00F0207
-S31508001AB0904201D2012031E00800C0B200060BD5E1
-S31508001AC00A00D2B212F00F021C20424304EB0200B5
-S31508001AD03C30012242700BE00A00D2B212F00F022B
-S31508001AE01C20424304EB020010F5FE7000224270EF
-S31508001AF00022827011F00F01017094F8BC130129BD
-S31508001B0001D102200AE0012184F8BC1301002068F3
-S31508001B10FFF720F9002084F8BC03002010BD2DE94A
-S31508001B20FC4704000D00266837001C2000FB05F062
-S31508001B30204410F13C08D8F81400D8F81810884248
-S31508001B4001D201205DE0D8F81400D8F81890B0EB5F
-S31508001B500909D8F80800484501D2D8F8089019F1BB
-S31508001B6003095FEA990926E0D8F81400D8F818A0FE
-S31508001B70B0EB0A0AD8F80800504501D2D8F808A0F0
-S31508001B801AF103095FEA99092069C0B20090534621
-S31508001B909BB22A00D2B2D8F80C103000FFF764F8CE
-S31508001BA0D8F80C005044C8F80C00D8F818001AEBFE
-S31508001BB0000AC8F818A017EB451010F510608069E0
-S31508001BC080B2484509D3D8F81800D8F814108842C6
-S31508001BD003D2D8F814000028C6D1D8F81800D8F8C7
-S31508001BE0141088420CD3012015F00F0510FA05F5DC
-S31508001BF017F50060406B30EA050517F500677D6349
-S31508001C000020BDE8F687F8B505000C002868060030
-S31508001C10006C16EB441111F5306189682A69012AAE
-S31508001C206ED10A071BD5634A904208D3080406D525
-S31508001C3016EB441010F530604FF40041816028001F
-S31508001C4000F04CF915F5717201212868FFF78EF935
-S31508001C5016EB441616F530660820B06070E08A0662
-S31508001C6006D516EB441616F530662020B06067E0F8
-S31508001C7011F0280F64D14F4A904209D3080407D5BA
-S31508001C8016EB441616F530664FF40040B06057E080
-S31508001C901C2707FB04F02844D0F8040216EB441668
-S31508001CA016F5306631694903490B401A07FB04F1FA
-S31508001CB02944C1F8140207FB04F02844D0F80802A6
-S31508001CC007FB04F12944D1F80412084407FB04F180
-S31508001CD02944C1F808022100C9B2280000F006F913
-S31508001CE0002C2DD17C4305EB0400D0F81002002807
-S31508001CF026D115F5717201212868FFF737F91FE01B
-S31508001D002D4A904217D1080407D516EB441616F546
-S31508001D1030664FF40040B06012E0880605D516EB31
-S31508001D20441616F530662020B0602100C9B2280096
-S31508001D3000F0DCF804E02100C9B2280000F0D6F86B
-S31508001D400020F2BD38B5040022681000156C10EBAF
-S31508001D50411212F5306292682369012B0CD1154B9A
-S31508001D609D4215D3120413D510EB411010F53060BF
-S31508001D704FF4004181600BE00F4B9D4208D11204DD
-S31508001D8006D510EB411010F530604FF40041816024
-S31508001D90200000F0A3F80748854208D320690128E7
-S31508001DA005D114F5717201212068FFF7DFF80020CC
-S31508001DB032BD00000B30544F0A31544F70470000B3
-S31508001DC0103A07D330B4B1E83810103AA0E8381002
-S31508001DD0F9D230BC530724BFB1E80810A0E80810B0
-S31508001DE044BF51F8043B40F8043BD20724BF31F8FE
-S31508001DF0022B20F8022B44BF0B7803707047121F82
-S31508001E0017D35B0009D151F8043B20F8023B1B0CA1
-S31508001E10121F20F8023BF6D20BE051F8043B00F8FB
-S31508001E20013B1B0A20F8023B1B0C121F00F8013B62
-S31508001E30F3D238BF121D521E24BF11F8013B00F819
-S31508001E40013BF8D87047000070B403685B6A0C0061
-S31508001E50E4B2002C05D192B253EA024300688362C9
-S31508001E601FE00468A46A13EB1443002409E005681C
-S31508001E702600F6B205EB8605D5F8045113EB154393
-S31508001E80641C2500EDB20E00F6B2761EB542EED3FE
-S31508001E900068C9B200EB810092B253EA0243C0F867
-S31508001EA00031002070BC704789B20068416200208A
-S31508001EB0704701680122C0F8FC23002280F8F42349
-S31508001EC0886950F000608861486D40F0805050F095
-S31508001ED003004865002070477047704780B510F5C5
-S31508001EE07171D0F8000400F0DDF901BD80B50B0072
-S31508001EF0DBB21C22534300EB0302D2F80822C9B214
-S31508001F00D0F8000400F000FA01BD80B50B00DBB282
-S31508001F101C22534300EB0302926CC9B2D0F80004AA
-S31508001F2000F045FA01BD80B5D0F8000400F003FBC7
-S31508001F3001BD38B504000125E068002801D1002557
-S31508001F4008E0E068022801D1012503E0912146480E
-S31508001F5000F013FB2900C9B2D4F8000400F0D9FA3E
-S31508001F60D4F8000400F0A5FA31BD10B50400D4F881
-S31508001F70000400F0D1FA206810F56060006850F09F
-S31508001F800100216811F560610860206A002804D004
-S31508001F903648016851F00601016000F017FB10BDD4
-S31508001FA010B5040000F013FBD4F8000400F0BDFAE5
-S31508001FB010BD80B5C9B2D0F8000400F0CEFA01BD54
-S31508001FC080B5C9B2D0F8000400F0C5FA01BD10B555
-S31508001FD00400012000F0F9FAD4F8000400F0BFFA72
-S31508001FE010BD10B50400002000F0EFFAD4F8000484
-S31508001FF000F0B7FA10BD10B50178002931D11C4C94
-S31508002000C4F80004C0F898425FF0A040206006209B
-S3150800201060600220E060002020610220A0610120AB
-S31508002020E06100202062002060620020E06200205B
-S3150800203020632000FFF760F8002804D040F225113D
-S31508002040094800F09AFA80212000FFF72DFF402268
-S3150800205000212000FFF7F8FE802201212000FFF76B
-S31508002060F3FE002010BD0000645A000810ED00E0E1
-S31508002070C000002080B500210021D0F89802FFF7A3
-S31508002080F5F8C0B200F09DF8C0B202BD80B50021D7
-S315080020900021D0F89802FFF7FDF8C0B200F091F8D9
-S315080020A0C0B202BD80B500210021D0F89802FFF722
-S315080020B007F9C0B200F085F8C0B202BD10B51C0021
-S315080020C0002300231300DBB2220092B2C9B2D0F873
-S315080020D09802FFF7CBFBC0B200F073F8C0B210BD90
-S315080020E080B500220022C9B2D0F89802FFF701FC99
-S315080020F0C0B200F066F8C0B202BD80B50022002268
-S31508002100C9B2D0F89802FFF785FCC0B200F059F8BA
-S31508002110C0B202BD80B500220022C9B2D0F898022A
-S31508002120FFF7BFFCC0B200F04CF8C0B202BDD0F851
-S3150800213098220800C0B2000609D5C9B211F07F017D
-S315080021401C20414302EB010090F83E0008E0C9B2AA
-S3150800215011F07F011C20414302EB010090F8FE01BB
-S31508002160704780B500220022C9B2D0F89802FFF75E
-S3150800217067FBC0B200F025F8C0B202BD10B5002456
-S3150800218000249BB2C9B2D0F89802FFF719FCC0B276
-S3150800219000F017F8C0B210BD10B5002400249BB299
-S315080021A0C9B2D0F89802FFF7D7FBC0B200F009F819
-S315080021B0C0B210BD80B5C9B2D0F89802FFF7F7FBD8
-S315080021C002BD0021C0B2002805D0022807D004D3DA
-S315080021D0032806D007E0002006E0022004E00120DC
-S315080021E002E0022000E00220C0B270470148006801
-S315080021F0704700000400002080B5002801D10220A5
-S3150800220011E0D0F88C32002B02D00023C0F88C32B3
-S31508002210002901D0C0F88812012180F874120270D2
-S31508002220FFF7E9FE002002BD10B50400012084F87E
-S3150800223074026168C9B22000D4F88C2252689047AB
-S315080022402000FFF72FFF2000FFF714FF002010BD26
-S315080022500022002903D0C0F88C12002000E00220DA
-S31508002260C0B2704780B5FFF711FF002002BD0020FD
-S31508002270704710B50224D0F88C22002A07D0C9B2BC
-S31508002280D0F88C2212689047002800D1002420003C
-S31508002290C0B210BD80B5C9B2D0F88C22526890473A
-S315080022A0002002BD10B5040014F5207000F0C4FC2F
-S315080022B00120C4F86C02B4F88602C4F8700294F8D7
-S315080022C0800210F01F00002803D002280DD006D384
-S315080022D011E014F52071200000F07AF912E014F5E7
-S315080022E02071200000F0B1F90CE014F520712000EF
-S315080022F000F0E1F906E094F8801211F08001200060
-S31508002300FFF7FBFE002010BD10B5040010000A0000
-S31508002310D2B2002A39D114F5A072D4F86C12032966
-S3150800232027D11169D368994211D2D36811695B1A0A
-S31508002330D360D1681369994201D2D26800E0126964
-S3150800234092B20100200000F0E2FC002010BDD4F893
-S315080023508C020069002808D094F87402032804D176
-S315080023602000D4F88C1209698847200000F0D8FCB0
-S31508002370EBE7D4F86C020528E7D10020C4F86C0214
-S3150800238000212000FFF7B9FEDFE7D4F88C02806948
-S3150800239000280AD094F87402032806D1C9B220008E
-S315080023A0D4F88C2292699047CFE70220CEE710B581
-S315080023B0040010000A00D2B2002A68D114F11402EF
-S315080023C0D4F86C1202294AD11169D368994210D2FD
-S315080023D0D36811695B1AD360D26892B201002000F3
-S315080023E000F08CFC0023002200212000FFF7D4FE19
-S315080023F041E090681169B0FBF1F301FB1300002876
-S3150800240017D190681169884213D39068D4F870126E
-S3150800241088420ED200220021200000F06FFC002026
-S31508002420C4F870020023002200212000FFF7B4FE42
-S3150800243021E0D4F88C02C068002808D094F8740209
-S31508002440032804D12000D4F88C12C9688847802153
-S315080024502000FFF752FE200000F06DFC0BE0D4F8D8
-S315080024606C02042803D0D4F86C02002803D180211A
-S315080024702000FFF742FE94F87802012805D12000D3
-S31508002480FFF7F5FE002084F87802002010BDD4F886
-S315080024908C02406900280AD094F87402032806D1F1
-S315080024A0C9B22000D4F88C2252699047EDE7022081
-S315080024B0ECE710B504004023002200212000FFF7B6
-S315080024C0FDFD0120C4F844014020C4F85001402312
-S315080024D0002280212000FFF7F1FD0120A0614020A5
-S315080024E06062012084F874020020C4F86C0200209F
-S315080024F060600020C4F87C02D4F89002002806D058
-S315080025006168C9B22000D4F88C225268904700202E
-S3150800251010BD01740020704790F8741280F8751287
-S31508002520042180F874120020704790F8751280F81C
-S3150800253074120020704780B590F87412032908D1E8
-S31508002540D0F88C12C969002903D0D0F88C12C96951
-S315080025508847002002BD00207047002070470020F1
-S31508002560704780B5012180F874124168C9B2D0F865
-S315080025708C2252689047002002BD80B500F0EAFB25
-S31508002580FCE7000000690840884201D1012000E00C
-S315080025900020C0B2704780B54FF400510548FFF7D8
-S315080025A0F1FF002801D0002002E000F0FEFB012028
-S315080025B002BD00000008024080B5642000F0D3FB8D
-S315080025C001BD80B500F0D2FB01BD7047704770476A
-S315080025D010B500240A7812F06002002A08D0202AD2
-S315080025E001D0402A2CD1D0F88C229268904729E055
-S315080025F04A78002A18D0012A1CD0032A17D0052A9F
-S3150800260009D0062A04D0082A0BD0092A06D014E0D5
-S3150800261000F077F913E000F01CFA10E000F048FA31
-S315080026200DE000F0AFFA0AE000F0CBFA07E000F0A0
-S31508002630E7FA04E000F0EEFA01E000F011FB01E031
-S3150800264000F00EFB2000C0B210BD38B504000D0026
-S315080026500020287810F06000002803D0202801D038
-S31508002660402822D194F87402401E022818D82879E6
-S31508002670022810D229002000D4F88C2292689047AC
-S315080026800100E88800280AD1C9B2002907D120002C
-S3150800269000F046FB03E02900200000F0E1FA03E021
-S315080026A02900200000F0DCFA03E02900200000F0F1
-S315080026B0D7FA002032BD70B50500002488880A784C
-S315080026C012F06002002A0AD0202A02D0402A40F0DE
-S315080026D012812800D5F88C22926890470EE10A7874
-S315080026E012F06002202A06D12800D5F88C229268BA
-S315080026F09047C0B204E14A78002A6CD0012A3AD041
-S31508002700032A40F0F48095F87422022A02D0032A9C
-S3150800271016D02CE00200D2B2002A0DD00200D2B2A6
-S31508002720802A09D00100C9B22800FFF7E6FC8021FB
-S315080027302800FFF7E2FC02E0280000F091FA19E011
-S315080027404A88002A0FD10200D2B2002A0BD0020012
-S31508002750D2B2802A07D0C988002904D10100C9B29B
-S315080027602800FFF7CAFC280000F0DAFA02E0280081
-S3150800277000F076FABEE095F87422022A02D0032AFF
-S3150800278016D024E00200D2B2002A0DD00200D2B23E
-S31508002790802A09D00100C9B22800FFF7AEFC8021C3
-S315080027A02800FFF7AAFC02E0280000F059FA11E019
-S315080027B0498800290AD110F07F0F04D00100C9B258
-S315080027C02800FFF7A7FC280000F0AAFA02E0280074
-S315080027D000F046FA8EE095F87422022A02D0032AFF
-S315080027E028D080E00200D2B2002A07D00200D2B276
-S315080027F0802A03D0280000F033FA77E00100C9B236
-S31508002800090608D5C0B210F07F00142148432844B1
-S3150800281010F1140107E0C0B210F07F0014214843FC
-S31508002820284410F5A071002008600222280000F054
-S3150800283053FA5BE00200D2B212060ED50300DBB2F1
-S3150800284013F00F031422534305EB03029269002A7F
-S3150800285013D1280000F004FA48E00300DBB213F0B5
-S315080028600F031422534305EB0302D2F84421002A2E
-S3150800287003D1280000F0F4F938E00100C9B20906CE
-S315080028800AD50200D2B212F07F0214214A4305EBA0
-S31508002890020111F1140609E00200D2B212F07F0219
-S315080028A014214A4305EB020111F5A0760100C9B2CD
-S315080028B0002903D00100C9B2802902D10020306066
-S315080028C00BE00100C9B22800FFF731FC002802D04E
-S315080028D00120306001E0002030600222310028002B
-S315080028E000F0FAF902E0280000F0BAF902E0280040
-S315080028F000F0B6F902E0280000F0B2F92000C0B2F4
-S3150800290070BD38B504000D00688880B2000AC0B2F0
-S31508002910012808D002281BD003282CD0062865D009
-S31508002920072871D080E06946207CD4F8882212688E
-S315080029309047BDF80010002900F08480E988002936
-S3150800294000F08080BDF80010EA88914271D273E0E9
-S31508002950207C002807D16846D4F88C12896A8847F3
-S315080029600221417006E06846D4F88C12C96A884785
-S3150800297002214170DDE7A878002808D0022814D083
-S315080029800CD304281FD017D3052823D029E069467D
-S31508002990207CD4F8882252689047CAE76946207C8A
-S315080029A0D4F8882292689047F7E76946207CD4F8DD
-S315080029B08822D2689047F0E76946207CD4F88822B6
-S315080029C012699047E9E76946207CD4F8882252695B
-S315080029D09047E2E76946207CD4F8882292699047B6
-S315080029E0DBE72900200000F03BF931E0207C0028D5
-S315080029F005D16846D4F88C12496B884799E72900AF
-S31508002A00200000F02DF923E0207C002807D1684635
-S31508002A10D4F88C12096B88470721417089E7290089
-S31508002A20200000F01DF913E02900200000F018F935
-S31508002A300EE0E988ADF80010BDF80020010020007E
-S31508002A4000F04AF9E888002802D1200000F068F969
-S31508002A5031BD38B505008888002825D1C8880028E2
-S31508002A6022D1488880281FD28C7814F07F0495F8E4
-S31508002A707402032803D1280000F0F2F817E085F85D
-S31508002A8076422100C9B22800FFF76BFB280000F048
-S31508002A9047F9E4B2002C03D0022085F8740206E058
-S31508002AA0012085F8740202E0280000F0D9F831BD4B
-S31508002AB070B504000D00324E6888307030780228F0
-S31508002AC004D32900200000F0CBF857E094F87402EC
-S31508002AD0022802D003281BD048E03078002813D0FB
-S31508002AE030786060032084F8740231782000FFF79C
-S31508002AF0C0FB022804D12900200000F0B1F83DE00F
-S31508002B00200000F00DF902E0200000F009F935E098
-S31508002B10307800280CD1022084F87402307860607E
-S31508002B2031782000FFF7B6FB200000F0F9F81CE02A
-S31508002B3030786168884215D06168C9B22000FFF70D
-S31508002B40A9FB3078606031782000FFF792FB0228F5
-S31508002B5004D12900200000F083F80FE0200000F0DF
-S31508002B60DFF802E0200000F0DBF807E0290020008B
-S31508002B7000F076F831782000FFF78CFB70BD000076
-S31508002B801810002080B5CA88012A02D000F068F81B
-S31508002B9016E090F87422521E012A02D9921E08D015
-S31508002BA00CE000218160012210F1080100F094F880
-S31508002BB006E00122011D00F08FF801E000F050F850
-S31508002BC001BD80B590F87422521E022A15D8CA880B
-S31508002BD0022A02D000F044F811E00121C160D0F8C1
-S31508002BE07C12002903D0C16851F00201C16002229B
-S31508002BF010F10C0100F070F801E000F031F801BDA9
-S31508002C0080B54988012904D10121C0F87C1200F059
-S31508002C1087F801BD80B590F87422521E022A08D89A
-S31508002C204988012904D10021C0F87C1200F078F8FF
-S31508002C3001E000F015F801BD0A7802704A78427082
-S31508002C408A78CB781B029A1842800A794B791B023C
-S31508002C509A1882808A79C97909028918C1807047C9
-S31508002C6010B5040080212000FFF747FA0021200054
-S31508002C70FFF743FA10BDF8B504000D00170000264B
-S31508002C80002C1ED0200000F01DF84000801C388063
-S31508002C9038783100C9B26854761C03203100C9B2AD
-S31508002CA06854761C0AE020783100C9B26854641C5E
-S31508002CB0761C00203100C9B26854761C207800289A
-S31508002CC0F1D1F1BD0200002001E0401C521C117830
-S31508002CD00029FAD1C0B2704780B513000222C0F8A5
-S31508002CE06C221A0092B2C2611A0092B202629BB2B8
-S31508002CF00A000021FFF742FA002002BD80B5130042
-S31508002D009BB20A000021FFF739FA002002BD80B500
-S31508002D1013009BB20A000021FFF73EFA002002BD0D
-S31508002D2080B50421C0F86C12002300220021FFF7A9
-S31508002D3025FA002002BD80B50521C0F86C120023D3
-S31508002D4000220021FFF728FA002002BD80B5FFF710
-S31508002D5033FC01BD80B5FFF734FC01BD81617047C6
-S31508002D6009048161704714490880704710B5FEF759
-S31508002D7090F9124C2168884216D311490878002820
-S31508002D8006D10120087080210E48FFF7E7FF05E00D
-S31508002D900020087080210B48FFF7E2FFFEF779F95B
-S31508002DA0054909884018206010BD80B5802105486E
-S31508002DB0FFF7D6FF01BD000010100020FC0F002011
-S31508002DC0131000200004024038B50400002C01D17D
-S31508002DD00120AEE094F82000002802D1200000F07F
-S31508002DE0B0FA2068006830F0020021680860FEF733
-S31508002DF061F905002068406880070DD5FEF75AF985
-S31508002E00401B0B28F6D3606A50F400306062052038
-S31508002E1084F8200001208CE02068006850F001004A
-S31508002E2021680860FEF746F9050020684068C00773
-S31508002E300DD4FEF73FF9401B0B28F6D3606A50F411
-S31508002E4000306062052084F82000012071E0207EB1
-S31508002E50012806D12068006850F0800021680860C3
-S31508002E6005E02068006830F0800021680860607E10
-S31508002E70012806D12068006850F0400021680860E3
-S31508002E8005E02068006830F0400021680860A07EF0
-S31508002E90012806D12068006850F0200021680860E3
-S31508002EA005E02068006830F0200021680860E07EB0
-S31508002EB0012806D12068006830F0100021680860F3
-S31508002EC005E02068006850F0100021680860207F3F
-S31508002ED0012806D12068006850F0080021680860BB
-S31508002EE005E02068006830F0080021680860607F07
-S31508002EF0012806D12068006850F00400216808609F
-S31508002F0005E02068006830F0040021680860A168C0
-S31508002F10E068014320690143606901436068401E17
-S31508002F2001432068C16100206062012084F8200006
-S31508002F30002032BD30B4026890F820201300DBB2BE
-S31508002F40012B03D0D2B2022A40F07F80594AD2F828
-S31508002F50000250F00100C2F80002D2F8000230F474
-S31508002F607C50C2F80002D2F800024B6A50EA0320ED
-S31508002F70C2F8000201200B7D13F01F0310FA03F3B9
-S31508002F80D2F81C029843C2F81C02C869002816D158
-S31508002F90D2F80C029843C2F80C02486902EBC0004A
-S31508002FA0CC684D68C5EA0444C0F84042486902EB5B
-S31508002FB0C0008C680D68C5EA0444C0F84442C86974
-S31508002FC0012816D1D2F80C021843C2F80C02486937
-S31508002FD002EBC0000C684D68C5EA0444C0F84042DC
-S31508002FE0486902EBC0008C68CD68C5EA0444C0F89D
-S31508002FF044428869002805D1D2F804029843C2F8E9
-S31508003000040204E0D2F804021843C2F8040208696C
-S31508003010002805D1D2F814029843C2F8140204E035
-S31508003020D2F814021843C2F81402086A012804D117
-S31508003030D2F81C020343C2F81C32D2F80002400838
-S315080030404000C2F80002002004E0416A51F48021E1
-S315080030504162012030BC704738B5040094F820005E
-S31508003060012821D1022084F8200020680068400841
-S31508003070400021680860FEF71DF8050020684068D2
-S31508003080C0070DD5FEF716F8401B0B28F6D3606A65
-S3150800309050F400306062052084F82000012008E022
-S315080030A000206062002004E0606A50F4002060623C
-S315080030B0012032BD0064004070B490F820500468C6
-S315080030C0A6688C68002CFFD02C00E4B2012C02D034
-S315080030D0EDB2022D6ED116F0E05F65D0C6F301643D
-S315080030E0032C05D3416A51F400014162012066E0D0
-S315080030F00125A5401D608B68002B09D10B68CD689A
-S3150800310055EA4355036826013344C3F880510AE05B
-S315080031104B688D6855EAC305CB681D4303682601CD
-S315080031203344C3F880510B69056826013544C5F850
-S315080031308431097D01290BD1016823011944D1F88D
-S31508003140841151F48071036825012B44C3F8841156
-S31508003150D17993791B0453EA0163517953EA012320
-S3150800316011790B43016825012944C1F88C31D178BE
-S3150800317093781B0453EA0163517853EA01231178C3
-S315080031800B43016822011144C1F888310168220104
-S315080031901144D1F8801151F0010100682201104450
-S315080031A0C0F8801100200AE0416A51F4001141621A
-S315080031B0012004E0416A51F480214162012070BC7B
-S315080031C0704710B40200002092F820301C00E4B2C8
-S315080031D0012C02D0DBB2022B07D11268926812EAE0
-S315080031E08162B2EB816F00D0012010BC704730B409
-S315080031F090F820402500EDB2012D03D0E4B2022C50
-S3150800320040F0988000290AD10468E46814F0030F96
-S3150800321010D1416A51F40011416201208FE004681F
-S31508003220246914F0030F05D1416A51F40011416273
-S31508003230012084E004680D012C44D4F8B04114F050
-S31508003240040494609468002C07D104680D012C448A
-S31508003250D4F8B041640D146006E004680D012C44EE
-S31508003260D4F8B041E408546004680D012C44D4F83D
-S31508003270B041C4F34004D46004680D012C44D4F86A
-S31508003280B44114F00F04146104680D012C44D4F8F9
-S31508003290B441C4F30724946104680D012C44D4F89E
-S315080032A0B441240C546102680C012244D2F8B821B6
-S315080032B01A7002680C012244D2F8B821120A5A7010
-S315080032C002680C012244D2F8B821120C9A700268DE
-S315080032D00C012244D2F8B821120EDA7002680C01E9
-S315080032E02244D2F8BC211A7102680C012244D2F891
-S315080032F0BC21120A5A7102680C012244D2F8BC2178
-S31508003300120C9A7102680C012244D2F8BC21120EE2
-S31508003310DA71002906D10168C96851F020010068F0
-S31508003320C16005E00168096951F020010068016182
-S31508003330002004E0416A51F480214162012030BC3A
-S3150800334070477047DFF8D804016851F00101016041
-S315080033507047DFF8CC040068400810F00100704799
-S31508003360DFF8BC140A6832F0F80252EAC0020A60B2
-S315080033707047DFF8B0040068400810F00100704795
-S31508003380DFF8A804006810F00C007047DFF89C040A
-S31508003390006810F0F0007047DFF89004006810F439
-S315080033A0E0507047DFF88404006810F46040704706
-S315080033B00100DFF87C040068084050EA01407047C5
-S315080033C00100DFF86C040068084050EA01407047C5
-S315080033D0DFF84C040068400E10F001007047DFF873
-S315080033E05404006810F480007047DFF84804006849
-S315080033F0C0F388107047DFF83C04006810F44030CA
-S315080034007047DFF83004006810F03F007047DFF8B7
-S3150800341010040068C00E10F001007047DFF80004C1
-S315080034200068400F10F00100704710B55FF0FF34D8
-S31508003430FFF788FFFFF78DFF0128FBD10020DFF893
-S31508003440EC130860DFF8F8030440DFF8D4030460DF
-S315080034501020FFF785FFFFF7BBFF0028FBD1FFF71A
-S31508003460D6FF0028FBD1FFF7D9FF0028FBD1DFF8EC
-S31508003470D403DFF8C0130860DFF8CC03DFF8B8130D
-S315080034800860DFF8B8130860DFF8C003016831F494
-S31508003490FE410160016851F47F010160DFF888038D
-S315080034A00168490849000160016851F080710160AE
-S315080034B0002010BD10B5040000F05CF920602068FB
-S315080034C000F06CF96060606800F073F9A0606068ED
-S315080034D000F079F9E06010BD10B50024032824D166
-S315080034E0FFF766FFDFF86813401A04D0401E06D0BF
-S315080034F0401E0BD011E000F03DF904008DE0FFF707
-S3150800350028FF002801D0DFF84C4386E0FFF731FF9B
-S31508003510002801D04FF400447FE000F02BF900F0BA
-S315080035203DF900F050F9040077E00C2824D1FFF7A4
-S315080035303FFFDFF82413401A04D0001F06D0001FEF
-S315080035400BD011E000F016F9040066E0FFF701FF62
-S31508003550002801D0DFF8FC425FE0FFF70AFF0028E9
-S3150800356001D04FF4004458E000F004F900F016F9D1
-S3150800357000F01FF9040050E0B0F5406F27D1FFF7BF
-S3150800358017FFDFF8D812884207D0DFF8D41288422E
-S3150800359007D0B0F10C2F0BD011E000F0EBF80400C7
-S315080035A03BE0FFF7D6FE002801D0DFF8A84234E05A
-S315080035B0FFF7DFFE002801D04FF400442DE000F0AD
-S315080035C0D9F800F0EBF800F0FEF8040025E0302802
-S315080035D023D1FFF7EDFEDFF88C12401A04D010381D
-S315080035E006D010380BD011E000F0C4F8040014E03F
-S315080035F0FFF7AFFE002801D0DFF858420DE0FFF7CD
-S31508003600B8FE002801D04FF4004406E000F0B2F8F6
-S3150800361000F0C4F800F0CDF80400200010BD10B585
-S315080036200024C02824D1FFF7CBFEDFF83C12401A4D
-S3150800363004D0403806D040380BD011E000F09AF894
-S31508003640040095E0FFF785FE002801D0DFF8044264
-S315080036508EE0FFF78EFE002801D04FF4004487E085
-S3150800366000F088F800F09AF800F0A3F804007FE06C
-S31508003670B0F5407F27D1FFF7A3FEDFF8F0118842A7
-S3150800368007D0DFF8EC11884207D0B0F1032F0BD032
-S3150800369011E000F06FF804006AE0FFF75AFE002810
-S315080036A001D0DFF8B04163E0FFF763FE002801D0E0
-S315080036B04FF400445CE000F05DF800F06FF800F0AD
-S315080036C078F8040054E0B0F5405F27D1FFF778FE9C
-S315080036D0DFF8A011884207D0DFF89C11884207D08E
-S315080036E0B0F1302F0BD011E000F044F804003FE0B1
-S315080036F0FFF72FFE002801D0DFF8584138E0FFF722
-S3150800370038FE002801D04FF4004431E000F032F8CA
-S3150800371000F044F800F04DF8040029E0B0F5404FF9
-S3150800372026D1FFF74DFEDFF85411884207D0DFF89F
-S315080037305011884207D0B0F1C02F0BD011E000F02D
-S3150800374019F8040014E0FFF704FE002801D0DFF89A
-S3150800375004410DE0FFF70DFE002801D04FF40044A8
-S3150800376006E000F007F800F019F800F022F8040067
-S31508003770200010BD80B50020FFF702FE002804D007
-S31508003780042804D0082804D006E0324805E03D485D
-S3150800379003E000F022F800E02E4802BD10B5040050
-S315080037A0FFF7F4FD3849C0F30310085CC440200055
-S315080037B010BD10B50400FFF7EFFD3449800A085C18
-S315080037C0C440200010BD10B50400FFF7EBFD2F49DB
-S315080037D0400B085CC440200010BD70B500200020D6
-S315080037E0FFF7FDFD002803D0B0F5800F02D003E0F7
-S315080037F0184C02E0234C00E0164CFFF702FE0500C9
-S31508003800FFF7F3FD0600B4FBF5F006FB00F6FFF73D
-S31508003810F2FD000C401C4000B6FBF0F070BD000045
-S3150800382000380240703802407438024008380240B6
-S3150800383090380240043802408438024088380240F2
-S31508003840FFFFF2EA10300024003000240C38024052
-S31508003850010003000024F40004000C000004000C1E
-S315080038600008000C100030004000C00000010003F2
-S31508003870000200030010003000200030004000C0A5
-S31508003880008000C000127A00585D0008945D0008A8
-S3150800389038B500F02BF9DFF808544021681C00F011
-S315080038A03CF92870DFF8FC434021601C00F035F92C
-S315080038B020702878FF2802D02078FF2804D1842198
-S315080038C0DFF8E403FEF759FEDFF8E0430022DFF8ED
-S315080038D0E0132000FEF790FCDFF8D8132000FEF76F
-S315080038E0B7FC0120FEF771FE2000FEF7BBFCD4F8FA
-S315080038F09802FDF77FFF00F010FAB0F5FA6F03D2D1
-S315080039004FF4FA6000F006FA31BD10B5DFF89C43B3
-S31508003910D4F89802FDF781FF2000FEF785FC002009
-S31508003920FEF753FE10BD70B505000C002000C0B2AE
-S31508003930402804DBB921DFF87003FEF71EFE2000DD
-S31508003940C0B200F069F8C0B2012804D0BD21DFF882
-S315080039505803FEF712FE00260EE0FFF7FBF93000CB
-S3150800396080B2285C00F058F8C0B2012803D0C621FE
-S31508003970CD48FEF702FE761C30002100C9B280B29F
-S3150800398089B28842E9D370BD2DE9F04105000E00E1
-S31508003990C648D0F89802FDF7B3FCC74C2078002833
-S315080039A013D1C64D280000F02FF801280AD128782F
-S315080039B0002807D02878402804DA01202070002043
-S315080039C0BF4908700020BDE8F081BD4FDFF8EC82E2
-S315080039D038784044401C00F017F80128F2D13878AE
-S315080039E0401C3870387898F800108842EAD13A783E
-S315080039F092B218F10101280000F0C8F900202070E1
-S31508003A00387830700120DEE780B50100A5480078D7
-S31508003A1000F0E8F8C0B202BD80B50100C9B2A048FE
-S31508003A20007800F091F8C0B202BD7CB59C4C2078B5
-S31508003A3000F022F905002800C0B2002827D0280087
-S31508003A40C0B2412800DB4025002612E069462078EE
-S31508003A5000F0C8F8C0B2012804D04FF4A371924808
-S31508003A60FEF78BFD9DF8000096493200D2B28854C5
-S31508003A70761C30002900C0B2C9B28842E6D3EDB23E
-S31508003A802B009BB28F4A81218848FEF777FB73BDCE
-S31508003A90F8B50600002000F004FA0400834D310052
-S31508003AA0C9B22800FEF786FB070000260FE03000A3
-S31508003AB080B2215C7B48007800F046F8C0B2012845
-S31508003AC004D04FF4B4717848FEF757FD761C3000E1
-S31508003AD0390080B289B28842E9D300F0E2F90200DF
-S31508003AE0402301212800FEF757FBF1BD10B4764BA1
-S31508003AF0190013F11802002004E088744A6118318D
-S31508003B001832401C0400E4B2002CF6D08874002059
-S31508003B1048616E48036010BC704710B46B4B1A6856
-S31508003B20002A01D1FF200DE01A6854691C6011743F
-S31508003B309060D060002353741060C9B20844401ED8
-S31508003B405060907C10BC704738B505000C00280002
-S31508003B50C0B2022804DB4FF4E0715348FEF70DFDAE
-S31508003B60182059492A00D2B242430A44527C2B00F3
-S31508003B70DBB243430B441B7C9A4201D1002030E060
-S31508003B802A00D2B242430A44D26814702A00D2B23A
-S31508003B9042430A442B00DBB243430B445B7C5B1C69
-S31508003BA053742A00D2B242430A442B00DBB2434381
-S31508003BB00B44DB685B1CD3602A00D2B242430A443A
-S31508003BC052682B00DBB243430B44DB689A4207D2A8
-S31508003BD02A00D2B242430A44EDB245434859D0605E
-S31508003BE0012032BD38B504000D002000C0B20228FD
-S31508003BF004DB4FF4F1712C48FEF7BFFC1821324A5A
-S31508003C002000C0B248431044407C002801D100205F
-S31508003C1031E02000C0B2484310448068007828701C
-S31508003C202000C0B2484310442300DBB24B43134480
-S31508003C305B7C5B1E43742000C0B2484310442300DB
-S31508003C40DBB24B4313449B685B1C83602000C0B205
-S31508003C504843104440682300DBB24B4313449B6837
-S31508003C60984207D22000C0B248431044E4B24C43FD
-S31508003C7011598160012032BD10B504002000C0B280
-S31508003C80022804DB40F202210748FEF776FC0E49BB
-S31508003C90E4B21820444301EB0400407C10BD000048
-S31508003CA0F80D00203C0E0020E05B0008C40400204C
-S31508003CB06C0000201400002017100020C00E002001
-S31508003CC016100020000F0020800F0020081000208A
-S31508003CD080B501201749087000F022F800F001F8B5
-S31508003CE001BD10B500F078F9012812D0114C2078E2
-S31508003CF001280ED1FDF7CDF90F490A680F49096861
-S31508003D008A1812F5FA72904203D30020207000F048
-S31508003D101BF810BD084908607047074800687047D7
-S31508003D2080B504480078012803D1FDF7B2F90349A4
-S31508003D30086001BD12100020F80F0020F40F0020C3
-S31508003D4080B500F053F901BD10B500F05FF9002801
-S31508003D5016D0FEF720FC002812D000F0EBF8FDF78D
-S31508003D608BF900F070F900F055F906490840064944
-S31508003D70086000F04FF9001D046800F039F9A04703
-S31508003D8010BD000080FFFF1F08ED00E070B50400BD
-S31508003D900D00160005E0287820706D1C641CFEF7DF
-S31508003DA0D9FF3000461E80B20028F4D170BD00004D
-S31508003DB038B5040000254023022281212000FEF7A1
-S31508003DC07DF94023022201212000FEF777F94023DE
-S31508003DD0354A01212000FEF7DFF92800C0B232BDBE
-S31508003DE038B50400002581212000FEF779F9012164
-S31508003DF02000FEF775F92800C0B232BD38B50B00B1
-S31508003E0017222A4C14F109011D7815F0600F29D1E3
-S31508003E105D78062D04D00A2D14D00B2D17D021E07D
-S31508003E205D88ADB22D0AADB2212D07D114F112016C
-S31508003E30DA88182A01DB172200E0DA8892B2FEF740
-S31508003E404BFF0FE001221A49FEF746FF0AE05988A0
-S31508003E50C9B2002903D198781549086002E019000B
-S31508003E60FEF7FEFE002032BD80B5FFF7DEFD00201E
-S31508003E7002BD80B50800C0B2FFF70AFE002002BDE9
-S31508003E8080B590F87402032801D1FFF7CEFD002013
-S31508003E9002BD20210180054870470A210180054896
-S31508003EA07047014870470000400F00204C00002072
-S31508003EB00C1000200800002010B500F0E9F800F00A
-S31508003EC035FB434C0120207000F015FC00202070C3
-S31508003ED0FFF7DEFC0220207010BD1CB53D4C69467C
-S31508003EE0200000F0BBFB012807D1012038490870E3
-S31508003EF09DF80010200000F0EBF86946200000F05D
-S31508003F0036FC012807D10020314908709DF80010B9
-S31508003F10200000F0DDF869462000FFF735FD01288E
-S31508003F2007D102202A4908709DF80010200000F0E9
-S31508003F30CFF813BD80B5FFF7E8FC01BD70B50400E6
-S31508003F400D00234E3078012804D12900C9B220007B
-S31508003F5000F055FB3078002804D12900C9B22000AA
-S31508003F6000F0E4FB3078022804D12900C9B2200009
-S31508003F70FFF7D9FC00F0A6F870BD154800780028B0
-S31508003F8005D0022807D004D3032806D007E040202E
-S31508003F9006E0082004E03F2002E0002000E0402080
-S31508003FA080B270470A480078002805D0022807D052
-S31508003FB004D3032806D007E0402006E0082004E0E2
-S31508003FC03F2002E0002000E0402080B27047000059
-S31508003FD0BC000020800E002010B5002400F069F80F
-S31508003FE0002800D001242000C0B210BD72B6704768
-S31508003FF062B6704780B500F037FC01BD80B500F0A9
-S315080040003CFC02BD80B500F06DFC02BD80B500F039
-S31508004010C7FC02BD80B500F004FD02BD80B500F006
-S315080040208AFC002801D1002001E000F0E1FC02BD75
-S3150800403080B5032000F065FE002000F089FE00F040
-S31508004040BBFF002002BD80B50C485FF0FF31016060
-S31508004050002202600A4801600022026009480160E5
-S3150800406000220260084801600022026007480160D9
-S315080040700021016001F012F8002002BD203802403C
-S3150800408024380240103802401438024018380240DA
-S31508004090DFF8C8030021017000218164002180F83F
-S315080040A043100021A0F844100021817000214170BE
-S315080040B07047DFF8A8030078002801D1002000E047
-S315080040C0012070470020DFF8941381F843007047F9
-S315080040D010B50178FF2917D100F08CF8DFF87C437A
-S315080040E094F84300012802D1102000F07BF8B4F9B7
-S315080040F04400012807DB012084F84300B4F9441082
-S31508004100E01C00F053F810BDDFF8501309780129B8
-S315080041104BD10178C92932D0CC293FD0CF293AD002
-S31508004120D0292FD0D12933D0D2292ED0F32917D090
-S31508004130F4290FD0F5290AD0F6290ED0FA2912D07B
-S31508004140FC2913D0FD2914D0FE2915D029E000F04A
-S31508004150B5F8C3E700F0D1F8C0E700F0A6F8BDE768
-S3150800416000F0ECF8BAE700F08EF8B7E700F086F84A
-S31508004170B4E700F072F8B1E700F063F8AEE700F0D4
-S3150800418004F9ABE700F020F9A8E700F0E9F8A5E79D
-S3150800419000F048F9A2E700F057F99FE700F062F946
-S315080041A09CE7202000F01EF898E7ACE780B589B2B6
-S315080041B0FFF7C4FE01BDF8B504000D001600002780
-S315080041C004E02078C719641CFEF7C4FD2800451EC4
-S315080041D00028F6D1FFB237600120F2BD00209F49C2
-S315080041E0487070479D49FE22CA7008710220A1F8DE
-S315080041F04400704710B5FFF7F1FF984C0120207076
-S31508004200FF20E07000202071207950F01000207106
-S315080042100020607160796071FFF7AFFEA071FFF74B
-S31508004220C1FEE071FFF7BEFE80B2000A20720120CF
-S3150800423060720120A0720820A4F84400FFF7DAFE95
-S3150800424010BD10B5854C00202070FFF7C7FFFF2072
-S31508004250E0700120A4F8440010BD8048FF21C17019
-S315080042600021017141784171002181710021C171DC
-S31508004270002101720621A0F84410704780B500207D
-S31508004280FFF7B0FF01BD7548FF21C170744981640D
-S315080042900021017100214171002181710721C0F8B7
-S315080042A007100821A0F8441070476C49FF22CA700D
-S315080042B0406888640120A1F84400704738B50400B6
-S315080042C0FFF75BFE80B2401E6178884203DA22203F
-S315080042D0FFF788FF10E06278604D281D92B2A96C3E
-S315080042E0FFF754FDFF20E870A86C61784018A864B1
-S315080042F06078401CA5F8440031BD38B50400FFF7C6
-S315080043003CFE80B2401E6178884203DA2220FFF71D
-S3150800431069FF12E0514D6068A8646278281D92B260
-S31508004320A96CFFF733FDFF20E870A86C6178401888
-S31508004330A8646078401CA5F8440031BD10B5474C08
-S31508004340FF21E170E21D4168A06CFFF734FF207180
-S31508004350002060710020A0710820A4F8440010BD58
-S3150800436010B53E4CFF20E0700020207100206071DF
-S31508004370FFF703FEA0710020E071002020720020E4
-S3150800438060720720A4F8440010BD38B50400FFF792
-S31508004390F4FD0100314D621C89B2491EA86CFFF775
-S315080043A02DFE002803D13120FFF71CFF0BE0FF206C
-S315080043B0E870FFF7E2FDA96C80B2401E4018A864B9
-S315080043C00120A5F8440031BD38B50400FFF7D5FD36
-S315080043D080B2801E6178884203DA2220FFF702FF46
-S315080043E01FE01E4DFF20E8700120A5F84400607804
-S315080043F0002807D1FFF712FE002802D13120FFF767
-S31508004400F1FE0EE0A21C6178A86CFFF7F7FD002804
-S3150800441003D13120FFF7E6FE03E0A86C6178401867
-S31508004420A86431BD10B50D4C4168A06CFFF7EAFDD4
-S31508004430002803D13120FFF7D5FE04E0FF20E07005
-S315080044400120A4F8440010BD80B5FFF77DFC0348A1
-S31508004450FF21C1700121A0F8441001BD680D00209C
-S31508004460A45D000880B53120FFF7BCFE01BD000041
-S31508004470F8B584B004000D0016001F006846FFF763
-S3150800448019F802984FF47A71B0FBF1F1002200E0B6
-S31508004490521C1000C0B2122845D2864B200080B2AA
-S315080044A094465FFA8CFC13F81CC096465FFA8EFE9B
-S315080044B003EB4E0E9EF801E01EEB0C0C1CF1010CF2
-S315080044C00CFB00F0B1FBF0FC00FB1C100028DFD150
-S315080044D0200080B294465FFA8CFC13F81CC09646FE
-S315080044E05FFA8EFE03EB4E0E9EF801E01EEB0C0CF7
-S315080044F01CF1010C0CFB00F0B1FBF0F028802888B9
-S315080045000028C5D0288840F2014C6045C0DA100062
-S31508004510C0B213F810003070D2B203EB42004078F4
-S315080045203870012000E0002005B0F0BD30B58BB032
-S315080045300020ADF8020000208DF8010000208DF85B
-S31508004540000040F267656B460DF101020DF10201AC
-S315080045504FF4FA70FFF78CFF002803D1B5215648AF
-S31508004560FEF70BF8554C56482060002020760020B0
-S3150800457060760020A0760120E076002020770020D3
-S3150800458060770020A0600020E0609DF80100401ED2
-S31508004590000420619DF80000401E00056061BDF81A
-S315080045A0020060602000FEF70FFC002D02D46D05A6
-S315080045B0444805E025F00045ED0055F0040542485D
-S315080045C00021069100210791012108912900090C73
-S315080045D00191ADB202950100090C039180B20490D5
-S315080045E000200590012009900E200A9001A92000BC
-S315080045F0FEF7A0FC2000FEF72FFD0BB030BD30B54E
-S3150800460087B0020040F2E170002803D40190002030
-S31508004610039004E020F0004002900420039000205C
-S315080046200490C9B20591254D6B4601A92800FEF7ED
-S3150800463043FDC0B200280FD1FCF72BFD040032342D
-S3150800464000992800FEF7BDFD002805D0FEF782FB7D
-S31508004650FCF71FFD8442F3D207B030BD78B587B0AA
-S3150800466003000C0040F2676600256A4600211348DD
-S31508004670FEF7BDFD002812D1002E07D40098B042DF
-S315080046800DD1029800280AD1012508E026F0004637
-S315080046900198B04203D10298042800D101252800C8
-S315080046A0C0B2012801D1049820702800C0B208B011
-S315080046B070BD00007C5C0008A45B0008B00F0020F9
-S315080046C0006400400400E0FFFCFF1F00016851F091
-S315080046D0010101607047C069400910F00100704788
-S315080046E0C069C00910F001007047406AC0B270473F
-S315080046F0C9B28162704718B587B04FF4614000901F
-S315080047000020019000200290002003900C200490C5
-S3150800471000200590002006904D4C6946200000F0C8
-S315080047203CFD2000FFF7D2FF08B010BD70B50400AD
-S315080047300D002800C0B2412803DB81214548FDF75A
-S315080047401CFF2800C0B200F06BF8002607E0FEF751
-S3150800475001FB300080B2205C00F062F8761C300065
-S315080047602900C9B280B289B28842F0D370BD2DE95A
-S31508004770F04105000E00384C2078002815D1374D39
-S31508004780280000F03DF8012837D12878002834D0D1
-S315080047902878412831DAFCF77CFC3149086000208A
-S315080047A0304908700120207027E02E4FDFF8AC80D2
-S315080047B038784044401C00F023F8012814D1387892
-S315080047C0401C3870387898F80010884215D13A7825
-S315080047D092B218F101012800FFF7D8FA00202070DC
-S315080047E038783070012009E0FCF753FC1C49096849
-S315080047F06431814201D2002020700020BDE8F0819A
-S3150800480038B50400124D2800FFF765FF002805D0CB
-S315080048102800FFF76AFF2070012000E0002032BD63
-S3150800482038B501000A4DC9B22800FFF761FFFCF749
-S3150800483030FC04000A342800FFF752FF002805D18F
-S31508004840FEF788FAFCF725FC8442F4D231BD000055
-S3150800485000480040645B000815100020B40D0020D5
-S3150800486000100020141000205FF0FF30DFF8D4138A
-S315080048700860DFF8D41308607047F8B504000D0027
-S315080048801600DFF8C873B96CF86C4118491E091B85
-S31508004890681E814201D2002023E0200000F0A9F919
-S315080048A0FF2805D02819401E00F0A3F9FF2801D1DA
-S315080048B0002016E02100490A4FF400704143386889
-S315080048C0814207D12B0032002100DFF87C0300F07B
-S315080048D0DCF806E02B0032002100DFF8680300F060
-S315080048E0D4F8F2BD70B504000D00DFF86003816CE2
-S315080048F0C06C4118491E091B681E814201D200205E
-S3150800490018E0200000F075F906002C19641E200036
-S3150800491000F06FF93100C9B2FF2903D00100C9B20E
-S31508004920FF2901D1002005E00100C9B23000C0B25C
-S3150800493000F01EF970BD80B500200090C2490868D5
-S3150800494010F1010F01D1012029E0009A4868821868
-S315080049500092009A886882180092009AC86882189D
-S315080049600092009A086982180092009A486982188B
-S315080049700092009A886982180092009AC86982187B
-S3150800498000920098C04300900098401C00906A4628
-S315080049900421AE48006810F5E470FFF76EFF02BD0B
-S315080049A00021AA4A1068006841181068001D0068AE
-S315080049B04118106808300068411810680C30006803
-S315080049C041181068103000684118106814300068E3
-S315080049D041181068183000684118106810F5E4701E
-S315080049E000684118002901D1012000E00020704725
-S315080049F080B59548016811F1010F05D000F08FF8D0
-S31508004A00002801D100200BE08E48016811F1010F42
-S31508004A1005D000F084F8002801D1002000E001202C
-S31508004A2002BD8A480068704780B5CA0501D00020D3
-S31508004A300BE002688A4201D1012006E001604FF4CA
-S31508004A400072001DFFF7A2F9012002BD38B5040067
-S31508004A500D007D48844208D17A4C29002000FFF7D2
-S31508004A60E3FF00280FD100200EE078490A68954236
-S31508004A7002D104000D68F0E7200000F050F8002885
-S31508004A80EBD1002000E0200032BD2DE9F041040002
-S31508004A90884616001D0047467F0A4FF400704743B4
-S31508004AA0206810F1010F07D139002000FFF7BCFF7D
-S31508004AB0002801D100202EE02068B84208D039002D
-S31508004AC02000FFF7C3FF0400002C01D1002022E0DC
-S31508004AD02068B8EB000804EB080010F10408FEF79C
-S31508004AE039F9201DB8EB0000B0F5007F09D317F59A
-S31508004AF000712000FFF7AAFF0400002C0DD014F166
-S31508004B000408307888F8000018F10108761C6D1E34
-S31508004B10002DE4D10120BDE8F0810020FBE72DE956
-S31508004B20F0410500012600F001FC002704E0D8F852
-S31508004B300000A04215D17F1C802F13D2D5F8008023
-S31508004B4018EB870805EB87004468FEF703F922008F
-S31508004B5000234146022000F0A3FB0028E7D00026E8
-S31508004B6000E0002600F0F2FB3000C0B2BDE8F0819C
-S31508004B7078B585B004000D000126002000902800B5
-S31508004B802100C0B2C9B2884200D200262F482100AF
-S31508004B90027AC9B2914205D390F850002900C9B2E9
-S31508004BA0884200D200263000C0B201281DD100205C
-S31508004BB00190022004900120039000F0B7FB00E06A
-S31508004BC0641C28002100C0B2C9B288420BD3FEF784
-S31508004BD0C1F82000C0B20290694601A800F064FC42
-S31508004BE00028EDD0002600F0B1FB3000C0B206B0B8
-S31508004BF070BD70B50400FF25002600E0761C300065
-S31508004C00C0B207281AD2FEF7A5F80C210F4A3000C1
-S31508004C10C0B2484310588442F0D33000C0B248436B
-S31508004C2013583000C0B2484310444068C3189C4229
-S31508004C30E4D2F6B24E4302EB0600057A2800C0B26B
-S31508004C4070BD00006007002064090020BC5A0008F7
-S31508004C5010F00700374B1A684FF6FF010A4036492D
-S31508004C6051EA00210A431A60704732480068C0F3C7
-S31508004C7002207047020052B2002A04D409012F4AC2
-S31508004C8040B2115407E009012D4A40B210F00F0056
-S31508004C90104400F8041C704710B410F00700D0F157
-S31508004CA00703052B01D3042301E0D0F10703041DF4
-S31508004CB0072C01D2002000E0C01E012414FA03F3D9
-S31508004CC05B1E1940814014FA00F0401E104008434C
-S31508004CD010BC704780B5411EB1F1807F01D3012019
-S31508004CE00EE0401E174908600F215FF0FF30FFF7FE
-S31508004CF0C1FF0020144908600720144908600020F5
-S31508004D0002BD80B5FFF7A4FF01BD70B504000D0014
-S31508004D1016000020FFF7A9FF32002900FFF7BCFFA5
-S31508004D200100200040B2FFF7A5FF70BD80B5FFF770
-S31508004D30D1FF02BD0CED00E00000FA0500E400E03A
-S31508004D4018ED00E014E000E018E000E010E000E0F4
-S31508004D5010B504004FF47A700D490978B0FBF1F0EC
-S31508004D600C490968B1FBF0F0FFF7E0FF002801D015
-S31508004D7001200CE0102C09D2002221005FF0FF3040
-S31508004D80FFF7C3FF04480460002000E0012010BDBF
-S31508004D90BD0000200400002000000020D94801685A
-S31508004DA051F4803101607047D6490A6832F44042AE
-S31508004DB0104308607047D448016851F480210160A7
-S31508004DC07047D148016851F4803101607047CE4878
-S31508004DD00068400C10F001007047CC490A68920838
-S31508004DE09200104308607047C848006810F00C002D
-S31508004DF07047C6490A6832F0F002104308607047E7
-S31508004E00C2490A6832F4E052104308607047BF4945
-S31508004E100A6832F46042104308607047BA4801686D
-S31508004E2051F0807101607047B7480068400E10F075
-S31508004E300100704770B4B64D2E68B64C2640304314
-S31508004E40084350EA82101843286070BC704770B453
-S31508004E50AF4D2E68B04C26403043084350EA8210C6
-S31508004E601843286070BC704781B0AC490A68024391
-S31508004E700A60096808400090009801B07047A74981
-S31508004E800A6832EA00000860704781B0A4490A68D7
-S31508004E9002430A60096808400090009801B070470C
-S31508004EA09F490A6832EA00000860704781B09D4948
-S31508004EB00A6802430A60096808400090009801B031
-S31508004EC0704798490A6832EA00000860704781B05E
-S31508004ED095490A6802430A600968084000900098E4
-S31508004EE001B0704790490A6832EA000008607047C6
-S31508004EF08E490A68120912011043086070478B48E8
-S31508004F00006810F00F00704709048161704780B58A
-S31508004F1000F005F800F05CFB00F068FBFCE780B5E4
-S31508004F20FFF786F800F001F801BD80B50720FFF706
-S31508004F30DFFFFFF7E4FF072803D067217C48FDF76A
-S31508004F401CFB4FF44040FFF72FFFFFF727FFFFF743
-S31508004F5032FFFFF736FFFFF73AFF0128FBD10023A0
-S31508004F604FF4D87208215FF48000FFF763FF5FF003
-S31508004F7010634FF4D87208215FF48000FFF767FFCB
-S31508004F80FFF74CFFFFF750FF0128FBD10020FFF782
-S31508004F9030FF4FF4A050FFF733FF4FF40040FFF700
-S31508004FA036FF0220FFF719FFFFF71EFF0828FBD17F
-S31508004FB0604800F025FB01BD38B586B04FF4804047
-S31508004FC0FFF785FF5FF08050FFF770FF0120FFF7BE
-S31508004FD04BFF0220FFF748FF0420FFF745FF082094
-S31508004FE0FFF742FF5FF48020FFF760FF5FF0007075
-S31508004FF0FFF75CFF802000900120019000200290BE
-S3150800500000200390002004904B4C6946200000F0D5
-S3150800501011FC80212000FFF777FF4FF40050009025
-S3150800502000200190002004906946444800F002FCE4
-S315080050304FF440750095022001900320029000204D
-S315080050400390002004900720059069463C4800F02C
-S31508005050F1FB0095022001900320029000200390A6
-S3150800506000200490092005906946200000F0E2FB24
-S315080050704FF4C050009002200190032002900020B7
-S315080050800390002004900A20059069462D4800F0F8
-S31508005090D1FB8020FFF7F9FE07B030BD10B5FEF74B
-S315080050A0C4F9254C80212000FFF72EFF244800F084
-S315080050B02FFB224800F02CFB200000F029FB21489A
-S315080050C000F026FB8020FFF7EBFE5FF00070FFF78D
-S315080050D0F8FE5FF48020FFF7F4FE0820FFF7CFFE06
-S315080050E00420FFF7CCFE0220FFF7C9FE0120FFF7D8
-S315080050F0C6FE5FF08050FFF7E4FE4FF48040FFF7EE
-S31508005100F1FE10BD00700040003802400838024029
-S31508005110043802400080BCFF0080BFF030380240EF
-S31508005120343802404038024044380240003C0240CD
-S31508005130105B000800E6DF0C00040240000802408D
-S31508005140000C024000000240006810F001007047A1
-S31508005150426832F44052114341607047826832F423
-S315080051604072114381607047B2F5004F0ED11A00A4
-S31508005170520812EB4102B2FBF3F189B24FF6F07214
-S315080051800A40C1F342010A43C26005E011EB53012C
-S31508005190B1FBF3F189B2C1607047F8B505000F009D
-S315080051A0012600242800FFF7CFFF002862D12968CE
-S315080051B03A48014078680143F86801433869014371
-S315080051C0B86901432960B9682800FFF7C1FF796902
-S315080051D02800FFF7C3FF2948854204D10320FEF7BC
-S315080051E07BF904003AE02648854204D10C20FEF7F4
-S315080051F073F9040032E02348854204D13020FEF7D3
-S315080052006BF904002AE02048854204D1C020FEF745
-S3150800521006FA040022E01D48854205D14FF4407085
-S31508005220FEF7FDF9040019E01948854205D14FF447
-S315080052304060FEF751F9040010E01648854205D192
-S315080052404FF44050FEF7EBF9040007E01248854298
-S3150800525004D14FF44040FEF7E2F90400002C09D0CF
-S315080052603868002806D000263B68BA69210028005D
-S31508005270FFF77AFF3000C0B2F2BD0000001001400F
-S315080052800044004000480040004C004000500040E8
-S315080052900014014000780040007C0040F369FFEFED
-S315080052A02DE9F84381460E0014001D000120DFF8A1
-S315080052B0E071387D012801D1022035E001203875DA
-S315080052C04CF25038404600F048F80100C9B20029AF
-S315080052D027D1300022002B00B9F1000F07D0B9F111
-S315080052E0020F0ED008D3B9F1030F0ED010E011004B
-S315080052F0C9B200F091F80BE0110089B200F07BF812
-S3150800530006E0110000F066F802E000F04EF8FFE74C
-S31508005310404600F022F8DFF87C110A68520852006D
-S315080053200A6000213975C0B2BDE8F28300205949E8
-S315080053300A68002A08D5594A594B1360594B136015
-S315080053400968002900D50120C0B270475148016894
-S3150800535051F0004101600020704738B50400002074
-S3150800536000204B498861FBF7A5FE05004A480168FD
-S31508005370C9030BD514F1010FF8D0002C04D0FBF7A4
-S3150800538099FE401B8442F1D203200DE0016811F01A
-S31508005390F20F03D000F04FF8012005E00168C907B5
-S315080053A001D501210160002032BD10B439490C68CD
-S315080053B034F440740C600C6854F440740C600C6847
-S315080053C054F001040C600260001D0360BFF34F8FA8
-S315080053D010BC70472F4A136833F440731360136880
-S315080053E053F400731360136853F0010313600160EC
-S315080053F0BFF34F8F7047274A136833F4407313601F
-S31508005400136853F480731360136853F00103136031
-S315080054100180BFF34F8F70471E4A136833F44073F9
-S31508005420136013681360136853F001031360017067
-S31508005430BFF34F8F704718480168890704D5144988
-S315080054408A6952F020028A610168C90604D51049A2
-S315080054508A6952F010028A610168890604D50C49E6
-S315080054608A6952F008028A610168490604D5084922
-S315080054708A6952F004028A610168090604D504495A
-S315080054808A6952F002028A61F221016070470000BF
-S31508005490D80F0020103C02400C3C0240043C02405D
-S315080054A023016745AB89EFCD2DE9F04104000D00D6
-S315080054B001200020DFF81061307D012801D102208B
-S315080054C03EE0012030754CF250373800FFF745FFB3
-S315080054D00100C9B2002930D15FF0FF312960216887
-S315080054E001290DD1E068C0B200F02CF83800FFF7AA
-S315080054F034FFDFF8D8100A6832F004020A601CE0AC
-S31508005500D4F8048001E018F10108A26861688A18D5
-S31508005510904512D2E168C9B2404600F026F8380034
-S31508005520FFF71BFF29490A6832F07A020A60010070
-S31508005530C9B20029E7D0C5F8008000213175C0B28C
-S31508005540BDE8F08121490A6832F440720A600A68A7
-S3150800555052F004020A600A68C0B2000250F48030B1
-S3150800556010430860BFF34F8F704700220A00D2B27B
-S31508005570002A01D100210EE00A00D2B2012A02D186
-S315080055804FF4807107E0C9B2022902D14FF40071C5
-S3150800559001E04FF440710D4A136833F44073136009
-S315080055A0136819431160116831F0F8011160116828
-S315080055B0C00050F0020008431060106850F48030B4
-S315080055C01060BFF34F8F7047D80F0020103C024081
-S315080055D080B5FEF7B5FBFDF7B9FBFBF73DFDFEF71A
-S315080055E009FDFEF769FCFEF773FB01BD80B5FDF703
-S315080055F0B1FBFBF745FDFEF770FCFEF772FB01BD3C
-S3150800560001490860704700000400002030B40468AF
-S3150800561091FAA1F3B3FA83F30325DBB25B009D404D
-S31508005620AC4391FAA1F1B1FA81F1C9B249008A40B5
-S315080056302243026030BC704743688B435143194389
-S315080056404160704730B4846891FAA1F3B3FA83F3E2
-S315080056500325DBB25B009D40AC4391FAA1F1B1FA98
-S3150800566081F1C9B249008A402243826030BC704742
-S3150800567030B4C46891FAA1F3B3FA83F30325DBB215
-S315080056805B009D40AC4391FAA1F1B1FA81F1C9B230
-S3150800569049008A402243C26030BC704730B4046A6D
-S315080056A091FAA1F3B3FA83F30F25DBB29B009D4071
-S315080056B0AC4391FAA1F1B1FA81F1C9B289008A40E5
-S315080056C02243026230BC704730B4446A0B001B0A9E
-S315080056D093FAA3F3B3FA83F30F25DBB29B009D403D
-S315080056E0AC43090A91FAA1F1B1FA81F1C9B289006C
-S315080056F08A402243426230BC704742490A681043D6
-S31508005700086070473F490A6832EA00000860704737
-S3150800571010B500243C49884206D10120FFF7EDFF69
-S315080057200120FFF7EFFF6AE03849884206D10220D8
-S31508005730FFF7E3FF0220FFF7E5FF60E03449884200
-S3150800574006D10420FFF7D9FF0420FFF7DBFF56E058
-S315080057503049884206D10820FFF7CFFF0820FFF717
-S31508005760D1FF4CE02C49884206D11020FFF7C5FF2F
-S315080057701020FFF7C7FF42E02849884206D12020BB
-S31508005780FFF7BBFF2020FFF7BDFF38E0244988421A
-S3150800579006D14020FFF7B1FF4020FFF7B3FF2EE008
-S315080057A02049884206D18020FFF7A7FF8020FFF70F
-S315080057B0A9FF24E01C49884208D14FF48070FFF7FE
-S315080057C09CFF4FF48070FFF79DFF18E01749884249
-S315080057D008D14FF40070FFF790FF4FF40070FFF701
-S315080057E091FF0CE01249884208D14FF48060FFF718
-S315080057F084FF4FF48060FFF785FF00E00124200056
-S31508005800C0B210BD10380240000002400004024039
-S3150800581000080240000C024000100240001402403A
-S3150800582000180240001C02400020024000240240EA
-S3150800583000280240F8B505000E0000200020306858
-S3150800584090FAA0F0B0FA80F72FE0726921002800DC
-S31508005850FFF73AFF28E034680120B8400440002CDE
-S3150800586022D0726821002800FFF7D0FE7068012850
-S3150800587002D07068022804D1B26821002800FFF718
-S31508005880E1FE326921002800FFF7F2FE706802285F
-S315080058900AD194FAA4F0B0FA80F00828D5D2726931
-S315080058A021002800FFF7FAFE7F1C3068F840002820
-S315080058B0D1D17068012802D07068022804D1F26834
-S315080058C031682800FFF7B8FE0020F2BD12200880D4
-S315080058D02D487047042008802C48704780B50A0078
-S315080058E0C0B2002804D12A492A48FDF7C4F903E0C2
-S315080058F027492848FDF7BFF9254802BD10B50A0013
-S31508005900234C21002448FDF7B6F9200010BD80B5C8
-S315080059101A20088000F022F8204802BD80B50A0047
-S31508005920C0B2002804D11A491D48FDF7A4F903E0BE
-S3150800593017491B48FDF79FF9154802BD80B50A00AF
-S31508005940C0B2002804D112491648FDF794F903E0BD
-S315080059500F491448FDF78FF90D4802BD38B51248AE
-S31508005960006812490C6812490968081800280AD004
-S315080059700A4D0822A91C00F01DF8042215F112018F
-S31508005980200000F017F831BD880000209C00002098
-S31508005990680B0020445D0008685D0008A000002030
-S315080059A09C5D00082C5D000820F4F01F24F4F01F0D
-S315080059B028F4F01F30B4002300231AE00400240F53
-S315080059C037341D00EDB201F815400AE00400240F33
-S315080059D00A2CF3D20400240F30341D00EDB201F86E
-S315080059E01540000100241D00EDB201EB45056C7061
-S315080059F05B1C1C001500E4B2EDB2AC42E6D330BC29
-S31508005A00704700000F48016851F4700101600E49A3
-S31508005A10086850F00100086000200C4A10600A6807
-S31508005A200B4802400A600B480B4A1060086830F4BD
-S31508005A30802008600020094908605FF00060084976
-S31508005A400860704788ED00E00038024008380240D8
-S31508005A50FFFFF6FE10300024043802400C380240DE
-S31508005A6008ED00E0433A5C576F726B5C736F6674BF
-S31508005A70776172655C4F70656E424C545C54617216
-S31508005A806765745C44656D6F5C41524D434D375F85
-S31508005A9053544D333246375F4E75636C656F5F46B8
-S31508005AA03734365A475F4941525C426F6F745C75AA
-S31508005AB07362645F636F6E662E6300000080000881
-S31508005AC000800000010000000000010800800000BE
-S31508005AD002000000008001080080000003000000AA
-S31508005AE0000002080000020004000000000004088C
-S31508005AF0000004000500000000000808000004007B
-S31508005B000600000000000C08000004000700000062
-S31508005B10433A5C576F726B5C736F66747761726534
-S31508005B205C4F70656E424C545C5461726765745C78
-S31508005B3044656D6F5C41524D434D375F53544D3349
-S31508005B403246375F4E75636C656F5F463734365A33
-S31508005B50475F4941525C426F6F745C6D61696E2E96
-S31508005B6063000000433A5C576F726B5C736F667430
-S31508005B70776172655C4F70656E424C545C54617215
-S31508005B806765745C536F757263655C41524D434D2E
-S31508005B90375F53544D333246375C72733233322E85
-S31508005BA063000000433A5C576F726B5C736F6674F0
-S31508005BB0776172655C4F70656E424C545C546172D5
-S31508005BC06765745C536F757263655C41524D434DEE
-S31508005BD0375F53544D333246375C63616E2E63002C
-S31508005BE0433A5C576F726B5C736F66747761726564
-S31508005BF05C4F70656E424C545C5461726765745CA8
-S31508005C00536F757263655C41524D434D375F53540C
-S31508005C104D333246375C7573622E630030B50168C2
-S31508005C2084684218416802EB5103C90703D54C44FE
-S31508005C3001E0491C05D19A420AD012F9011B12F853
-S31508005C40015B002904F8015BF3D4491EF7D5F2E796
-S31508005C500C3030BD10B5074979441831064C7C44E0
-S31508005C60163404E00A68081D114488470146A14213
-S31508005C70F8D110BD500000006C00000005020602B5
-S31508005C80060307030803090309040A040B040C04A2
-S31508005C900C050D050E050F050F0610061007100852
-S31508005CA04EF68851CEF20001086840F4700008608C
-S31508005CB0BFF34F8FBFF36F8F4FF00070E1EE100AFE
-S31508005CC070470000FBB3FFFF5C0F0000C000002018
-S31508005CD00000000049FFFFFF7802000030010000C5
-S31508005CE00000002000F00DF8002801D0FFF7B2FFF1
-S31508005CF0AFF300800020AFF30080FFF708F900F04B
-S31508005D0002F80120704700F001B80000074638463F
-S31508005D1000F002F8FBE7000080B5AFF30080024A06
-S31508005D2011001820ABBEFBE72600020057696E5526
-S31508005D3053422042756C6B20496E746572666163C6
-S31508005D406500000057696E5553422042756C6B20FA
-S31508005D5044657669636500000000000000000000E5
-S31508005D6001020304060708094F70656E424C542069
-S31508005D7055736572000000000148804701480047D6
-S31508005D80055A0008895D0008AFF30080FFF788FF11
-S31508005D90FFF7A8FF000000000102030444656661DE
-S31508005DA0756C74004F70656E424C5400FFF7FEBF69
-S31508005DB0FFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBF09
-S31508005DC0FFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBFF9
-S31508005DD0FFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBFE9
-S31508005DE0FFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBFD9
-S31508005DF0FFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBFC9
-S31508005E00FFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBFB8
-S31508005E10FFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBFA8
-S31508005E20FFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBF98
-S31508005E30FFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBF88
-S31508005E40FFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBF78
-S31508005E50FFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBF68
-S31508005E60FFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBF58
-S31508005E70FFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBF48
-S31508005E80FFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBF38
-S31508005E90FFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBF28
-S31508005EA0FFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBF18
-S31508005EB0FFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBF08
-S31508005EC0FFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBFF8
-S31508005ED0FFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBFE8
-S31508005EE0FFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBFD8
-S31508005EF0FFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBFC8
-S31508005F00FFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBFB7
-S31508005F10FFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBFA7
-S31508005F20FFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBF97
-S31508005F30FFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBF87
+S315080003700411401C0F28F7D30F98002814D116F53E
+S315080003800060406850F0020016F500614860A06BF6
+S3150800039030F40010A063206850F040002060206808
+S315080003A050F08000206003E0A06B50F40010A063BA
+S315080003B0002016F56061086016F50060006816F5FD
+S315080003C0006108600A9801280CD10798002804D112
+S315080003D00021200000F0E5F818E00121200000F0D7
+S315080003E0E0F813E00A9803280CD10798002804D1EE
+S315080003F00021200000F0D5F808E00121200000F0D7
+S31508000400D0F803E00321200000F0CBF810212000EB
+S3150800041000F0A7F8002800D00125200000F0B2F867
+S31508000420002800D00125002016F50061086100208B
+S3150800043016F500614861002016F50061C8610020C4
+S315080004401BE0002116EB401212F51062116006E05F
+S315080004505FF0904116EB401212F51062116016EB30
+S31508000460401111F5106100220A6116EB401111F5D1
+S3150800047010614FF67F328A60401C0599884210D277
+S3150800048016EB401111F5106109680029D9D5002825
+S31508000490DED15FF0006116EB401212F510621160B2
+S315080004A0DDE700201BE0002116EB401212F5306252
+S315080004B0116006E05FF0904116EB401212F53062CB
+S315080004C0116016EB401111F5306100220A6116EB36
+S315080004D0401111F530614FF67F328A60401C05994C
+S315080004E0884210D216EB401111F5306109680029CF
+S315080004F0D9D50028DED15FF0006116EB401212F55F
+S3150800050030621160DDE716F50060006930F480702E
+S3150800051016F5006630610020A0617FF080406061BA
+S315080005200898002803D1A06950F01000A061A169BD
+S31508000530DFF8980B0143A1610B98002803D0A06946
+S3150800054050F00800A0610F98012805D1A06940F075
+S31508000550804050F00400A0612800C0B272BC5DF86B
+S3150800056010FB0022890151F020010161521CDFF8BD
+S31508000570601B8A4204D201698906F7D400207047B5
+S315080005800320FCE7002110220261491CDFF8402BFA
+S31508000590914204D20269D206F7D40020704703209C
+S315080005A0FCE710F500621268C9B2114310F5006045
+S315080005B001600020704710F50060806810F00600A2
+S315080005C0002801D1002006E0022801D0062801D122
+S315080005D0022000E00F20C0B2704730B40A784B788A
+S315080005E0012B2BD110F50063DB6901240D7815F07A
+S315080005F00F05AC40A4B2234310F50064E36110EB89
+S31508000600421313F510631B681B0440D410EB421306
+S3150800061013F510631B688C686405640DC97854EA81
+S31508000620814454EA825444F0805454F400442343E9
+S3150800063010EB421010F51060036028E010F5006317
+S31508000640DB6901240D7815F00F05AC4053EA044325
+S3150800065010F50064E36110EB421313F530631B6871
+S315080006601B0414D410EB421313F530631B688C6813
+S315080006706405640DC97854EA814444F0805454F4FE
+S315080006800044234310EB421010F53060036000204D
+S3150800069030BC704730B40A784B78012B47D110EB41
+S315080006A0421313F510631B68002B17D510EB421382
+S315080006B013F510631B6853F0006310EB421414F52E
+S315080006C01064236010EB421313F510631B6853F094
+S315080006D0804310EB421414F510642360012310F5CF
+S315080006E00064E46B0D7815F00F0513FA05F5ADB245
+S315080006F0AC4310F50065EC6310F50064E46909780D
+S3150800070011F00F018B409BB234EA030310F5006128
+S31508000710CB6110EB421111F510610B68DFF8B419C3
+S315080007200B4010EB421010F51060036045E010EB2B
+S31508000730421313F530631B68002B17D510EB4213D1
+S3150800074013F530631B6853F0006310EB421414F57D
+S315080007503064236010EB421313F530631B6853F0C3
+S31508000760804310EB421414F530642360012310F51E
+S315080007700064E46B0D7815F00F0513FA05F534EAF5
+S31508000780054410F50065EC6310F50064E469097822
+S3150800079011F00F018B4034EA034410F50061CC6177
+S315080007A010EB421111F530610B68DFF82C190B407C
+S315080007B010EB421010F530600360002030BC704723
+S315080007C0F8B504000D784B78012B40F005814B698C
+S315080007D0002B24D114EB451313F5106314EB4516BF
+S315080007E016F5106636696FF3DC461E6114EB451381
+S315080007F013F5106314EB451616F51066366956F4AC
+S3150800080000261E6114EB451313F5106314EB451609
+S3150800081016F510663669F60CF6041E615AE014EBF6
+S31508000820451313F5106314EB451616F5106636696D
+S31508000830F60CF6041E6114EB451313F5106314EB5E
+S31508000840451616F5106636696FF3DC461E6114EB1D
+S31508000850451616F5106614EB451313F510631F6954
+S31508000860D1F814C08B6813EB0C0CBCF1010C8B6827
+S31508000870BCFBF3F3DFF864C81CEAC34C5CEA070761
+S31508000880376114EB451313F5106314EB451616F58B
+S31508000890106636694F697F037F0B3E431E61CB782E
+S315080008A0012B17D114EB451313F5106314EB4516FA
+S315080008B016F51066366936F0C0461E6114EB451308
+S315080008C013F5106314EB451616F51066366956F0DF
+S315080008D000561E611300DBB2012B36D108690028C9
+S315080008E005D014EB451010F510600A694261C87806
+S315080008F001281DD114F500608068C0050CD414EBDE
+S31508000900451010F51060006850F0005014EB4511C2
+S3150800091011F5106108600BE014EB451010F5106036
+S31508000920006850F0805014EB451111F5106108600D
+S3150800093014EB451010F51060006850F0044014EBF5
+S31508000940451414F510642060DFE014EB451313F525
+S3150800095010631B6853F0044314EB451616F510662E
+S315080009603360CB78012B10D04869002800F0CD8081
+S3150800097014F50060406B0122097811F00F018A40D6
+S31508000980104314F500646063BFE014F500639B68C8
+S31508000990DB050CD414EB451313F510631B6853F0F1
+S315080009A0005314EB451414F5106423600BE014EBA4
+S315080009B0451313F510631B6853F0805314EB451465
+S315080009C014F510642360D2B200924B699BB20A7880
+S315080009D0C96800F0B1F998E014EB451010F53060DD
+S315080009E014EB451313F530631B69DB0CDB04036159
+S315080009F014EB451010F5306014EB451313F530630E
+S31508000A001B696FF3DC430361486900281AD114EBAC
+S31508000A10451010F5306014EB451313F530631B6968
+S31508000A208E687603760B3343036114EB451010F595
+S31508000A30306014EB451313F530631B6953F4002338
+S31508000A40036129E04B698868C3185B1E8868B3FB95
+S31508000A50F0F014EB451313F5306314EB451616F551
+S31508000A60306636690700BFB2DFF870C61CEAC74CA5
+S31508000A705CEA06061E6114EB451313F5306314EBA6
+S31508000A80451616F5306636698F6880B200FB07F0A2
+S31508000A904003400B30431861D2B2012A08D1C86816
+S31508000AA0002805D014EB451010F53060CA6842617D
+S31508000AB0C87801281DD114F500608068C0050CD4DB
+S31508000AC014EB451010F53060006850F0005014EB38
+S31508000AD0451111F5306108600BE014EB451010F56F
+S31508000AE03060006850F0805014EB451111F5306104
+S31508000AF0086014EB451010F53060006850F00440AB
+S31508000B0014EB451414F5306420600020F2BD000093
+S31508000B10BFFFBDFFC0ACD80000350C00C0E1E40043
+S31508000B2040420F000024F400804F12008073060133
+S31508000B3020D61300A0491A0160E31600002D3101E2
+S31508000B4040771B0040A44C01C091210000366E017D
+S31508000B502075380020ABA601E09C410070B40B005C
+S31508000B601C785978012940F095805969002924D1C3
+S31508000B7010EB441111F5106110EB441515F51065CD
+S31508000B802D696FF3DC450D6110EB441111F5106109
+S31508000B9010EB441515F510652D6955F400250D6102
+S31508000BA010EB441111F5106110EB441515F510659D
+S31508000BB02D69ED0CED040D6137E010EB441111F5CC
+S31508000BC0106110EB441515F510652D69ED0CED0453
+S31508000BD00D6110EB441111F5106110EB441515F574
+S31508000BE010652D696FF3DC450D6199685D69A94249
+S31508000BF001D29968596110EB441111F5106110EB97
+S31508000C00441515F510652D6955F400250D6110EB91
+S31508000C10441111F5106110EB441515F510652D6991
+S31508000C205E697603760B35430D61D2B2012A15D17A
+S31508000C301969002905D010EB441111F510611A69DC
+S31508000C404A6110EB441111F51061096851F004412D
+S31508000C5010EB441010F5106001606AE010EB4411C7
+S31508000C6011F51061096851F0044110EB441212F5B0
+S31508000C7010621160596900295BD010F50061496B53
+S31508000C8001221B7813F00F039A40114310F50060F8
+S31508000C9041634EE010EB441111F5306110EB441539
+S31508000CA015F530652D69ED0CED040D6110EB441159
+S31508000CB011F5306110EB441515F530652D696FF3A4
+S31508000CC0DC450D615969002901D09968596110EB15
+S31508000CD0441111F5306110EB441515F530652D6991
+S31508000CE055F400250D6110EB441111F5306110EB38
+S31508000CF0441515F530652D699E687603760B3543E0
+S31508000D000D61D2B2012A08D1D968002905D010EBA5
+S31508000D10441111F53061DA684A6110EB441111F596
+S31508000D203061096851F0044110EB441010F5306049
+S31508000D300160002070BC7047F0B4049CE4B2002C3B
+S31508000D4013D19BB2DB1C9B0800250CE00C0026681F
+S31508000D501700FFB24FF4805404FB070717F58057B6
+S31508000D603E60091D6D1C9D42F0D30020F0BC704703
+S31508000D7030B492B2D21C9208002306E010F58054D3
+S31508000D8024680D002C60091D5B1C9342F6D30800ED
+S31508000D9030BC7047020008784978012921D112EB46
+S31508000DA0401111F51061096800290DD400280BD0EF
+S31508000DB012EB401111F51061096831F0804112EB10
+S31508000DC0401313F51063196012EB401111F5106109
+S31508000DD0096851F4001112EB401212F51062116005
+S31508000DE020E012EB401111F53061096800290DD495
+S31508000DF000280BD012EB401111F53061096831F06B
+S31508000E00804112EB401313F53063196012EB401161
+S31508000E1011F53061096851F4001112EB401212F510
+S31508000E20306211600020704710B40A784B78012BA5
+S31508000E301ED110EB421313F510631B6833F400132D
+S31508000E4010EB421414F510642360CB78032B02D000
+S31508000E50C97802292AD110EB421111F510610968E7
+S31508000E6051F0805110EB421010F5106001601DE042
+S31508000E7010EB421313F530631B6833F4001310EBC1
+S31508000E80421414F530642360CB78032B02D0C9785A
+S31508000E9002290BD110EB421111F53061096851F0A6
+S31508000EA0805110EB421010F530600160002010BC34
+S31508000EB0704710B50400200000210CE04FF67F3281
+S31508000EC010EB411313F510639A6010EB411313F5F9
+S31508000ED030639A60491C0F29F0D3002110F500628F
+S31508000EE01161002110F500625161002110F50060C2
+S31508000EF0C1612000FFF746FB0100C9B2002901D0F5
+S31508000F00C0B20AE010212000FFF72BFB0100C9B28E
+S31508000F10002901D0C0B200E0C0B210BD10F50062D1
+S31508000F20126832F4FE6210F500631A6010F500626A
+S31508000F301268C9B2090111F4FE61114310F5006087
+S31508000F4001600020704780B510F50061496831F0EE
+S31508000F50020110F500604160032000F0C3F800208C
+S31508000F6002BD80B510F50061496851F0020110F51F
+S31508000F7000604160032000F0B5F8002002BD0100C2
+S31508000F804869896908407047010011F50060806961
+S31508000F9011F50061C9690840000C7047010011F598
+S31508000FA00060806911F50061C969084080B2704720
+S31508000FB00200C9B212EB411010F53060806812F5D4
+S31508000FC0006251690840704710B410F50062126952
+S31508000FD010F500635B6B11F00F04E340DB0113F0BF
+S31508000FE080031A43C9B210EB411010F510608068EF
+S31508000FF0104010BC7047406910F00100704710F5AA
+S3150800100010610968C90AC90210F51062116010F565
+S315080010100061496851F4807110F500604160002054
+S31508001020704710B40300006CDFF8B440A04206D342
+S3150800103013F530600068002801D500202AE000205A
+S3150800104013F53064206113F53060006950F4002010
+S3150800105013F53064206113F53060006950F018000C
+S3150800106013F53064206113F53060006950F0C04014
+S3150800107013F530642061C9B201290AD113F530602D
+S31508001080426113F53060006850F0802013F5306334
+S315080010901860002010BC70470021491C0C4A914278
+S315080010A00FD20369002BF8D50021036953F0010319
+S315080010B00361491C914206D20369DB07F9D4002073
+S315080010C070470320FCE70320FAE7000000383C805D
+S315080010D0410D0300007833EC0078F3EF0000F81FA9
+S315080010E00B30544F38B5040000F03EF8050014F1F3
+S315080010F0010F02D004480078241800F035F8401B88
+S31508001100A042FAD331BD00BFBD00002080B500F073
+S315080011100DF810481049086000201049086005209D
+S315080011200F49086000200F49086001BD00200C49DE
+S31508001130086070470A480068C00303D50948016873
+S31508001140491C0160704780B5FFF7F4FF0548006841
+S3150800115002BD0000BF4B030014E000E018E000E009
+S3150800116010E000E03810002080B5FFF7ECFF02BD64
+S31508001170704730B4002513E050F8042BD30744BF5A
+S31508001180A9F101039A18091F042942F8045BFAD247
+S3150800119013468C0744BF15809B1CC90748BF1D70A2
+S315080011A050F8041B0029E7D130BC704738B58AB01F
+S315080011B00400002C01D10120B6E0256894F8BD038F
+S315080011C0002805D1002084F8BC03200000F054FE56
+S315080011D0032084F8BD03E86BC00501D40020206114
+S315080011E02068FFF798F8211D83B06846342200F07E
+S315080011F045FE0EBC2068FEF7E7FF002804D0022053
+S3150800120084F8BD0301208FE000212068FFF789F8E4
+S31508001210002130E01C200A00D2B2424322440123B6
+S3150800122082F83D300A00D2B24243224482F83C108A
+S315080012300A00D2B2424322440B00DBB2A2F8423083
+S315080012400A00D2B242432244002382F83F300A0001
+S31508001250D2B242432244002353640A00D2B2424324
+S315080012602244002393640A00D2B200FB02F0204411
+S3150800127000220265491C0800C0B262689042C9D3C0
+S3150800128000212BE01C200A00D2B24243224400234C
+S3150800129082F8FD310A00D2B24243224482F8FC1198
+S315080012A00A00D2B242432244002382F8FF310A00E0
+S315080012B0D2B2424322440023C2F804320A00D2B210
+S315080012C0424322440023C2F808320A00D2B200FB85
+S315080012D002F020440022C0F81022491C0800C0B2BF
+S315080012E062689042CED3211D83B06846342200F04E
+S315080012F0C5FD0EBC2068FFF730F8002804D0022090
+S3150800130084F8BD0301200FE0002084F8380001208E
+S3150800131084F8BD03606A012802D1200000F027FE88
+S315080013202068FFF71EFE00200BB030BD10B5040084
+S31508001330002C01D101200CE0032084F8BD03200015
+S3150800134000F01EF8200000F026FE002084F8BD03F9
+S31508001350002010BD10B5040094F8BC03012801D183
+S3150800136002200CE0012084F8BC032068FFF7EBFD9F
+S315080013702068FEF7CAFF002084F8BC03002010BDD1
+S3150800138010B5040094F8BC03012801D1022016E028
+S31508001390012084F8BC032068FEF7BDFF2068FFF72C
+S315080013A088FD002804D0002084F8BC03012006E04C
+S315080013B02068FFF7D6FD002084F8BC03002010BD86
+S315080013C02DE9F041060035682F003068FFF713FE57
+S315080013D0002840F077823068FFF7D1FD002800F03A
+S315080013E071823068FFF7CBFD800705D53068406904
+S315080013F010F00200316848613068FFF7C0FDC0068A
+S315080014003FD53068806930F0100031688861D5F8BA
+S31508001410208018F00F011C20414306EB010010F54F
+S31508001420FE74C8F34340022816D147F6F07018EA4E
+S31508001430000F20D0C8F30A1292B2E1682800FFF71D
+S3150800144097FCE068C8F30A110844E060A169C8F38C
+S315080014500A104118A1610EE0C8F3434006280AD1D4
+S31508001460082216F571712800FFF782FCA169C8F3F6
+S315080014700A104118A1613068806950F0100031687F
+S3150800148088613068FFF77BFD000347D50025306883
+S31508001490FFF77AFD04003FE0E0073BD52900C9B213
+S315080014A03068FFF785FD80465FEAC87009D517EBF7
+S315080014B0451010F53060012181602900300000F0E8
+S315080014C00CFC5FEA087009D517EB451010F530607B
+S315080014D0082181602900300000F0A2FC5FEAC8609C
+S315080014E005D517EB451010F53060102181605FEACD
+S315080014F0886005D517EB451010F53060202181600E
+S315080015005FEA884006D517EB451010F530604FF4B2
+S31508001510005181606D1C6408002CBDD13068FFF74E
+S315080015202EFD400376D53068FFF738FD0400002508
+S315080015306EE0E0076AD52900C9B23068FFF744FDB6
+S3150800154080465FEAC87036D5012115F00F0011FAFA
+S3150800155000F017F50061496B31EA000017F50061E4
+S31508001560486317EB451010F510600121816030695A
+S3150800157001281BD11C2000FB05F13144896C00FBB6
+S3150800158005F23244526C114400FB05F23244916470
+S31508001590002D0BD100FB05F03044006D002805D165
+S315080015A016F5717201213068FFF73BFD2900C9B2B3
+S315080015B0300000F008FD5FEA087005D517EB451006
+S315080015C010F51060082181605FEAC86005D517EB41
+S315080015D0451010F51060102181605FEA486005D556
+S315080015E017EB451010F51060402181605FEA88709E
+S315080015F005D517EB451010F51060022181605FEAEA
+S31508001600086003D52900300000F0F3FA6D1C640861
+S31508001610002C8ED13068FFF7B2FC00281CD517F5D0
+S31508001620006040684008400017F50061486096F879
+S31508001630F403012807D1002086F8F40300213000BE
+S3150800164000F0A8FC02E0300000F008FD30684069B0
+S3150800165010F00040316848613068FFF790FC0005DB
+S315080016600DD517F500608068C00702D5300000F078
+S31508001670DAFC3068406910F4006031684861306807
+S31508001680FFF77DFC00011AD53068406910F000604C
+S315080016903168486196F8F40300280DD1012086F8D0
+S315080016A0F4033068406DC0F38300C6F8F8030121DF
+S315080016B0300000F06FFC02E0300000F0B4FC306847
+S315080016C0FFF75DFCC00440F1938017F500604068A1
+S315080016D04008400017F50061486010213068FEF7A1
+S315080016E040FF00203CE04FF67F3117EB401212F521
+S315080016F01062916017EB401212F51062126832F40C
+S31508001700001217EB401313F510631A6017EB40121B
+S3150800171012F51062126852F0006217EB401313F5C7
+S3150800172010631A6017EB401212F53062916017EBDE
+S31508001730401111F53061096831F4001117EB4012B8
+S3150800174012F53062116017EB401111F53061096826
+S3150800175051F0006117EB401212F530621160401C1F
+S3150800176071688842BFD317F50060C06950F0011050
+S3150800177017F50061C861306B002812D017F50060B4
+S31508001780D0F8840050F00B0017F50061C1F884000A
+S3150800179017F50060406C50F00B0017F500614864BF
+S315080017A011E017F50060406940F4005050F02B0036
+S315080017B017F50061486117F50060006950F00B00E5
+S315080017C017F50061086117F50060006830F4FE60DF
+S315080017D017F50067386016F571723169C9B2306855
+S315080017E0FFF71FFC3068406910F480503168486183
+S315080017F03068FFF7C4FB800417D53068FFF7FFFB96
+S315080018003068FEF7D8FEF06000F04CFD0100F26883
+S31508001810D2B23068FEF710FD300000F0E8FB306801
+S31508001820406910F40050316848613068FFF7A7FB3B
+S31508001830000708D5300000F0D4FB3068406910F086
+S315080018400800316848613068FFF799FBC0020AD57D
+S315080018500021C9B2300000F011FC3068406910F46C
+S315080018608010316848613068FFF789FB80020AD525
+S315080018700021C9B2300000F0FAFB3068406910F464
+S315080018800010316848613068FFF779FB400008D5D9
+S31508001890300000F0FAFB3068406910F0804031688B
+S315080018A048613068FFF76BFB40070BD53068446822
+S315080018B0600702D5300000F0F2FB30684068044348
+S315080018C030684460BDE8F08110B5040094F8BC03A4
+S315080018D0012801D1022009E0012084F8BC03206810
+S315080018E0FFF731FB002084F8BC03002010BD10B5BB
+S315080018F0040094F8BC03012801D1022009E0012064
+S3150800190084F8BC032068FFF72CFB002084F8BC038E
+S31508001910002010BD10B5040094F8BC03012801D1BD
+S3150800192002200CE0012084F8BC0384F83810C9B200
+S315080019302068FFF7F3FA002084F8BC03002010BDE6
+S3150800194070B5050000260800C0B200060CD50C00CC
+S31508001950E4B214F00F041C20444305EB040010F114
+S315080019603C04012060700BE00C00E4B214F00F0494
+S315080019701C20444305EB040010F5FE74002060703B
+S3150800198011F00F01217092B2A260E370607800280E
+S3150800199001D02078E080DBB2022B01D10020207133
+S315080019A095F8BC03012801D102200BE0012085F837
+S315080019B0BC0321002868FEF710FE002085F8BC034A
+S315080019C03000C0B270BD10B504000800C0B20006F1
+S315080019D00BD50A00D2B212F00F021C20424304EBC8
+S315080019E002003C30012242700BE00A00D2B212F02B
+S315080019F00F021C20424304EB020010F5FE70002281
+S31508001A00427011F00F01017094F8BC13012901D13D
+S31508001A1002200AE0012184F8BC1301002068FEF7C1
+S31508001A2039FE002084F8BC03002010BD38B51C0020
+S31508001A300D00EDB215F00F051C235D4300EB050301
+S31508001A4013F5FE73DA605C6100249C6100245C7007
+S31508001A5011F00F041C700469012C00D11A6111F0F1
+S31508001A600F0F06D10269D2B219000068FFF776F89F
+S31508001A7005E00269D2B219000068FEF7A1FE00204F
+S31508001A8032BDC9B211F00F011C2251430844D0F8E7
+S31508001A901402704738B51C000D00EDB215F00F059D
+S31508001AA01C235D4300EB05033C33DA605C610024CC
+S31508001AB09C6101245C7011F00F041C700469012CF0
+S31508001AC000D11A6111F00F0F06D10269D2B21900BE
+S31508001AD00068FFF743F805E00269D2B2190000680A
+S31508001AE0FEF76EFE002032BD38B504000D006068B2
+S31508001AF02900C9B211F00F01884201D2012039E04C
+S31508001B002800C0B200060CD52900C9B211F00F0191
+S31508001B101C20414304EB010010F13C0101204870F0
+S31508001B2009E02900C9B21C20414304EB010010F565
+S31508001B30FE71002048700120887015F00F000870AB
+S31508001B4094F8BC03012801D1022013E0012084F88F
+S31508001B50BC032068FFF71EF915F00F0F06D114F520
+S31508001B6071722169C9B22068FFF75BFA002084F810
+S31508001B70BC03002032BD10B5040060680A00D2B26A
+S31508001B8012F00F02904201D2012031E00800C0B2E3
+S31508001B9000060BD50A00D2B212F00F021C204243EF
+S31508001BA004EB02003C30012242700BE00A00D2B27C
+S31508001BB012F00F021C20424304EB020010F5FE70DF
+S31508001BC0002242700022827011F00F01017094F811
+S31508001BD0BC13012901D102200AE0012184F8BC13B3
+S31508001BE001002068FFF720F9002084F8BC030020D4
+S31508001BF010BD2DE9FC4704000D00266837001C209F
+S31508001C0000FB05F0204410F13C08D8F81400D8F879
+S31508001C101810884201D201205DE0D8F81400D8F8DF
+S31508001C201890B0EB0909D8F80800484501D2D8F849
+S31508001C30089019F103095FEA990926E0D8F8140013
+S31508001C40D8F818A0B0EB0A0AD8F80800504501D20F
+S31508001C50D8F808A01AF103095FEA99092069C0B201
+S31508001C60009053469BB22A00D2B2D8F80C10300026
+S31508001C70FFF762F8D8F80C005044C8F80C00D8F8FA
+S31508001C8018001AEB000AC8F818A017EB451010F54B
+S31508001C901060806980B2484509D3D8F81800D8F88A
+S31508001CA01410884203D2D8F814000028C6D1D8F8F0
+S31508001CB01800D8F8141088420CD3012015F00F0527
+S31508001CC010FA05F517F50060406B30EA050517F5BB
+S31508001CD000677D630020BDE8F68738B505000C006F
+S31508001CE029680800096C10EB441212F530629268F4
+S31508001CF02B69012B62D113070ED55D4B9942C0F0B3
+S31508001D008D80110440F18A8010EB441010F5306084
+S31508001D104FF40041816081E0930606D510EB44102C
+S31508001D2010F530602021816078E012F0280F75D117
+S31508001D304F4B994209D3110407D510EB441010F5FF
+S31508001D4030604FF40041816068E01C2101FB04F219
+S31508001D502A44D2F8042210EB441010F530600069CA
+S31508001D604003400B121A01FB04F02844C0F8142261
+S31508001D7001FB04F02844D0F8080201FB04F22A44C7
+S31508001D80D2F80422104401FB04F22A44C2F80802DD
+S31508001D90002C0DD101FB04F105EB0100D0F810026F
+S31508001DA0002805D115F5717201212868FFF739F960
+S31508001DB02100C9B2280000F0F7F82FE02D4B994210
+S31508001DC017D1110407D510EB441010F530604FF405
+S31508001DD00041816022E0910605D510EB441010F50C
+S31508001DE03060202181602100C9B2280000F0DCF8AB
+S31508001DF014E0002C0DD11C2000FB04F02844D0F878
+S31508001E001002002805D115F5717200212868FFF720
+S31508001E1008F92100C9B2280000F0C6F8002032BD32
+S31508001E2070B5040022681000156C10EB411212F50B
+S31508001E30306292680E4EB54208D3120406D510EBEE
+S31508001E40411010F530604FF400418160200000F029
+S31508001E50A3F8B54208D32069012805D114F5717293
+S31508001E6001212068FFF7DDF8002070BD00000000A2
+S31508001E700B30544F0A31544F70470000103A07D3BD
+S31508001E8030B4B1E83810103AA0E83810F9D230BCAE
+S31508001E90530724BFB1E80810A0E8081044BF51F85A
+S31508001EA0043B40F8043BD20724BF31F8022B20F844
+S31508001EB0022B44BF0B7803707047121F17D35B00C1
+S31508001EC009D151F8043B20F8023B1B0C121F20F8DD
+S31508001ED0023BF6D20BE051F8043B00F8013B1B0A23
+S31508001EE020F8023B1B0C121F00F8013BF3D238BF47
+S31508001EF0121D521E24BF11F8013B00F8013BF8D809
+S31508001F007047000070B403685B6A0C00E4B2002CEA
+S31508001F1005D192B253EA0243006883621FE004685F
+S31508001F20A46A13EB1443002409E005682600F6B2F8
+S31508001F3005EB8605D5F8045113EB1543641C2500FB
+S31508001F40EDB20E00F6B2761EB542EED30068C9B2FF
+S31508001F5000EB810092B253EA0243C0F80031002038
+S31508001F6070BC704789B200684162002070470168FA
+S31508001F700122C0F8FC23002280F8F423886950F077
+S31508001F8000608861486D40F0805050F00300486555
+S31508001F90002070477047704780B510F57171D0F80A
+S31508001FA0000400F0FEF901BD80B50B00DBB21C226F
+S31508001FB0534300EB0302D2F80822C9B2D0F8000452
+S31508001FC000F021FA01BD80B50B00DBB21C22534399
+S31508001FD000EB0302926CC9B2D0F8000400F05EFA76
+S31508001FE001BD80B5D0F8000400F013FB01BD38B57B
+S31508001FF004000125E068002801D1002508E0E06812
+S31508002000022801D1012503E09121464800F027FB6B
+S315080020102900C9B2D4F8000400F0E5FAD4F800049F
+S3150800202000F0B1FA31BD10B50400D4F8000400F090
+S31508002030DDFA206810F56060006850F0010021683C
+S3150800204011F560610860206A002804D036480168E6
+S3150800205051F00601016000F02BFB10BD10B504001D
+S3150800206000F027FBD4F8000400F0C9FA10BD80B5CB
+S31508002070C9B2D0F8000400F0DEFA01BD80B5C9B2D5
+S31508002080D0F8000400F0D5FA01BD10B5040001200F
+S3150800209000F00DFBD4F8000400F0CFFA10BD10B51F
+S315080020A00400002000F003FBD4F8000400F0C7FA8F
+S315080020B010BD10B50178002931D11C4CC4F80004B4
+S315080020C0C0F8C4425FF0A04020600620606002208D
+S315080020D0E060002020610220A0610120E06100206C
+S315080020E02062002060620020E06200202063200059
+S315080020F0FFF75CF8002804D040F22511094800F0E3
+S31508002100AEFA80212000FFF72DFF40220021200093
+S31508002110FFF7F8FE802201212000FFF7F3FE0020DA
+S3150800212010BD0000D45B000810ED00E0C0000020E0
+S3150800213080B500210021D0F8C402FFF7F7F8C0B235
+S3150800214000F09BF8C0B202BD80B500210021D0F88E
+S31508002150C402FFF7FFF8C0B200F08FF8C0B202BDA4
+S3150800216080B500210021D0F8C402FFF709F9C0B2F2
+S3150800217000F083F8C0B202BD10B51C00002300238E
+S315080021801300DBB2220092B2C9B2D0F8C402FFF73C
+S31508002190D7FBC0B200F071F8C0B210BD80B50022FE
+S315080021A00022C9B2D0F8C402FFF70DFCC0B200F095
+S315080021B064F8C0B202BD80B500220022C9B2D0F8C8
+S315080021C0C402FFF791FCC0B200F057F8C0B202BDD6
+S315080021D080B500220022C9B2D0F8C402FFF7CBFCB2
+S315080021E0C0B200F04AF8C0B202BDD0F8C422080056
+S315080021F0C0B2000609D5C9B211F07F011C204143BF
+S3150800220002EB010090F83E0008E0C9B211F07F0128
+S315080022101C20414302EB010090F8FE01704780B58F
+S3150800222000220022C9B2D0F8C402FFF773FBC0B27D
+S3150800223000F023F8C0B202BD10B500240024C9B2CC
+S31508002240D0F8C402FFF726FCC0B200F016F8C0B2F8
+S3150800225010BD10B500240024C9B2D0F8C402FFF797
+S31508002260E5FBC0B200F009F8C0B210BD80B5C9B22E
+S31508002270D0F8C402FFF705FC02BD0021C0B2002851
+S3150800228005D0022807D004D3032806D007E000208B
+S3150800229006E0032004E0012002E0032000E003201A
+S315080022A0C0B270470148006870470000040000206B
+S315080022B080B5002801D1032018E0D0F8B832002BE9
+S315080022C002D00023C0F8B832D0F8CC32002B02D0A6
+S315080022D00023C0F8CC32002901D0C0F8B41201217D
+S315080022E080F89C120270FFF7E4FEC0B202BD10B57A
+S315080022F00400012084F89C02D4F8B802002806D00D
+S315080023006168C9B22000D4F8B82252689047D4F858
+S31508002310CC02002802D00020C4F8CC022000FFF727
+S315080023201FFF0100C9B2002901D0C0B203E0200096
+S31508002330FFF7FEFEC0B210BD1CB504000020ADF8C4
+S315080023400000002901D1032009E0C4F8B812684644
+S31508002350D4F8B812C96A8847C4F8CC02002016BD5A
+S3150800236080B5FFF7F1FE02BD0020704780B5032255
+S31508002370D0F8B832002B05D0C9B2D0F8B822126806
+S31508002380904702001000C0B202BD80B5D0F8B8224E
+S31508002390002A04D0C9B2D0F8B82252689047002063
+S315080023A002BD10B5040004F2AA2000F035FD012094
+S315080023B0C4F89402B4F8B002C4F8980294F8AA02D1
+S315080023C010F01F00002803D002280DD006D311E014
+S315080023D004F2AA21200000F075F912E004F2AA21FD
+S315080023E0200000F0AEF90CE004F2AA21200000F06B
+S315080023F0E0F906E094F8AA1211F080012000FFF730
+S31508002400DAFEC0B210BD10B5040010000A00D2B240
+S31508002410002A2CD114F5AA72D4F89412032912D1E1
+S31508002420D1689368994210D29368D1685B1A936011
+S315080024309168D368994201D2926800E0D268010097
+S31508002440200000F052FD002010BDD4F8B802006943
+S31508002450002808D094F89C02032804D12000D4F858
+S31508002460B81209698847200000F047FDEBE7D4F861
+S31508002470B802806900280FD094F89C0203280BD173
+S31508002480C9B22000D4F8B822926990470100C9B2AF
+S315080024900029D8D0C0B2D7E70320D5E710B5040085
+S315080024A010000A00D2B2002A56D114F11402D4F848
+S315080024B09412022944D1D168936899420FD293683D
+S315080024C0D1685B1A936092680100200000F005FD50
+S315080024D00023002200212000FFF7BBFE30E0D06871
+S315080024E09168884217D15068D168884213D35068DA
+S315080024F0D4F8981288420ED200220021200000F05B
+S31508002500ECFC0020C4F898020023002200212000D9
+S31508002510FFF79FFE14E0D4F8B802C068002808D078
+S3150800252094F89C02032804D12000D4F8B812C9688C
+S31508002530884780212000FFF73EFE200000F0E8FCD7
+S3150800254094F8A002012805D12000FFF70DFF00200E
+S3150800255084F8A002002010BDD4F8B802406900280B
+S315080025600FD094F89C0203280BD1C9B22000D4F8E6
+S31508002570B822526990470100C9B20029EAD0C0B210
+S31508002580E9E70320E7E710B50400012084F89C0278
+S315080025900020C4F89402002060600020C4F8A40259
+S315080025A0D4F8BC02002806D06168C9B22000D4F865
+S315080025B0B822526890474023002200212000FFF7E6
+S315080025C0DBFD0120A4F864014020C4F86001402323
+S315080025D0002280212000FFF7CFFD0120A0844020A3
+S315080025E02062002010BD01740020704790F89C12EC
+S315080025F080F89D12042180F89C120020704790F8FC
+S315080026009C12042903D190F89D1280F89C12002090
+S31508002610704780B590F89C12032908D1D0F8B812F3
+S31508002620C969002903D0D0F8B812C96988470020BB
+S3150800263002BD00207047002070470020704780B513
+S31508002640012180F89C12D0F8B812002905D04168FB
+S31508002650C9B2D0F8B82252689047002002BD80B5AA
+S3150800266000F065FCFCE7000000690840884201D1DB
+S31508002670012000E00020C0B2704780B54FF4005139
+S315080026800548FFF7F1FF002801D0002002E000F01E
+S315080026907AFC012002BD00000008024080B56420D3
+S315080026A000F04FFC01BD80B500F04EFC01BD70473F
+S315080026B07047704701000878491C097850EA0120DC
+S315080026C080B2704710B500240A7812F06002002A1A
+S315080026D009D0202A01D0402A2ED1D0F8B8229268F3
+S315080026E0904704002AE04A78002A19D0012A1DD00A
+S315080026F0032A18D0052A09D0062A04D0082A0CD09D
+S31508002700092A06D015E000F07EF914E000F07EFAFA
+S3150800271011E000F0AAFA04000DE000F023FB0AE03D
+S3150800272000F03FFB07E000F05BFB04E000F062FB13
+S3150800273001E000F089FB01E000F086FB2000C0B252
+S3150800274010BD70B505000E000024307810F060004A
+S31508002750002803D0202801D0402823D195F89C02D0
+S31508002760401E022819D83079022811D231002800D3
+S31508002770D5F8B822926890470400F08800280BD153
+S315080027802000C0B2002807D1280000F0B6FB03E0FD
+S315080027903100280000F058FB03E03100280000F063
+S315080027A053FB03E03100280000F04EFB2000C0B2C6
+S315080027B070BD70B505000E000024B188307810F0A1
+S315080027C0600000280CD0202802D0402840F0148150
+S315080027D031002800D5F8B8229268904704000FE126
+S315080027E07078002872D001283AD0032840F0FF807C
+S315080027F095F89C02022802D0032816D02BE0080080
+S31508002800C0B200280CD00800C0B2802808D0C9B2CF
+S315080028102800FFF7D0FC80212800FFF7CCFC03E056
+S315080028203100280000F010FB19E0708800280ED14E
+S315080028300800C0B200280AD00800C0B2802806D016
+S31508002840F088002803D1C9B22800FFF7B4FC280095
+S3150800285000F053FB03E03100280000F0F5FACAE067
+S3150800286095F89C02022802D0032816D029E0080011
+S31508002870C0B200280CD00800C0B2802808D0C9B25F
+S315080028802800FFF798FC80212800FFF794FC03E056
+S315080028903100280000F0D8FA17E0708800280FD118
+S315080028A011F07F0F03D0C9B22800FFF791FC28006A
+S315080028B000F023FB31002800D5F8B822926890472B
+S315080028C003E03100280000F0BFFA94E095F89C0276
+S315080028D0022802D003282BD084E00800C0B20028C2
+S315080028E008D00800C0B2802804D03100280000F0C3
+S315080028F0ABFA7BE00800C0B2000609D5C9B211F0F0
+S315080029007F011420414305EB010010F1140108E092
+S31508002910C9B211F07F011420414305EB010010F5FF
+S31508002920AA71002008600222280000F0C9FA5DE0BA
+S315080029300800C0B200060FD50A00D2B212F00F0284
+S315080029401420424305EB0200808C002815D1310083
+S31508002950280000F079FA49E00A00D2B212F00F0214
+S315080029601420424305EB0200B0F86401002804D1A4
+S315080029703100280000F068FA38E00800C0B2000606
+S315080029800AD50A00D2B212F07F021420424305EBA0
+S31508002990020010F1140609E00A00D2B212F07F0212
+S315080029A01420424305EB020010F5AA760800C0B2CF
+S315080029B0002803D00800C0B2802802D10020306069
+S315080029C00AE0C9B22800FFF710FC002802D001204F
+S315080029D0306001E00020306002223100280000F05B
+S315080029E06FFA03E03100280000F02EFA03E0310008
+S315080029F0280000F029FA03E03100280000F024FA44
+S31508002A002000C0B270BDF8B505000E000020ADF874
+S31508002A10000000270024708880B2000AC0B201288E
+S31508002A200AD0022810D0032823D0062800F0A58053
+S31508002A30072800F0B280C2E06946287CD5F8B4229F
+S31508002A40126890470700BFE0287C002808D168462E
+S31508002A50D5F8B812896A884707000220787007E017
+S31508002A606846D5F8B812C96A884707000220787000
+S31508002A70AAE0B078002808D002282CD018D3042859
+S31508002A804FD03BD305285FD071E0D5F8B402406833
+S31508002A90002807D06946287CD5F8B42252689047A2
+S31508002AA0070004E03100280000F0CEF9641C63E05A
+S31508002AB0D5F8B4028068002807D06946287CD5F87E
+S31508002AC0B42292689047070004E03100280000F01D
+S31508002AD0BBF9641C50E0D5F8B402C068002807D0DA
+S31508002AE06946287CD5F8B422D2689047070004E0E6
+S31508002AF03100280000F0A8F9641C3DE0D5F8B402BE
+S31508002B000069002807D06946287CD5F8B4221269DE
+S31508002B109047070004E03100280000F095F9641C8E
+S31508002B202AE0D5F8B4024069002807D06946287C0F
+S31508002B30D5F8B42252699047070004E0310028000E
+S31508002B4000F082F9641C17E0D5F8B4028069002801
+S31508002B5007D06946287CD5F8B422926990470700C1
+S31508002B6004E03100280000F06FF9641C04E031002D
+S31508002B70280000F069F9641C26E0287C002806D1A4
+S31508002B806846D5F8B812496B8847070004E0310053
+S31508002B90280000F059F9641C16E0287C002808D1A2
+S31508002BA06846D5F8B812096B884707000720787079
+S31508002BB004E03100280000F047F9641C04E0310005
+S31508002BC0280000F041F9641CE4B2002C1DD1F088FD
+S31508002BD0002817D0BDF8000000280ED0BDF8000068
+S31508002BE0F188884202D3F088ADF80000BDF80020CD
+S31508002BF03900280000F064F907E03100280000F0E9
+S31508002C0023F902E0280000F078F9F1BD38B505008F
+S31508002C108888002825D1C888002822D14888802895
+S31508002C201FD28C7814F07F0495F89C02032803D1F0
+S31508002C30280000F009F917E085F89E422100C9B27C
+S31508002C402800FFF7ECFA280000F057F9E4B2002C48
+S31508002C5003D0022085F89C0206E0012085F89C0234
+S31508002C6002E0280000F0F0F831BDF8B505000E00C6
+S31508002C7000243B4F708838703878022805D3310015
+S31508002C80280000F0E1F8032068E095F89C02022885
+S31508002C9002D003281ED056E03878002816D0387897
+S31508002CA0686039782800FFF761FB04002000C0B28D
+S31508002CB0002804D03100280000F0C6F809E02800F2
+S31508002CC000F01BF9032085F89C0202E0280000F0BA
+S31508002CD014F941E0387800280CD1022085F89C02C6
+S31508002CE03878686039782800FFF74FFB280000F02D
+S31508002CF004F927E038786968884220D06968C9B23B
+S31508002D002800FFF742FB3878686039782800FFF713
+S31508002D102DFB04002000C0B200280CD0310028008A
+S31508002D2000F092F86968C9B22800FFF72EFB022066
+S31508002D3085F89C0206E0280000F0DFF802E028008B
+S31508002D4000F0DBF808E03100280000F07DF839785B
+S31508002D502800FFF71AFB03242000C0B2F2BD0000CA
+S31508002D604C10002080B5CA88012A02D000F06CF801
+S31508002D7016E090F89C22521E012A02D9921E08D00B
+S31508002D800CE000218160012210F1080100F098F89A
+S31508002D9006E00122011D00F093F801E000F054F866
+S31508002DA001BD80B590F89C22521E022A15D8CA8801
+S31508002DB0022A02D000F048F811E00121C160D0F8DB
+S31508002DC0A412002903D0C16851F00201C160022291
+S31508002DD010F10C0100F074F801E000F035F801BDBF
+S31508002DE080B54988012904D10121C0F8A41200F050
+S31508002DF084F801BD80B590F89C22521E022A08D894
+S31508002E004988012904D10021C0F8A41200F075F8F8
+S31508002E1001E000F019F801BD38B504000878207003
+S31508002E20481C01786170451C2800FFF743FC608048
+S31508002E30681C451C2800FFF73DFCA080681C401C48
+S31508002E40FFF738FCE08031BD10B504008021200072
+S31508002E50FFF7B1F900212000FFF7ADF910BDF8B56D
+S31508002E6004000D0017000026002C1ED0200000F0DC
+S31508002E701DF84000801C388038783100C9B2685483
+S31508002E80761C03203100C9B26854761C0AE0207803
+S31508002E903100C9B26854641C761C00203100C9B2DE
+S31508002EA06854761C20780028F1D1F1BD0200002074
+S31508002EB001E0401C521C11780029FAD1C0B27047B3
+S31508002EC080B513000222C0F894228361C3610A0008
+S31508002ED00021FFF7B1F9002002BD80B513000A00F2
+S31508002EE00021FFF7A9F9002002BD80B513000A00EA
+S31508002EF00021FFF7AEF9002002BD80B50421C0F815
+S31508002F009412002300220021FFF796F9002002BD43
+S31508002F1080B50521C0F89412002300220021FFF78E
+S31508002F2098F9002002BD80B5FFF7B8FB01BD80B552
+S31508002F30FFF7B9FB01BD0000816170470904816193
+S31508002F40704714490880704710B5FEF7FCF8124C14
+S31508002F502168884216D311490878002806D101202D
+S31508002F60087080210E48FFF7E7FF05E0002008708B
+S31508002F7080210B48FFF7E2FFFEF7E5F805490988C7
+S31508002F804018206010BD80B580210548FFF7D6FFA0
+S31508002F9001BD00004410002030100020471000201A
+S31508002FA00004024038B50400002C01D10120AEE02F
+S31508002FB094F82000002802D1200000F0B0FA20681A
+S31508002FC0006830F0020021680860FEF7CDF80500B9
+S31508002FD02068406880070DD5FEF7C6F8401B0B2809
+S31508002FE0F6D3606A50F400306062052084F8200049
+S31508002FF001208CE02068006850F001002168086014
+S31508003000FEF7B2F8050020684068C0070DD4FEF741
+S31508003010ABF8401B0B28F6D3606A50F400306062A8
+S31508003020052084F82000012071E0207E012806D1C1
+S315080030302068006850F080002168086005E0206874
+S31508003040006830F0800021680860607E012806D19B
+S315080030502068006850F040002168086005E0206894
+S31508003060006830F0400021680860A07E012806D17B
+S315080030702068006850F020002168086005E0206894
+S31508003080006830F0200021680860E07E012806D13B
+S315080030902068006830F010002168086005E02068A4
+S315080030A0006850F0100021680860207F012806D1CA
+S315080030B02068006850F008002168086005E020686C
+S315080030C0006830F0080021680860607F012806D192
+S315080030D02068006850F004002168086005E0206850
+S315080030E0006830F0040021680860A168E0680143C0
+S315080030F020690143606901436068401E01432068F6
+S31508003100C16100206062012084F82000002032BDE1
+S3150800311030B4026890F820201300DBB2012B03D0EC
+S31508003120D2B2022A40F07F80594AD2F8000250F003
+S315080031300100C2F80002D2F8000230F47C50C2F84E
+S315080031400002D2F800024B6A50EA0320C2F80002D5
+S3150800315001200B7D13F01F0310FA03F3D2F81C02AB
+S315080031609843C2F81C02C869002816D1D2F80C0286
+S315080031709843C2F80C02486902EBC000CC684D6857
+S31508003180C5EA0444C0F84042486902EBC0008C68AE
+S315080031900D68C5EA0444C0F84442C869012816D136
+S315080031A0D2F80C021843C2F80C02486902EBC000B8
+S315080031B00C684D68C5EA0444C0F84042486902EB09
+S315080031C0C0008C68CD68C5EA0444C0F844428869E2
+S315080031D0002805D1D2F804029843C2F8040204E094
+S315080031E0D2F804021843C2F804020869002805D177
+S315080031F0D2F814029843C2F8140204E0D2F8140272
+S315080032001843C2F81402086A012804D1D2F81C022D
+S315080032100343C2F81C32D2F8000240084000C2F844
+S315080032200002002004E0416A51F480214162012035
+S3150800323030BC704738B5040094F82000012821D125
+S31508003240022084F8200020680068400840002168B1
+S315080032500860FDF789FF050020684068C0070DD59E
+S31508003260FDF782FF401B0B28F6D3606A50F4003046
+S315080032706062052084F82000012008E000206062D2
+S31508003280002004E0606A50F400206062012032BD2C
+S315080032900064004070B490F820500468A6688C68F2
+S315080032A0002CFFD02C00E4B2012C02D0EDB2022D86
+S315080032B06ED116F0E05F65D0C6F30164032C05D322
+S315080032C0416A51F400014162012066E00125A540EA
+S315080032D01D608B68002B09D10B68CD6855EA4355EC
+S315080032E0036826013344C3F880510AE04B688D68A9
+S315080032F055EAC305CB681D43036826013344C3F862
+S3150800330080510B69056826013544C5F88431097D65
+S3150800331001290BD1016823011944D1F8841151F40C
+S315080033208071036825012B44C3F88411D1799379F8
+S315080033301B0453EA0163517953EA012311790B43BC
+S31508003340016825012944C1F88C31D17893781B048A
+S3150800335053EA0163517853EA012311780B43016854
+S3150800336022011144C1F88831016822011144D1F8BB
+S31508003370801151F00101006822011044C0F8801143
+S3150800338000200AE0416A51F400114162012004E07C
+S31508003390416A51F480214162012070BC704710B423
+S315080033A00200002092F820301C00E4B2012C02D062
+S315080033B0DBB2022B07D11268926812EA8162B2EB7D
+S315080033C0816F00D0012010BC704730B490F82040BF
+S315080033D02500EDB2012D03D0E4B2022C40F098800E
+S315080033E000290AD10468E46814F0030F10D1416A71
+S315080033F051F40011416201208FE00468246914F039
+S31508003400030F05D1416A51F400114162012084E09D
+S3150800341004680D012C44D4F8B04114F004049460F7
+S315080034209468002C07D104680D012C44D4F8B041E7
+S31508003430640D146006E004680D012C44D4F8B0410C
+S31508003440E408546004680D012C44D4F8B04114F023
+S315080034500204D46004680D012C44D4F8B44114F075
+S315080034600F04146104680D012C44D4F8B441C4F364
+S315080034700724946104680D012C44D4F8B441240C43
+S31508003480546102680C012244D2F8B8211A70026805
+S315080034900C012244D2F8B821120A5A7002680C01AB
+S315080034A02244D2F8B821120C9A7002680C01224400
+S315080034B0D2F8B821120EDA7002680C012244D2F84A
+S315080034C0BC211A7102680C012244D2F8BC21120AE6
+S315080034D05A7102680C012244D2F8BC21120C9A7166
+S315080034E002680C012244D2F8BC21120EDA710029B6
+S315080034F006D10168C96851F020010068C16005E07D
+S315080035000168096951F0200100680161002004E0A2
+S31508003510416A51F480214162012030BC70477047EE
+S31508003520DFF8DC04016851F0010101607047DFF83B
+S31508003530D0040068400810F001007047DFF8C01496
+S315080035400A6832F0F80252EAC0020A607047DFF8E9
+S31508003550B4040068400810F001007047DFF8AC04B6
+S31508003560006810F00C007047DFF8A004006810F03F
+S31508003570F0007047DFF89404006810F4E0507047D4
+S31508003580DFF88804006810F4604070470100DFF82F
+S3150800359080040068084050EA014070470100DFF8DF
+S315080035A070040068084050EA01407047DFF850048C
+S315080035B00068400E10F001007047DFF858040068F4
+S315080035C010F480007047DFF84C040068C0F38810D8
+S315080035D07047DFF84004006810F440307047DFF8A1
+S315080035E03404006810F03F007047DFF814040068E0
+S315080035F0C00E10F001007047DFF804040068400FA1
+S3150800360010F00100704780B5FFF78AFFFFF78FFFBC
+S315080036100128FBD10020DFF8F4130860DFF8E01377
+S3150800362008680090009ADFF8F803024000920098B4
+S3150800363008601020FFF782FFFFF7B8FF0028FBD1CC
+S31508003640FFF7D3FF0028FBD1FFF7D6FF0028FBD1F1
+S31508003650DFF8D003DFF8BC130860DFF8CC03DFF827
+S31508003660B8130860DFF8B4130860DFF8C003016810
+S3150800367031F4FE410160016851F47F010160DFF811
+S3150800368088030168490849000160016851F08071A2
+S315080036900160002002BD10B5040000F05CF920604E
+S315080036A0206800F06CF96060606800F073F9A0604B
+S315080036B0606800F079F9E06010BD10B500240328B1
+S315080036C024D1FFF763FFDFF86813401A04D0401EC1
+S315080036D006D0401E0BD011E000F03DF904008DE045
+S315080036E0FFF725FF002801D0DFF8484386E0FFF7FB
+S315080036F02EFF002801D04FF400447FE000F02BF99C
+S3150800370000F03DF900F050F9040077E00C2824D1C8
+S31508003710FFF73CFFDFF82013401A04D0001F06D03D
+S31508003720001F0BD011E000F016F9040066E0FFF761
+S31508003730FEFE002801D0DFF8FC425FE0FFF707FF36
+S31508003740002801D04FF4004458E000F004F900F0D6
+S3150800375016F900F01FF9040050E0B0F5406F27D1C4
+S31508003760FFF714FFDFF8D412884207D0DFF8D0122B
+S31508003770884207D0B0F10C2F0BD011E000F0EBF81F
+S3150800378004003BE0FFF7D3FE002801D0DFF8A4428F
+S3150800379034E0FFF7DCFE002801D04FF400442DE0AA
+S315080037A000F0D9F800F0EBF800F0FEF8040025E088
+S315080037B0302823D1FFF7EAFEDFF88812401A04D032
+S315080037C0103806D010380BD011E000F0C4F8040009
+S315080037D014E0FFF7ACFE002801D0DFF858420DE0F0
+S315080037E0FFF7B5FE002801D04FF4004406E000F0CC
+S315080037F0B2F800F0C4F800F0CDF80400200010BDBF
+S3150800380010B50024C02824D1FFF7C8FEDFF8381207
+S31508003810401A04D0403806D040380BD011E000F0EA
+S315080038209AF8040095E0FFF782FE002801D0DFF839
+S3150800383004428EE0FFF78BFE002801D04FF40044C7
+S3150800384087E000F088F800F09AF800F0A3F8040082
+S315080038507FE0B0F5407F27D1FFF7A0FEDFF8EC1137
+S31508003860884207D0DFF8E811884207D0B0F1032F65
+S315080038700BD011E000F06FF804006AE0FFF757FE7E
+S31508003880002801D0DFF8AC4163E0FFF760FE0028AE
+S3150800389001D04FF400445CE000F05DF800F06FF8EA
+S315080038A000F078F8040054E0B0F5405F27D1FFF740
+S315080038B075FEDFF8A011884207D0DFF89C11884210
+S315080038C007D0B0F1302F0BD011E000F044F8040017
+S315080038D03FE0FFF72CFE002801D0DFF8584138E01A
+S315080038E0FFF735FE002801D04FF4004431E000F020
+S315080038F032F800F044F800F04DF8040029E0B0F57D
+S31508003900404F26D1FFF74AFEDFF85011884207D00C
+S31508003910DFF84C11884207D0B0F1C02F0BD011E068
+S3150800392000F019F8040014E0FFF701FE002801D0A2
+S31508003930DFF800410DE0FFF70AFE002801D04FF43A
+S31508003940004406E000F007F800F019F800F022F845
+S315080039500400200010BD80B50020FFF7FFFD0028F9
+S3150800396004D0042804D0082804D006E0314805E02D
+S315080039703C4803E000F022F800E02E4802BD10B5EE
+S315080039800400FFF7F1FD3849C0F30310085CC44092
+S31508003990200010BD10B50400FFF7ECFD3349800A7E
+S315080039A0085CC440200010BD10B50400FFF7E8FD10
+S315080039B02E49400B085CC440200010BD70B500209D
+S315080039C00020FFF7FAFD002803D0B0F5800F02D0DB
+S315080039D003E0184C02E0234C00E0164CFFF7FFFD0D
+S315080039E00500FFF7F0FD0600B4FBF5F006FB00F650
+S315080039F0FFF7EFFD000C401C4000B6FBF0F070BD71
+S31508003A0000380240703802407438024008380240D4
+S31508003A109038024004380240843802408838024010
+S31508003A20FFFFF2EA10300024003000240C38024070
+S31508003A30010003000024F40004000C000004000C3C
+S31508003A400008000C100030004000C0000001000310
+S31508003A50000200030010003000200030004000C0C3
+S31508003A60008000C000127A00E45E0008205F0008AB
+S31508003A7038B500F02AF9DFF804544021681C00F034
+S31508003A803BF92870DFF8F8434021601C00F034F950
+S31508003A9020702878FF2802D02078FF2804D18421B6
+S31508003AA0DFF8E003FEF7DBFDDFF8DC430022DFF892
+S31508003AB0DC132000FEF7FCFBDFF8D4132000FEF72A
+S31508003AC03BFC0120FEF7F3FD2000FEF749FCD4F885
+S31508003AD0C402FDF7F9FE00F00EFAB0F5FA6F03D24C
+S31508003AE04FF4FA6000F004FA31BD10B5DFF89843D8
+S31508003AF0D4F8C402FDF7FBFE2000FEF7F8FB002011
+S31508003B00FEF7D5FD10BD70B505000C002000C0B24B
+S31508003B10402804DBB921DFF86C03FEF7A0FD20007E
+S31508003B20C0B200F069F8C0B2012804D0BD21DFF8A0
+S31508003B305403FEF794FD00260EE0FFF7F8F930006F
+S31508003B4080B2285C00F058F8C0B2012803D0C6211C
+S31508003B50CC48FEF784FD761C30002100C9B280B23D
+S31508003B6089B28842E9D370BD2DE9F04105000E00FF
+S31508003B70C548D0F8C402FDF723FCC64C20780028B7
+S31508003B8013D1C54D280000F02FF801280AD128784E
+S31508003B90002807D02878402804DA01202070002061
+S31508003BA0BE4908700020BDE8F081BC4FDFF8E88206
+S31508003BB038784044401C00F017F80128F2D13878CC
+S31508003BC0401C3870387898F800108842EAD13A785C
+S31508003BD092B218F10101280000F0C6F90020207001
+S31508003BE0387830700120DEE780B50100A4480078F7
+S31508003BF000F0E7F8C0B202BD80B50100C9B29F481F
+S31508003C00007800F090F8C0B202BD7CB59B4C2078D5
+S31508003C1000F021F905002800C0B2002826D02800A7
+S31508003C20C0B2412800DB4025002612E0694620780C
+S31508003C3000F0C7F8C0B2012804D04FF4A371914828
+S31508003C40FEF70DFD9DF8000095493200D2B2885462
+S31508003C50761C30002900C0B2C9B28842E6D3EDB25C
+S31508003C602B008F4A81218848FEF7E6FA73BDF8B51E
+S31508003C700600002000F003FA0400834D3100C9B2A3
+S31508003C802800FEF7F3FA070000260FE0300080B29E
+S31508003C90215C7B48007800F046F8C0B2012804D0C1
+S31508003CA04FF4B4717748FEF7DAFC761C3000390019
+S31508003CB080B289B28842E9D300F0E1F902004023D4
+S31508003CC001212800FEF7C5FAF1BD10B4754B19009D
+S31508003CD013F11802002004E088744A61183118327A
+S31508003CE0401C0400E4B2002CF6D088740020486119
+S31508003CF06D48036010BC704710B46B4B1A68002AF5
+S31508003D0001D1FF200DE01A6854691C601174906097
+S31508003D10D060002353741060C9B20844401E506036
+S31508003D20907C10BC704738B505000C002800C0B25E
+S31508003D30022804DB4FF4E0715248FEF790FC182085
+S31508003D4058492A00D2B242430A44527C2B00DBB2BD
+S31508003D5043430B441B7C9A4201D1002030E02A00E1
+S31508003D60D2B242430A44D26814702A00D2B24243FD
+S31508003D700A442B00DBB243430B445B7C5B1C537445
+S31508003D802A00D2B242430A442B00DBB243430B4417
+S31508003D90DB685B1CD3602A00D2B242430A445268ED
+S31508003DA02B00DBB243430B44DB689A4207D22A0056
+S31508003DB0D2B242430A44EDB245434859D060012085
+S31508003DC032BD38B504000D002000C0B2022804DB5D
+S31508003DD04FF4F1712B48FEF742FC1821314A2000B6
+S31508003DE0C0B248431044407C002801D1002031E08D
+S31508003DF02000C0B24843104480680078287020002C
+S31508003E00C0B2484310442300DBB24B4313445B7CE7
+S31508003E105B1E43742000C0B2484310442300DBB243
+S31508003E204B4313449B685B1C83602000C0B2484325
+S31508003E30104440682300DBB24B4313449B68984206
+S31508003E4007D22000C0B248431044E4B24C4311598B
+S31508003E508160012032BD10B504002000C0B20228DE
+S31508003E6004DB40F202210748FEF7F9FB0D49E4B2EC
+S31508003E701820444301EB0400407C10BD2C0E0020A2
+S31508003E80700E0020505D0008C40400206C0000205D
+S31508003E90140000204B100020F40E00204A100020C9
+S31508003EA0340F0020B40F00203C10002080B50120FC
+S31508003EB01749087000F022F800F001F801BD10B5A6
+S31508003EC000F078F9012812D0114C207801280ED17B
+S31508003ED0FDF739F90F490A680F4909688A1812F572
+S31508003EE0FA72904203D30020207000F01BF810BD30
+S31508003EF008490860704707480068704780B5044855
+S31508003F000078012803D1FDF71EF90349086001BDB1
+S31508003F10461000202C1000202810002080B500F044
+S31508003F2053F901BD10B500F05FF9002816D0FEF769
+S31508003F30A4FB002812D000F0EBF8FDF7F7F800F024
+S31508003F4070F900F055F9064908400649086000F07E
+S31508003F504FF9001D046800F039F9A04710BD0000AC
+S31508003F6080FFFF1F08ED00E070B504000D00160085
+S31508003F7005E0287820706D1C641CFEF7D8FF300019
+S31508003F80461E80B20028F4D170BD000038B5040082
+S31508003F9000254023022281212000FEF7EDF8402368
+S31508003FA0022201212000FEF7E7F84023354A0121C5
+S31508003FB02000FEF74EF92800C0B232BD38B504001D
+S31508003FC0002581212000FEF7E9F801212000FEF7EF
+S31508003FD0E5F82800C0B232BD38B50B0017222A4CC6
+S31508003FE014F109011D7815F0600F29D15D78062DA9
+S31508003FF004D00A2D14D00B2D17D021E05D88ADB260
+S315080040002D0AADB2212D07D114F11201DA88182A2A
+S3150800401001DB172200E0DA8892B2FEF751FF0FE0C3
+S3150800402001221A49FEF74CFF0AE05988C9B200294D
+S3150800403003D198781549086002E01900FEF704FFD5
+S31508004040002032BD80B5FFF7E0FD002002BD80B537
+S315080040500800C0B2FFF70BFE002002BD80B590F83D
+S315080040609C02032801D1FFF7D0FD002002BD2021C4
+S315080040700180054870470A210180054870470148B4
+S3150800408070470000740F00204C00002040100020EC
+S315080040900800002010B500F0E9F800F035FB434CA5
+S315080040A00120207000F015FC00202070FFF7E0FCCE
+S315080040B00220207010BD1CB53D4C6946200000F05A
+S315080040C0BBFB012807D10120384908709DF800106C
+S315080040D0200000F0EBF86946200000F036FC0128C5
+S315080040E007D10020314908709DF80010200000F023
+S315080040F0DDF869462000FFF737FD012807D10220C1
+S315080041002A4908709DF80010200000F0CFF813BD6A
+S3150800411080B5FFF7EAFC01BD70B504000D00234E1B
+S315080041203078012804D12900C9B2200000F055FBD7
+S315080041303078002804D12900C9B2200000F0E4FB39
+S315080041403078022804D12900C9B22000FFF7DBFC29
+S3150800415000F0A6F870BD15480078002805D002289A
+S3150800416007D004D3032806D007E0402006E008203D
+S3150800417004E03F2002E0002000E0402080B27047C3
+S315080041800A480078002805D0022807D004D3032857
+S3150800419006D007E0402006E0082004E03F2002E0C1
+S315080041A0002000E0402080B270470000BC000020DC
+S315080041B0B40E002010B5002400F069F8002800D0DD
+S315080041C001242000C0B210BD72B6704762B67047AF
+S315080041D080B500F037FC01BD80B500F03CFC02BD9F
+S315080041E080B500F06DFC02BD80B500F0C7FC02BDCD
+S315080041F080B500F004FD02BD80B500F08AFC0028F9
+S3150800420001D1002001E000F0E1FC02BD80B50320E9
+S3150800421000F065FE002000F089FE00F0BBFF0020DC
+S3150800422002BD80B50C485FF0FF31016000220260D4
+S315080042300A48016000220260094801600022026003
+S3150800424008480160002202600748016000210160F9
+S3150800425001F012F8002002BD20380240243802403E
+S31508004260103802401438024018380240DFF8C803F4
+S315080042700021017000218164002180F8431000218B
+S31508004280A0F8441000218170002141707047DFF8C2
+S31508004290A8030078002801D1002000E0012070471B
+S315080042A00020DFF8941381F84300704710B50178B1
+S315080042B0FF2917D100F08CF8DFF87C4394F8430007
+S315080042C0012802D1102000F07BF8B4F94400012837
+S315080042D007DB012084F84300B4F94410E01C00F021
+S315080042E053F810BDDFF85013097801294BD101782E
+S315080042F0C92932D0CC293FD0CF293AD0D0292FD0BE
+S31508004300D12933D0D2292ED0F32917D0F4290FD0AA
+S31508004310F5290AD0F6290ED0FA2912D0FC2913D08D
+S31508004320FD2914D0FE2915D029E000F0B5F8C3E719
+S3150800433000F0D1F8C0E700F0A6F8BDE700F0ECF809
+S31508004340BAE700F08EF8B7E700F086F8B4E700F0B1
+S3150800435072F8B1E700F063F8AEE700F004F9ABE7EE
+S3150800436000F020F9A8E700F0E9F8A5E700F048F919
+S31508004370A2E700F057F99FE700F062F99CE72020D2
+S3150800438000F01EF898E7ACE780B589B2FFF7C4FEDF
+S3150800439001BDF8B504000D001600002704E02078DA
+S315080043A0C719641CFEF7C3FD2800451E0028F6D170
+S315080043B0FFB237600120F2BD00209F494870704760
+S315080043C09D49FE22CA7008710220A1F84400704770
+S315080043D010B5FFF7F1FF984C01202070FF20E07020
+S315080043E000202071207950F01000207100206071A3
+S315080043F060796071FFF7AFFEA071FFF7C1FEE0714B
+S31508004400FFF7BEFE80B2000A20720120607201200A
+S31508004410A0720820A4F84400FFF7DAFE10BD10B514
+S31508004420854C00202070FFF7C7FFFF20E0700120B1
+S31508004430A4F8440010BD8048FF21C1700021017115
+S3150800444041784171002181710021C17100210172F9
+S315080044500621A0F84410704780B50020FFF7B0FF8A
+S3150800446001BD7548FF21C17074498164002101713D
+S3150800447000214171002181710721C0F80710082128
+S31508004480A0F8441070476C49FF22CA7040688864D7
+S315080044900120A1F84400704738B50400FFF75BFE19
+S315080044A080B2401E6178884203DA2220FFF788FF2F
+S315080044B010E06278604D281D92B2A96CFFF754FD92
+S315080044C0FF20E870A86C61784018A8646078401CE2
+S315080044D0A5F8440031BD38B50400FFF73CFE80B2AC
+S315080044E0401E6178884203DA2220FFF769FF12E04E
+S315080044F0514D6068A8646278281D92B2A96CFFF7CE
+S3150800450033FDFF20E870A86C61784018A8646078CD
+S31508004510401CA5F8440031BD10B5474CFF21E17099
+S31508004520E21D4168A06CFFF734FF2071002060711E
+S315080045300020A0710820A4F8440010BD10B53E4C18
+S31508004540FF20E0700020207100206071FFF703FE55
+S31508004550A0710020E0710020207200206072072000
+S31508004560A4F8440010BD38B50400FFF7F4FD0100B7
+S31508004570314D621C89B2491EA86CFFF72DFE002832
+S3150800458003D13120FFF71CFF0BE0FF20E870FFF78F
+S31508004590E2FDA96C80B2401E4018A8640120A5F867
+S315080045A0440031BD38B50400FFF7D5FD80B2801E42
+S315080045B06178884203DA2220FFF702FF1FE01E4DCA
+S315080045C0FF20E8700120A5F844006078002807D18C
+S315080045D0FFF712FE002802D13120FFF7F1FE0EE0A8
+S315080045E0A21C6178A86CFFF7F7FD002803D13120DB
+S315080045F0FFF7E6FE03E0A86C61784018A86431BDB1
+S3150800460010B50D4C4168A06CFFF7EAFD002803D1F0
+S315080046103120FFF7D5FE04E0FF20E0700120A4F862
+S31508004620440010BD80B5FFF77DFC0348FF21C1702B
+S315080046300121A0F8441001BD9C0D0020305F000840
+S3150800464080B53120FFF7BCFE01BD0000F8B584B087
+S3150800465004000D0016001F006846FFF71CF80298B4
+S315080046604FF47A71B0FBF1F1002200E0521C100001
+S31508004670C0B2122845D2864B200080B294465FFA13
+S315080046808CFC13F81CC096465FFA8EFE03EB4E0EA2
+S315080046909EF801E01EEB0C0C1CF1010C0CFB00F063
+S315080046A0B1FBF0FC00FB1C100028DFD1200080B213
+S315080046B094465FFA8CFC13F81CC096465FFA8EFE89
+S315080046C003EB4E0E9EF801E01EEB0C0C1CF1010CE0
+S315080046D00CFB00F0B1FBF0F0288028880028C5D034
+S315080046E0288840F2014C6045C0DA1000C0B213F8C1
+S315080046F010003070D2B203EB4200407838700120C7
+S3150800470000E0002005B0F0BD30B58BB00020ADF854
+S31508004710020000208DF8010000208DF8000040F20C
+S3150800472067656B460DF101020DF102014FF4FA704F
+S31508004730FFF78CFF002803D1B5215648FDF78FFFF8
+S31508004740554C5648206000202076002060760020D0
+S31508004750A0760120E07600202077002060770020F0
+S31508004760A0600020E0609DF80100401E0004206162
+S315080047709DF80000401E00056061BDF802006060FB
+S315080047802000FEF70FFC002D02D46D05444805E015
+S3150800479025F00045ED0055F0040542480021069134
+S315080047A000210791012108912900090C0191ADB258
+S315080047B002950100090C039180B20490002005902F
+S315080047C0012009900E200A9001A92000FEF7A0FCFE
+S315080047D02000FEF72FFD0BB030BD30B587B00200C4
+S315080047E040F2E170002803D401900020039004E011
+S315080047F020F0004002900420039000200490C9B2E3
+S315080048000591254D6B4601A92800FEF743FDC0B268
+S3150800481000280FD1FCF797FC0400323400992800D1
+S31508004820FEF7BDFD002805D0FEF781FBFCF78BFCE3
+S315080048308442F3D207B030BD78B587B003000C00C8
+S3150800484040F2676600256A4600211348FEF7BDFD5B
+S31508004850002812D1002E07D40098B0420DD1029834
+S3150800486000280AD1012508E026F000460198B04242
+S3150800487003D10298042800D101252800C0B20128D6
+S3150800488001D1049820702800C0B208B070BD00009D
+S31508004890EC5D0008145D0008E40F00200064004089
+S315080048A00400E0FFFCFF1F00016851F001010160F0
+S315080048B07047C069400910F001007047C069C00917
+S315080048C010F001007047406AC0B27047C9B28162F1
+S315080048D0704718B587B04FF46140009000200190EA
+S315080048E000200290002003900C20049000200590E0
+S315080048F0002006904D4C6946200000F03CFD200043
+S31508004900FFF7D2FF08B010BD70B504000D002800EF
+S31508004910C0B2412803DB81214548FDF7A0FE2800E7
+S31508004920C0B200F06BF8002607E0FEF700FB300087
+S3150800493080B2205C00F062F8761C30002900C9B20B
+S3150800494080B289B28842F0D370BD2DE9F0410500E6
+S315080049500E00384C2078002815D1374D280000F075
+S315080049603DF8012837D12878002834D028784128FE
+S3150800497031DAFCF7E8FB3149086000203049087055
+S315080049800120207027E02E4FDFF8AC8038784044AD
+S31508004990401C00F023F8012814D13878401C3870E0
+S315080049A0387898F80010884215D13A7892B218F1FA
+S315080049B001012800FFF7D8FA0020207038783070F7
+S315080049C0012009E0FCF7BFFB1C49096864318142F4
+S315080049D001D2002020700020BDE8F08138B504001F
+S315080049E0124D2800FFF765FF002805D02800FFF7BD
+S315080049F06AFF2070012000E0002032BD38B50100B2
+S31508004A000A4DC9B22800FFF761FFFCF79CFB0400BA
+S31508004A100A342800FFF752FF002805D1FEF787FA67
+S31508004A20FCF791FB8442F4D231BD000000480040F7
+S31508004A30D45C000849100020E80D0020341000203E
+S31508004A40481000205FF0FF30DFF8D4130860DFF865
+S31508004A50D41308607047F8B504000D001600DFF897
+S31508004A60C873B96CF86C4118491E091B681E814247
+S31508004A7001D2002023E0200000F0A9F9FF2805D084
+S31508004A802819401E00F0A3F9FF2801D1002016E0DE
+S31508004A902100490A4FF4007041433868814207D122
+S31508004AA02B0032002100DFF87C0300F0DCF806E07A
+S31508004AB02B0032002100DFF8680300F0D4F8F2BDBD
+S31508004AC070B504000D00DFF86003816CC06C4118F6
+S31508004AD0491E091B681E814201D2002018E02000E9
+S31508004AE000F075F906002C19641E200000F06FF915
+S31508004AF03100C9B2FF2903D00100C9B2FF2901D18B
+S31508004B00002005E00100C9B23000C0B200F01EF96D
+S31508004B1070BD80B500200090C249086810F1010FE9
+S31508004B2001D1012029E0009A486882180092009A6B
+S31508004B30886882180092009AC86882180092009ABB
+S31508004B40086982180092009A486982180092009AA9
+S31508004B50886982180092009AC8698218009200989B
+S31508004B60C04300900098401C00906A460421AE4855
+S31508004B70006810F5E470FFF76EFF02BD0021AA4A2F
+S31508004B801068006841181068001D00684118106810
+S31508004B9008300068411810680C3000684118106821
+S31508004BA01030006841181068143000684118106801
+S31508004BB0183000684118106810F5E470006841184C
+S31508004BC0002901D1012000E00020704780B59548F2
+S31508004BD0016811F1010F05D000F08FF8002801D106
+S31508004BE000200BE08E48016811F1010F05D000F096
+S31508004BF084F8002801D1002000E0012002BD8A487F
+S31508004C000068704780B5CA0501D000200BE002682D
+S31508004C108A4201D1012006E001604FF40072001DAE
+S31508004C20FFF7A2F9012002BD38B504000D007D4842
+S31508004C30844208D17A4C29002000FFF7E3FF0028B8
+S31508004C400FD100200EE078490A68954202D1040087
+S31508004C500D68F0E7200000F050F80028EBD100209E
+S31508004C6000E0200032BD2DE9F04104008846160018
+S31508004C701D0047467F0A4FF400704743206810F12D
+S31508004C80010F07D139002000FFF7BCFF002801D12A
+S31508004C9000202EE02068B84208D039002000FFF72F
+S31508004CA0C3FF0400002C01D1002022E02068B8EBE5
+S31508004CB0000804EB080010F10408FEF738F9201D77
+S31508004CC0B8EB0000B0F5007F09D317F50071200096
+S31508004CD0FFF7AAFF0400002C0DD014F10408307861
+S31508004CE088F8000018F10108761C6D1E002DE4D125
+S31508004CF00120BDE8F0810020FBE72DE9F041050021
+S31508004D00012600F001FC002704E0D8F80000A042C4
+S31508004D1015D17F1C802F13D2D5F8008018EB870891
+S31508004D2005EB87004468FEF702F922000023414696
+S31508004D30022000F0A3FB0028E7D0002600E00026AA
+S31508004D4000F0F2FB3000C0B2BDE8F08178B585B05E
+S31508004D5004000D0001260020009028002100C0B2A2
+S31508004D60C9B2884200D200262F482100027AC9B269
+S31508004D70914205D390F850002900C9B2884200D262
+S31508004D8000263000C0B201281DD100200190022063
+S31508004D9004900120039000F0B7FB00E0641C280093
+S31508004DA02100C0B2C9B288420BD3FEF7C0F8200072
+S31508004DB0C0B20290694601A800F064FC0028EDD054
+S31508004DC0002600F0B1FB3000C0B206B070BD70B569
+S31508004DD00400FF25002600E0761C3000C0B2072834
+S31508004DE01AD2FEF7A4F80C210F4A3000C0B2484385
+S31508004DF010588442F0D33000C0B2484313583000EC
+S31508004E00C0B2484310444068C3189C42E4D2F6B284
+S31508004E104E4302EB0600057A2800C0B270BD0000BA
+S31508004E2094070020980900202C5C000810F0070061
+S31508004E30374B1A684FF6FF010A40364951EA0021F6
+S31508004E400A431A60704732480068C0F30220704768
+S31508004E50020052B2002A04D409012F4A40B2115462
+S31508004E6007E009012D4A40B210F00F00104400F87F
+S31508004E70041C704710B410F00700D0F10703052B87
+S31508004E8001D3042301E0D0F10703041D072C01D246
+S31508004E90002000E0C01E012414FA03F35B1E19402B
+S31508004EA0814014FA00F0401E1040084310BC7047B9
+S31508004EB080B5411EB1F1807F01D301200EE0401E6E
+S31508004EC0174908600F215FF0FF30FFF7C1FF002088
+S31508004ED014490860072014490860002002BD80B5FF
+S31508004EE0FFF7A4FF01BD70B504000D0016000020F1
+S31508004EF0FFF7A9FF32002900FFF7BCFF01002000D9
+S31508004F0040B2FFF7A5FF70BD80B5FFF7D1FF02BD20
+S31508004F100CED00E00000FA0500E400E018ED00E002
+S31508004F2014E000E018E000E010E000E010B504002E
+S31508004F304FF47A700D490978B0FBF1F00C4909680D
+S31508004F40B1FBF0F0FFF7E0FF002801D001200CE0EC
+S31508004F50102C09D2002221005FF0FF30FFF7C3FFB3
+S31508004F6004480460002000E0012010BDBD000020B8
+S31508004F700400002000000020D948016851F480315F
+S31508004F8001607047D6490A6832F440421043086007
+S31508004F907047D448016851F4802101607047D148B0
+S31508004FA0016851F4803101607047CE480068400CB2
+S31508004FB010F001007047CC490A6892089200104325
+S31508004FC008607047C848006810F00C007047C6496A
+S31508004FD00A6832F0F002104308607047C2490A684E
+S31508004FE032F4E052104308607047BF490A6832F449
+S31508004FF06042104308607047BA48016851F08071F2
+S3150800500001607047B7480068400E10F0010070470D
+S3150800501070B4B64D2E68B64C26403043084350EA65
+S3150800502082101843286070BC704770B4AF4D2E6864
+S31508005030B04C26403043084350EA82101843286093
+S3150800504070BC704781B0AC490A6802430A600968B7
+S3150800505008400090009801B07047A7490A6832EAEC
+S3150800506000000860704781B0A4490A6802430A60D4
+S31508005070096808400090009801B070479F490A687F
+S3150800508032EA00000860704781B09D490A68024309
+S315080050900A60096808400090009801B0704798496E
+S315080050A00A6832EA00000860704781B095490A68C4
+S315080050B002430A60096808400090009801B07047EA
+S315080050C090490A6832EA0000086070478E490A6803
+S315080050D0120912011043086070478B48006810F0E7
+S315080050E00F00704709048161704780B500F005F824
+S315080050F000F05CFB00F068FBFCE780B5FFF786F87C
+S3150800510000F001F801BD80B50720FFF7DFFFFFF7C4
+S31508005110E4FF072803D067217C48FDF7A0FA4FF47F
+S315080051204040FFF72FFFFFF727FFFFF732FFFFF794
+S3150800513036FFFFF73AFF0128FBD100234FF4D87258
+S3150800514008215FF48000FFF763FF5FF010634FF4F8
+S31508005150D87208215FF48000FFF767FFFFF74CFF5E
+S31508005160FFF750FF0128FBD10020FFF730FF4FF46F
+S31508005170A050FFF733FF4FF40040FFF736FF022039
+S31508005180FFF719FFFFF71EFF0828FBD1604800F05C
+S3150800519025FB01BD38B586B04FF48040FFF785FF83
+S315080051A05FF08050FFF770FF0120FFF74BFF0220EA
+S315080051B0FFF748FF0420FFF745FF0820FFF742FFE7
+S315080051C05FF48020FFF760FF5FF00070FFF75CFF79
+S315080051D0802000900120019000200290002003907A
+S315080051E0002004904B4C6946200000F011FC8021F9
+S315080051F02000FFF777FF4FF4005000900020019041
+S31508005200002004906946444800F002FC4FF44075BB
+S3150800521000950220019003200290002003900020B0
+S3150800522004900720059069463C4800F0F1FB00957C
+S315080052300220019003200290002003900020049091
+S31508005240092005906946200000F0E2FB4FF4C050A3
+S315080052500090022001900320029000200390002075
+S3150800526004900A20059069462D4800F0D1FB80205D
+S31508005270FFF7F9FE07B030BD10B5FEF7C4F9254CA7
+S3150800528080212000FFF72EFF244800F02FFB22483C
+S3150800529000F02CFB200000F029FB214800F026FB3B
+S315080052A08020FFF7EBFE5FF00070FFF7F8FE5FF473
+S315080052B08020FFF7F4FE0820FFF7CFFE0420FFF753
+S315080052C0CCFE0220FFF7C9FE0120FFF7C6FE5FF0FD
+S315080052D08050FFF7E4FE4FF48040FFF7F1FE10BD63
+S315080052E00070004000380240083802400438024086
+S315080052F00080BCFF0080BFF03038024034380240DE
+S315080053004038024044380240003C0240805C0008B5
+S3150800531000E6DF0C0004024000080240000C0240D0
+S3150800532000000240006810F001007047426832F43D
+S315080053304052114341607047826832F4407211430B
+S3150800534081607047B2F5004F0ED11A00520812EB71
+S315080053504102B2FBF3F189B24FF6F0720A40C1F38B
+S3150800536042010A43C26005E011EB5301B1FBF3F1B8
+S3150800537089B2C1607047F8B505000F000126002400
+S315080053802800FFF7CFFF002862D129683A48014074
+S3150800539078680143F868014338690143B8690143ED
+S315080053A02960B9682800FFF7C1FF79692800FFF767
+S315080053B0C3FF2948854204D10320FEF77EF904007D
+S315080053C03AE02648854204D10C20FEF776F9040017
+S315080053D032E02348854204D13020FEF76EF90400F6
+S315080053E02AE02048854204D1C020FEF709FA0400C5
+S315080053F022E01D48854205D14FF44070FEF700FAB9
+S31508005400040019E01948854205D14FF44060FEF7BB
+S3150800541054F9040010E01648854205D14FF440506F
+S31508005420FEF7EEF9040007E01248854204D14FF46E
+S315080054304040FEF7E5F90400002C09D0386800283A
+S3150800544006D000263B68BA6921002800FFF77AFFD4
+S315080054503000C0B2F2BD0000001001400044004018
+S3150800546000480040004C0040005000400014014035
+S3150800547000780040007C0040F369FFEF2DE9F8430F
+S3150800548081460E0014001D000120DFF8E071387D0A
+S31508005490012801D1022035E0012038754CF2503838
+S315080054A0404600F048F80100C9B2002927D130006B
+S315080054B022002B00B9F1000F07D0B9F1020F0ED068
+S315080054C008D3B9F1030F0ED010E01100C9B200F0ED
+S315080054D091F80BE0110089B200F07BF806E01100A4
+S315080054E000F066F802E000F04EF8FFE7404600F0EC
+S315080054F022F8DFF87C110A68520852000A60002177
+S315080055003975C0B2BDE8F283002059490A68002AF5
+S3150800551008D5594A594B1360594B13600968002935
+S3150800552000D50120C0B270475148016851F00041CA
+S3150800553001600020704738B50400002000204B4960
+S315080055408861FBF711FE05004A480168C9030BD5B7
+S3150800555014F1010FF8D0002C04D0FBF705FE401B10
+S315080055608442F1D203200DE0016811F0F20F03D056
+S3150800557000F04FF8012005E00168C90701D50121AF
+S315080055800160002032BD10B439490C6834F4407407
+S315080055900C600C6854F440740C600C6854F00104F8
+S315080055A00C600260001D0360BFF34F8F10BC70478C
+S315080055B02F4A136833F440731360136853F4007367
+S315080055C01360136853F0010313600160BFF34F8F34
+S315080055D07047274A136833F440731360136853F40B
+S315080055E080731360136853F0010313600180BFF3DF
+S315080055F04F8F70471E4A136833F44073136013685D
+S315080056001360136853F0010313600170BFF34F8FE3
+S31508005610704718480168890704D514498A6952F001
+S3150800562020028A610168C90604D510498A6952F0C0
+S3150800563010028A610168890604D50C498A6952F004
+S3150800564008028A610168490604D508498A6952F040
+S3150800565004028A610168090604D504498A6952F078
+S3150800566002028A61F2210160704700000C100020D6
+S31508005670103C02400C3C0240043C024023016745B2
+S31508005680AB89EFCD2DE9F04104000D000120002083
+S31508005690DFF81061307D012801D102203EE00120AB
+S315080056A030754CF250373800FFF745FF0100C9B294
+S315080056B0002930D15FF0FF312960216801290DD119
+S315080056C0E068C0B200F02CF83800FFF734FFDFF8C6
+S315080056D0D8100A6832F004020A601CE0D4F8048084
+S315080056E001E018F10108A26861688A18904512D28B
+S315080056F0E168C9B2404600F026F83800FFF71BFFFC
+S3150800570029490A6832F07A020A600100C9B20029FA
+S31508005710E7D0C5F8008000213175C0B2BDE8F08138
+S3150800572021490A6832F440720A600A6852F0040293
+S315080057300A600A68C0B2000250F48030104308605C
+S31508005740BFF34F8F704700220A00D2B2002A01D158
+S3150800575000210EE00A00D2B2012A02D14FF480716C
+S3150800576007E0C9B2022902D14FF4007101E04FF4F3
+S3150800577040710D4A136833F4407313601368194374
+S315080057801160116831F0F80111601168C00050F01D
+S31508005790020008431060106850F480301060BFF3B0
+S315080057A04F8F70470C100020103C024080B5FEF762
+S315080057B0B5FBFDF7B8FBFBF7A9FCFEF709FDFEF7FD
+S315080057C069FCFEF773FB01BD80B5FDF7B0FBFBF77F
+S315080057D0B1FCFEF770FCFEF772FB01BD01490860DB
+S315080057E0704700000400002030B4046891FAA1F361
+S315080057F0B3FA83F30325DBB25B009D40AC4391FA11
+S31508005800A1F1B1FA81F1C9B249008A402243026086
+S3150800581030BC704743688B43514319434160704716
+S3150800582030B4846891FAA1F3B3FA83F30325DBB2A3
+S315080058305B009D40AC4391FAA1F1B1FA81F1C9B27E
+S3150800584049008A402243826030BC704730B4C4683D
+S3150800585091FAA1F3B3FA83F30325DBB25B009D400B
+S31508005860AC4391FAA1F1B1FA81F1C9B249008A4073
+S315080058702243C26030BC704730B4046A91FAA1F37F
+S31508005880B3FA83F30F25DBB29B009D40AC4391FA34
+S31508005890A1F1B1FA81F1C9B289008A4022430262B4
+S315080058A030BC704730B4446A0B001B0A93FAA3F362
+S315080058B0B3FA83F30F25DBB29B009D40AC43090A7C
+S315080058C091FAA1F1B1FA81F1C9B289008A4022435D
+S315080058D0426230BC704742490A6810430860704704
+S315080058E03F490A6832EA00000860704710B500248C
+S315080058F03C49884206D10120FFF7EDFF0120FFF75A
+S31508005900EFFF6AE03849884206D10220FFF7E3FF35
+S315080059100220FFF7E5FF60E03449884206D10420FB
+S31508005920FFF7D9FF0420FFF7DBFF56E0304988422E
+S3150800593006D10820FFF7CFFF0820FFF7D1FF4CE07C
+S315080059402C49884206D11020FFF7C5FF1020FFF723
+S31508005950C7FF42E02849884206D12020FFF7BBFF4F
+S315080059602020FFF7BDFF38E02449884206D14020B1
+S31508005970FFF7B1FF4020FFF7B3FF2EE0204988422A
+S3150800598006D18020FFF7A7FF8020FFF7A9FF24E0B4
+S315080059901C49884208D14FF48070FFF79CFF4FF4EA
+S315080059A08070FFF79DFF18E01749884208D14FF429
+S315080059B00070FFF790FF4FF40070FFF791FF0CE0BF
+S315080059C01249884208D14FF48060FFF784FF4FF4EC
+S315080059D08060FFF785FF00E001242000C0B210BDFB
+S315080059E0103802400000024000040240000802404D
+S315080059F0000C024000100240001402400018024049
+S31508005A00001C0240002002400024024000280240F8
+S31508005A10F8B505000E0000200020306890FAA0F0C6
+S31508005A20B0FA80F734E0726921002800FFF73AFFE0
+S31508005A3028E034680120B8400440002C27D070685C
+S31508005A40012802D07068022809D1B268210028000E
+S31508005A50FFF7E6FEF26831682800FFF7DBFE3269D9
+S31508005A6021002800FFF7F2FE706802280AD194FA8E
+S31508005A70A4F0B0FA80F00828D5D27269210028006F
+S31508005A80FFF7FAFE726821002800FFF7ADFE7F1CBB
+S31508005A903068F8400028CCD10020F2BD12200880DA
+S31508005AA02D487047042008802C48704780B50A00A6
+S31508005AB0C0B2002804D12A492A48FDF7D0F903E0E4
+S31508005AC027492848FDF7CBF9254802BD10B50A0035
+S31508005AD0234C21002448FDF7C2F9200010BD80B5EB
+S31508005AE01A20088000F022F8204802BD80B50A0076
+S31508005AF0C0B2002804D11A491D48FDF7B0F903E0E1
+S31508005B0017491B48FDF7ABF9154802BD80B50A00D1
+S31508005B10C0B2002804D112491648FDF7A0F903E0DF
+S31508005B200F491448FDF79BF90D4802BD38B51248D0
+S31508005B30006812490C6812490968081800280AD032
+S31508005B400A4D0822A91C00F01DF8042215F11201BD
+S31508005B50200000F017F831BD880000209C000020C6
+S31508005B609C0B0020D05E0008F45E0008A000002010
+S31508005B70285F0008B85E000820F4F01F24F4F01F20
+S31508005B8028F4F01F30B4002300231AE00400240F81
+S31508005B9037341D00EDB201F815400AE00400240F61
+S31508005BA00A2CF3D20400240F30341D00EDB201F89C
+S31508005BB01540000100241D00EDB201EB45056C708F
+S31508005BC05B1C1C001500E4B2EDB2AC42E6D330BC57
+S31508005BD070470000433A5C576F726B5C736F66746C
+S31508005BE0776172655C4F70656E424C545C546172A5
+S31508005BF06765745C44656D6F5C41524D434D375F14
+S31508005C0053544D333246375F4E75636C656F5F4646
+S31508005C103734365A475F4941525C426F6F745C7538
+S31508005C207362645F636F6E662E630000008000080F
+S31508005C30008000000100000000000108008000004C
+S31508005C400200000000800108008000000300000038
+S31508005C50000002080000020004000000000004081A
+S31508005C600000040005000000000008080000040009
+S31508005C700600000000000C080000040007000000F1
+S31508005C80433A5C576F726B5C736F667477617265C3
+S31508005C905C4F70656E424C545C5461726765745C07
+S31508005CA044656D6F5C41524D434D375F53544D33D8
+S31508005CB03246375F4E75636C656F5F463734365AC2
+S31508005CC0475F4941525C426F6F745C6D61696E2E25
+S31508005CD063000000433A5C576F726B5C736F6674BF
+S31508005CE0776172655C4F70656E424C545C546172A4
+S31508005CF06765745C536F757263655C41524D434DBD
+S31508005D00375F53544D333246375C72733233322E13
+S31508005D1063000000433A5C576F726B5C736F66747E
+S31508005D20776172655C4F70656E424C545C54617263
+S31508005D306765745C536F757263655C41524D434D7C
+S31508005D40375F53544D333246375C63616E2E6300BA
+S31508005D50433A5C576F726B5C736F667477617265F2
+S31508005D605C4F70656E424C545C5461726765745C36
+S31508005D70536F757263655C41524D434D375F53549B
+S31508005D804D333246375C7573622E630030B5016851
+S31508005D9084684218416802EB5103C90703D54C448D
+S31508005DA001E0491C05D19A420AD012F9011B12F8E2
+S31508005DB0015B002904F8015BF3D4491EF7D5F2E725
+S31508005DC00C3030BD10B5074979441831064C7C446F
+S31508005DD0163404E00A68081D114488470146A142A2
+S31508005DE0F8D110BD500000006C0000000502060244
+S31508005DF0060307030803090309040A040B040C0431
+S31508005E000C050D050E050F050F06100610071008E0
+S31508005E104EF68851CEF20001086840F4700008601A
+S31508005E20BFF34F8FBFF36F8F4FF00070E1EE100A8C
+S31508005E30704700003FB3FFFF900F0000C00000202E
+S31508005E400000000049FFFFFF940200003001000037
+S31508005E500000002000F00DF8002801D0FFF7B2FF7F
+S31508005E60AFF300800020AFF30080FFF73EF900F0A3
+S31508005E7002F80120704700F001B8000007463846CE
+S31508005E8000F002F8FBE7000080B5AFF30080024A95
+S31508005E9011001820ABBEFBE7260002000448016883
+S31508005EA051F4700101605FF00060024908607047B4
+S31508005EB088ED00E008ED00E057696E555342204230
+S31508005EC0756C6B20496E74657266616365000000C7
+S31508005ED057696E5553422042756C6B204465766946
+S31508005EE063650000000000000000000001020304D2
+S31508005EF0060708094F70656E424C54205573657243
+S31508005F000000000001488047014800479D5E0008E0
+S31508005F10155F0008AFF30080FFF77AFFFFF79AFFD7
+S31508005F20000000000102030444656661756C740094
+S31508005F304F70656E424C5400FFF7FEBFFFF7FEBF79
S31508005F40FFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBF77
-S31508005F500010FC000624F4000A060002FD000140B9
-S31508005F6001FD000BB13D0008E13D0008FD3D0008BC
-S31508005F70F8000B693E0008733E0008813E0008F4ED
-S31508005F800003933E0008FC00129B3E00080902200D
-S31508005F9000010100C0320904000002FFFD002D07C0
-S31508005FA00581024000FF070501024000FFCD5800A9
-S31508005FB008D5580008FD580008DD5800080F590094
-S31508005FC0081D5900083D59000812010002FD00127B
-S31508005FD040501DAC600002010203010000040309E1
-S30D08005FE0041A03E6000104019E
-S70508005D890C
+S31508005F50FFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBF67
+S31508005F60FFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBF57
+S31508005F70FFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBF47
+S31508005F80FFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBF37
+S31508005F90FFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBF27
+S31508005FA0FFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBF17
+S31508005FB0FFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBF07
+S31508005FC0FFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBFF7
+S31508005FD0FFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBFE7
+S31508005FE0FFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBFD7
+S31508005FF0FFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBFC7
+S31508006000FFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBFB6
+S31508006010FFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBFA6
+S31508006020FFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBF96
+S31508006030FFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBF86
+S31508006040FFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBF76
+S31508006050FFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBF66
+S31508006060FFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBF56
+S31508006070FFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBF46
+S31508006080FFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBF36
+S31508006090FFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBF26
+S315080060A0FFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBF16
+S315080060B0FFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBF06
+S315080060C0FFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBFF6
+S315080060D0FFF7FEBFFFF7FEBFFFF7FEBF0010FC008D
+S315080060E00624F4000A060002FD00014001FD000B2B
+S315080060F08D3F0008BD3F0008D93F0008F8000B4552
+S315080061004000084F4000085D400008F400036F4057
+S315080061100008FC001277400008090220000101006F
+S31508006120C0320904000002FFFD002D070581024068
+S3150800613000FF070501024000FF9D5A0008A55A0006
+S3150800614008CD5A0008AD5A0008DF5A0008ED5A0073
+S31508006150080D5B000812010002FD001240501DAC3C
+S31508006160600002010203010000040309041A03E6A1
+S309080061700001040117
+S70508005F157E
diff --git a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_IAR/Boot/ide/stm32f746.dep b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_IAR/Boot/ide/stm32f746.dep
index c9b09f30..35ea17fd 100644
--- a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_IAR/Boot/ide/stm32f746.dep
+++ b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_IAR/Boot/ide/stm32f746.dep
@@ -6,646 +6,600 @@
stm32f746
$PROJ_DIR$\..\lib\CMSIS\Include\cmsis_compiler.h
- $PROJ_DIR$\..\lib\CMSIS\Include\cmsis_iccarm.h
$PROJ_DIR$\..\lib\CMSIS\Include\cmsis_version.h
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_gpio_ex.h
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_i2c.c
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_def.h
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_cortex.c
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_i2c.h
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Inc\Legacy\stm32_hal_legacy.h
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_flash.c
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_i2c_ex.c
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_i2c_ex.h
- $PROJ_DIR$\..\lib\CMSIS\Device\ST\STM32F7xx\Include\system_stm32f7xx.h
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_cortex.h
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_dma_ex.h
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal.h
- $PROJ_DIR$\..\lib\CMSIS\Include\core_cm7.h
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_dma_ex.c
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_exti.c
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_exti.h
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_flash.h
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_dma.h
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_can.c
- $PROJ_DIR$\..\lib\CMSIS\Device\ST\STM32F7xx\Include\stm32f7xx.h
+ $PROJ_DIR$\..\lib\CMSIS\Include\cmsis_iccarm.h
$PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_can.h
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_dma_ex.c
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_exti.h
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_def.h
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_dma_ex.h
+ $PROJ_DIR$\..\lib\CMSIS\Device\ST\STM32F7xx\Include\system_stm32f7xx.h
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_flash.c
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_flash.h
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_can.c
$PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_flash_ex.c
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_dma.c
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_flash_ex.h
$PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_gpio.c
$PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_gpio.h
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_flash_ex.h
- $PROJ_DIR$\..\lib\CMSIS\Include\mpu_armv7.h
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_gpio_ex.h
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_i2c.c
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_i2c.h
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_i2c_ex.c
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_i2c_ex.h
$PROJ_DIR$\..\lib\CMSIS\Device\ST\STM32F7xx\Include\stm32f746xx.h
+ $PROJ_DIR$\..\lib\CMSIS\Include\core_cm7.h
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal.h
+ $PROJ_DIR$\..\lib\CMSIS\Include\mpu_armv7.h
+ $PROJ_DIR$\..\lib\CMSIS\Device\ST\STM32F7xx\Include\stm32f7xx.h
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Inc\Legacy\stm32_hal_legacy.h
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_cortex.h
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_dma.h
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_cortex.c
$PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal.c
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Inc\stm32f7xx_ll_exti.h
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_ll_rcc.c
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_pwr.c
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Inc\stm32f7xx_ll_dma.h
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_ll_gpio.c
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_ll_usart.c
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_ll_exti.c
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_rcc_ex.c
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Inc\stm32f7xx_ll_usb.h
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Inc\stm32f7xx_ll_bus.h
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Inc\stm32f7xx_ll_usart.h
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_rcc.c
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_ll_dma.c
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Inc\stm32f7xx_ll_gpio.h
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_dma.c
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_exti.c
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_can.__cstat.et
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_mdios.o
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_adc.__cstat.et
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_adc.pbi
+ $PROJ_DIR$\..\obj\stm32f7xx_ll_dma2d.pbi
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_qspi.pbi
+ $PROJ_DIR$\..\obj\stm32f7xx_ll_pwr.pbi
+ $PROJ_DIR$\..\obj\stm32f7xx_ll_spi.pbi
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_rtc.pbi
+ $PROJ_DIR$\..\obj\stm32f7xx_ll_adc.__cstat.et
+ $TOOLKIT_DIR$\lib\rt7M_tl.a
+ $PROJ_DIR$\..\obj\stm32f7xx_ll_tim.pbi
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_spi.o
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_dma.__cstat.et
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_timebase_tim_template.pbi
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_dcmi_ex.__cstat.et
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_lptim.o
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_spdifrx.o
+ $PROJ_DIR$\..\obj\stm32f746.pbd
+ $PROJ_DIR$\..\obj\stm32f7xx_ll_sdmmc.pbi
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_dma.o
+ $PROJ_DIR$\..\obj\stm32f7xx_ll_rtc.pbi
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_eth.c
+ $PROJ_DIR$\..\obj\stm32f7xx_ll_usart.o
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_pcd_ex.o
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_nor.pbi
+ $PROJ_DIR$\..\obj\stm32f7xx_ll_crc.__cstat.et
+ $TOOLKIT_DIR$\inc\c\xencoding_limits.h
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_rtc.o
+ $TOOLKIT_DIR$\lib\shb_l.a
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_nor.o
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_wwdg.pbi
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_ltdc_ex.o
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_hash_ex.o
+ $PROJ_DIR$\..\obj\stm32f7xx_ll_rcc.o
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_smbus.o
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_sai.pbi
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_usart.pbi
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_spdifrx.pbi
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_hash.o
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_uart.pbi
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_crc.pbi
+ $PROJ_DIR$\..\obj\stm32f7xx_ll_lptim.__cstat.et
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_pwr.o
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_smartcard.pbi
+ $PROJ_DIR$\..\obj\stm32f7xx_it.o
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_pcd.o
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_adc_ex.__cstat.et
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_qspi.o
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_jpeg.o
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_rng.pbi
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_rcc_ex.o
+ $PROJ_DIR$\..\obj\stm32f7xx_ll_tim.o
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_timebase_rtc_alarm_template.pbi
+ $PROJ_DIR$\..\obj\system_stm32f7xx.__cstat.et
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_timebase_rtc_wakeup_template.pbi
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_sd.pbi
+ $PROJ_DIR$\..\obj\stm32f7xx_ll_crc.pbi
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_dma2d.o
+ $PROJ_DIR$\..\obj\stm32f7xx_ll_dac.pbi
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_smbus.pbi
+ $PROJ_DIR$\..\obj\stm32f7xx_ll_adc.pbi
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_spi.pbi
$PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_pcd.h
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_pcd.c
$PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_pcd_ex.c
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_pwr.h
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_ll_dma.c
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_ll_exti.c
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Inc\stm32f7xx_ll_exti.h
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Inc\stm32f7xx_ll_pwr.h
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_pcd_ex.h
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_pwr_ex.h
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_rcc_ex.c
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_ll_rcc.c
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Inc\stm32f7xx_ll_rcc.h
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_ll_usart.c
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Inc\stm32f7xx_ll_usart.h
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Inc\stm32f7xx_ll_bus.h
$PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_rcc_ex.h
$PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Inc\stm32f7xx_ll_system.h
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Inc\stm32f7xx_ll_pwr.h
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_rcc.h
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Inc\stm32f7xx_ll_rcc.h
$PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_ll_usb.c
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_pwr_ex.c
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_tim_ex.c
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_pwr_ex.h
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_pwr.h
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_pcd_ex.h
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_rcc.h
$PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_tim.c
- $PROJ_DIR$\..\..\..\..\Source\ARMCM7_STM32F7\flash.h
- $PROJ_DIR$\..\..\..\..\Source\ARMCM7_STM32F7\rs232.c
- $PROJ_DIR$\..\..\..\..\Source\ARMCM7_STM32F7\timer.c
- $PROJ_DIR$\..\startup_stm32f746xx.s
- $PROJ_DIR$\..\lib\STM32_USB_Device_Library\Core\Src\usbd_core.c
- $PROJ_DIR$\..\led.c
- $PROJ_DIR$\..\led.h
- $PROJ_DIR$\..\main.c
- $PROJ_DIR$\..\usbd_conf.c
- $PROJ_DIR$\..\lib\STM32_USB_Device_Library\Core\Inc\usbd_core.h
- $PROJ_DIR$\..\..\..\..\Source\ARMCM7_STM32F7\nvm.c
- $PROJ_DIR$\..\lib\stm32f7xx_hal_conf.h
- $PROJ_DIR$\..\hooks.c
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_ll_utils.c
- $PROJ_DIR$\..\blt_conf.h
- $PROJ_DIR$\..\lib\STM32_USB_Device_Library\Core\Inc\usbd_ctlreq.h
- $PROJ_DIR$\..\lib\STM32_USB_Device_Library\Core\Src\usbd_ctlreq.c
- $PROJ_DIR$\..\lib\STM32_USB_Device_Library\Core\Src\usbd_ioreq.c
- $PROJ_DIR$\..\lib\system_stm32f7xx.c
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Inc\stm32f7xx_ll_gpio.h
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_pwr.c
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_tim_ex.c
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_pwr_ex.c
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Inc\stm32f7xx_ll_dma.h
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_rcc.c
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_ll_gpio.c
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_pcd.c
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Inc\stm32f7xx_ll_usb.h
$PROJ_DIR$\..\usbd_bulk.c
- $PROJ_DIR$\..\lib\STM32_USB_Device_Library\Core\Inc\usbd_ioreq.h
$PROJ_DIR$\..\usbd_bulk.h
- $PROJ_DIR$\..\lib\STM32_USB_Device_Library\Core\Inc\usbd_def.h
- $PROJ_DIR$\..\usbd_conf.h
- $PROJ_DIR$\..\usbd_desc.c
+ $PROJ_DIR$\..\lib\STM32_USB_Device_Library\Core\Inc\usbd_core.h
+ $PROJ_DIR$\..\lib\STM32_USB_Device_Library\Core\Inc\usbd_ctlreq.h
+ $PROJ_DIR$\..\lib\system_stm32f7xx.c
+ $PROJ_DIR$\..\hooks.c
+ $PROJ_DIR$\..\led.h
+ $PROJ_DIR$\..\lib\STM32_USB_Device_Library\Core\Src\usbd_ioreq.c
+ $PROJ_DIR$\..\main.c
+ $PROJ_DIR$\..\startup_stm32f746xx.s
+ $PROJ_DIR$\..\usbd_conf.c
$PROJ_DIR$\..\usbd_desc.h
$PROJ_DIR$\..\..\..\..\Source\ARMCM7_STM32F7\IAR\cpu_comp.c
- $PROJ_DIR$\..\..\..\..\Source\ARMCM7_STM32F7\can.c
- $PROJ_DIR$\..\..\..\..\Source\ARMCM7_STM32F7\flash.c
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Inc\stm32f7xx_ll_utils.h
+ $PROJ_DIR$\..\usbd_conf.h
+ $PROJ_DIR$\..\usbd_desc.c
$PROJ_DIR$\..\..\..\..\Source\ARMCM7_STM32F7\cpu.c
- $PROJ_DIR$\..\..\..\..\Source\net.c
- $PROJ_DIR$\..\..\..\..\Source\xcp.c
- $PROJ_DIR$\..\..\..\..\Source\file.c
- $PROJ_DIR$\..\..\..\..\Source\can.h
- $PROJ_DIR$\..\..\..\..\Source\ARMCM7_STM32F7\types.h
- $PROJ_DIR$\..\..\..\..\Source\ARMCM7_STM32F7\usb.c
- $PROJ_DIR$\..\..\..\..\Source\backdoor.h
- $PROJ_DIR$\..\..\..\..\Source\cop.h
- $PROJ_DIR$\..\..\..\..\Source\timer.h
- $PROJ_DIR$\..\..\..\..\Source\assert.h
- $PROJ_DIR$\..\..\..\..\Source\boot.h
- $PROJ_DIR$\..\..\..\..\Source\rs232.h
- $PROJ_DIR$\..\obj\stm32f7xx_hal_smbus.o
- $PROJ_DIR$\..\obj\stm32f7xx_hal_jpeg.o
- $PROJ_DIR$\..\..\..\..\Source\cpu.h
- $PROJ_DIR$\..\..\..\..\Source\boot.c
- $PROJ_DIR$\..\..\..\..\Source\file.h
+ $PROJ_DIR$\..\..\..\..\Source\ARMCM7_STM32F7\flash.c
+ $PROJ_DIR$\..\..\..\..\Source\ARMCM7_STM32F7\flash.h
+ $PROJ_DIR$\..\..\..\..\Source\ARMCM7_STM32F7\nvm.c
+ $PROJ_DIR$\..\..\..\..\Source\ARMCM7_STM32F7\rs232.c
+ $PROJ_DIR$\..\lib\STM32_USB_Device_Library\Core\Inc\usbd_def.h
+ $PROJ_DIR$\..\lib\STM32_USB_Device_Library\Core\Inc\usbd_ioreq.h
+ $PROJ_DIR$\..\..\..\..\Source\ARMCM7_STM32F7\can.c
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_ll_utils.c
+ $PROJ_DIR$\..\blt_conf.h
+ $PROJ_DIR$\..\lib\stm32f7xx_hal_conf.h
+ $PROJ_DIR$\..\lib\STM32_USB_Device_Library\Core\Src\usbd_core.c
+ $PROJ_DIR$\..\led.c
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Inc\stm32f7xx_ll_utils.h
+ $PROJ_DIR$\..\lib\STM32_USB_Device_Library\Core\Src\usbd_ctlreq.c
$PROJ_DIR$\..\..\..\..\Source\nvm.h
- $PROJ_DIR$\..\..\..\..\Source\com.c
- $PROJ_DIR$\..\..\..\..\Source\plausibility.h
- $PROJ_DIR$\..\..\..\..\Source\assert.c
- $PROJ_DIR$\..\..\..\..\Source\com.h
- $PROJ_DIR$\..\..\..\..\Source\cop.c
$PROJ_DIR$\..\..\..\..\Source\xcp.h
- $PROJ_DIR$\..\..\..\..\Source\backdoor.c
+ $PROJ_DIR$\..\..\..\..\Source\timer.h
$PROJ_DIR$\..\..\..\..\Source\usb.h
- $PROJ_DIR$\..\obj\stm32f7xx_hal_hash_ex.o
- $PROJ_DIR$\..\obj\stm32f7xx_ll_tim.o
- $PROJ_DIR$\..\obj\stm32f7xx_hal_hcd.o
- $PROJ_DIR$\..\obj\stm32f7xx_ll_pwr.o
- $PROJ_DIR$\..\obj\stm32f7xx_hal_smartcard_ex.pbi
- $PROJ_DIR$\..\obj\stm32f7xx_ll_lptim.__cstat.et
- $PROJ_DIR$\..\bin\demoprog_stm32f746.out
- $PROJ_DIR$\..\obj\stm32f7xx_ll_dma2d.__cstat.et
- $PROJ_DIR$\..\obj\stm32f7xx_ll_adc.pbi
- $PROJ_DIR$\..\obj\stm32f7xx_hal_dma2d.o
- $PROJ_DIR$\..\obj\main.__cstat.et
- $PROJ_DIR$\..\obj\stm32f7xx_hal_flash.o
- $TOOLKIT_DIR$\inc\c\DLib_Product.h
- $PROJ_DIR$\..\obj\stm32f7xx_ll_utils.o
- $PROJ_DIR$\..\bin\demoprog_stm32f746.srec
- $PROJ_DIR$\..\obj\stm32f7xx_hal_sram.o
- $PROJ_DIR$\..\obj\stm32f7xx_hal_i2c_ex.o
- $PROJ_DIR$\..\obj\stm32f7xx_ll_spi.o
- $PROJ_DIR$\..\obj\stm32f7xx_hal_smartcard_ex.o
- $PROJ_DIR$\..\obj\stm32f7xx_ll_i2c.__cstat.et
- $PROJ_DIR$\..\obj\stm32f7xx_hal_irda.o
- $PROJ_DIR$\..\obj\stm32f7xx_hal_eth.o
- $PROJ_DIR$\..\obj\stm32f7xx_ll_fmc.__cstat.et
- $PROJ_DIR$\..\obj\stm32f7xx_it.pbi
- $PROJ_DIR$\..\obj\stm32f7xx_hal_gpio.o
- $PROJ_DIR$\..\obj\stm32f7xx_hal_tim.o
- $PROJ_DIR$\..\obj\stm32f7xx_hal_dfsdm.o
- $PROJ_DIR$\..\obj\stm32f7xx_it.__cstat.et
- $PROJ_DIR$\..\obj\stm32f7xx_hal_i2s.o
- $PROJ_DIR$\..\obj\stm32f7xx_ll_i2c.o
- $PROJ_DIR$\..\obj\stm32f7xx_hal_msp.pbi
- $PROJ_DIR$\..\obj\stm32f7xx_hal_dcmi.o
+ $PROJ_DIR$\..\..\..\..\Source\xcp.c
$PROJ_DIR$\..\obj\stm32f7xx_hal_dsi.o
- $PROJ_DIR$\..\obj\stm32f7xx_hal_usart.__cstat.et
- $PROJ_DIR$\..\obj\stm32f7xx_hal_flash_ex.o
+ $PROJ_DIR$\..\..\..\..\Source\file.h
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_eth.o
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_flash.o
+ $PROJ_DIR$\..\..\..\..\Source\boot.c
+ $PROJ_DIR$\..\..\..\..\Source\backdoor.c
+ $PROJ_DIR$\..\..\..\..\Source\com.h
+ $PROJ_DIR$\..\..\..\..\Source\assert.c
+ $PROJ_DIR$\..\..\..\..\Source\cop.h
+ $PROJ_DIR$\..\..\..\..\Source\net.c
+ $PROJ_DIR$\..\..\..\..\Source\ARMCM7_STM32F7\timer.c
+ $PROJ_DIR$\..\..\..\..\Source\cpu.h
+ $PROJ_DIR$\..\..\..\..\Source\plausibility.h
+ $PROJ_DIR$\..\..\..\..\Source\rs232.h
+ $PROJ_DIR$\..\obj\stm32f7xx_ll_i2c.__cstat.et
$PROJ_DIR$\..\obj\stm32f7xx_hal_i2c.o
$PROJ_DIR$\..\obj\stm32f7xx_hal_msp.__cstat.et
- $PROJ_DIR$\..\obj\stm32f7xx_hal_nand.o
- $PROJ_DIR$\..\obj\stm32f7xx_hal_rcc.o
- $PROJ_DIR$\..\obj\stm32f7xx_hal_ltdc.o
+ $PROJ_DIR$\..\..\..\..\Source\ARMCM7_STM32F7\types.h
+ $PROJ_DIR$\..\..\..\..\Source\ARMCM7_STM32F7\usb.c
+ $PROJ_DIR$\..\..\..\..\Source\can.h
+ $PROJ_DIR$\..\..\..\..\Source\assert.h
+ $PROJ_DIR$\..\..\..\..\Source\backdoor.h
+ $PROJ_DIR$\..\..\..\..\Source\com.c
+ $PROJ_DIR$\..\..\..\..\Source\boot.h
+ $PROJ_DIR$\..\..\..\..\Source\cop.c
+ $PROJ_DIR$\..\..\..\..\Source\file.c
+ $PROJ_DIR$\..\obj\stm32f7xx_ll_utils.o
+ $PROJ_DIR$\..\obj\stm32f7xx_ll_i2c.o
+ $PROJ_DIR$\..\obj\stm32f7xx_ll_fmc.__cstat.et
$PROJ_DIR$\..\obj\stm32f7xx_hal_timebase_rtc_wakeup_template.o
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_dcmi.o
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_rcc.o
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_dfsdm.o
+ $PROJ_DIR$\..\obj\stm32f7xx_ll_pwr.o
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_nand.o
+ $PROJ_DIR$\..\obj\main.__cstat.et
+ $TOOLKIT_DIR$\inc\c\DLib_Product.h
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_tim.o
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_gpio.o
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_flash_ex.o
+ $PROJ_DIR$\..\obj\stm32f7xx_ll_spi.o
+ $PROJ_DIR$\..\bin\demoprog_stm32f746.srec
+ $PROJ_DIR$\..\obj\stm32f7xx_it.pbi
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_usart.__cstat.et
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_msp.pbi
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_smartcard_ex.pbi
$PROJ_DIR$\..\obj\stm32f7xx_hal_dma_ex.o
- $PROJ_DIR$\..\obj\stm32f7xx_ll_rtc.pbi
- $PROJ_DIR$\..\obj\stm32f7xx_ll_crc.__cstat.et
- $TOOLKIT_DIR$\lib\shb_l.a
- $PROJ_DIR$\..\obj\stm32f7xx_hal_lptim.o
- $PROJ_DIR$\..\obj\stm32f7xx_hal_wwdg.__cstat.et
- $PROJ_DIR$\..\obj\stm32f7xx_hal_pwr_ex.o
- $TOOLKIT_DIR$\inc\c\xencoding_limits.h
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_eth.c
- $PROJ_DIR$\..\obj\stm32f7xx_hal_rtc.o
- $PROJ_DIR$\..\obj\stm32f7xx_hal_can.__cstat.et
- $PROJ_DIR$\..\obj\stm32f7xx_hal_spi.o
- $PROJ_DIR$\..\obj\stm32f7xx_hal_spdifrx.o
- $PROJ_DIR$\..\obj\stm32f7xx_hal_mmc.o
- $PROJ_DIR$\..\obj\stm32f7xx_ll_pwr.pbi
- $PROJ_DIR$\..\obj\stm32f7xx_hal_mdios.o
- $PROJ_DIR$\..\obj\stm32f7xx_ll_rng.pbi
- $PROJ_DIR$\..\obj\stm32f7xx_ll_dma2d.pbi
- $PROJ_DIR$\..\obj\stm32f7xx_ll_sdmmc.pbi
- $PROJ_DIR$\..\obj\stm32f7xx_hal_iwdg.o
- $PROJ_DIR$\..\obj\stm32f7xx_hal_dma.o
- $PROJ_DIR$\..\obj\stm32f7xx_ll_spi.pbi
- $PROJ_DIR$\..\obj\stm32f7xx_hal_nor.pbi
- $PROJ_DIR$\..\obj\stm32f7xx_hal_dcmi_ex.o
- $PROJ_DIR$\..\obj\stm32f746.pbd
+ $PROJ_DIR$\..\bin\demoprog_stm32f746.out
+ $PROJ_DIR$\..\obj\stm32f7xx_ll_dma2d.__cstat.et
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_hcd.o
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_sram.o
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_ltdc.o
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_smartcard_ex.o
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_i2s.o
+ $PROJ_DIR$\..\obj\stm32f7xx_it.__cstat.et
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_i2c_ex.o
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_irda.o
$PROJ_DIR$\..\obj\stm32f7xx_hal_msp_template.o
- $PROJ_DIR$\..\obj\stm32f7xx_ll_adc.__cstat.et
- $PROJ_DIR$\..\obj\stm32f7xx_hal_pcd_ex.o
- $PROJ_DIR$\..\obj\stm32f7xx_hal_dcmi_ex.__cstat.et
- $PROJ_DIR$\..\obj\stm32f7xx_ll_tim.pbi
- $PROJ_DIR$\..\obj\stm32f7xx_hal_nor.o
- $PROJ_DIR$\..\obj\stm32f7xx_hal_adc.pbi
- $TOOLKIT_DIR$\lib\rt7M_tl.a
- $PROJ_DIR$\..\obj\stm32f7xx_hal_qspi.pbi
- $PROJ_DIR$\..\obj\stm32f7xx_hal_adc_ex.__cstat.et
- $PROJ_DIR$\..\obj\stm32f7xx_hal_ltdc_ex.o
- $PROJ_DIR$\..\obj\stm32f7xx_hal_qspi.o
- $PROJ_DIR$\..\obj\stm32f7xx_it.o
- $PROJ_DIR$\..\obj\stm32f7xx_ll_crc.pbi
- $PROJ_DIR$\..\obj\stm32f7xx_hal_smbus.pbi
- $PROJ_DIR$\..\obj\system_stm32f7xx.__cstat.et
- $PROJ_DIR$\..\obj\stm32f7xx_hal_rtc.pbi
- $PROJ_DIR$\..\obj\stm32f7xx_hal_smartcard.pbi
- $PROJ_DIR$\..\obj\stm32f7xx_hal_rcc_ex.o
- $PROJ_DIR$\..\obj\stm32f7xx_hal_adc.__cstat.et
- $PROJ_DIR$\..\obj\stm32f7xx_hal_pwr.o
- $PROJ_DIR$\..\obj\stm32f7xx_hal_spdifrx.pbi
- $PROJ_DIR$\..\obj\stm32f7xx_hal_uart.pbi
- $PROJ_DIR$\..\obj\stm32f7xx_hal_timebase_rtc_wakeup_template.pbi
- $PROJ_DIR$\..\obj\stm32f7xx_hal_usart.pbi
- $PROJ_DIR$\..\obj\stm32f7xx_hal_crc.pbi
- $PROJ_DIR$\..\obj\stm32f7xx_hal_pcd.o
- $PROJ_DIR$\..\obj\stm32f7xx_hal_sd.pbi
- $PROJ_DIR$\..\obj\stm32f7xx_hal_dma.__cstat.et
- $PROJ_DIR$\..\obj\stm32f7xx_hal_spi.pbi
- $PROJ_DIR$\..\obj\stm32f7xx_hal_wwdg.pbi
- $PROJ_DIR$\..\obj\stm32f7xx_hal_timebase_tim_template.pbi
- $PROJ_DIR$\..\obj\stm32f7xx_hal_timebase_rtc_alarm_template.pbi
- $PROJ_DIR$\..\obj\stm32f7xx_ll_usart.o
- $PROJ_DIR$\..\obj\stm32f7xx_hal_sai.pbi
- $PROJ_DIR$\..\obj\stm32f7xx_ll_dac.pbi
- $PROJ_DIR$\..\obj\stm32f7xx_hal_hash.o
- $PROJ_DIR$\..\obj\stm32f7xx_ll_rcc.o
- $PROJ_DIR$\..\obj\stm32f7xx_hal_rng.pbi
- $PROJ_DIR$\..\lib\CMSIS\Include\core_cmInstr.h
+ $PROJ_DIR$\..\obj\stm32f7xx_ll_exti.__cstat.et
$PROJ_DIR$\..\obj\stm32f7xx_hal_sai_ex.pbi
- $PROJ_DIR$\..\obj\stm32f7xx_ll_gpio.__cstat.et
- $PROJ_DIR$\..\obj\stm32f7xx_ll_lptim.o
$PROJ_DIR$\..\obj\stm32f7xx_hal_sdram.pbi
- $PROJ_DIR$\..\obj\stm32f7xx_ll_usart.__cstat.et
- $PROJ_DIR$\..\obj\stm32f7xx_ll_spi.__cstat.et
- $PROJ_DIR$\..\lib\CMSIS\Include\core_cmSimd.h
- $PROJ_DIR$\..\obj\stm32f7xx_hal_sram.pbi
- $PROJ_DIR$\..\obj\stm32f7xx_ll_utils.__cstat.et
- $PROJ_DIR$\..\obj\stm32f7xx_ll_lptim.pbi
- $PROJ_DIR$\..\obj\stm32f7xx_ll_sdmmc.__cstat.et
- $PROJ_DIR$\..\obj\stm32f7xx_ll_i2c.pbi
- $PROJ_DIR$\..\obj\stm32f7xx_ll_rng.__cstat.et
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_wwdg.__cstat.et
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_iwdg.o
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_pwr_ex.o
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_dcmi_ex.o
$PROJ_DIR$\..\obj\stm32f7xx_ll_gpio.o
$PROJ_DIR$\..\lib\CMSIS\Include\core_cmFunc.h
- $PROJ_DIR$\..\obj\stm32f7xx_ll_tim.__cstat.et
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_timebase_tim_template.o
+ $PROJ_DIR$\..\obj\stm32f7xx_ll_spi.__cstat.et
$PROJ_DIR$\..\obj\stm32f7xx_ll_sdmmc.o
- $PROJ_DIR$\..\obj\stm32f7xx_ll_rcc.__cstat.et
- $PROJ_DIR$\..\obj\stm32f7xx_hal_rtc_ex.pbi
+ $PROJ_DIR$\..\lib\CMSIS\Include\core_cmInstr.h
+ $PROJ_DIR$\..\obj\stm32f7xx_ll_lptim.pbi
+ $PROJ_DIR$\..\obj\stm32f7xx_ll_fmc.pbi
+ $PROJ_DIR$\..\obj\stm32f7xx_ll_sdmmc.__cstat.et
$PROJ_DIR$\..\obj\stm32f7xx_ll_dac.__cstat.et
$PROJ_DIR$\..\obj\stm32f7xx_ll_rtc.__cstat.et
- $PROJ_DIR$\..\obj\stm32f7xx_ll_dma.__cstat.et
- $PROJ_DIR$\..\obj\stm32f7xx_ll_exti.__cstat.et
- $PROJ_DIR$\..\obj\stm32f7xx_ll_fmc.pbi
+ $PROJ_DIR$\..\obj\stm32f7xx_ll_utils.__cstat.et
$PROJ_DIR$\..\obj\stm32f7xx_hal_wwdg.o
+ $PROJ_DIR$\..\obj\stm32f7xx_ll_rng.pbi
+ $PROJ_DIR$\..\obj\stm32f7xx_ll_tim.__cstat.et
+ $PROJ_DIR$\..\obj\stm32f7xx_ll_usb.o
+ $PROJ_DIR$\..\obj\stm32f7xx_ll_gpio.__cstat.et
+ $PROJ_DIR$\..\obj\stm32f7xx_ll_rcc.__cstat.et
$PROJ_DIR$\..\obj\stm32f7xx_hal_sai_ex.o
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_mmc.o
+ $PROJ_DIR$\..\obj\stm32f7xx_ll_lptim.o
$PROJ_DIR$\..\obj\stm32f7xx_hal_ltdc.pbi
$PROJ_DIR$\..\obj\system_stm32f7xx.o
$PROJ_DIR$\..\obj\stm32f7xx_ll_rtc.o
- $PROJ_DIR$\..\obj\stm32f7xx_hal_timebase_tim_template.o
- $PROJ_DIR$\..\obj\stm32f7xx_ll_usb.o
- $PROJ_DIR$\..\obj\stm32f7xx_hal_mdios.pbi
- $PROJ_DIR$\..\obj\stm32f7xx_hal_jpeg.pbi
- $PROJ_DIR$\..\obj\stm32f7xx_hal_rng.o
- $PROJ_DIR$\..\obj\stm32f7xx_ll_usb.__cstat.et
- $PROJ_DIR$\..\obj\stm32f7xx_hal_iwdg.pbi
- $PROJ_DIR$\..\obj\stm32f7xx_ll_dma2d.o
- $PROJ_DIR$\..\obj\stm32f7xx_hal_ltdc_ex.pbi
- $PROJ_DIR$\..\obj\stm32f7xx_hal_sai.o
- $PROJ_DIR$\..\obj\stm32f7xx_ll_rng.o
- $PROJ_DIR$\..\obj\stm32f7xx_hal_smartcard.o
$PROJ_DIR$\..\obj\stm32f7xx_hal_timebase_rtc_alarm_template.o
- $TOOLKIT_DIR$\inc\c\ysizet.h
- $PROJ_DIR$\..\obj\stm32f7xx_hal_mmc.pbi
- $PROJ_DIR$\..\obj\stm32f7xx_ll_adc.o
- $PROJ_DIR$\..\obj\stm32f7xx_hal_rtc_ex.o
- $PROJ_DIR$\..\..\..\..\Source\ARMCM7_STM32F7\uart.c
- $PROJ_DIR$\..\obj\stm32f7xx_ll_dma.o
- $PROJ_DIR$\..\obj\stm32f7xx_ll_pwr.__cstat.et
- $PROJ_DIR$\..\obj\stm32f7xx_hal_usart.o
- $PROJ_DIR$\..\obj\stm32f7xx_ll_exti.o
- $PROJ_DIR$\..\obj\stm32f7xx_hal_lptim.pbi
- $PROJ_DIR$\..\obj\stm32f7xx_ll_dac.o
- $PROJ_DIR$\..\obj\stm32f7xx_hal_sd.o
- $PROJ_DIR$\..\obj\stm32f7xx_hal_msp_template.pbi
- $PROJ_DIR$\..\obj\stm32f7xx_hal_hash_ex.pbi
- $PROJ_DIR$\..\obj\stm32f7xx_hal_iwdg.__cstat.et
+ $PROJ_DIR$\..\lib\CMSIS\Include\core_cmSimd.h
$PROJ_DIR$\..\obj\stm32f7xx_hal_msp_template.__cstat.et
- $PROJ_DIR$\..\obj\stm32f7xx_hal_sai_ex.__cstat.et
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_lptim.pbi
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_msp_template.pbi
+ $PROJ_DIR$\..\obj\stm32f7xx_ll_dac.o
+ $PROJ_DIR$\..\obj\stm32f7xx_ll_i2c.pbi
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_iwdg.__cstat.et
+ $PROJ_DIR$\..\obj\stm32f7xx_ll_rng.__cstat.et
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_jpeg.pbi
+ $PROJ_DIR$\..\obj\stm32f7xx_ll_pwr.__cstat.et
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_sai.o
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_mdios.pbi
$PROJ_DIR$\..\obj\stm32f7xx_hal_timebase_tim_template.__cstat.et
- $PROJ_DIR$\..\obj\stm32f7xx_hal_eth.pbi
$PROJ_DIR$\..\obj\stm32f7xx_hal_smartcard.__cstat.et
- $PROJ_DIR$\..\obj\stm32f7xx_hal_uart.__cstat.et
- $PROJ_DIR$\..\obj\stm32f7xx_hal_cec.o
- $PROJ_DIR$\..\obj\stm32f7xx_hal_hcd.__cstat.et
- $PROJ_DIR$\..\obj\stm32f7xx_hal_spdifrx.__cstat.et
- $PROJ_DIR$\..\obj\stm32f7xx_hal_nand.__cstat.et
- $PROJ_DIR$\..\obj\stm32f7xx_hal_rtc_ex.__cstat.et
- $PROJ_DIR$\..\obj\stm32f7xx_hal_rtc.__cstat.et
- $TOOLKIT_DIR$\inc\c\stdint.h
- $PROJ_DIR$\..\obj\stm32f7xx_hal_i2s.__cstat.et
- $PROJ_DIR$\..\obj\stm32f7xx_hal_irda.pbi
- $PROJ_DIR$\..\obj\main.o
- $PROJ_DIR$\..\obj\stm32f7xx_hal_timebase_rtc_wakeup_template.__cstat.et
- $PROJ_DIR$\..\obj\stm32f7xx_hal.o
- $PROJ_DIR$\..\obj\stm32f7xx_hal_i2c_ex.__cstat.et
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_msp_template.c
- $PROJ_DIR$\..\obj\stm32f7xx_hal_irda.__cstat.et
- $PROJ_DIR$\..\obj\stm32f7xx_hal_hash_ex.__cstat.et
- $PROJ_DIR$\..\obj\stm32f7xx_hal_sdram.__cstat.et
- $PROJ_DIR$\..\obj\stm32f7xx_hal_sd.__cstat.et
- $TOOLKIT_DIR$\inc\c\cmsis_iar.h
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_timebase_tim_template.c
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_timebase_rtc_alarm_template.c
- $PROJ_DIR$\..\obj\stm32f7xx_hal_tim_ex.__cstat.et
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_sram.pbi
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_sai_ex.__cstat.et
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_smartcard.o
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_rng.o
+ $PROJ_DIR$\..\obj\stm32f7xx_ll_dma.o
+ $PROJ_DIR$\..\obj\stm32f7xx_ll_exti.o
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_usart.o
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_rtc_ex.pbi
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_sd.o
+ $PROJ_DIR$\..\obj\stm32f7xx_ll_dma.__cstat.et
+ $PROJ_DIR$\..\obj\stm32f7xx_ll_usart.__cstat.et
+ $PROJ_DIR$\..\obj\stm32f7xx_ll_usb.__cstat.et
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_hash_ex.pbi
+ $PROJ_DIR$\..\obj\stm32f7xx_ll_dma2d.o
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_eth.pbi
+ $PROJ_DIR$\..\obj\stm32f7xx_ll_rng.o
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_rtc_ex.o
$PROJ_DIR$\..\obj\stm32f7xx_hal_i2c.__cstat.et
- $PROJ_DIR$\..\obj\stm32f7xx_hal_hash.__cstat.et
- $PROJ_DIR$\..\obj\stm32f7xx_hal_rcc.__cstat.et
- $PROJ_DIR$\..\obj\stm32f7xx_hal_flash_ex.__cstat.et
- $PROJ_DIR$\..\obj\stm32f7xx_hal_pcd.__cstat.et
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_tim_ex.__cstat.et
$PROJ_DIR$\..\obj\stm32f7xx_hal_crc_ex.pbi
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_spdifrx.__cstat.et
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_sdram.__cstat.et
+ $TOOLKIT_DIR$\inc\c\cmsis_iar.h
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_rtc.__cstat.et
+ $PROJ_DIR$\..\obj\stm32f7xx_hal.o
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_pcd.__cstat.et
$PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_dsi.c
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_nand.__cstat.et
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_mmc.pbi
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_cec.o
+ $TOOLKIT_DIR$\inc\c\stdint.h
$PROJ_DIR$\..\stm32f746xx_flash.icf
- $TOOLKIT_DIR$\inc\c\DLib_Defaults.h
- $PROJ_DIR$\..\obj\stm32f7xx_hal_uart.o
- $PROJ_DIR$\..\obj\stm32f7xx_hal_hcd.pbi
- $PROJ_DIR$\..\obj\stm32f7xx_hal_jpeg.__cstat.et
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_i2c_ex.__cstat.et
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_hcd.__cstat.et
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_rtc_ex.__cstat.et
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_sd.__cstat.et
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_timebase_rtc_alarm_template.c
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_hash_ex.__cstat.et
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_iwdg.pbi
+ $PROJ_DIR$\..\..\..\..\Source\ARMCM7_STM32F7\uart.c
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_rcc.__cstat.et
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_ltdc_ex.pbi
+ $TOOLKIT_DIR$\inc\c\ysizet.h
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_i2s.__cstat.et
+ $PROJ_DIR$\..\obj\main.o
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_uart.__cstat.et
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_flash_ex.__cstat.et
+ $PROJ_DIR$\..\obj\stm32f7xx_ll_adc.o
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_pcd_ex.__cstat.et
$TOOLKIT_DIR$\inc\c\DLib_Threads.h
- $PROJ_DIR$\..\obj\stm32f7xx_hal_dac_ex.pbi
- $PROJ_DIR$\..\obj\stm32f7xx_hal_rng.__cstat.et
- $PROJ_DIR$\..\obj\stm32f7xx_ll_crc.o
- $PROJ_DIR$\..\obj\stm32f7xx_hal_hash.pbi
$PROJ_DIR$\..\obj\stm32f7xx_hal_pwr_ex.__cstat.et
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_hash.pbi
+ $TOOLKIT_DIR$\lib\dl7M_tlf.a
+ $TOOLKIT_DIR$\inc\c\DLib_Config_Full.h
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_timebase_tim_template.c
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_ltdc.__cstat.et
+ $PROJ_DIR$\..\obj\stm32f7xx_ll_crc.o
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_irda.__cstat.et
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_dma2d.__cstat.et
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_cec.pbi
+ $TOOLKIT_DIR$\inc\c\DLib_Defaults.h
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_mmc.__cstat.et
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_uart.o
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_i2s.pbi
+ $TOOLKIT_DIR$\inc\c\intrinsics.h
$PROJ_DIR$\..\obj\stm32f7xx_hal_dsi.__cstat.et
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_crc.__cstat.et
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_rng.__cstat.et
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_cryp_ex.pbi
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_hash.__cstat.et
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_irda.pbi
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_timebase_rtc_wakeup_template.__cstat.et
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_msp_template.c
+ $PROJ_DIR$\..\obj\stm32f7xx_ll_fmc.o
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_hcd.pbi
$PROJ_DIR$\..\obj\stm32f7xx_hal_nand.pbi
$PROJ_DIR$\..\obj\stm32f7xx_hal_sdram.o
- $PROJ_DIR$\..\obj\stm32f7xx_hal_dcmi_ex.pbi
- $PROJ_DIR$\..\obj\stm32f7xx_hal_dfsdm.__cstat.et
- $PROJ_DIR$\..\obj\stm32f7xx_hal_i2s.pbi
- $PROJ_DIR$\..\obj\stm32f7xx_ll_fmc.o
- $PROJ_DIR$\..\obj\stm32f7xx_hal_cec.pbi
- $TOOLKIT_DIR$\inc\c\ycheck.h
- $PROJ_DIR$\..\obj\stm32f7xx_hal_lptim.__cstat.et
- $PROJ_DIR$\..\obj\stm32f7xx_hal_tim_ex.o
- $PROJ_DIR$\..\obj\stm32f7xx_hal_cryp_ex.pbi
- $PROJ_DIR$\..\obj\stm32f7xx_hal_dac.pbi
- $PROJ_DIR$\..\obj\stm32f7xx_hal_pcd_ex.__cstat.et
- $PROJ_DIR$\..\obj\stm32f7xx_hal_ltdc.__cstat.et
- $PROJ_DIR$\..\obj\stm32f7xx_hal_crc.__cstat.et
- $TOOLKIT_DIR$\lib\dl7M_tlf.a
- $PROJ_DIR$\..\obj\stm32f7xx_hal_dma2d.__cstat.et
- $TOOLKIT_DIR$\inc\c\intrinsics.h
- $PROJ_DIR$\..\obj\stm32f7xx_hal_mmc.__cstat.et
$PROJ_DIR$\..\obj\stm32f7xx_hal_gpio.__cstat.et
- $TOOLKIT_DIR$\inc\c\DLib_Config_Full.h
- $PROJ_DIR$\..\obj\stm32f7xx_hal_tim.__cstat.et
- $TOOLKIT_DIR$\inc\c\stdio.h
- $PROJ_DIR$\..\obj\stm32f7xx_hal_dac.__cstat.et
- $PROJ_DIR$\..\obj\stm32f7xx_hal_spi.__cstat.et
- $TOOLKIT_DIR$\inc\c\yvals.h
- $PROJ_DIR$\..\obj\stm32f7xx_hal_dfsdm.pbi
- $TOOLKIT_DIR$\lib\m7M_tls.a
- $PROJ_DIR$\..\obj\stm32f7xx_hal_cryp.pbi
- $PROJ_DIR$\..\obj\stm32f7xx_hal_crc_ex.__cstat.et
- $PROJ_DIR$\..\obj\stm32f7xx_hal_rcc_ex.__cstat.et
- $PROJ_DIR$\..\obj\stm32f7xx_hal_dcmi.__cstat.et
- $PROJ_DIR$\..\obj\stm32f7xx_hal_nor.__cstat.et
- $PROJ_DIR$\..\obj\stm32f7xx_hal_dac_ex.__cstat.et
- $PROJ_DIR$\..\obj\stm32f7xx_hal_msp.o
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_lptim.__cstat.et
+ $PROJ_DIR$\..\obj\stm32f7xx_hal.__cstat.et
$PROJ_DIR$\..\obj\stm32f7xx_hal_eth.__cstat.et
$TOOLKIT_DIR$\inc\c\ystdio.h
- $PROJ_DIR$\..\obj\stm32f7xx_hal_cryp.__cstat.et
- $PROJ_DIR$\..\obj\stm32f7xx_hal_flash.__cstat.et
- $PROJ_DIR$\..\obj\stm32f7xx_hal_dma2d.pbi
- $PROJ_DIR$\..\obj\stm32f7xx_hal_adc_ex.pbi
- $PROJ_DIR$\..\obj\assert.o
- $PROJ_DIR$\..\obj\stm32f7xx_hal_dcmi.pbi
- $PROJ_DIR$\..\obj\stm32f7xx_hal_dsi.pbi
- $PROJ_DIR$\..\obj\stm32f7xx_hal_dma_ex.__cstat.et
- $PROJ_DIR$\..\obj\stm32f7xx_hal_mdios.__cstat.et
- $PROJ_DIR$\..\obj\stm32f7xx_hal.__cstat.et
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_ll_rtc.c
- $PROJ_DIR$\..\obj\stm32f7xx_hal_can.xcl
- $PROJ_DIR$\..\obj\stm32f7xx_hal_tim_ex.xcl
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_ll_fmc.c
- $PROJ_DIR$\..\obj\hooks.xcl
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_dma2d.c
$PROJ_DIR$\..\obj\main.xcl
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_ll_lptim.c
- $PROJ_DIR$\..\obj\stm32f7xx_hal_pwr.__cstat.et
- $PROJ_DIR$\..\obj\startup_stm32f746xx.o
- $PROJ_DIR$\..\obj\stm32f7xx_ll_gpio.xcl
- $PROJ_DIR$\..\obj\stm32f7xx_hal_pwr.xcl
- $PROJ_DIR$\..\obj\stm32f7xx_hal_flash_ex.xcl
- $PROJ_DIR$\..\obj\cpu_comp.xcl
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_hash_ex.c
- $PROJ_DIR$\..\obj\system_stm32f7xx.xcl
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_ll_dac.c
- $PROJ_DIR$\..\obj\stm32f7xx_ll_rcc.xcl
- $TOOLKIT_DIR$\inc\c\iccarm_builtin.h
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_nand.c
- $PROJ_DIR$\..\obj\stm32f7xx_ll_exti.xcl
- $PROJ_DIR$\..\obj\stm32f7xx_hal_adc_ex.o
- $PROJ_DIR$\..\obj\stm32f7xx_hal_qspi.__cstat.et
- $PROJ_DIR$\..\obj\stm32f7xx_hal_rcc.xcl
- $PROJ_DIR$\..\obj\stm32f7xx_hal_pwr_ex.xcl
- $PROJ_DIR$\..\obj\stm32f7xx_hal_sai.__cstat.et
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_iwdg.c
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_tim.__cstat.et
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_flash.__cstat.et
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_rng.c
$PROJ_DIR$\..\obj\stm32f7xx_hal_cryp_ex.__cstat.et
- $PROJ_DIR$\..\obj\stm32f7xx_hal_ltdc_ex.__cstat.et
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_ll_fmc.c
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_tim_ex.xcl
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_cryp.__cstat.et
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_can.xcl
+ $PROJ_DIR$\..\obj\hooks.xcl
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_rcc.xcl
+ $TOOLKIT_DIR$\inc\c\yvals.h
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_dac_ex.__cstat.et
+ $TOOLKIT_DIR$\lib\m7M_tls.a
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_hash_ex.c
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_rcc_ex.__cstat.et
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_msp.o
+ $TOOLKIT_DIR$\inc\c\stdio.h
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_adc_ex.pbi
+ $PROJ_DIR$\..\obj\stm32f7xx_ll_rcc.xcl
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_dma_ex.__cstat.et
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_cryp.pbi
+ $PROJ_DIR$\..\obj\assert.o
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_dsi.pbi
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_pwr.xcl
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_mdios.__cstat.et
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_crc_ex.__cstat.et
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_nor.__cstat.et
+ $PROJ_DIR$\..\stm32f7xx_it.c
+ $PROJ_DIR$\..\obj\stm32f7xx_ll_gpio.xcl
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_adc_ex.o
$PROJ_DIR$\..\obj\stm32f7xx_ll_utils.xcl
- $PROJ_DIR$\..\obj\stm32f7xx_hal_i2c_ex.xcl
+ $TOOLKIT_DIR$\inc\c\iccarm_builtin.h
+ $PROJ_DIR$\..\obj\startup_stm32f746xx.o
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_tim_ex.o
$PROJ_DIR$\..\obj\flash.xcl
$PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_usart.c
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_dac_ex.pbi
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_qspi.__cstat.et
+ $TOOLKIT_DIR$\inc\c\ycheck.h
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_i2c_ex.xcl
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_jpeg.__cstat.et
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_pwr_ex.xcl
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_dfsdm.__cstat.et
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_dma2d.c
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_nand.c
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_pwr.__cstat.et
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_dcmi_ex.pbi
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_ltdc_ex.__cstat.et
$PROJ_DIR$\..\obj\usbd_ctlreq.__cstat.et
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_iwdg.c
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_sai.__cstat.et
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_dac.pbi
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_ll_lptim.c
+ $PROJ_DIR$\..\obj\cpu_comp.xcl
+ $PROJ_DIR$\..\obj\system_stm32f7xx.xcl
$PROJ_DIR$\..\obj\stm32f7xx_hal_cec.__cstat.et
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_rng.c
- $PROJ_DIR$\..\stm32f7xx_it.c
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_smbus.c
+ $PROJ_DIR$\..\obj\stm32f7xx_ll_exti.xcl
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_flash_ex.xcl
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_ll_dac.c
+ $TOOLKIT_DIR$\inc\c\string.h
$PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_sai.c
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_qspi.c
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_spi.c
- $PROJ_DIR$\..\main.h
- $PROJ_DIR$\..\obj\cop.xcl
- $PROJ_DIR$\..\obj\com.xcl
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_smartcard.c
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_smartcard_ex.c
- $PROJ_DIR$\..\stm32f7xx_hal_msp.c
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_ll_adc.c
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_sd.c
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_jpeg.c
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_wwdg.c
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_sram.c
- $PROJ_DIR$\..\obj\boot.xcl
- $PROJ_DIR$\..\obj\usbd_conf.o
- $PROJ_DIR$\..\obj\stm32f7xx_hal_dma_ex.xcl
- $PROJ_DIR$\..\obj\file.xcl
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_ltdc.c
+ $PROJ_DIR$\..\obj\uart.__cstat.et
$PROJ_DIR$\..\stm32f7xx_it.h
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_ll_rng.c
$PROJ_DIR$\..\obj\timer.xcl
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_spi.c
$PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_ll_spi.c
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_ll_dma2d.c
- $PROJ_DIR$\..\obj\stm32f7xx_hal_can.o
$PROJ_DIR$\..\obj\hooks.o
- $PROJ_DIR$\..\obj\stm32f7xx_hal_dac_ex.o
$PROJ_DIR$\..\obj\stm32f7xx_hal_timebase_rtc_alarm_template.__cstat.et
+ $PROJ_DIR$\..\obj\usbd_conf.o
$PROJ_DIR$\..\obj\nvm.o
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_smbus.c
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_dfsdm.c
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_ll_dma2d.c
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_dac_ex.o
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_smartcard_ex.c
$PROJ_DIR$\..\obj\can.xcl
$TOOLKIT_DIR$\inc\c\DLib_Product_string.h
- $TOOLKIT_DIR$\inc\c\iar_intrinsics_common.h
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_dcmi.c
- $PROJ_DIR$\..\obj\timer.o
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_sai_ex.c
- $PROJ_DIR$\..\obj\backdoor.o
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_hcd.c
- $PROJ_DIR$\..\obj\cop.o
- $PROJ_DIR$\..\bin\openblt_stm32f746.srec
- $TOOLKIT_DIR$\inc\c\ctype.h
+ $PROJ_DIR$\..\obj\com.xcl
+ $PROJ_DIR$\..\stm32f7xx_hal_msp.c
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_wwdg.c
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_sd.c
+ $PROJ_DIR$\..\main.h
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_pcd.xcl
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_qspi.c
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_smartcard.c
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_exti.xcl
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_dac.c
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_ll_rng.c
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_can.o
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_lptim.c
+ $PROJ_DIR$\..\obj\cop.__cstat.et
$PROJ_DIR$\..\obj\stm32f7xx_hal_crc_ex.o
- $PROJ_DIR$\..\obj\stm32f7xx_hal_dac.o
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_timebase_rtc_wakeup_template.c
- $PROJ_DIR$\..\obj\file.o
- $PROJ_DIR$\..\obj\stm32f7xx_hal_smbus.__cstat.et
- $PROJ_DIR$\..\obj\can.o
- $PROJ_DIR$\..\obj\stm32f7xx_hal_cryp.o
- $PROJ_DIR$\..\obj\stm32f7xx_hal_smartcard_ex.__cstat.et
$PROJ_DIR$\..\obj\stm32f7xx_hal_sram.__cstat.et
- $PROJ_DIR$\..\obj\uart.o
+ $PROJ_DIR$\..\obj\cop.o
+ $PROJ_DIR$\..\obj\can.o
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_sram.c
+ $PROJ_DIR$\..\bin\openblt_stm32f746.srec
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_cryp_ex.o
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_sai_ex.c
$PROJ_DIR$\..\obj\cpu.xcl
- $PROJ_DIR$\..\obj\stm32f7xx_hal_cortex.o
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_dma_ex.xcl
+ $PROJ_DIR$\..\obj\file.o
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_hash.c
+ $PROJ_DIR$\..\obj\cop.xcl
+ $PROJ_DIR$\..\obj\boot.xcl
+ $TOOLKIT_DIR$\inc\c\ctype.h
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_ltdc.c
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_timebase_rtc_wakeup_template.c
+ $PROJ_DIR$\..\obj\uart.o
$PROJ_DIR$\..\obj\stm32f7xx_hal.xcl
$PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_mdios.c
- $PROJ_DIR$\..\obj\stm32f7xx_hal_cryp_ex.o
- $PROJ_DIR$\..\obj\stm32f7xx_hal_crc.o
- $PROJ_DIR$\..\obj\flash.o
- $PROJ_DIR$\..\obj\timer.__cstat.et
+ $PROJ_DIR$\..\obj\backdoor.o
+ $TOOLKIT_DIR$\inc\c\iar_intrinsics_common.h
+ $PROJ_DIR$\..\obj\timer.o
$PROJ_DIR$\..\obj\cpu_comp.__cstat.et
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_ll_pwr.c
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_hash.c
+ $PROJ_DIR$\..\obj\file.xcl
$PROJ_DIR$\..\obj\com.o
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_jpeg.c
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_dac.o
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_smbus.__cstat.et
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_ll_adc.c
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_ll_pwr.c
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_hcd.c
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_ll_rtc.c
$PROJ_DIR$\..\obj\xcp.o
- $PROJ_DIR$\..\obj\stm32f7xx_hal_dma.xcl
- $PROJ_DIR$\..\obj\file.__cstat.et
- $PROJ_DIR$\..\obj\xcp.__cstat.et
- $PROJ_DIR$\..\obj\cpu.o
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_cec.c
- $PROJ_DIR$\..\obj\led.__cstat.et
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_cryp.c
- $PROJ_DIR$\..\obj\net.o
- $PROJ_DIR$\..\obj\boot.__cstat.et
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_crc.c
- $PROJ_DIR$\..\obj\boot.o
- $PROJ_DIR$\..\obj\backdoor.__cstat.et
- $PROJ_DIR$\..\obj\stm32f7xx_hal_adc.o
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_i2s.c
- $PROJ_DIR$\..\obj\openblt_stm32f746.map
- $PROJ_DIR$\..\obj\led.o
- $PROJ_DIR$\..\obj\assert.__cstat.et
- $PROJ_DIR$\..\obj\cpu.__cstat.et
- $PROJ_DIR$\..\obj\net.__cstat.et
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_adc_ex.c
- $PROJ_DIR$\..\bin\openblt_stm32f746.out
- $PROJ_DIR$\..\obj\can.__cstat.et
- $PROJ_DIR$\..\obj\cpu_comp.o
- $PROJ_DIR$\..\obj\nvm.__cstat.et
- $PROJ_DIR$\..\obj\hooks.__cstat.et
- $PROJ_DIR$\..\obj\com.__cstat.et
- $PROJ_DIR$\..\obj\stm32f7xx_hal_rcc_ex.xcl
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_nor.c
+ $PROJ_DIR$\..\obj\led.xcl
$PROJ_DIR$\..\obj\stm32f7xx_hal_gpio.xcl
$PROJ_DIR$\..\obj\stm32f7xx_ll_usart.xcl
- $PROJ_DIR$\..\obj\led.xcl
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_irda.c
- $PROJ_DIR$\..\obj\stm32f7xx_hal_flash.xcl
- $PROJ_DIR$\..\obj\uart.__cstat.et
- $PROJ_DIR$\..\obj\stm32f7xx_hal_tim.xcl
- $PROJ_DIR$\..\obj\stm32f7xx_ll_dma.xcl
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_lptim.c
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_dcmi_ex.c
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_rtc_ex.c
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_dfsdm.c
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_ll_tim.c
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_mmc.c
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_rtc.c
- $PROJ_DIR$\..\obj\stm32f7xx_hal_cortex.__cstat.et
- $TOOLKIT_DIR$\inc\c\string.h
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_dac_ex.c
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_dac.c
+ $PROJ_DIR$\..\obj\cpu.o
+ $PROJ_DIR$\..\obj\net.o
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_adc.o
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_dma2d.pbi
+ $PROJ_DIR$\..\obj\net.__cstat.et
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_nor.c
+ $PROJ_DIR$\..\obj\openblt_stm32f746.map
+ $PROJ_DIR$\..\bin\openblt_stm32f746.out
+ $PROJ_DIR$\..\obj\led.o
+ $PROJ_DIR$\..\obj\can.__cstat.et
+ $PROJ_DIR$\..\obj\hooks.__cstat.et
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_dac.__cstat.et
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_i2s.c
+ $PROJ_DIR$\..\obj\com.__cstat.et
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_cec.c
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_crc.c
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_dfsdm.pbi
+ $PROJ_DIR$\..\obj\boot.__cstat.et
+ $PROJ_DIR$\..\obj\xcp.__cstat.et
+ $PROJ_DIR$\..\obj\led.__cstat.et
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_dcmi.pbi
+ $PROJ_DIR$\..\obj\backdoor.__cstat.et
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_dma.xcl
+ $PROJ_DIR$\..\obj\cpu.__cstat.et
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_spi.__cstat.et
+ $PROJ_DIR$\..\obj\nvm.__cstat.et
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_dcmi.__cstat.et
$PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_adc.c
- $PROJ_DIR$\..\obj\cop.__cstat.et
- $PROJ_DIR$\..\obj\stm32f7xx_hal_cortex.xcl
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_spdifrx.c
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_ll_i2c.c
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_ltdc_ex.c
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_tim.xcl
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_adc_ex.c
+ $PROJ_DIR$\..\obj\boot.o
$PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_crc_ex.c
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_cryp_ex.c
+ $PROJ_DIR$\..\obj\cpu_comp.o
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_rtc.c
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_ll_tim.c
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_ltdc_ex.c
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_rcc_ex.xcl
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_cortex.xcl
$PROJ_DIR$\..\obj\flash.__cstat.et
- $PROJ_DIR$\..\obj\stm32f7xx_hal_exti.xcl
- $PROJ_DIR$\..\obj\stm32f7xx_hal_pcd.xcl
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_ll_i2c.c
$PROJ_DIR$\..\obj\stm32f7xx_hal_exti.o
$PROJ_DIR$\..\obj\usb.o
$PROJ_DIR$\..\obj\rs232.o
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_dcmi_ex.c
$PROJ_DIR$\..\obj\stm32f7xx_ll_usb.xcl
$PROJ_DIR$\..\obj\rs232.xcl
- $PROJ_DIR$\..\obj\rs232.__cstat.et
+ $PROJ_DIR$\..\obj\file.__cstat.et
+ $PROJ_DIR$\..\obj\assert.__cstat.et
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_cortex.__cstat.et
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_flash.xcl
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_irda.c
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_spdifrx.c
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_dac_ex.c
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_mmc.c
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_cryp_ex.c
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_rtc_ex.c
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_cryp.c
+ $PROJ_DIR$\..\obj\stm32f7xx_ll_dma.xcl
$PROJ_DIR$\..\obj\usb.xcl
- $PROJ_DIR$\..\obj\stm32f7xx_hal_pcd_ex.xcl
- $PROJ_DIR$\..\obj\usbd_ctlreq.xcl
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_cortex.o
+ $PROJ_DIR$\..\obj\timer.__cstat.et
+ $PROJ_DIR$\..\obj\usbd_ioreq.__cstat.et
+ $PROJ_DIR$\..\obj\backdoor.xcl
+ $PROJ_DIR$\..\obj\uart.xcl
$PROJ_DIR$\..\obj\usbd_conf.xcl
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_ll_crc.c
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_ll_sdmmc.c
- $PROJ_DIR$\..\obj\xcp.xcl
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_uart.c
- $PROJ_DIR$\..\obj\stm32f7xx_hal_exti.__cstat.et
- $PROJ_DIR$\..\obj\nvm.xcl
- $TOOLKIT_DIR$\inc\c\DLib_Product_stdlib.h
- $PROJ_DIR$\..\obj\usbd_bulk.__cstat.et
- $PROJ_DIR$\..\obj\usbd_ctlreq.o
- $PROJ_DIR$\..\obj\usbd_ioreq.xcl
- $TOOLKIT_DIR$\inc\c\stdlib.h
- $TOOLKIT_DIR$\inc\c\stddef.h
- $PROJ_DIR$\..\obj\assert.xcl
+ $PROJ_DIR$\..\obj\usbd_conf.__cstat.et
$PROJ_DIR$\..\obj\usbd_desc.o
+ $PROJ_DIR$\..\obj\usbd_desc.xcl
+ $PROJ_DIR$\..\obj\net.xcl
+ $PROJ_DIR$\..\obj\usbd_desc.__cstat.et
+ $PROJ_DIR$\..\obj\usbd_core.o
+ $PROJ_DIR$\..\obj\usbd_ctlreq.o
+ $PROJ_DIR$\..\obj\rs232.__cstat.et
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_ll_sdmmc.c
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_sdram.c
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_pcd_ex.xcl
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_crc.o
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_smartcard_ex.__cstat.et
+ $PROJ_DIR$\..\obj\usbd_bulk.__cstat.et
+ $PROJ_DIR$\..\obj\usb.__cstat.et
+ $TOOLKIT_DIR$\inc\c\stddef.h
+ $PROJ_DIR$\..\obj\usbd_ioreq.xcl
+ $PROJ_DIR$\..\obj\flash.o
$PROJ_DIR$\..\obj\usbd_bulk.o
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_cryp.o
+ $TOOLKIT_DIR$\inc\c\stdlib.h
+ $PROJ_DIR$\..\obj\assert.xcl
+ $TOOLKIT_DIR$\inc\c\DLib_Product_stdlib.h
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_ll_crc.c
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_dcmi.c
+ $PROJ_DIR$\..\obj\usbd_ioreq.o
+ $PROJ_DIR$\..\obj\usbd_ctlreq.xcl
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_uart.c
$PROJ_DIR$\..\obj\usbd_bulk.xcl
$PROJ_DIR$\..\obj\stm32f7xx_hal_i2c.xcl
- $PROJ_DIR$\..\obj\backdoor.xcl
- $PROJ_DIR$\..\obj\usbd_desc.__cstat.et
- $PROJ_DIR$\..\obj\uart.xcl
- $PROJ_DIR$\..\obj\usbd_core.o
- $PROJ_DIR$\..\obj\usbd_conf.__cstat.et
- $PROJ_DIR$\..\obj\usbd_ioreq.__cstat.et
- $PROJ_DIR$\..\obj\net.xcl
- $PROJ_DIR$\..\obj\usbd_desc.xcl
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_sdram.c
- $PROJ_DIR$\..\obj\usb.__cstat.et
- $PROJ_DIR$\..\obj\usbd_ioreq.o
- $PROJ_DIR$\..\obj\usbd_core.xcl
$PROJ_DIR$\..\obj\usbd_core.__cstat.et
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_exti.__cstat.et
+ $PROJ_DIR$\..\obj\nvm.xcl
+ $PROJ_DIR$\..\obj\usbd_core.xcl
+ $PROJ_DIR$\..\obj\xcp.xcl
[ROOT_NODE]
ILINK
- 497 491
+ 482 481
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_i2c.c
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_dma_ex.c
ICCARM
- 154
+ 206
BICOMP
- 561
-
-
- __cstat
- 310
-
-
-
-
- ICCARM
- 15 73 53 5 23 31 16 294 336 354 318 349 131 2 0 1 394 30 12 8 556 267 50 19 28 3 21 14 13 24 20 29 7 11 59 58 47 41 60
-
-
-
-
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_cortex.c
-
-
- ICCARM
- 465
-
-
- BICOMP
- 526
-
-
- __cstat
- 520
-
-
-
-
- ICCARM
- 15 73 53 5 23 31 16 294 336 354 318 349 131 2 0 1 394 30 12 8 556 267 50 19 28 3 21 14 13 24 20 29 7 11 59 58 47 41 60
-
-
-
-
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_flash.c
-
-
- ICCARM
- 130
-
-
- BICOMP
- 509
+ 447
__cstat
@@ -655,76 +609,30 @@
ICCARM
- 15 73 53 5 23 31 16 294 336 354 318 349 131 2 0 1 394 30 12 8 556 267 50 19 28 3 21 14 13 24 20 29 7 11 59 58 47 41 60
+ 23 150 114 6 25 21 22 294 386 358 324 317 196 1 0 2 379 24 8 26 555 306 111 5 15 16 28 7 27 3 10 13 18 20 98 104 96 124 103
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_i2c_ex.c
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_flash.c
ICCARM
- 135
+ 163
BICOMP
- 405
+ 524
__cstat
- 300
+ 349
ICCARM
- 15 73 53 5 23 31 16 294 336 354 318 349 131 2 0 1 394 30 12 8 556 267 50 19 28 3 21 14 13 24 20 29 7 11 59 58 47 41 60
-
-
-
-
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_dma_ex.c
-
-
- ICCARM
- 160
-
-
- BICOMP
- 430
-
-
- __cstat
- 373
-
-
-
-
- ICCARM
- 15 73 53 5 23 31 16 294 336 354 318 349 131 2 0 1 394 30 12 8 556 267 50 19 28 3 21 14 13 24 20 29 7 11 59 58 47 41 60
-
-
-
-
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_exti.c
-
-
- ICCARM
- 535
-
-
- BICOMP
- 533
-
-
- __cstat
- 549
-
-
-
-
- ICCARM
- 15 73 53 5 23 31 16 294 336 354 318 349 131 2 0 1 394 30 12 8 556 267 50 19 28 3 21 14 13 24 20 29 7 11 59 58 47 41 60
+ 23 150 114 6 25 21 22 294 386 358 324 317 196 1 0 2 379 24 8 26 555 306 111 5 15 16 28 7 27 3 10 13 18 20 98 104 96 124 103
@@ -733,21 +641,21 @@
ICCARM
- 438
+ 435
BICOMP
- 377
+ 355
__cstat
- 170
+ 33
ICCARM
- 15 73 53 5 23 31 16 294 336 354 318 349 131 2 0 1 394 30 12 8 556 267 50 19 28 3 21 14 13 24 20 29 7 11 59 58 47 41 60
+ 23 150 114 6 25 21 22 294 386 358 324 317 196 1 0 2 379 24 8 26 555 306 111 5 15 16 28 7 27 3 10 13 18 20 98 104 96 124 103
@@ -756,44 +664,21 @@
ICCARM
- 153
+ 199
BICOMP
- 388
+ 404
__cstat
- 313
+ 310
ICCARM
- 15 73 53 5 23 31 16 294 336 354 318 349 131 2 0 1 394 30 12 8 556 267 50 19 28 3 21 14 13 24 20 29 7 11 59 58 47 41 60
-
-
-
-
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_dma.c
-
-
- ICCARM
- 180
-
-
- BICOMP
- 477
-
-
- __cstat
- 213
-
-
-
-
- ICCARM
- 15 73 53 5 23 31 16 294 336 354 318 349 131 2 0 1 394 30 12 8 556 267 50 19 28 3 21 14 13 24 20 29 7 11 59 58 47 41 60
+ 23 150 114 6 25 21 22 294 386 358 324 317 196 1 0 2 379 24 8 26 555 306 111 5 15 16 28 7 27 3 10 13 18 20 98 104 96 124 103
@@ -802,264 +687,11 @@
ICCARM
- 143
+ 198
BICOMP
- 505
-
-
- __cstat
- 348
-
-
-
-
- ICCARM
- 15 73 53 5 23 31 16 294 336 354 318 349 131 2 0 1 394 30 12 8 556 267 50 19 28 3 21 14 13 24 20 29 7 11 59 58 47 41 60
-
-
-
-
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal.c
-
-
- ICCARM
- 299
-
-
- BICOMP
- 466
-
-
- __cstat
- 375
-
-
-
-
- ICCARM
- 15 73 53 5 23 31 16 294 336 354 318 349 131 2 0 1 394 30 12 8 556 267 50 19 28 3 21 14 13 24 20 29 7 11 59 58 47 41 60
-
-
-
-
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_ll_rcc.c
-
-
- ICCARM
- 222
-
-
- BICOMP
- 393
-
-
- __cstat
- 242
-
-
-
-
- ICCARM
- 54 23 31 16 294 336 354 318 349 131 2 0 1 394 30 12 15 73 53 5 8 556 267 50 19 28 3 21 14 13 24 20 29 7 11 59 58 47 41 60
-
-
-
-
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_pwr.c
-
-
- ICCARM
- 205
-
-
- BICOMP
- 387
-
-
- __cstat
- 384
-
-
-
-
- ICCARM
- 15 73 53 5 23 31 16 294 336 354 318 349 131 2 0 1 394 30 12 8 556 267 50 19 28 3 21 14 13 24 20 29 7 11 59 58 47 41 60
-
-
-
-
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_ll_gpio.c
-
-
- ICCARM
- 238
-
-
- BICOMP
- 386
-
-
- __cstat
- 226
-
-
-
-
- ICCARM
- 46 23 31 16 294 336 354 318 349 131 2 0 1 394 30 12 15 73 53 5 8 556 267 50 19 28 3 21 14 13 24 20 29 7 11 59 58 47 41 60 42
-
-
-
-
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_ll_usart.c
-
-
- ICCARM
- 218
-
-
- BICOMP
- 506
-
-
- __cstat
- 229
-
-
-
-
- ICCARM
- 43 23 31 16 294 336 354 318 349 131 2 0 1 394 30 12 15 73 53 5 8 556 267 50 19 28 3 21 14 13 24 20 29 7 11 59 58 47 41 60 54 42
-
-
-
-
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_ll_exti.c
-
-
- ICCARM
- 275
-
-
- BICOMP
- 396
-
-
- __cstat
- 247
-
-
-
-
- ICCARM
- 33 23 31 16 294 336 354 318 349 131 2 0 1 394 30 12 15 73 53 5 8 556 267 50 19 28 3 21 14 13 24 20 29 7 11 59 58 47 41 60
-
-
-
-
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_rcc_ex.c
-
-
- ICCARM
- 203
-
-
- BICOMP
- 503
-
-
- __cstat
- 359
-
-
-
-
- ICCARM
- 15 73 53 5 23 31 16 294 336 354 318 349 131 2 0 1 394 30 12 8 556 267 50 19 28 3 21 14 13 24 20 29 7 11 59 58 47 41 60
-
-
-
-
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_rcc.c
-
-
- ICCARM
- 157
-
-
- BICOMP
- 399
-
-
- __cstat
- 312
-
-
-
-
- ICCARM
- 15 73 53 5 23 31 16 294 336 354 318 349 131 2 0 1 394 30 12 8 556 267 50 19 28 3 21 14 13 24 20 29 7 11 59 58 47 41 60
-
-
-
-
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_ll_dma.c
-
-
- ICCARM
- 272
-
-
- BICOMP
- 512
-
-
- __cstat
- 246
-
-
-
-
- ICCARM
- 36 23 31 16 294 336 354 318 349 131 2 0 1 394 30 12 15 73 53 5 8 556 267 50 19 28 3 21 14 13 24 20 29 7 11 59 58 47 41 60 42
-
-
-
-
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_pcd.c
-
-
- ICCARM
- 211
-
-
- BICOMP
- 534
-
-
- __cstat
- 314
-
-
-
-
- ICCARM
- 15 73 53 5 23 31 16 294 336 354 318 349 131 2 0 1 394 30 12 8 556 267 50 19 28 3 21 14 13 24 20 29 7 11 59 58 47 41 60
-
-
-
-
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_pcd_ex.c
-
-
- ICCARM
- 187
-
-
- BICOMP
- 542
+ 473
__cstat
@@ -1069,7 +701,306 @@
ICCARM
- 15 73 53 5 23 31 16 294 336 354 318 349 131 2 0 1 394 30 12 8 556 267 50 19 28 3 21 14 13 24 20 29 7 11 59 58 47 41 60
+ 23 150 114 6 25 21 22 294 386 358 324 317 196 1 0 2 379 24 8 26 555 306 111 5 15 16 28 7 27 3 10 13 18 20 98 104 96 124 103
+
+
+
+
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_i2c.c
+
+
+ ICCARM
+ 175
+
+
+ BICOMP
+ 569
+
+
+ __cstat
+ 281
+
+
+
+
+ ICCARM
+ 23 150 114 6 25 21 22 294 386 358 324 317 196 1 0 2 379 24 8 26 555 306 111 5 15 16 28 7 27 3 10 13 18 20 98 104 96 124 103
+
+
+
+
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_i2c_ex.c
+
+
+ ICCARM
+ 215
+
+
+ BICOMP
+ 387
+
+
+ __cstat
+ 296
+
+
+
+
+ ICCARM
+ 23 150 114 6 25 21 22 294 386 358 324 317 196 1 0 2 379 24 8 26 555 306 111 5 15 16 28 7 27 3 10 13 18 20 98 104 96 124 103
+
+
+
+
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_cortex.c
+
+
+ ICCARM
+ 534
+
+
+ BICOMP
+ 512
+
+
+ __cstat
+ 523
+
+
+
+
+ ICCARM
+ 23 150 114 6 25 21 22 294 386 358 324 317 196 1 0 2 379 24 8 26 555 306 111 5 15 16 28 7 27 3 10 13 18 20 98 104 96 124 103
+
+
+
+
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal.c
+
+
+ ICCARM
+ 288
+
+
+ BICOMP
+ 456
+
+
+ __cstat
+ 343
+
+
+
+
+ ICCARM
+ 23 150 114 6 25 21 22 294 386 358 324 317 196 1 0 2 379 24 8 26 555 306 111 5 15 16 28 7 27 3 10 13 18 20 98 104 96 124 103
+
+
+
+
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_dma.c
+
+
+ ICCARM
+ 53
+
+
+ BICOMP
+ 497
+
+
+ __cstat
+ 46
+
+
+
+
+ ICCARM
+ 23 150 114 6 25 21 22 294 386 358 324 317 196 1 0 2 379 24 8 26 555 306 111 5 15 16 28 7 27 3 10 13 18 20 98 104 96 124 103
+
+
+
+
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_exti.c
+
+
+ ICCARM
+ 515
+
+
+ BICOMP
+ 432
+
+
+ __cstat
+ 571
+
+
+
+
+ ICCARM
+ 23 150 114 6 25 21 22 294 386 358 324 317 196 1 0 2 379 24 8 26 555 306 111 5 15 16 28 7 27 3 10 13 18 20 98 104 96 124 103
+
+
+
+
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_eth.c
+
+
+ ICCARM
+ 162
+
+
+ BICOMP
+ 278
+
+
+ __cstat
+ 344
+
+
+
+
+ ICCARM
+ 23 150 428 114 6 25 21 22 294 386 358 324 317 196 60 313 230 286 328 226 250 8 26 364 306 345 111 15 16 28 7 27 10 13 18 20 98 104
+
+
+
+
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_pcd_ex.c
+
+
+ ICCARM
+ 57
+
+
+ BICOMP
+ 550
+
+
+ __cstat
+ 312
+
+
+
+
+ ICCARM
+ 23 150 114 6 25 21 22 294 386 358 324 317 196 1 0 2 379 24 8 26 555 306 111 5 15 16 28 7 27 3 10 13 18 20 98 104 96 124 103
+
+
+
+
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_ll_dma.c
+
+
+ ICCARM
+ 268
+
+
+ BICOMP
+ 532
+
+
+ __cstat
+ 273
+
+
+
+
+ ICCARM
+ 120 25 21 22 294 386 358 324 317 196 1 0 2 379 24 8 23 150 114 6 26 555 306 111 5 15 16 28 7 27 3 10 13 18 20 98 104 96 124 103 110
+
+
+
+
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_ll_exti.c
+
+
+ ICCARM
+ 269
+
+
+ BICOMP
+ 403
+
+
+ __cstat
+ 218
+
+
+
+
+ ICCARM
+ 101 25 21 22 294 386 358 324 317 196 1 0 2 379 24 8 23 150 114 6 26 555 306 111 5 15 16 28 7 27 3 10 13 18 20 98 104 96 124 103
+
+
+
+
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_rcc_ex.c
+
+
+ ICCARM
+ 84
+
+
+ BICOMP
+ 511
+
+
+ __cstat
+ 362
+
+
+
+
+ ICCARM
+ 23 150 114 6 25 21 22 294 386 358 324 317 196 1 0 2 379 24 8 26 555 306 111 5 15 16 28 7 27 3 10 13 18 20 98 104 96 124 103
+
+
+
+
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_ll_rcc.c
+
+
+ ICCARM
+ 67
+
+
+ BICOMP
+ 366
+
+
+ __cstat
+ 242
+
+
+
+
+ ICCARM
+ 107 25 21 22 294 386 358 324 317 196 1 0 2 379 24 8 23 150 114 6 26 555 306 111 5 15 16 28 7 27 3 10 13 18 20 98 104 96 124 103
+
+
+
+
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_ll_usart.c
+
+
+ ICCARM
+ 56
+
+
+ BICOMP
+ 474
+
+
+ __cstat
+ 274
+
+
+
+
+ ICCARM
+ 109 25 21 22 294 386 358 324 317 196 1 0 2 379 24 8 23 150 114 6 26 555 306 111 5 15 16 28 7 27 3 10 13 18 20 98 104 96 124 103 107 110
@@ -1078,67 +1009,21 @@
ICCARM
- 255
+ 240
BICOMP
- 538
+ 519
__cstat
- 259
+ 275
ICCARM
- 15 73 53 5 23 31 16 294 336 354 318 349 131 2 0 1 394 30 12 8 556 267 50 19 28 3 21 14 13 24 20 29 7 11 59 58 47 41 60
-
-
-
-
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_pwr_ex.c
-
-
- ICCARM
- 166
-
-
- BICOMP
- 400
-
-
- __cstat
- 327
-
-
-
-
- ICCARM
- 15 73 53 5 23 31 16 294 336 354 318 349 131 2 0 1 394 30 12 8 556 267 50 19 28 3 21 14 13 24 20 29 7 11 59 58 47 41 60
-
-
-
-
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_tim_ex.c
-
-
- ICCARM
- 338
-
-
- BICOMP
- 378
-
-
- __cstat
- 309
-
-
-
-
- ICCARM
- 15 73 53 5 23 31 16 294 336 354 318 349 131 2 0 1 394 30 12 8 556 267 50 19 28 3 21 14 13 24 20 29 7 11 59 58 47 41 60
+ 23 150 114 6 25 21 22 294 386 358 324 317 196 1 0 2 379 24 8 26 555 306 111 5 15 16 28 7 27 3 10 13 18 20 98 104 96 124 103
@@ -1147,30 +1032,292 @@
ICCARM
- 144
+ 197
BICOMP
- 511
+ 503
__cstat
- 350
+ 348
ICCARM
- 15 73 53 5 23 31 16 294 336 354 318 349 131 2 0 1 394 30 12 8 556 267 50 19 28 3 21 14 13 24 20 29 7 11 59 58 47 41 60
+ 23 150 114 6 25 21 22 294 386 358 324 317 196 1 0 2 379 24 8 26 555 306 111 5 15 16 28 7 27 3 10 13 18 20 98 104 96 124 103
- $PROJ_DIR$\..\..\..\..\Source\ARMCM7_STM32F7\rs232.c
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_pwr.c
ICCARM
- 537
+ 76
+
+
+ BICOMP
+ 371
+
+
+ __cstat
+ 393
+
+
+
+
+ ICCARM
+ 23 150 114 6 25 21 22 294 386 358 324 317 196 1 0 2 379 24 8 26 555 306 111 5 15 16 28 7 27 3 10 13 18 20 98 104 96 124 103
+
+
+
+
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_tim_ex.c
+
+
+ ICCARM
+ 381
+
+
+ BICOMP
+ 353
+
+
+ __cstat
+ 282
+
+
+
+
+ ICCARM
+ 23 150 114 6 25 21 22 294 386 358 324 317 196 1 0 2 379 24 8 26 555 306 111 5 15 16 28 7 27 3 10 13 18 20 98 104 96 124 103
+
+
+
+
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_pwr_ex.c
+
+
+ ICCARM
+ 223
+
+
+ BICOMP
+ 389
+
+
+ __cstat
+ 314
+
+
+
+
+ ICCARM
+ 23 150 114 6 25 21 22 294 386 358 324 317 196 1 0 2 379 24 8 26 555 306 111 5 15 16 28 7 27 3 10 13 18 20 98 104 96 124 103
+
+
+
+
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_rcc.c
+
+
+ ICCARM
+ 191
+
+
+ BICOMP
+ 357
+
+
+ __cstat
+ 304
+
+
+
+
+ ICCARM
+ 23 150 114 6 25 21 22 294 386 358 324 317 196 1 0 2 379 24 8 26 555 306 111 5 15 16 28 7 27 3 10 13 18 20 98 104 96 124 103
+
+
+
+
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_ll_gpio.c
+
+
+ ICCARM
+ 225
+
+
+ BICOMP
+ 376
+
+
+ __cstat
+ 241
+
+
+
+
+ ICCARM
+ 116 25 21 22 294 386 358 324 317 196 1 0 2 379 24 8 23 150 114 6 26 555 306 111 5 15 16 28 7 27 3 10 13 18 20 98 104 96 124 103 110
+
+
+
+
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_pcd.c
+
+
+ ICCARM
+ 79
+
+
+ BICOMP
+ 429
+
+
+ __cstat
+ 289
+
+
+
+
+ ICCARM
+ 23 150 114 6 25 21 22 294 386 358 324 317 196 1 0 2 379 24 8 26 555 306 111 5 15 16 28 7 27 3 10 13 18 20 98 104 96 124 103
+
+
+
+
+ $PROJ_DIR$\..\usbd_bulk.c
+
+
+ ICCARM
+ 558
+
+
+ BICOMP
+ 568
+
+
+ __cstat
+ 553
+
+
+
+
+ ICCARM
+ 126 146 145 138 364 386 358 324 317 196 306 560 562 406 423 25 21 22 294 1 0 2 379 24 8 23 150 114 6 26 555 111 5 15 16 28 7 27 3 10 13 18 20 98 104 96 124 103 127 128 136
+
+
+
+
+ $PROJ_DIR$\..\lib\system_stm32f7xx.c
+
+
+ ICCARM
+ 247
+
+
+ BICOMP
+ 401
+
+
+ __cstat
+ 87
+
+
+
+
+ ICCARM
+ 25 21 22 294 386 358 324 317 196 1 0 2 379 24 8 23 150 114 6 26 555 306 111 5 15 16 28 7 27 3 10 13 18 20 98 104 96 124 103
+
+
+
+
+ $PROJ_DIR$\..\hooks.c
+
+
+ ICCARM
+ 413
+
+
+ BICOMP
+ 356
+
+
+ __cstat
+ 485
+
+
+
+
+ ICCARM
+ 183 177 180 149 172 171 168 155 157 181 161 166 156 131 25 21 22 294 386 358 324 317 196 1 0 2 379 24 8 23 150 114 6 26 555 306 111 5 15 16 28 7 27 3 10 13 18 20 98 104 96 124 103 116
+
+
+
+
+ $PROJ_DIR$\..\lib\STM32_USB_Device_Library\Core\Src\usbd_ioreq.c
+
+
+ ICCARM
+ 565
+
+
+ BICOMP
+ 556
+
+
+ __cstat
+ 536
+
+
+
+
+ ICCARM
+ 146 145 138 364 386 358 324 317 196 306 560 562 406 423 25 21 22 294 1 0 2 379 24 8 23 150 114 6 26 555 111 5 15 16 28 7 27 3 10 13 18 20 98 104 96 124 103 127 128
+
+
+
+
+ $PROJ_DIR$\..\main.c
+
+
+ ICCARM
+ 308
+
+
+ BICOMP
+ 346
+
+
+ __cstat
+ 195
+
+
+
+
+ ICCARM
+ 183 177 180 149 172 171 168 155 157 181 161 166 156 25 21 22 294 386 358 324 317 196 1 0 2 379 24 8 23 150 114 6 26 555 306 111 5 15 16 28 7 27 3 10 13 18 20 98 104 96 124 103 102 107 110 112 153 109 116
+
+
+
+
+ $PROJ_DIR$\..\startup_stm32f746xx.s
+
+
+ AARM
+ 380
+
+
+
+
+ $PROJ_DIR$\..\usbd_conf.c
+
+
+ ICCARM
+ 415
BICOMP
@@ -1184,315 +1331,7 @@
ICCARM
- 103 97 102 76 112 107 100 110 101 99 109 114 116 23 31 16 294 336 354 318 349 131 2 0 1 394 30 12 15 73 53 5 8 556 267 50 19 28 3 21 14 13 24 20 29 7 11 59 58 47 41 60 43
-
-
-
-
- $PROJ_DIR$\..\..\..\..\Source\ARMCM7_STM32F7\timer.c
-
-
- ICCARM
- 447
-
-
- BICOMP
- 435
-
-
- __cstat
- 471
-
-
-
-
- ICCARM
- 103 97 102 76 112 107 100 110 101 99 109 114 116 23 31 16 294 336 354 318 349 131 2 0 1 394 30 12 15 73 53 5 8 556 267 50 19 28 3 21 14 13 24 20 29 7 11 59 58 47 41 60
-
-
-
-
- $PROJ_DIR$\..\startup_stm32f746xx.s
-
-
- AARM
- 385
-
-
-
-
- $PROJ_DIR$\..\lib\STM32_USB_Device_Library\Core\Src\usbd_core.c
-
-
- ICCARM
- 565
-
-
- BICOMP
- 573
-
-
- __cstat
- 574
-
-
-
-
- ICCARM
- 71 85 351 336 354 318 349 131 267 555 551 521 444 23 31 16 294 2 0 1 394 30 12 15 73 53 5 8 556 50 19 28 3 21 14 13 24 20 29 7 11 59 58 47 41 60 84 82 77
-
-
-
-
- $PROJ_DIR$\..\led.c
-
-
- ICCARM
- 492
-
-
- BICOMP
- 507
-
-
- __cstat
- 482
-
-
-
-
- ICCARM
- 103 97 102 76 112 107 100 110 101 99 109 114 116 68 23 31 16 294 336 354 318 349 131 2 0 1 394 30 12 15 73 53 5 8 556 267 50 19 28 3 21 14 13 24 20 29 7 11 59 58 47 41 60 46
-
-
-
-
- $PROJ_DIR$\..\main.c
-
-
- ICCARM
- 297
-
-
- BICOMP
- 382
-
-
- __cstat
- 129
-
-
-
-
- ICCARM
- 103 97 102 76 112 107 100 110 101 99 109 114 116 23 31 16 294 336 354 318 349 131 2 0 1 394 30 12 15 73 53 5 8 556 267 50 19 28 3 21 14 13 24 20 29 7 11 59 58 47 41 60 52 54 42 51 91 43 46
-
-
-
-
- $PROJ_DIR$\..\usbd_conf.c
-
-
- ICCARM
- 429
-
-
- BICOMP
- 544
-
-
- __cstat
- 566
-
-
-
-
- ICCARM
- 23 31 16 294 336 354 318 349 131 2 0 1 394 30 12 15 73 53 5 8 556 267 50 19 28 3 21 14 13 24 20 29 7 11 59 58 47 41 60 84 85 351 555 551 521 444 71 82 77 83 103 97 102 76 112 107 100 110 101 99 109 114 116 118
-
-
-
-
- $PROJ_DIR$\..\..\..\..\Source\ARMCM7_STM32F7\nvm.c
-
-
- ICCARM
- 442
-
-
- BICOMP
- 550
-
-
- __cstat
- 500
-
-
-
-
- ICCARM
- 103 97 102 76 112 107 100 110 101 99 109 114 116 62
-
-
-
-
- $PROJ_DIR$\..\hooks.c
-
-
- ICCARM
- 439
-
-
- BICOMP
- 380
-
-
- __cstat
- 501
-
-
-
-
- ICCARM
- 103 97 102 76 112 107 100 110 101 99 109 114 116 68 23 31 16 294 336 354 318 349 131 2 0 1 394 30 12 15 73 53 5 8 556 267 50 19 28 3 21 14 13 24 20 29 7 11 59 58 47 41 60 46
-
-
-
-
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_ll_utils.c
-
-
- ICCARM
- 132
-
-
- BICOMP
- 404
-
-
- __cstat
- 233
-
-
-
-
- ICCARM
- 91 23 31 16 294 336 354 318 349 131 2 0 1 394 30 12 15 73 53 5 8 556 267 50 19 28 3 21 14 13 24 20 29 7 11 59 58 47 41 60 54 51 52
-
-
-
-
- $PROJ_DIR$\..\lib\STM32_USB_Device_Library\Core\Src\usbd_ctlreq.c
-
-
- ICCARM
- 553
-
-
- BICOMP
- 543
-
-
- __cstat
- 408
-
-
-
-
- ICCARM
- 77 84 85 351 336 354 318 349 131 267 555 551 521 444 23 31 16 294 2 0 1 394 30 12 15 73 53 5 8 556 50 19 28 3 21 14 13 24 20 29 7 11 59 58 47 41 60 82 71
-
-
-
-
- $PROJ_DIR$\..\lib\STM32_USB_Device_Library\Core\Src\usbd_ioreq.c
-
-
- ICCARM
- 572
-
-
- BICOMP
- 554
-
-
- __cstat
- 567
-
-
-
-
- ICCARM
- 82 84 85 351 336 354 318 349 131 267 555 551 521 444 23 31 16 294 2 0 1 394 30 12 15 73 53 5 8 556 50 19 28 3 21 14 13 24 20 29 7 11 59 58 47 41 60 71 77
-
-
-
-
- $PROJ_DIR$\..\lib\system_stm32f7xx.c
-
-
- ICCARM
- 252
-
-
- BICOMP
- 391
-
-
- __cstat
- 200
-
-
-
-
- ICCARM
- 23 31 16 294 336 354 318 349 131 2 0 1 394 30 12 15 73 53 5 8 556 267 50 19 28 3 21 14 13 24 20 29 7 11 59 58 47 41 60
-
-
-
-
- $PROJ_DIR$\..\usbd_bulk.c
-
-
- ICCARM
- 559
-
-
- BICOMP
- 560
-
-
- __cstat
- 552
-
-
-
-
- ICCARM
- 83 82 84 85 351 336 354 318 349 131 267 555 551 521 444 23 31 16 294 2 0 1 394 30 12 15 73 53 5 8 556 50 19 28 3 21 14 13 24 20 29 7 11 59 58 47 41 60 71 77 87
-
-
-
-
- $PROJ_DIR$\..\usbd_desc.c
-
-
- ICCARM
- 558
-
-
- BICOMP
- 569
-
-
- __cstat
- 563
-
-
-
-
- ICCARM
- 71 85 351 336 354 318 349 131 267 555 551 521 444 23 31 16 294 2 0 1 394 30 12 15 73 53 5 8 556 50 19 28 3 21 14 13 24 20 29 7 11 59 58 47 41 60 84 82 77 87
+ 25 21 22 294 386 358 324 317 196 1 0 2 379 24 8 23 150 114 6 26 555 306 111 5 15 16 28 7 27 3 10 13 18 20 98 104 96 124 103 145 138 364 560 562 406 423 127 146 128 126 183 177 180 149 172 171 168 155 157 181 161 166 156 158
@@ -1501,837 +1340,11 @@
ICCARM
- 499
+ 507
BICOMP
- 389
-
-
- __cstat
- 472
-
-
-
-
- ICCARM
- 103 97 102 76 112 107 100 110 101 99 109 114 116 346 394 354 318 349 131 445
-
-
-
-
- $PROJ_DIR$\..\..\..\..\Source\ARMCM7_STM32F7\can.c
-
-
- ICCARM
- 459
-
-
- BICOMP
- 443
-
-
- __cstat
- 498
-
-
-
-
- ICCARM
- 103 97 102 76 112 107 100 110 101 99 109 114 116 23 31 16 294 336 354 318 349 131 2 0 1 394 30 12 15 73 53 5 8 556 267 50 19 28 3 21 14 13 24 20 29 7 11 59 58 47 41 60 54
-
-
-
-
- $PROJ_DIR$\..\..\..\..\Source\ARMCM7_STM32F7\flash.c
-
-
- ICCARM
- 470
-
-
- BICOMP
- 406
-
-
- __cstat
- 532
-
-
-
-
- ICCARM
- 103 97 102 76 112 107 100 110 101 99 109 114 116 23 31 16 294 336 354 318 349 131 2 0 1 394 30 12 15 73 53 5 8 556 267 50 19 28 3 21 14 13 24 20 29 7 11 59 58 47 41 60
-
-
-
-
- $PROJ_DIR$\..\..\..\..\Source\ARMCM7_STM32F7\cpu.c
-
-
- ICCARM
- 480
-
-
- BICOMP
- 464
-
-
- __cstat
- 494
-
-
-
-
- ICCARM
- 103 97 102 76 112 107 100 110 101 99 109 114 116 23 31 16 294 336 354 318 349 131 2 0 1 394 30 12 15 73 53 5 8 556 267 50 19 28 3 21 14 13 24 20 29 7 11 59 58 47 41 60
-
-
-
-
- $PROJ_DIR$\..\..\..\..\Source\net.c
-
-
- ICCARM
- 484
-
-
- BICOMP
- 568
-
-
- __cstat
- 495
-
-
-
-
- ICCARM
- 103 97 102 76 112 107 100 110 101 99 109 114 116
-
-
-
-
- $PROJ_DIR$\..\..\..\..\Source\xcp.c
-
-
- ICCARM
- 476
-
-
- BICOMP
- 547
-
-
- __cstat
- 479
-
-
-
-
- ICCARM
- 103 97 102 76 112 107 100 110 101 99 109 114 116
-
-
-
-
- $PROJ_DIR$\..\..\..\..\Source\file.c
-
-
- ICCARM
- 457
-
-
- BICOMP
- 431
-
-
- __cstat
- 478
-
-
-
-
- ICCARM
- 103 97 102 76 112 107 100 110 101 99 109 114 116 521 336 354 318 349 131 267 444 453
-
-
-
-
- $PROJ_DIR$\..\..\..\..\Source\ARMCM7_STM32F7\usb.c
-
-
- ICCARM
- 536
-
-
- BICOMP
- 541
-
-
- __cstat
- 571
-
-
-
-
- ICCARM
- 103 97 102 76 112 107 100 110 101 99 109 114 116 118 71 85 351 336 354 318 349 131 267 555 551 521 444 23 31 16 294 2 0 1 394 30 12 15 73 53 5 8 556 50 19 28 3 21 14 13 24 20 29 7 11 59 58 47 41 60 84 82 77 87 83
-
-
-
-
- $PROJ_DIR$\..\..\..\..\Source\boot.c
-
-
- ICCARM
- 487
-
-
- BICOMP
- 428
-
-
- __cstat
- 485
-
-
-
-
- ICCARM
- 103 97 102 76 112 107 100 110 101 99 109 114 116
-
-
-
-
- $PROJ_DIR$\..\..\..\..\Source\com.c
-
-
- ICCARM
- 475
-
-
- BICOMP
- 419
-
-
- __cstat
- 502
-
-
-
-
- ICCARM
- 103 97 102 76 112 107 100 110 101 99 109 114 116 96 104 118
-
-
-
-
- $PROJ_DIR$\..\..\..\..\Source\assert.c
-
-
- ICCARM
- 370
-
-
- BICOMP
- 557
-
-
- __cstat
- 493
-
-
-
-
- ICCARM
- 103 97 102 76 112 107 100 110 101 99 109 114 116
-
-
-
-
- $PROJ_DIR$\..\..\..\..\Source\cop.c
-
-
- ICCARM
- 451
-
-
- BICOMP
- 418
-
-
- __cstat
- 525
-
-
-
-
- ICCARM
- 103 97 102 76 112 107 100 110 101 99 109 114 116
-
-
-
-
- $PROJ_DIR$\..\..\..\..\Source\backdoor.c
-
-
- ICCARM
- 449
-
-
- BICOMP
- 562
-
-
- __cstat
- 488
-
-
-
-
- ICCARM
- 103 97 102 76 112 107 100 110 101 99 109 114 116
-
-
-
-
- $PROJ_DIR$\..\bin\demoprog_stm32f746.out
-
-
- OBJCOPY
- 133
-
-
-
-
- ILINK
- 317 297 385 299 489 397 438 288 465 469 454 460 468 455 440 150 183 145 180 128 160 151 140 130 153 143 221 119 121 154 135 147 139 179 106 164 158 195 175 173 363 156 190 211 187 205 166 196 157 203 258 169 270 263 250 278 330 265 137 105 172 171 134 144 338 319 274 249 197 269 325 277 272 261 275 334 238 148 227 122 222 264 253 241 136 120 218 255 132 252 163 192 356 344
-
-
-
-
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_eth.c
-
-
- ICCARM
- 140
-
-
- BICOMP
- 285
-
-
- __cstat
- 364
-
-
-
-
- ICCARM
- 15 73 417 53 5 23 31 16 294 336 354 318 349 131 167 322 224 306 346 239 231 12 8 351 267 365 50 28 3 21 14 13 20 29 7 11 59 58
-
-
-
-
- $PROJ_DIR$\..\..\..\..\Source\ARMCM7_STM32F7\uart.c
-
-
- ICCARM
- 463
-
-
- BICOMP
- 564
-
-
- __cstat
- 510
-
-
-
-
- ICCARM
- 103 97 102 76 112 107 100 110 101 99 109 114 116 23 31 16 294 336 354 318 349 131 2 0 1 394 30 12 15 73 53 5 8 556 267 50 19 28 3 21 14 13 24 20 29 7 11 59 58 47 41 60 43
-
-
-
-
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_msp_template.c
-
-
- ICCARM
- 185
-
-
- BICOMP
- 279
-
-
- __cstat
- 282
-
-
-
-
- ICCARM
- 15 73 417 53 5 23 31 16 294 336 354 318 349 131 167 322 224 306 346 239 231 12 8 351 267 365 50 28 3 21 14 13 20 29 7 11 59 58
-
-
-
-
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_timebase_tim_template.c
-
-
- ICCARM
- 254
-
-
- BICOMP
- 216
-
-
- __cstat
- 284
-
-
-
-
- ICCARM
- 15 73 417 53 5 23 31 16 294 336 354 318 349 131 167 322 224 306 346 239 231 12 8 351 267 365 50 28 3 21 14 13 20 29 7 11 59 58
-
-
-
-
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_timebase_rtc_alarm_template.c
-
-
- ICCARM
- 266
-
-
- BICOMP
- 217
-
-
- __cstat
- 441
-
-
-
-
- ICCARM
- 15 73 417 53 5 23 31 16 294 336 354 318 349 131 167 322 224 306 346 239 231 12 8 351 267 365 50 28 3 21 14 13 20 29 7 11 59 58
-
-
-
-
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_dsi.c
-
-
- ICCARM
- 151
-
-
- BICOMP
- 372
-
-
- __cstat
- 328
-
-
-
-
- ICCARM
- 15 73 417 53 5 23 31 16 294 336 354 318 349 131 167 322 224 306 346 239 231 12 8 351 267 365 50 28 3 21 14 13 20 29 7 11 59 58
-
-
-
-
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_ll_rtc.c
-
-
- ICCARM
- 253
-
-
- BICOMP
- 161
-
-
- __cstat
- 245
-
-
-
-
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_ll_fmc.c
-
-
- ICCARM
- 334
-
-
- BICOMP
- 248
-
-
- __cstat
- 141
-
-
-
-
- ICCARM
- 15 73 417 53 5 23 31 16 294 336 354 318 349 131 167 322 224 306 346 239 231 12 8 351 267 365 50 28 3 21 14 13 20 29 7 11 59 58
-
-
- BICOMP
- 50 354 5 336 351 294 167 23 15 16 231 14 11 73 417 53 28 21 13 20 7 59 8 31 12 224 318 322 346 306 365 29 239 349 131 267 3 58
-
-
-
-
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_dma2d.c
-
-
- ICCARM
- 128
-
-
- BICOMP
- 368
-
-
- __cstat
- 345
-
-
-
-
- ICCARM
- 15 73 417 53 5 23 31 16 294 336 354 318 349 131 167 322 224 306 346 239 231 12 8 351 267 365 50 28 3 21 14 13 20 29 7 11 59 58
-
-
-
-
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_ll_lptim.c
-
-
- ICCARM
- 227
-
-
- BICOMP
- 234
-
-
- __cstat
- 124
-
-
-
-
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_hash_ex.c
-
-
- ICCARM
- 119
-
-
- BICOMP
- 280
-
-
- __cstat
- 303
-
-
-
-
- ICCARM
- 15 73 417 53 5 23 31 16 294 336 354 318 349 131 167 322 224 306 346 239 231 12 8 351 267 365 50 28 3 21 14 13 20 29 7 11 59 58
-
-
-
-
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_ll_dac.c
-
-
- ICCARM
- 277
-
-
- BICOMP
- 220
-
-
- __cstat
- 244
-
-
-
-
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_nand.c
-
-
- ICCARM
- 156
-
-
- BICOMP
- 329
-
-
- __cstat
- 291
-
-
-
-
- ICCARM
- 15 73 417 53 5 23 31 16 294 336 354 318 349 131 167 322 224 306 346 239 231 12 8 351 267 365 50 28 3 21 14 13 20 29 7 11 59 58
-
-
-
-
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_usart.c
-
-
- ICCARM
- 274
-
-
- BICOMP
- 209
-
-
- __cstat
- 152
-
-
-
-
- ICCARM
- 15 73 417 53 5 23 31 16 294 336 354 318 349 131 167 322 224 306 346 239 231 12 8 351 267 365 50 28 3 21 14 13 20 29 7 11 59 58
-
-
- BICOMP
- 50 354 5 336 351 294 167 23 15 16 231 14 11 73 417 53 28 21 13 20 7 59 8 31 12 224 318 322 346 306 365 29 239 349 131 267 3 58
-
-
-
-
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_iwdg.c
-
-
- ICCARM
- 179
-
-
- BICOMP
- 260
-
-
- __cstat
- 281
-
-
-
-
- ICCARM
- 15 73 417 53 5 23 31 16 294 336 354 318 349 131 167 322 224 306 346 239 231 12 8 351 267 365 50 28 3 21 14 13 20 29 7 11 59 58
-
-
-
-
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_rng.c
-
-
- ICCARM
- 258
-
-
- BICOMP
- 223
-
-
- __cstat
- 324
-
-
-
-
- ICCARM
- 15 73 417 53 5 23 31 16 294 336 354 318 349 131 167 322 224 306 346 239 231 12 8 351 267 365 50 28 3 21 14 13 20 29 7 11 59 58
-
-
-
-
- $PROJ_DIR$\..\stm32f7xx_it.c
-
-
- ICCARM
- 197
-
-
- BICOMP
- 142
-
-
- __cstat
- 146
-
-
-
-
- ICCARM
- 15 73 417 53 5 23 31 16 294 336 354 318 349 131 167 322 224 306 346 239 231 12 8 351 267 365 50 28 3 21 14 13 20 29 7 11 59 58 433
-
-
-
-
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_smbus.c
-
-
- ICCARM
- 105
-
-
- BICOMP
- 199
-
-
- __cstat
- 458
-
-
-
-
- ICCARM
- 15 73 417 53 5 23 31 16 294 336 354 318 349 131 167 322 224 306 346 239 231 12 8 351 267 365 50 28 3 21 14 13 20 29 7 11 59 58
-
-
- BICOMP
- 50 354 5 336 351 294 167 23 15 16 231 14 11 73 417 53 28 21 13 20 7 59 8 31 12 224 318 322 346 306 365 29 239 349 131 267 3 58
-
-
-
-
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_sai.c
-
-
- ICCARM
- 263
-
-
- BICOMP
- 219
-
-
- __cstat
- 401
-
-
-
-
- ICCARM
- 15 73 417 53 5 23 31 16 294 336 354 318 349 131 167 322 224 306 346 239 231 12 8 351 267 365 50 28 3 21 14 13 20 29 7 11 59 58
-
-
- BICOMP
- 50 354 5 336 351 294 167 23 15 16 231 14 11 73 417 53 28 21 13 20 7 59 8 31 12 224 318 322 346 306 365 29 239 349 131 267 3 58
-
-
-
-
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_qspi.c
-
-
- ICCARM
- 196
-
-
- BICOMP
- 193
-
-
- __cstat
- 398
-
-
-
-
- ICCARM
- 15 73 417 53 5 23 31 16 294 336 354 318 349 131 167 322 224 306 346 239 231 12 8 351 267 365 50 28 3 21 14 13 20 29 7 11 59 58
-
-
-
-
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_spi.c
-
-
- ICCARM
- 171
-
-
- BICOMP
- 214
-
-
- __cstat
- 353
-
-
-
-
- ICCARM
- 15 73 417 53 5 23 31 16 294 336 354 318 349 131 167 322 224 306 346 239 231 12 8 351 267 365 50 28 3 21 14 13 20 29 7 11 59 58
-
-
- BICOMP
- 50 354 5 336 351 294 167 23 15 16 231 14 11 73 417 53 28 21 13 20 7 59 8 31 12 224 318 322 346 306 365 29 239 349 131 267 3 58
-
-
-
-
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_smartcard.c
-
-
- ICCARM
- 265
-
-
- BICOMP
- 202
-
-
- __cstat
- 286
-
-
-
-
- ICCARM
- 15 73 417 53 5 23 31 16 294 336 354 318 349 131 167 322 224 306 346 239 231 12 8 351 267 365 50 28 3 21 14 13 20 29 7 11 59 58
-
-
- BICOMP
- 50 354 5 336 351 294 167 23 15 16 231 14 11 73 417 53 28 21 13 20 7 59 8 31 12 224 318 322 346 306 365 29 239 349 131 267 3 58
-
-
-
-
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_smartcard_ex.c
-
-
- ICCARM
- 137
-
-
- BICOMP
- 123
+ 400
__cstat
@@ -2341,11 +1354,988 @@
ICCARM
- 15 73 417 53 5 23 31 16 294 336 354 318 349 131 167 322 224 306 346 239 231 12 8 351 267 365 50 28 3 21 14 13 20 29 7 11 59 58
+ 183 177 180 149 172 171 168 155 157 181 161 166 156 328 379 358 324 317 196 459
+
+
+
+
+ $PROJ_DIR$\..\usbd_desc.c
+
+
+ ICCARM
+ 541
BICOMP
- 50 354 5 336 351 294 167 23 15 16 231 14 11 73 417 53 28 21 13 20 7 59 8 31 12 224 318 322 346 306 365 29 239 349 131 267 3 58
+ 542
+
+
+ __cstat
+ 544
+
+
+
+
+ ICCARM
+ 127 138 364 386 358 324 317 196 306 560 562 406 423 25 21 22 294 1 0 2 379 24 8 23 150 114 6 26 555 111 5 15 16 28 7 27 3 10 13 18 20 98 104 96 124 103 145 146 128 136
+
+
+
+
+ $PROJ_DIR$\..\..\..\..\Source\ARMCM7_STM32F7\cpu.c
+
+
+ ICCARM
+ 475
+
+
+ BICOMP
+ 446
+
+
+ __cstat
+ 498
+
+
+
+
+ ICCARM
+ 183 177 180 149 172 171 168 155 157 181 161 166 156 25 21 22 294 386 358 324 317 196 1 0 2 379 24 8 23 150 114 6 26 555 306 111 5 15 16 28 7 27 3 10 13 18 20 98 104 96 124 103
+
+
+
+
+ $PROJ_DIR$\..\..\..\..\Source\ARMCM7_STM32F7\flash.c
+
+
+ ICCARM
+ 557
+
+
+ BICOMP
+ 382
+
+
+ __cstat
+ 513
+
+
+
+
+ ICCARM
+ 183 177 180 149 172 171 168 155 157 181 161 166 156 25 21 22 294 386 358 324 317 196 1 0 2 379 24 8 23 150 114 6 26 555 306 111 5 15 16 28 7 27 3 10 13 18 20 98 104 96 124 103
+
+
+
+
+ $PROJ_DIR$\..\..\..\..\Source\ARMCM7_STM32F7\nvm.c
+
+
+ ICCARM
+ 416
+
+
+ BICOMP
+ 572
+
+
+ __cstat
+ 500
+
+
+
+
+ ICCARM
+ 183 177 180 149 172 171 168 155 157 181 161 166 156 142
+
+
+
+
+ $PROJ_DIR$\..\..\..\..\Source\ARMCM7_STM32F7\rs232.c
+
+
+ ICCARM
+ 517
+
+
+ BICOMP
+ 520
+
+
+ __cstat
+ 547
+
+
+
+
+ ICCARM
+ 183 177 180 149 172 171 168 155 157 181 161 166 156 25 21 22 294 386 358 324 317 196 1 0 2 379 24 8 23 150 114 6 26 555 306 111 5 15 16 28 7 27 3 10 13 18 20 98 104 96 124 103 109
+
+
+
+
+ $PROJ_DIR$\..\..\..\..\Source\ARMCM7_STM32F7\can.c
+
+
+ ICCARM
+ 441
+
+
+ BICOMP
+ 422
+
+
+ __cstat
+ 484
+
+
+
+
+ ICCARM
+ 183 177 180 149 172 171 168 155 157 181 161 166 156 25 21 22 294 386 358 324 317 196 1 0 2 379 24 8 23 150 114 6 26 555 306 111 5 15 16 28 7 27 3 10 13 18 20 98 104 96 124 103 107
+
+
+
+
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_ll_utils.c
+
+
+ ICCARM
+ 186
+
+
+ BICOMP
+ 378
+
+
+ __cstat
+ 236
+
+
+
+
+ ICCARM
+ 153 25 21 22 294 386 358 324 317 196 1 0 2 379 24 8 23 150 114 6 26 555 306 111 5 15 16 28 7 27 3 10 13 18 20 98 104 96 124 103 107 112 102
+
+
+
+
+ $PROJ_DIR$\..\lib\STM32_USB_Device_Library\Core\Src\usbd_core.c
+
+
+ ICCARM
+ 545
+
+
+ BICOMP
+ 573
+
+
+ __cstat
+ 570
+
+
+
+
+ ICCARM
+ 127 138 364 386 358 324 317 196 306 560 562 406 423 25 21 22 294 1 0 2 379 24 8 23 150 114 6 26 555 111 5 15 16 28 7 27 3 10 13 18 20 98 104 96 124 103 145 146 128
+
+
+
+
+ $PROJ_DIR$\..\led.c
+
+
+ ICCARM
+ 483
+
+
+ BICOMP
+ 472
+
+
+ __cstat
+ 494
+
+
+
+
+ ICCARM
+ 183 177 180 149 172 171 168 155 157 181 161 166 156 131 25 21 22 294 386 358 324 317 196 1 0 2 379 24 8 23 150 114 6 26 555 306 111 5 15 16 28 7 27 3 10 13 18 20 98 104 96 124 103 116
+
+
+
+
+ $PROJ_DIR$\..\lib\STM32_USB_Device_Library\Core\Src\usbd_ctlreq.c
+
+
+ ICCARM
+ 546
+
+
+ BICOMP
+ 566
+
+
+ __cstat
+ 396
+
+
+
+
+ ICCARM
+ 128 145 138 364 386 358 324 317 196 306 560 562 406 423 25 21 22 294 1 0 2 379 24 8 23 150 114 6 26 555 111 5 15 16 28 7 27 3 10 13 18 20 98 104 96 124 103 146 127
+
+
+
+
+ $PROJ_DIR$\..\..\..\..\Source\xcp.c
+
+
+ ICCARM
+ 471
+
+
+ BICOMP
+ 574
+
+
+ __cstat
+ 493
+
+
+
+
+ ICCARM
+ 183 177 180 149 172 171 168 155 157 181 161 166 156
+
+
+
+
+ $PROJ_DIR$\..\..\..\..\Source\boot.c
+
+
+ ICCARM
+ 505
+
+
+ BICOMP
+ 451
+
+
+ __cstat
+ 492
+
+
+
+
+ ICCARM
+ 183 177 180 149 172 171 168 155 157 181 161 166 156
+
+
+
+
+ $PROJ_DIR$\..\..\..\..\Source\backdoor.c
+
+
+ ICCARM
+ 458
+
+
+ BICOMP
+ 537
+
+
+ __cstat
+ 496
+
+
+
+
+ ICCARM
+ 183 177 180 149 172 171 168 155 157 181 161 166 156
+
+
+
+
+ $PROJ_DIR$\..\..\..\..\Source\assert.c
+
+
+ ICCARM
+ 369
+
+
+ BICOMP
+ 561
+
+
+ __cstat
+ 522
+
+
+
+
+ ICCARM
+ 183 177 180 149 172 171 168 155 157 181 161 166 156
+
+
+
+
+ $PROJ_DIR$\..\..\..\..\Source\net.c
+
+
+ ICCARM
+ 476
+
+
+ BICOMP
+ 543
+
+
+ __cstat
+ 479
+
+
+
+
+ ICCARM
+ 183 177 180 149 172 171 168 155 157 181 161 166 156
+
+
+
+
+ $PROJ_DIR$\..\..\..\..\Source\ARMCM7_STM32F7\timer.c
+
+
+ ICCARM
+ 460
+
+
+ BICOMP
+ 410
+
+
+ __cstat
+ 535
+
+
+
+
+ ICCARM
+ 183 177 180 149 172 171 168 155 157 181 161 166 156 25 21 22 294 386 358 324 317 196 1 0 2 379 24 8 23 150 114 6 26 555 306 111 5 15 16 28 7 27 3 10 13 18 20 98 104 96 124 103
+
+
+
+
+ $PROJ_DIR$\..\..\..\..\Source\ARMCM7_STM32F7\usb.c
+
+
+ ICCARM
+ 516
+
+
+ BICOMP
+ 533
+
+
+ __cstat
+ 554
+
+
+
+
+ ICCARM
+ 183 177 180 149 172 171 168 155 157 181 161 166 156 158 127 138 364 386 358 324 317 196 306 560 562 406 423 25 21 22 294 1 0 2 379 24 8 23 150 114 6 26 555 111 5 15 16 28 7 27 3 10 13 18 20 98 104 96 124 103 145 146 128 136 126
+
+
+
+
+ $PROJ_DIR$\..\..\..\..\Source\com.c
+
+
+ ICCARM
+ 463
+
+
+ BICOMP
+ 424
+
+
+ __cstat
+ 488
+
+
+
+
+ ICCARM
+ 183 177 180 149 172 171 168 155 157 181 161 166 156 179 173 158
+
+
+
+
+ $PROJ_DIR$\..\..\..\..\Source\cop.c
+
+
+ ICCARM
+ 440
+
+
+ BICOMP
+ 450
+
+
+ __cstat
+ 437
+
+
+
+
+ ICCARM
+ 183 177 180 149 172 171 168 155 157 181 161 166 156
+
+
+
+
+ $PROJ_DIR$\..\..\..\..\Source\file.c
+
+
+ ICCARM
+ 448
+
+
+ BICOMP
+ 462
+
+
+ __cstat
+ 521
+
+
+
+
+ ICCARM
+ 183 177 180 149 172 171 168 155 157 181 161 166 156 406 386 358 324 317 196 306 423 452
+
+
+
+
+ $PROJ_DIR$\..\bin\demoprog_stm32f746.out
+
+
+ OBJCOPY
+ 201
+
+
+
+
+ ILINK
+ 295 308 380 288 477 377 435 293 534 551 438 559 444 465 420 190 224 192 53 91 206 160 162 163 199 198 72 66 209 175 215 213 216 222 82 49 211 65 34 244 363 194 63 79 57 76 223 81 191 84 267 61 280 260 243 272 340 266 212 68 50 45 210 197 381 326 270 237 78 311 320 254 268 277 269 337 225 187 245 193 67 279 248 229 200 85 56 240 186 247 62 43 360 316
+
+
+
+
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_dsi.c
+
+
+ ICCARM
+ 160
+
+
+ BICOMP
+ 370
+
+
+ __cstat
+ 329
+
+
+
+
+ ICCARM
+ 23 150 428 114 6 25 21 22 294 386 358 324 317 196 60 313 230 286 328 226 250 8 26 364 306 345 111 15 16 28 7 27 10 13 18 20 98 104
+
+
+
+
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_timebase_rtc_alarm_template.c
+
+
+ ICCARM
+ 249
+
+
+ BICOMP
+ 86
+
+
+ __cstat
+ 414
+
+
+
+
+ ICCARM
+ 23 150 428 114 6 25 21 22 294 386 358 324 317 196 60 313 230 286 328 226 250 8 26 364 306 345 111 15 16 28 7 27 10 13 18 20 98 104
+
+
+
+
+ $PROJ_DIR$\..\..\..\..\Source\ARMCM7_STM32F7\uart.c
+
+
+ ICCARM
+ 455
+
+
+ BICOMP
+ 538
+
+
+ __cstat
+ 408
+
+
+
+
+ ICCARM
+ 183 177 180 149 172 171 168 155 157 181 161 166 156 25 21 22 294 386 358 324 317 196 1 0 2 379 24 8 23 150 114 6 26 555 306 111 5 15 16 28 7 27 3 10 13 18 20 98 104 96 124 103 109
+
+
+
+
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_timebase_tim_template.c
+
+
+ ICCARM
+ 227
+
+
+ BICOMP
+ 47
+
+
+ __cstat
+ 262
+
+
+
+
+ ICCARM
+ 23 150 428 114 6 25 21 22 294 386 358 324 317 196 60 313 230 286 328 226 250 8 26 364 306 345 111 15 16 28 7 27 10 13 18 20 98 104
+
+
+
+
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_msp_template.c
+
+
+ ICCARM
+ 217
+
+
+ BICOMP
+ 253
+
+
+ __cstat
+ 251
+
+
+
+
+ ICCARM
+ 23 150 428 114 6 25 21 22 294 386 358 324 317 196 60 313 230 286 328 226 250 8 26 364 306 345 111 15 16 28 7 27 10 13 18 20 98 104
+
+
+
+
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_iwdg.c
+
+
+ ICCARM
+ 222
+
+
+ BICOMP
+ 302
+
+
+ __cstat
+ 256
+
+
+
+
+ ICCARM
+ 23 150 428 114 6 25 21 22 294 386 358 324 317 196 60 313 230 286 328 226 250 8 26 364 306 345 111 15 16 28 7 27 10 13 18 20 98 104
+
+
+
+
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_rng.c
+
+
+ ICCARM
+ 267
+
+
+ BICOMP
+ 83
+
+
+ __cstat
+ 331
+
+
+
+
+ ICCARM
+ 23 150 428 114 6 25 21 22 294 386 358 324 317 196 60 313 230 286 328 226 250 8 26 364 306 345 111 15 16 28 7 27 10 13 18 20 98 104
+
+
+
+
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_ll_fmc.c
+
+
+ ICCARM
+ 337
+
+
+ BICOMP
+ 232
+
+
+ __cstat
+ 188
+
+
+
+
+ ICCARM
+ 23 150 428 114 6 25 21 22 294 386 358 324 317 196 60 313 230 286 328 226 250 8 26 364 306 345 111 15 16 28 7 27 10 13 18 20 98 104
+
+
+ BICOMP
+ 111 358 6 386 364 294 60 25 23 22 250 7 20 150 428 114 15 28 27 10 18 98 26 21 8 230 324 313 328 286 345 13 226 317 196 306 16 104
+
+
+
+
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_hash_ex.c
+
+
+ ICCARM
+ 66
+
+
+ BICOMP
+ 276
+
+
+ __cstat
+ 301
+
+
+
+
+ ICCARM
+ 23 150 428 114 6 25 21 22 294 386 358 324 317 196 60 313 230 286 328 226 250 8 26 364 306 345 111 15 16 28 7 27 10 13 18 20 98 104
+
+
+
+
+ $PROJ_DIR$\..\stm32f7xx_it.c
+
+
+ ICCARM
+ 78
+
+
+ BICOMP
+ 202
+
+
+ __cstat
+ 214
+
+
+
+
+ ICCARM
+ 23 150 428 114 6 25 21 22 294 386 358 324 317 196 60 313 230 286 328 226 250 8 26 364 306 345 111 15 16 28 7 27 10 13 18 20 98 104 409
+
+
+
+
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_usart.c
+
+
+ ICCARM
+ 270
+
+
+ BICOMP
+ 70
+
+
+ __cstat
+ 203
+
+
+
+
+ ICCARM
+ 23 150 428 114 6 25 21 22 294 386 358 324 317 196 60 313 230 286 328 226 250 8 26 364 306 345 111 15 16 28 7 27 10 13 18 20 98 104
+
+
+ BICOMP
+ 111 358 6 386 364 294 60 25 23 22 250 7 20 150 428 114 15 28 27 10 18 98 26 21 8 230 324 313 328 286 345 13 226 317 196 306 16 104
+
+
+
+
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_dma2d.c
+
+
+ ICCARM
+ 91
+
+
+ BICOMP
+ 478
+
+
+ __cstat
+ 322
+
+
+
+
+ ICCARM
+ 23 150 428 114 6 25 21 22 294 386 358 324 317 196 60 313 230 286 328 226 250 8 26 364 306 345 111 15 16 28 7 27 10 13 18 20 98 104
+
+
+
+
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_nand.c
+
+
+ ICCARM
+ 194
+
+
+ BICOMP
+ 339
+
+
+ __cstat
+ 291
+
+
+
+
+ ICCARM
+ 23 150 428 114 6 25 21 22 294 386 358 324 317 196 60 313 230 286 328 226 250 8 26 364 306 345 111 15 16 28 7 27 10 13 18 20 98 104
+
+
+
+
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_ll_lptim.c
+
+
+ ICCARM
+ 245
+
+
+ BICOMP
+ 231
+
+
+ __cstat
+ 75
+
+
+
+
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_ll_dac.c
+
+
+ ICCARM
+ 254
+
+
+ BICOMP
+ 92
+
+
+ __cstat
+ 234
+
+
+
+
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_sai.c
+
+
+ ICCARM
+ 260
+
+
+ BICOMP
+ 69
+
+
+ __cstat
+ 397
+
+
+
+
+ ICCARM
+ 23 150 428 114 6 25 21 22 294 386 358 324 317 196 60 313 230 286 328 226 250 8 26 364 306 345 111 15 16 28 7 27 10 13 18 20 98 104
+
+
+ BICOMP
+ 111 358 6 386 364 294 60 25 23 22 250 7 20 150 428 114 15 28 27 10 18 98 26 21 8 230 324 313 328 286 345 13 226 317 196 306 16 104
+
+
+
+
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_spi.c
+
+
+ ICCARM
+ 45
+
+
+ BICOMP
+ 95
+
+
+ __cstat
+ 499
+
+
+
+
+ ICCARM
+ 23 150 428 114 6 25 21 22 294 386 358 324 317 196 60 313 230 286 328 226 250 8 26 364 306 345 111 15 16 28 7 27 10 13 18 20 98 104
+
+
+ BICOMP
+ 111 358 6 386 364 294 60 25 23 22 250 7 20 150 428 114 15 28 27 10 18 98 26 21 8 230 324 313 328 286 345 13 226 317 196 306 16 104
+
+
+
+
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_ll_spi.c
+
+
+ ICCARM
+ 200
+
+
+ BICOMP
+ 40
+
+
+ __cstat
+ 228
+
+
+
+
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_smbus.c
+
+
+ ICCARM
+ 68
+
+
+ BICOMP
+ 93
+
+
+ __cstat
+ 466
+
+
+
+
+ ICCARM
+ 23 150 428 114 6 25 21 22 294 386 358 324 317 196 60 313 230 286 328 226 250 8 26 364 306 345 111 15 16 28 7 27 10 13 18 20 98 104
+
+
+ BICOMP
+ 111 358 6 386 364 294 60 25 23 22 250 7 20 150 428 114 15 28 27 10 18 98 26 21 8 230 324 313 328 286 345 13 226 317 196 306 16 104
+
+
+
+
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_dfsdm.c
+
+
+ ICCARM
+ 192
+
+
+ BICOMP
+ 491
+
+
+ __cstat
+ 390
+
+
+
+
+ ICCARM
+ 23 150 428 114 6 25 21 22 294 386 358 324 317 196 60 313 230 286 328 226 250 8 26 364 306 345 111 15 16 28 7 27 10 13 18 20 98 104
+
+
+
+
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_ll_dma2d.c
+
+
+ ICCARM
+ 277
+
+
+ BICOMP
+ 37
+
+
+ __cstat
+ 208
+
+
+
+
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_smartcard_ex.c
+
+
+ ICCARM
+ 212
+
+
+ BICOMP
+ 205
+
+
+ __cstat
+ 552
+
+
+
+
+ ICCARM
+ 23 150 428 114 6 25 21 22 294 386 358 324 317 196 60 313 230 286 328 226 250 8 26 364 306 345 111 15 16 28 7 27 10 13 18 20 98 104
+
+
+ BICOMP
+ 111 358 6 386 364 294 60 25 23 22 250 7 20 150 428 114 15 28 27 10 18 98 26 21 8 230 324 313 328 286 345 13 226 317 196 306 16 104
@@ -2358,84 +2348,17 @@
BICOMP
- 149
+ 204
__cstat
- 155
+ 176
ICCARM
- 15 73 417 53 5 23 31 16 294 336 354 318 349 131 167 322 224 306 346 239 231 12 8 351 267 365 50 28 3 21 14 13 20 29 7 11 59 58
-
-
-
-
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_ll_adc.c
-
-
- ICCARM
- 269
-
-
- BICOMP
- 127
-
-
- __cstat
- 186
-
-
-
-
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_sd.c
-
-
- ICCARM
- 278
-
-
- BICOMP
- 212
-
-
- __cstat
- 305
-
-
-
-
- ICCARM
- 15 73 417 53 5 23 31 16 294 336 354 318 349 131 167 322 224 306 346 239 231 12 8 351 267 365 50 28 3 21 14 13 20 29 7 11 59 58
-
-
- BICOMP
- 50 354 5 336 351 294 167 23 15 16 231 14 11 73 417 53 28 21 13 20 7 59 8 31 12 224 318 322 346 306 365 29 239 349 131 267 3 58
-
-
-
-
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_jpeg.c
-
-
- ICCARM
- 106
-
-
- BICOMP
- 257
-
-
- __cstat
- 321
-
-
-
-
- ICCARM
- 15 73 417 53 5 23 31 16 294 336 354 318 349 131 167 322 224 306 346 239 231 12 8 351 267 365 50 28 3 21 14 13 20 29 7 11 59 58
+ 23 150 428 114 6 25 21 22 294 386 358 324 317 196 60 313 230 286 328 226 250 8 26 364 306 345 111 15 16 28 7 27 10 13 18 20 98 104
@@ -2444,65 +2367,155 @@
ICCARM
- 249
+ 237
BICOMP
- 215
+ 64
__cstat
- 165
+ 221
ICCARM
- 15 73 417 53 5 23 31 16 294 336 354 318 349 131 167 322 224 306 346 239 231 12 8 351 267 365 50 28 3 21 14 13 20 29 7 11 59 58
+ 23 150 428 114 6 25 21 22 294 386 358 324 317 196 60 313 230 286 328 226 250 8 26 364 306 345 111 15 16 28 7 27 10 13 18 20 98 104
BICOMP
- 50 354 5 336 351 294 167 23 15 16 231 14 11 73 417 53 28 21 13 20 7 59 8 31 12 224 318 322 346 306 365 29 239 349 131 267 3 58
+ 111 358 6 386 364 294 60 25 23 22 250 7 20 150 428 114 15 28 27 10 18 98 26 21 8 230 324 313 328 286 345 13 226 317 196 306 16 104
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_sram.c
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_sd.c
ICCARM
- 134
+ 272
BICOMP
- 232
+ 89
__cstat
- 462
+ 299
ICCARM
- 15 73 417 53 5 23 31 16 294 336 354 318 349 131 167 322 224 306 346 239 231 12 8 351 267 365 50 28 3 21 14 13 20 29 7 11 59 58
+ 23 150 428 114 6 25 21 22 294 386 358 324 317 196 60 313 230 286 328 226 250 8 26 364 306 345 111 15 16 28 7 27 10 13 18 20 98 104
BICOMP
- 50 354 5 336 351 294 167 23 15 16 231 14 11 73 417 53 28 21 13 20 7 59 8 31 12 224 318 322 346 306 365 29 239 349 131 267 3 58
+ 111 358 6 386 364 294 60 25 23 22 250 7 20 150 428 114 15 28 27 10 18 98 26 21 8 230 324 313 328 286 345 13 226 317 196 306 16 104
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_ltdc.c
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_qspi.c
ICCARM
- 158
+ 81
BICOMP
- 251
+ 38
+
+
+ __cstat
+ 385
+
+
+
+
+ ICCARM
+ 23 150 428 114 6 25 21 22 294 386 358 324 317 196 60 313 230 286 328 226 250 8 26 364 306 345 111 15 16 28 7 27 10 13 18 20 98 104
+
+
+
+
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_smartcard.c
+
+
+ ICCARM
+ 266
+
+
+ BICOMP
+ 77
+
+
+ __cstat
+ 263
+
+
+
+
+ ICCARM
+ 23 150 428 114 6 25 21 22 294 386 358 324 317 196 60 313 230 286 328 226 250 8 26 364 306 345 111 15 16 28 7 27 10 13 18 20 98 104
+
+
+ BICOMP
+ 111 358 6 386 364 294 60 25 23 22 250 7 20 150 428 114 15 28 27 10 18 98 26 21 8 230 324 313 328 286 345 13 226 317 196 306 16 104
+
+
+
+
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_dac.c
+
+
+ ICCARM
+ 465
+
+
+ BICOMP
+ 398
+
+
+ __cstat
+ 486
+
+
+
+
+ ICCARM
+ 23 150 428 114 6 25 21 22 294 386 358 324 317 196 60 313 230 286 328 226 250 8 26 364 306 345 111 15 16 28 7 27 10 13 18 20 98 104
+
+
+
+
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_ll_rng.c
+
+
+ ICCARM
+ 279
+
+
+ BICOMP
+ 238
+
+
+ __cstat
+ 257
+
+
+
+
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_lptim.c
+
+
+ ICCARM
+ 49
+
+
+ BICOMP
+ 252
__cstat
@@ -2512,81 +2525,34 @@
ICCARM
- 15 73 417 53 5 23 31 16 294 336 354 318 349 131 167 322 224 306 346 239 231 12 8 351 267 365 50 28 3 21 14 13 20 29 7 11 59 58
+ 23 150 428 114 6 25 21 22 294 386 358 324 317 196 60 313 230 286 328 226 250 8 26 364 306 345 111 15 16 28 7 27 10 13 18 20 98 104
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_ll_rng.c
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_sram.c
ICCARM
+ 210
+
+
+ BICOMP
264
-
- BICOMP
- 176
-
__cstat
- 237
-
-
-
-
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_ll_spi.c
-
-
- ICCARM
- 136
-
-
- BICOMP
- 181
-
-
- __cstat
- 230
-
-
-
-
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_ll_dma2d.c
-
-
- ICCARM
- 261
-
-
- BICOMP
- 177
-
-
- __cstat
- 126
-
-
-
-
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_dcmi.c
-
-
- ICCARM
- 150
-
-
- BICOMP
- 371
-
-
- __cstat
- 360
+ 439
ICCARM
- 15 73 417 53 5 23 31 16 294 336 354 318 349 131 167 322 224 306 346 239 231 12 8 351 267 365 50 28 3 21 14 13 20 29 7 11 59 58
+ 23 150 428 114 6 25 21 22 294 386 358 324 317 196 60 313 230 286 328 226 250 8 26 364 306 345 111 15 16 28 7 27 10 13 18 20 98 104
+
+
+ BICOMP
+ 111 358 6 386 364 294 60 25 23 22 250 7 20 150 428 114 15 28 27 10 18 98 26 21 8 230 324 313 328 286 345 13 226 317 196 306 16 104
@@ -2595,48 +2561,71 @@
ICCARM
- 250
+ 243
BICOMP
- 225
+ 219
__cstat
- 283
+ 265
ICCARM
- 15 73 417 53 5 23 31 16 294 336 354 318 349 131 167 322 224 306 346 239 231 12 8 351 267 365 50 28 3 21 14 13 20 29 7 11 59 58
+ 23 150 428 114 6 25 21 22 294 386 358 324 317 196 60 313 230 286 328 226 250 8 26 364 306 345 111 15 16 28 7 27 10 13 18 20 98 104
BICOMP
- 50 354 5 336 351 294 167 23 15 16 231 14 11 73 417 53 28 21 13 20 7 59 8 31 12 224 318 322 346 306 365 29 239 349 131 267 3 58
+ 111 358 6 386 364 294 60 25 23 22 250 7 20 150 428 114 15 28 27 10 18 98 26 21 8 230 324 313 328 286 345 13 226 317 196 306 16 104
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_hcd.c
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_hash.c
ICCARM
- 121
+ 72
BICOMP
- 320
+ 315
__cstat
- 289
+ 333
ICCARM
- 15 73 417 53 5 23 31 16 294 336 354 318 349 131 167 322 224 306 346 239 231 12 8 351 267 365 50 28 3 21 14 13 20 29 7 11 59 58
+ 23 150 428 114 6 25 21 22 294 386 358 324 317 196 60 313 230 286 328 226 250 8 26 364 306 345 111 15 16 28 7 27 10 13 18 20 98 104
+
+
+
+
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_ltdc.c
+
+
+ ICCARM
+ 211
+
+
+ BICOMP
+ 246
+
+
+ __cstat
+ 319
+
+
+
+
+ ICCARM
+ 23 150 428 114 6 25 21 22 294 386 358 324 317 196 60 313 230 286 328 226 250 8 26 364 306 345 111 15 16 28 7 27 10 13 18 20 98 104
@@ -2645,21 +2634,21 @@
ICCARM
- 159
+ 189
BICOMP
- 208
+ 88
__cstat
- 298
+ 335
ICCARM
- 15 73 417 53 5 23 31 16 294 336 354 318 349 131 167 322 224 306 346 239 231 12 8 351 267 365 50 28 3 21 14 13 20 29 7 11 59 58
+ 23 150 428 114 6 25 21 22 294 386 358 324 317 196 60 313 230 286 328 226 250 8 26 364 306 345 111 15 16 28 7 27 10 13 18 20 98 104
@@ -2668,11 +2657,131 @@
ICCARM
- 175
+ 34
BICOMP
- 256
+ 261
+
+
+ __cstat
+ 372
+
+
+
+
+ ICCARM
+ 23 150 428 114 6 25 21 22 294 386 358 324 317 196 60 313 230 286 328 226 250 8 26 364 306 345 111 15 16 28 7 27 10 13 18 20 98 104
+
+
+
+
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_jpeg.c
+
+
+ ICCARM
+ 82
+
+
+ BICOMP
+ 258
+
+
+ __cstat
+ 388
+
+
+
+
+ ICCARM
+ 23 150 428 114 6 25 21 22 294 386 358 324 317 196 60 313 230 286 328 226 250 8 26 364 306 345 111 15 16 28 7 27 10 13 18 20 98 104
+
+
+
+
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_ll_adc.c
+
+
+ ICCARM
+ 311
+
+
+ BICOMP
+ 94
+
+
+ __cstat
+ 42
+
+
+
+
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_ll_pwr.c
+
+
+ ICCARM
+ 193
+
+
+ BICOMP
+ 39
+
+
+ __cstat
+ 259
+
+
+
+
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_hcd.c
+
+
+ ICCARM
+ 209
+
+
+ BICOMP
+ 338
+
+
+ __cstat
+ 297
+
+
+
+
+ ICCARM
+ 23 150 428 114 6 25 21 22 294 386 358 324 317 196 60 313 230 286 328 226 250 8 26 364 306 345 111 15 16 28 7 27 10 13 18 20 98 104
+
+
+
+
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_ll_rtc.c
+
+
+ ICCARM
+ 248
+
+
+ BICOMP
+ 54
+
+
+ __cstat
+ 235
+
+
+
+
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_nor.c
+
+
+ ICCARM
+ 63
+
+
+ BICOMP
+ 58
__cstat
@@ -2682,162 +2791,7 @@
ICCARM
- 15 73 417 53 5 23 31 16 294 336 354 318 349 131 167 322 224 306 346 239 231 12 8 351 267 365 50 28 3 21 14 13 20 29 7 11 59 58
-
-
-
-
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_ll_pwr.c
-
-
- ICCARM
- 122
-
-
- BICOMP
- 174
-
-
- __cstat
- 273
-
-
-
-
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_hash.c
-
-
- ICCARM
- 221
-
-
- BICOMP
- 326
-
-
- __cstat
- 311
-
-
-
-
- ICCARM
- 15 73 417 53 5 23 31 16 294 336 354 318 349 131 167 322 224 306 346 239 231 12 8 351 267 365 50 28 3 21 14 13 20 29 7 11 59 58
-
-
-
-
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_cec.c
-
-
- ICCARM
- 288
-
-
- BICOMP
- 335
-
-
- __cstat
- 410
-
-
-
-
- ICCARM
- 15 73 417 53 5 23 31 16 294 336 354 318 349 131 167 322 224 306 346 239 231 12 8 351 267 365 50 28 3 21 14 13 20 29 7 11 59 58
-
-
-
-
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_cryp.c
-
-
- ICCARM
- 460
-
-
- BICOMP
- 357
-
-
- __cstat
- 366
-
-
-
-
- ICCARM
- 15 73 417 53 5 23 31 16 294 336 354 318 349 131 167 322 224 306 346 239 231 12 8 351 267 365 50 28 3 21 14 13 20 29 7 11 59 58
-
-
-
-
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_crc.c
-
-
- ICCARM
- 469
-
-
- BICOMP
- 210
-
-
- __cstat
- 343
-
-
-
-
- ICCARM
- 15 73 417 53 5 23 31 16 294 336 354 318 349 131 167 322 224 306 346 239 231 12 8 351 267 365 50 28 3 21 14 13 20 29 7 11 59 58
-
-
-
-
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_i2s.c
-
-
- ICCARM
- 147
-
-
- BICOMP
- 333
-
-
- __cstat
- 295
-
-
-
-
- ICCARM
- 15 73 417 53 5 23 31 16 294 336 354 318 349 131 167 322 224 306 346 239 231 12 8 351 267 365 50 28 3 21 14 13 20 29 7 11 59 58
-
-
-
-
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_adc_ex.c
-
-
- ICCARM
- 397
-
-
- BICOMP
- 369
-
-
- __cstat
- 194
-
-
-
-
- ICCARM
- 15 73 417 53 5 23 31 16 294 336 354 318 349 131 167 322 224 306 346 239 231 12 8 351 267 365 50 28 3 21 14 13 20 29 7 11 59 58
+ 23 150 428 114 6 25 21 22 294 386 358 324 317 196 60 313 230 286 328 226 250 8 26 364 306 345 111 15 16 28 7 27 10 13 18 20 98 104
@@ -2846,391 +2800,54 @@
ILINK
- 491
+ 481
OBJCOPY
- 452
+ 443
ILINK
- 317 370 449 487 459 475 451 480 499 457 470 439 492 297 484 442 537 385 299 438 465 180 160 535 130 153 143 154 135 211 187 205 166 157 203 144 338 272 275 238 222 218 255 132 252 447 536 559 429 565 553 558 572 476 163 192 356 344
+ 295 369 458 505 441 463 440 475 507 448 557 413 483 308 476 416 517 380 288 435 534 53 206 515 163 199 198 175 215 79 57 76 223 191 84 197 381 268 269 225 67 56 240 186 247 460 516 558 415 545 546 541 565 471 62 43 360 316
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_nor.c
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_i2s.c
ICCARM
- 190
+ 213
BICOMP
- 182
+ 327
__cstat
- 361
+ 307
ICCARM
- 15 73 417 53 5 23 31 16 294 336 354 318 349 131 167 322 224 306 346 239 231 12 8 351 267 365 50 28 3 21 14 13 20 29 7 11 59 58
+ 23 150 428 114 6 25 21 22 294 386 358 324 317 196 60 313 230 286 328 226 250 8 26 364 306 345 111 15 16 28 7 27 10 13 18 20 98 104
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_irda.c
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_cec.c
ICCARM
- 139
-
-
- BICOMP
- 296
-
-
- __cstat
- 302
-
-
-
-
- ICCARM
- 15 73 417 53 5 23 31 16 294 336 354 318 349 131 167 322 224 306 346 239 231 12 8 351 267 365 50 28 3 21 14 13 20 29 7 11 59 58
-
-
-
-
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_lptim.c
-
-
- ICCARM
- 164
-
-
- BICOMP
- 276
-
-
- __cstat
- 337
-
-
-
-
- ICCARM
- 15 73 417 53 5 23 31 16 294 336 354 318 349 131 167 322 224 306 346 239 231 12 8 351 267 365 50 28 3 21 14 13 20 29 7 11 59 58
-
-
-
-
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_dcmi_ex.c
-
-
- ICCARM
- 183
-
-
- BICOMP
- 331
-
-
- __cstat
- 188
-
-
-
-
- ICCARM
- 15 73 417 53 5 23 31 16 294 336 354 318 349 131 167 322 224 306 346 239 231 12 8 351 267 365 50 28 3 21 14 13 20 29 7 11 59 58
-
-
-
-
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_rtc_ex.c
-
-
- ICCARM
- 270
-
-
- BICOMP
- 243
-
-
- __cstat
- 292
-
-
-
-
- ICCARM
- 15 73 417 53 5 23 31 16 294 336 354 318 349 131 167 322 224 306 346 239 231 12 8 351 267 365 50 28 3 21 14 13 20 29 7 11 59 58
-
-
-
-
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_dfsdm.c
-
-
- ICCARM
- 145
-
-
- BICOMP
- 355
-
-
- __cstat
- 332
-
-
-
-
- ICCARM
- 15 73 417 53 5 23 31 16 294 336 354 318 349 131 167 322 224 306 346 239 231 12 8 351 267 365 50 28 3 21 14 13 20 29 7 11 59 58
-
-
-
-
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_ll_tim.c
-
-
- ICCARM
- 120
-
-
- BICOMP
- 189
-
-
- __cstat
- 240
-
-
-
-
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_mmc.c
-
-
- ICCARM
- 173
-
-
- BICOMP
- 268
-
-
- __cstat
- 347
-
-
-
-
- ICCARM
- 15 73 417 53 5 23 31 16 294 336 354 318 349 131 167 322 224 306 346 239 231 12 8 351 267 365 50 28 3 21 14 13 20 29 7 11 59 58
-
-
-
-
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_rtc.c
-
-
- ICCARM
- 169
-
-
- BICOMP
- 201
-
-
- __cstat
293
-
-
-
- ICCARM
- 15 73 417 53 5 23 31 16 294 336 354 318 349 131 167 322 224 306 346 239 231 12 8 351 267 365 50 28 3 21 14 13 20 29 7 11 59 58
-
-
-
-
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_dac_ex.c
-
-
- ICCARM
- 440
-
BICOMP
323
-
- __cstat
- 362
-
-
-
-
- ICCARM
- 15 73 417 53 5 23 31 16 294 336 354 318 349 131 167 322 224 306 346 239 231 12 8 351 267 365 50 28 3 21 14 13 20 29 7 11 59 58
-
-
-
-
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_dac.c
-
-
- ICCARM
- 455
-
-
- BICOMP
- 340
-
-
- __cstat
- 352
-
-
-
-
- ICCARM
- 15 73 417 53 5 23 31 16 294 336 354 318 349 131 167 322 224 306 346 239 231 12 8 351 267 365 50 28 3 21 14 13 20 29 7 11 59 58
-
-
-
-
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_adc.c
-
-
- ICCARM
- 489
-
-
- BICOMP
- 191
-
-
- __cstat
- 204
-
-
-
-
- ICCARM
- 15 73 417 53 5 23 31 16 294 336 354 318 349 131 167 322 224 306 346 239 231 12 8 351 267 365 50 28 3 21 14 13 20 29 7 11 59 58
-
-
-
-
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_spdifrx.c
-
-
- ICCARM
- 172
-
-
- BICOMP
- 206
-
-
- __cstat
- 290
-
-
-
-
- ICCARM
- 15 73 417 53 5 23 31 16 294 336 354 318 349 131 167 322 224 306 346 239 231 12 8 351 267 365 50 28 3 21 14 13 20 29 7 11 59 58
-
-
- BICOMP
- 50 354 5 336 351 294 167 23 15 16 231 14 11 73 417 53 28 21 13 20 7 59 8 31 12 224 318 322 346 306 365 29 239 349 131 267 3 58
-
-
-
-
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_ll_i2c.c
-
-
- ICCARM
- 148
-
-
- BICOMP
- 236
-
-
- __cstat
- 138
-
-
-
-
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_ltdc_ex.c
-
-
- ICCARM
- 195
-
-
- BICOMP
- 262
-
-
- __cstat
- 403
-
-
-
-
- ICCARM
- 15 73 417 53 5 23 31 16 294 336 354 318 349 131 167 322 224 306 346 239 231 12 8 351 267 365 50 28 3 21 14 13 20 29 7 11 59 58
-
-
-
-
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_crc_ex.c
-
-
- ICCARM
- 454
-
-
- BICOMP
- 315
-
-
- __cstat
- 358
-
-
-
-
- ICCARM
- 15 73 417 53 5 23 31 16 294 336 354 318 349 131 167 322 224 306 346 239 231 12 8 351 267 365 50 28 3 21 14 13 20 29 7 11 59 58
-
-
-
-
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_cryp_ex.c
-
-
- ICCARM
- 468
-
-
- BICOMP
- 339
-
__cstat
402
@@ -3239,64 +2856,112 @@
ICCARM
- 15 73 417 53 5 23 31 16 294 336 354 318 349 131 167 322 224 306 346 239 231 12 8 351 267 365 50 28 3 21 14 13 20 29 7 11 59 58
+ 23 150 428 114 6 25 21 22 294 386 358 324 317 196 60 313 230 286 328 226 250 8 26 364 306 345 111 15 16 28 7 27 10 13 18 20 98 104
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_ll_crc.c
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_crc.c
ICCARM
- 325
+ 551
BICOMP
- 198
+ 74
__cstat
- 162
-
-
-
-
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_ll_sdmmc.c
-
-
- ICCARM
- 241
-
-
- BICOMP
- 178
-
-
- __cstat
- 235
+ 330
ICCARM
- 15 73 417 53 5 23 31 16 294 336 354 318 349 131 167 322 224 306 346 239 231 12 8 351 267 365 50 28 3 21 14 13 20 29 7 11 59 58
-
-
- BICOMP
- 50 354 5 336 351 294 167 23 15 16 231 14 11 73 417 53 28 21 13 20 7 59 8 31 12 224 318 322 346 306 365 29 239 349 131 267 3 58
+ 23 150 428 114 6 25 21 22 294 386 358 324 317 196 60 313 230 286 328 226 250 8 26 364 306 345 111 15 16 28 7 27 10 13 18 20 98 104
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_uart.c
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_adc.c
ICCARM
- 319
+ 477
BICOMP
- 207
+ 36
+
+
+ __cstat
+ 35
+
+
+
+
+ ICCARM
+ 23 150 428 114 6 25 21 22 294 386 358 324 317 196 60 313 230 286 328 226 250 8 26 364 306 345 111 15 16 28 7 27 10 13 18 20 98 104
+
+
+
+
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_adc_ex.c
+
+
+ ICCARM
+ 377
+
+
+ BICOMP
+ 365
+
+
+ __cstat
+ 80
+
+
+
+
+ ICCARM
+ 23 150 428 114 6 25 21 22 294 386 358 324 317 196 60 313 230 286 328 226 250 8 26 364 306 345 111 15 16 28 7 27 10 13 18 20 98 104
+
+
+
+
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_crc_ex.c
+
+
+ ICCARM
+ 438
+
+
+ BICOMP
+ 283
+
+
+ __cstat
+ 373
+
+
+
+
+ ICCARM
+ 23 150 428 114 6 25 21 22 294 386 358 324 317 196 60 313 230 286 328 226 250 8 26 364 306 345 111 15 16 28 7 27 10 13 18 20 98 104
+
+
+
+
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_rtc.c
+
+
+ ICCARM
+ 61
+
+
+ BICOMP
+ 41
__cstat
@@ -3306,11 +2971,279 @@
ICCARM
- 15 73 417 53 5 23 31 16 294 336 354 318 349 131 167 322 224 306 346 239 231 12 8 351 267 365 50 28 3 21 14 13 20 29 7 11 59 58
+ 23 150 428 114 6 25 21 22 294 386 358 324 317 196 60 313 230 286 328 226 250 8 26 364 306 345 111 15 16 28 7 27 10 13 18 20 98 104
+
+
+
+
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_ll_tim.c
+
+
+ ICCARM
+ 85
BICOMP
- 50 354 5 336 351 294 167 23 15 16 231 14 11 73 417 53 28 21 13 20 7 59 8 31 12 224 318 322 346 306 365 29 239 349 131 267 3 58
+ 44
+
+
+ __cstat
+ 239
+
+
+
+
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_ltdc_ex.c
+
+
+ ICCARM
+ 65
+
+
+ BICOMP
+ 305
+
+
+ __cstat
+ 395
+
+
+
+
+ ICCARM
+ 23 150 428 114 6 25 21 22 294 386 358 324 317 196 60 313 230 286 328 226 250 8 26 364 306 345 111 15 16 28 7 27 10 13 18 20 98 104
+
+
+
+
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_ll_i2c.c
+
+
+ ICCARM
+ 187
+
+
+ BICOMP
+ 255
+
+
+ __cstat
+ 174
+
+
+
+
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_dcmi_ex.c
+
+
+ ICCARM
+ 224
+
+
+ BICOMP
+ 394
+
+
+ __cstat
+ 48
+
+
+
+
+ ICCARM
+ 23 150 428 114 6 25 21 22 294 386 358 324 317 196 60 313 230 286 328 226 250 8 26 364 306 345 111 15 16 28 7 27 10 13 18 20 98 104
+
+
+
+
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_irda.c
+
+
+ ICCARM
+ 216
+
+
+ BICOMP
+ 334
+
+
+ __cstat
+ 321
+
+
+
+
+ ICCARM
+ 23 150 428 114 6 25 21 22 294 386 358 324 317 196 60 313 230 286 328 226 250 8 26 364 306 345 111 15 16 28 7 27 10 13 18 20 98 104
+
+
+
+
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_spdifrx.c
+
+
+ ICCARM
+ 50
+
+
+ BICOMP
+ 71
+
+
+ __cstat
+ 284
+
+
+
+
+ ICCARM
+ 23 150 428 114 6 25 21 22 294 386 358 324 317 196 60 313 230 286 328 226 250 8 26 364 306 345 111 15 16 28 7 27 10 13 18 20 98 104
+
+
+ BICOMP
+ 111 358 6 386 364 294 60 25 23 22 250 7 20 150 428 114 15 28 27 10 18 98 26 21 8 230 324 313 328 286 345 13 226 317 196 306 16 104
+
+
+
+
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_dac_ex.c
+
+
+ ICCARM
+ 420
+
+
+ BICOMP
+ 384
+
+
+ __cstat
+ 359
+
+
+
+
+ ICCARM
+ 23 150 428 114 6 25 21 22 294 386 358 324 317 196 60 313 230 286 328 226 250 8 26 364 306 345 111 15 16 28 7 27 10 13 18 20 98 104
+
+
+
+
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_mmc.c
+
+
+ ICCARM
+ 244
+
+
+ BICOMP
+ 292
+
+
+ __cstat
+ 325
+
+
+
+
+ ICCARM
+ 23 150 428 114 6 25 21 22 294 386 358 324 317 196 60 313 230 286 328 226 250 8 26 364 306 345 111 15 16 28 7 27 10 13 18 20 98 104
+
+
+
+
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_cryp_ex.c
+
+
+ ICCARM
+ 444
+
+
+ BICOMP
+ 332
+
+
+ __cstat
+ 351
+
+
+
+
+ ICCARM
+ 23 150 428 114 6 25 21 22 294 386 358 324 317 196 60 313 230 286 328 226 250 8 26 364 306 345 111 15 16 28 7 27 10 13 18 20 98 104
+
+
+
+
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_rtc_ex.c
+
+
+ ICCARM
+ 280
+
+
+ BICOMP
+ 271
+
+
+ __cstat
+ 298
+
+
+
+
+ ICCARM
+ 23 150 428 114 6 25 21 22 294 386 358 324 317 196 60 313 230 286 328 226 250 8 26 364 306 345 111 15 16 28 7 27 10 13 18 20 98 104
+
+
+
+
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_cryp.c
+
+
+ ICCARM
+ 559
+
+
+ BICOMP
+ 368
+
+
+ __cstat
+ 354
+
+
+
+
+ ICCARM
+ 23 150 428 114 6 25 21 22 294 386 358 324 317 196 60 313 230 286 328 226 250 8 26 364 306 345 111 15 16 28 7 27 10 13 18 20 98 104
+
+
+
+
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_ll_sdmmc.c
+
+
+ ICCARM
+ 229
+
+
+ BICOMP
+ 52
+
+
+ __cstat
+ 233
+
+
+
+
+ ICCARM
+ 23 150 428 114 6 25 21 22 294 386 358 324 317 196 60 313 230 286 328 226 250 8 26 364 306 345 111 15 16 28 7 27 10 13 18 20 98 104
+
+
+ BICOMP
+ 111 358 6 386 364 294 60 25 23 22 250 7 20 150 428 114 15 28 27 10 18 98 26 21 8 230 324 313 328 286 345 13 226 317 196 306 16 104
@@ -3319,34 +3252,101 @@
ICCARM
- 330
+ 340
BICOMP
- 228
+ 220
__cstat
- 304
+ 285
ICCARM
- 15 73 417 53 5 23 31 16 294 336 354 318 349 131 167 322 224 306 346 239 231 12 8 351 267 365 50 28 3 21 14 13 20 29 7 11 59 58
+ 23 150 428 114 6 25 21 22 294 386 358 324 317 196 60 313 230 286 328 226 250 8 26 364 306 345 111 15 16 28 7 27 10 13 18 20 98 104
BICOMP
- 50 354 5 336 351 294 167 23 15 16 231 14 11 73 417 53 28 21 13 20 7 59 8 31 12 224 318 322 346 306 365 29 239 349 131 267 3 58
+ 111 358 6 386 364 294 60 25 23 22 250 7 20 150 428 114 15 28 27 10 18 98 26 21 8 230 324 313 328 286 345 13 226 317 196 306 16 104
+
+
+
+
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_ll_crc.c
+
+
+ ICCARM
+ 320
+
+
+ BICOMP
+ 90
+
+
+ __cstat
+ 59
+
+
+
+
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_dcmi.c
+
+
+ ICCARM
+ 190
+
+
+ BICOMP
+ 495
+
+
+ __cstat
+ 501
+
+
+
+
+ ICCARM
+ 23 150 428 114 6 25 21 22 294 386 358 324 317 196 60 313 230 286 328 226 250 8 26 364 306 345 111 15 16 28 7 27 10 13 18 20 98 104
+
+
+
+
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_uart.c
+
+
+ ICCARM
+ 326
+
+
+ BICOMP
+ 73
+
+
+ __cstat
+ 309
+
+
+
+
+ ICCARM
+ 23 150 428 114 6 25 21 22 294 386 358 324 317 196 60 313 230 286 328 226 250 8 26 364 306 345 111 15 16 28 7 27 10 13 18 20 98 104
+
+
+ BICOMP
+ 111 358 6 386 364 294 60 25 23 22 250 7 20 150 428 114 15 28 27 10 18 98 26 21 8 230 324 313 328 286 345 13 226 317 196 306 16 104
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_timebase_tim_template.c
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_timebase_rtc_alarm_template.c
ICCARM
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_timebase_rtc_alarm_template.c
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_timebase_tim_template.c
ICCARM
diff --git a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_IAR/Boot/lib/CMSIS/Device/ST/STM32F7xx/Include/stm32f746xx.h b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_IAR/Boot/lib/CMSIS/Device/ST/STM32F7xx/Include/stm32f746xx.h
index 5de6c6e1..2c47d3f0 100644
--- a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_IAR/Boot/lib/CMSIS/Device/ST/STM32F7xx/Include/stm32f746xx.h
+++ b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_IAR/Boot/lib/CMSIS/Device/ST/STM32F7xx/Include/stm32f746xx.h
@@ -12,29 +12,13 @@
******************************************************************************
* @attention
*
- * © COPYRIGHT(c) 2016 STMicroelectronics
+ * © Copyright (c) 2016 STMicroelectronics.
+ * All rights reserved.
*
- * Redistribution and use in source and binary forms, with or without modification,
- * are permitted provided that the following conditions are met:
- * 1. Redistributions of source code must retain the above copyright notice,
- * this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright notice,
- * this list of conditions and the following disclaimer in the documentation
- * and/or other materials provided with the distribution.
- * 3. Neither the name of STMicroelectronics nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
- * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
- * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ * This software component is licensed by ST under BSD 3-Clause license,
+ * the "License"; You may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at:
+ * opensource.org/licenses/BSD-3-Clause
*
******************************************************************************
*/
@@ -1433,28 +1417,32 @@ typedef struct
/* Analog to Digital Converter */
/* */
/******************************************************************************/
+#define VREFINT_CAL_ADDR_CMSIS ((uint16_t*) (0x1FF0F44A)) /*!© COPYRIGHT(c) 2016 STMicroelectronics
+ * © Copyright (c) 2016 STMicroelectronics.
+ * All rights reserved.
*
- * Redistribution and use in source and binary forms, with or without modification,
- * are permitted provided that the following conditions are met:
- * 1. Redistributions of source code must retain the above copyright notice,
- * this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright notice,
- * this list of conditions and the following disclaimer in the documentation
- * and/or other materials provided with the distribution.
- * 3. Neither the name of STMicroelectronics nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
- * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
- * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ * This software component is licensed by ST under BSD 3-Clause license,
+ * the "License"; You may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at:
+ * opensource.org/licenses/BSD-3-Clause
*
******************************************************************************
*/
@@ -72,10 +56,10 @@
/* Uncomment the line below according to the target STM32 device used in your
application
*/
-#if !defined (STM32F756xx) && !defined (STM32F746xx) && !defined (STM32F745xx) && !defined (STM32F767xx) && \
- !defined (STM32F769xx) && !defined (STM32F777xx) && !defined (STM32F779xx) && !defined (STM32F722xx) && \
- !defined (STM32F723xx) && !defined (STM32F732xx) && !defined (STM32F733xx) && !defined (STM32F730xx) && \
- !defined (STM32F750xx)
+#if !defined (STM32F756xx) && !defined (STM32F746xx) && !defined (STM32F745xx) && !defined (STM32F765xx) && \
+ !defined (STM32F767xx) && !defined (STM32F769xx) && !defined (STM32F777xx) && !defined (STM32F779xx) && \
+ !defined (STM32F722xx) && !defined (STM32F723xx) && !defined (STM32F732xx) && !defined (STM32F733xx) && \
+ !defined (STM32F730xx) && !defined (STM32F750xx)
/* #define STM32F756xx */ /*!< STM32F756VG, STM32F756ZG, STM32F756ZG, STM32F756IG, STM32F756BG,
STM32F756NG Devices */
@@ -113,11 +97,11 @@
#endif /* USE_HAL_DRIVER */
/**
- * @brief CMSIS Device version number V1.2.4
+ * @brief CMSIS Device version number V1.2.5
*/
#define __STM32F7_CMSIS_VERSION_MAIN (0x01) /*!< [31:24] main version */
#define __STM32F7_CMSIS_VERSION_SUB1 (0x02) /*!< [23:16] sub1 version */
-#define __STM32F7_CMSIS_VERSION_SUB2 (0x04) /*!< [15:8] sub2 version */
+#define __STM32F7_CMSIS_VERSION_SUB2 (0x05) /*!< [15:8] sub2 version */
#define __STM32F7_CMSIS_VERSION_RC (0x00) /*!< [7:0] release candidate */
#define __STM32F7_CMSIS_VERSION ((__STM32F7_CMSIS_VERSION_MAIN << 24)\
|(__STM32F7_CMSIS_VERSION_SUB1 << 16)\
diff --git a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_IAR/Boot/lib/STM32F7xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_IAR/Boot/lib/STM32F7xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h
index 13b68bc2..2d265fb6 100644
--- a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_IAR/Boot/lib/STM32F7xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h
+++ b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_IAR/Boot/lib/STM32F7xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h
@@ -7,7 +7,7 @@
******************************************************************************
* @attention
*
- * © Copyright (c) 2018 STMicroelectronics.
+ * © Copyright (c) 2019 STMicroelectronics.
* All rights reserved.
*
* This software component is licensed by ST under BSD 3-Clause license,
@@ -236,6 +236,16 @@
#define DAC_WAVEGENERATION_NOISE DAC_WAVE_NOISE
#define DAC_WAVEGENERATION_TRIANGLE DAC_WAVE_TRIANGLE
+#if defined(STM32G4) || defined(STM32H7)
+#define DAC_CHIPCONNECT_DISABLE DAC_CHIPCONNECT_EXTERNAL
+#define DAC_CHIPCONNECT_ENABLE DAC_CHIPCONNECT_INTERNAL
+#endif
+
+#if defined(STM32L1) || defined(STM32L4) || defined(STM32G0) || defined(STM32L5) || defined(STM32H7) || defined(STM32F4)
+#define HAL_DAC_MSP_INIT_CB_ID HAL_DAC_MSPINIT_CB_ID
+#define HAL_DAC_MSP_DEINIT_CB_ID HAL_DAC_MSPDEINIT_CB_ID
+#endif
+
/**
* @}
*/
@@ -296,8 +306,17 @@
#define HAL_DMAMUX_REQUEST_GEN_FALLING HAL_DMAMUX_REQ_GEN_FALLING
#define HAL_DMAMUX_REQUEST_GEN_RISING_FALLING HAL_DMAMUX_REQ_GEN_RISING_FALLING
+#if defined(STM32L4R5xx) || defined(STM32L4R9xx) || defined(STM32L4R9xx) || defined(STM32L4S5xx) || defined(STM32L4S7xx) || defined(STM32L4S9xx)
+#define DMA_REQUEST_DCMI_PSSI DMA_REQUEST_DCMI
+#endif
+
#endif /* STM32L4 */
+#if defined(STM32G0)
+#define DMA_REQUEST_DAC1_CHANNEL1 DMA_REQUEST_DAC1_CH1
+#define DMA_REQUEST_DAC1_CHANNEL2 DMA_REQUEST_DAC1_CH2
+#endif
+
#if defined(STM32H7)
#define DMA_REQUEST_DAC1 DMA_REQUEST_DAC1_CH1
@@ -355,6 +374,9 @@
#define DFSDM_FILTER_EXT_TRIG_LPTIM2 DFSDM_FILTER_EXT_TRIG_LPTIM2_OUT
#define DFSDM_FILTER_EXT_TRIG_LPTIM3 DFSDM_FILTER_EXT_TRIG_LPTIM3_OUT
+#define DAC_TRIGGER_LP1_OUT DAC_TRIGGER_LPTIM1_OUT
+#define DAC_TRIGGER_LP2_OUT DAC_TRIGGER_LPTIM2_OUT
+
#endif /* STM32H7 */
/**
@@ -450,7 +472,9 @@
#define FLASH_FLAG_SNECCE_BANK2RR FLASH_FLAG_SNECCERR_BANK2
#define FLASH_FLAG_DBECCE_BANK2RR FLASH_FLAG_DBECCERR_BANK2
#define FLASH_FLAG_STRBER_BANK2R FLASH_FLAG_STRBERR_BANK2
-#endif
+#define FLASH_FLAG_WDW FLASH_FLAG_WBNE
+#define OB_WRP_SECTOR_All OB_WRP_SECTOR_ALL
+#endif /* STM32H7 */
/**
* @}
@@ -486,6 +510,13 @@
#define HAL_SYSCFG_FASTMODEPLUS_I2C1 I2C_FASTMODEPLUS_I2C1
#define HAL_SYSCFG_FASTMODEPLUS_I2C2 I2C_FASTMODEPLUS_I2C2
#define HAL_SYSCFG_FASTMODEPLUS_I2C3 I2C_FASTMODEPLUS_I2C3
+#if defined(STM32G4)
+
+#define HAL_SYSCFG_EnableIOAnalogSwitchBooster HAL_SYSCFG_EnableIOSwitchBooster
+#define HAL_SYSCFG_DisableIOAnalogSwitchBooster HAL_SYSCFG_DisableIOSwitchBooster
+#define HAL_SYSCFG_EnableIOAnalogSwitchVDD HAL_SYSCFG_EnableIOSwitchVDD
+#define HAL_SYSCFG_DisableIOAnalogSwitchVDD HAL_SYSCFG_DisableIOSwitchVDD
+#endif /* STM32G4 */
/**
* @}
*/
@@ -494,7 +525,7 @@
/** @defgroup LL_FMC_Aliased_Defines LL FMC Aliased Defines maintained for compatibility purpose
* @{
*/
-#if defined(STM32L4) || defined(STM32F7) || defined(STM32H7)
+#if defined(STM32L4) || defined(STM32F7) || defined(STM32H7) || defined(STM32G4)
#define FMC_NAND_PCC_WAIT_FEATURE_DISABLE FMC_NAND_WAIT_FEATURE_DISABLE
#define FMC_NAND_PCC_WAIT_FEATURE_ENABLE FMC_NAND_WAIT_FEATURE_ENABLE
#define FMC_NAND_PCC_MEM_BUS_WIDTH_8 FMC_NAND_MEM_BUS_WIDTH_8
@@ -547,18 +578,25 @@
#define GPIO_AF9_SDIO2 GPIO_AF9_SDMMC2
#define GPIO_AF10_SDIO2 GPIO_AF10_SDMMC2
#define GPIO_AF11_SDIO2 GPIO_AF11_SDMMC2
-#endif
+
+#if defined (STM32H743xx) || defined (STM32H753xx) || defined (STM32H750xx) || defined (STM32H742xx) || \
+ defined (STM32H745xx) || defined (STM32H755xx) || defined (STM32H747xx) || defined (STM32H757xx)
+#define GPIO_AF10_OTG2_HS GPIO_AF10_OTG2_FS
+#define GPIO_AF10_OTG1_FS GPIO_AF10_OTG1_HS
+#define GPIO_AF12_OTG2_FS GPIO_AF12_OTG1_FS
+#endif /*STM32H743xx || STM32H753xx || STM32H750xx || STM32H742xx || STM32H745xx || STM32H755xx || STM32H747xx || STM32H757xx */
+#endif /* STM32H7 */
#define GPIO_AF0_LPTIM GPIO_AF0_LPTIM1
#define GPIO_AF1_LPTIM GPIO_AF1_LPTIM1
#define GPIO_AF2_LPTIM GPIO_AF2_LPTIM1
-#if defined(STM32L0) || defined(STM32L4) || defined(STM32F4) || defined(STM32F2) || defined(STM32F7) || defined(STM32H7)
+#if defined(STM32L0) || defined(STM32L4) || defined(STM32F4) || defined(STM32F2) || defined(STM32F7) || defined(STM32G4) || defined(STM32H7)
#define GPIO_SPEED_LOW GPIO_SPEED_FREQ_LOW
#define GPIO_SPEED_MEDIUM GPIO_SPEED_FREQ_MEDIUM
#define GPIO_SPEED_FAST GPIO_SPEED_FREQ_HIGH
#define GPIO_SPEED_HIGH GPIO_SPEED_FREQ_VERY_HIGH
-#endif /* STM32L0 || STM32L4 || STM32F4 || STM32F2 || STM32F7 || STM32H7*/
+#endif /* STM32L0 || STM32L4 || STM32F4 || STM32F2 || STM32F7 || STM32G4 || STM32H7*/
#if defined(STM32L1)
#define GPIO_SPEED_VERY_LOW GPIO_SPEED_FREQ_LOW
@@ -599,6 +637,185 @@
#define __HAL_HRTIM_GetClockPrescaler __HAL_HRTIM_GETCLOCKPRESCALER
#define __HAL_HRTIM_SetCompare __HAL_HRTIM_SETCOMPARE
#define __HAL_HRTIM_GetCompare __HAL_HRTIM_GETCOMPARE
+
+#if defined(STM32G4)
+#define HAL_HRTIM_ExternalEventCounterConfig HAL_HRTIM_ExtEventCounterConfig
+#define HAL_HRTIM_ExternalEventCounterEnable HAL_HRTIM_ExtEventCounterEnable
+#define HAL_HRTIM_ExternalEventCounterDisable HAL_HRTIM_ExtEventCounterDisable
+#define HAL_HRTIM_ExternalEventCounterReset HAL_HRTIM_ExtEventCounterReset
+#endif /* STM32G4 */
+
+#if defined(STM32H7)
+#define HRTIM_OUTPUTSET_TIMAEV1_TIMBCMP1 HRTIM_OUTPUTSET_TIMEV_1
+#define HRTIM_OUTPUTSET_TIMAEV2_TIMBCMP2 HRTIM_OUTPUTSET_TIMEV_2
+#define HRTIM_OUTPUTSET_TIMAEV3_TIMCCMP2 HRTIM_OUTPUTSET_TIMEV_3
+#define HRTIM_OUTPUTSET_TIMAEV4_TIMCCMP3 HRTIM_OUTPUTSET_TIMEV_4
+#define HRTIM_OUTPUTSET_TIMAEV5_TIMDCMP1 HRTIM_OUTPUTSET_TIMEV_5
+#define HRTIM_OUTPUTSET_TIMAEV6_TIMDCMP2 HRTIM_OUTPUTSET_TIMEV_6
+#define HRTIM_OUTPUTSET_TIMAEV7_TIMECMP3 HRTIM_OUTPUTSET_TIMEV_7
+#define HRTIM_OUTPUTSET_TIMAEV8_TIMECMP4 HRTIM_OUTPUTSET_TIMEV_8
+#define HRTIM_OUTPUTSET_TIMAEV9_TIMFCMP4 HRTIM_OUTPUTSET_TIMEV_9
+#define HRTIM_OUTPUTSET_TIMBEV1_TIMACMP1 HRTIM_OUTPUTSET_TIMEV_1
+#define HRTIM_OUTPUTSET_TIMBEV2_TIMACMP2 HRTIM_OUTPUTSET_TIMEV_2
+#define HRTIM_OUTPUTSET_TIMBEV3_TIMCCMP3 HRTIM_OUTPUTSET_TIMEV_3
+#define HRTIM_OUTPUTSET_TIMBEV4_TIMCCMP4 HRTIM_OUTPUTSET_TIMEV_4
+#define HRTIM_OUTPUTSET_TIMBEV5_TIMDCMP3 HRTIM_OUTPUTSET_TIMEV_5
+#define HRTIM_OUTPUTSET_TIMBEV6_TIMDCMP4 HRTIM_OUTPUTSET_TIMEV_6
+#define HRTIM_OUTPUTSET_TIMBEV7_TIMECMP1 HRTIM_OUTPUTSET_TIMEV_7
+#define HRTIM_OUTPUTSET_TIMBEV8_TIMECMP2 HRTIM_OUTPUTSET_TIMEV_8
+#define HRTIM_OUTPUTSET_TIMBEV9_TIMFCMP3 HRTIM_OUTPUTSET_TIMEV_9
+#define HRTIM_OUTPUTSET_TIMCEV1_TIMACMP1 HRTIM_OUTPUTSET_TIMEV_1
+#define HRTIM_OUTPUTSET_TIMCEV2_TIMACMP2 HRTIM_OUTPUTSET_TIMEV_2
+#define HRTIM_OUTPUTSET_TIMCEV3_TIMBCMP2 HRTIM_OUTPUTSET_TIMEV_3
+#define HRTIM_OUTPUTSET_TIMCEV4_TIMBCMP3 HRTIM_OUTPUTSET_TIMEV_4
+#define HRTIM_OUTPUTSET_TIMCEV5_TIMDCMP2 HRTIM_OUTPUTSET_TIMEV_5
+#define HRTIM_OUTPUTSET_TIMCEV6_TIMDCMP4 HRTIM_OUTPUTSET_TIMEV_6
+#define HRTIM_OUTPUTSET_TIMCEV7_TIMECMP3 HRTIM_OUTPUTSET_TIMEV_7
+#define HRTIM_OUTPUTSET_TIMCEV8_TIMECMP4 HRTIM_OUTPUTSET_TIMEV_8
+#define HRTIM_OUTPUTSET_TIMCEV9_TIMFCMP2 HRTIM_OUTPUTSET_TIMEV_9
+#define HRTIM_OUTPUTSET_TIMDEV1_TIMACMP1 HRTIM_OUTPUTSET_TIMEV_1
+#define HRTIM_OUTPUTSET_TIMDEV2_TIMACMP4 HRTIM_OUTPUTSET_TIMEV_2
+#define HRTIM_OUTPUTSET_TIMDEV3_TIMBCMP2 HRTIM_OUTPUTSET_TIMEV_3
+#define HRTIM_OUTPUTSET_TIMDEV4_TIMBCMP4 HRTIM_OUTPUTSET_TIMEV_4
+#define HRTIM_OUTPUTSET_TIMDEV5_TIMCCMP4 HRTIM_OUTPUTSET_TIMEV_5
+#define HRTIM_OUTPUTSET_TIMDEV6_TIMECMP1 HRTIM_OUTPUTSET_TIMEV_6
+#define HRTIM_OUTPUTSET_TIMDEV7_TIMECMP4 HRTIM_OUTPUTSET_TIMEV_7
+#define HRTIM_OUTPUTSET_TIMDEV8_TIMFCMP1 HRTIM_OUTPUTSET_TIMEV_8
+#define HRTIM_OUTPUTSET_TIMDEV9_TIMFCMP3 HRTIM_OUTPUTSET_TIMEV_9
+#define HRTIM_OUTPUTSET_TIMEEV1_TIMACMP4 HRTIM_OUTPUTSET_TIMEV_1
+#define HRTIM_OUTPUTSET_TIMEEV2_TIMBCMP3 HRTIM_OUTPUTSET_TIMEV_2
+#define HRTIM_OUTPUTSET_TIMEEV3_TIMBCMP4 HRTIM_OUTPUTSET_TIMEV_3
+#define HRTIM_OUTPUTSET_TIMEEV4_TIMCCMP1 HRTIM_OUTPUTSET_TIMEV_4
+#define HRTIM_OUTPUTSET_TIMEEV5_TIMDCMP2 HRTIM_OUTPUTSET_TIMEV_5
+#define HRTIM_OUTPUTSET_TIMEEV6_TIMDCMP1 HRTIM_OUTPUTSET_TIMEV_6
+#define HRTIM_OUTPUTSET_TIMEEV7_TIMDCMP2 HRTIM_OUTPUTSET_TIMEV_7
+#define HRTIM_OUTPUTSET_TIMEEV8_TIMFCMP3 HRTIM_OUTPUTSET_TIMEV_8
+#define HRTIM_OUTPUTSET_TIMEEV9_TIMFCMP4 HRTIM_OUTPUTSET_TIMEV_9
+#define HRTIM_OUTPUTSET_TIMFEV1_TIMACMP3 HRTIM_OUTPUTSET_TIMEV_1
+#define HRTIM_OUTPUTSET_TIMFEV2_TIMBCMP1 HRTIM_OUTPUTSET_TIMEV_2
+#define HRTIM_OUTPUTSET_TIMFEV3_TIMBCMP4 HRTIM_OUTPUTSET_TIMEV_3
+#define HRTIM_OUTPUTSET_TIMFEV4_TIMCCMP1 HRTIM_OUTPUTSET_TIMEV_4
+#define HRTIM_OUTPUTSET_TIMFEV5_TIMCCMP4 HRTIM_OUTPUTSET_TIMEV_5
+#define HRTIM_OUTPUTSET_TIMFEV6_TIMDCMP3 HRTIM_OUTPUTSET_TIMEV_6
+#define HRTIM_OUTPUTSET_TIMFEV7_TIMDCMP4 HRTIM_OUTPUTSET_TIMEV_7
+#define HRTIM_OUTPUTSET_TIMFEV8_TIMECMP2 HRTIM_OUTPUTSET_TIMEV_8
+#define HRTIM_OUTPUTSET_TIMFEV9_TIMECMP3 HRTIM_OUTPUTSET_TIMEV_9
+
+#define HRTIM_OUTPUTRESET_TIMAEV1_TIMBCMP1 HRTIM_OUTPUTSET_TIMEV_1
+#define HRTIM_OUTPUTRESET_TIMAEV2_TIMBCMP2 HRTIM_OUTPUTSET_TIMEV_2
+#define HRTIM_OUTPUTRESET_TIMAEV3_TIMCCMP2 HRTIM_OUTPUTSET_TIMEV_3
+#define HRTIM_OUTPUTRESET_TIMAEV4_TIMCCMP3 HRTIM_OUTPUTSET_TIMEV_4
+#define HRTIM_OUTPUTRESET_TIMAEV5_TIMDCMP1 HRTIM_OUTPUTSET_TIMEV_5
+#define HRTIM_OUTPUTRESET_TIMAEV6_TIMDCMP2 HRTIM_OUTPUTSET_TIMEV_6
+#define HRTIM_OUTPUTRESET_TIMAEV7_TIMECMP3 HRTIM_OUTPUTSET_TIMEV_7
+#define HRTIM_OUTPUTRESET_TIMAEV8_TIMECMP4 HRTIM_OUTPUTSET_TIMEV_8
+#define HRTIM_OUTPUTRESET_TIMAEV9_TIMFCMP4 HRTIM_OUTPUTSET_TIMEV_9
+#define HRTIM_OUTPUTRESET_TIMBEV1_TIMACMP1 HRTIM_OUTPUTSET_TIMEV_1
+#define HRTIM_OUTPUTRESET_TIMBEV2_TIMACMP2 HRTIM_OUTPUTSET_TIMEV_2
+#define HRTIM_OUTPUTRESET_TIMBEV3_TIMCCMP3 HRTIM_OUTPUTSET_TIMEV_3
+#define HRTIM_OUTPUTRESET_TIMBEV4_TIMCCMP4 HRTIM_OUTPUTSET_TIMEV_4
+#define HRTIM_OUTPUTRESET_TIMBEV5_TIMDCMP3 HRTIM_OUTPUTSET_TIMEV_5
+#define HRTIM_OUTPUTRESET_TIMBEV6_TIMDCMP4 HRTIM_OUTPUTSET_TIMEV_6
+#define HRTIM_OUTPUTRESET_TIMBEV7_TIMECMP1 HRTIM_OUTPUTSET_TIMEV_7
+#define HRTIM_OUTPUTRESET_TIMBEV8_TIMECMP2 HRTIM_OUTPUTSET_TIMEV_8
+#define HRTIM_OUTPUTRESET_TIMBEV9_TIMFCMP3 HRTIM_OUTPUTSET_TIMEV_9
+#define HRTIM_OUTPUTRESET_TIMCEV1_TIMACMP1 HRTIM_OUTPUTSET_TIMEV_1
+#define HRTIM_OUTPUTRESET_TIMCEV2_TIMACMP2 HRTIM_OUTPUTSET_TIMEV_2
+#define HRTIM_OUTPUTRESET_TIMCEV3_TIMBCMP2 HRTIM_OUTPUTSET_TIMEV_3
+#define HRTIM_OUTPUTRESET_TIMCEV4_TIMBCMP3 HRTIM_OUTPUTSET_TIMEV_4
+#define HRTIM_OUTPUTRESET_TIMCEV5_TIMDCMP2 HRTIM_OUTPUTSET_TIMEV_5
+#define HRTIM_OUTPUTRESET_TIMCEV6_TIMDCMP4 HRTIM_OUTPUTSET_TIMEV_6
+#define HRTIM_OUTPUTRESET_TIMCEV7_TIMECMP3 HRTIM_OUTPUTSET_TIMEV_7
+#define HRTIM_OUTPUTRESET_TIMCEV8_TIMECMP4 HRTIM_OUTPUTSET_TIMEV_8
+#define HRTIM_OUTPUTRESET_TIMCEV9_TIMFCMP2 HRTIM_OUTPUTSET_TIMEV_9
+#define HRTIM_OUTPUTRESET_TIMDEV1_TIMACMP1 HRTIM_OUTPUTSET_TIMEV_1
+#define HRTIM_OUTPUTRESET_TIMDEV2_TIMACMP4 HRTIM_OUTPUTSET_TIMEV_2
+#define HRTIM_OUTPUTRESET_TIMDEV3_TIMBCMP2 HRTIM_OUTPUTSET_TIMEV_3
+#define HRTIM_OUTPUTRESET_TIMDEV4_TIMBCMP4 HRTIM_OUTPUTSET_TIMEV_4
+#define HRTIM_OUTPUTRESET_TIMDEV5_TIMCCMP4 HRTIM_OUTPUTSET_TIMEV_5
+#define HRTIM_OUTPUTRESET_TIMDEV6_TIMECMP1 HRTIM_OUTPUTSET_TIMEV_6
+#define HRTIM_OUTPUTRESET_TIMDEV7_TIMECMP4 HRTIM_OUTPUTSET_TIMEV_7
+#define HRTIM_OUTPUTRESET_TIMDEV8_TIMFCMP1 HRTIM_OUTPUTSET_TIMEV_8
+#define HRTIM_OUTPUTRESET_TIMDEV9_TIMFCMP3 HRTIM_OUTPUTSET_TIMEV_9
+#define HRTIM_OUTPUTRESET_TIMEEV1_TIMACMP4 HRTIM_OUTPUTSET_TIMEV_1
+#define HRTIM_OUTPUTRESET_TIMEEV2_TIMBCMP3 HRTIM_OUTPUTSET_TIMEV_2
+#define HRTIM_OUTPUTRESET_TIMEEV3_TIMBCMP4 HRTIM_OUTPUTSET_TIMEV_3
+#define HRTIM_OUTPUTRESET_TIMEEV4_TIMCCMP1 HRTIM_OUTPUTSET_TIMEV_4
+#define HRTIM_OUTPUTRESET_TIMEEV5_TIMDCMP2 HRTIM_OUTPUTSET_TIMEV_5
+#define HRTIM_OUTPUTRESET_TIMEEV6_TIMDCMP1 HRTIM_OUTPUTSET_TIMEV_6
+#define HRTIM_OUTPUTRESET_TIMEEV7_TIMDCMP2 HRTIM_OUTPUTSET_TIMEV_7
+#define HRTIM_OUTPUTRESET_TIMEEV8_TIMFCMP3 HRTIM_OUTPUTSET_TIMEV_8
+#define HRTIM_OUTPUTRESET_TIMEEV9_TIMFCMP4 HRTIM_OUTPUTSET_TIMEV_9
+#define HRTIM_OUTPUTRESET_TIMFEV1_TIMACMP3 HRTIM_OUTPUTSET_TIMEV_1
+#define HRTIM_OUTPUTRESET_TIMFEV2_TIMBCMP1 HRTIM_OUTPUTSET_TIMEV_2
+#define HRTIM_OUTPUTRESET_TIMFEV3_TIMBCMP4 HRTIM_OUTPUTSET_TIMEV_3
+#define HRTIM_OUTPUTRESET_TIMFEV4_TIMCCMP1 HRTIM_OUTPUTSET_TIMEV_4
+#define HRTIM_OUTPUTRESET_TIMFEV5_TIMCCMP4 HRTIM_OUTPUTSET_TIMEV_5
+#define HRTIM_OUTPUTRESET_TIMFEV6_TIMDCMP3 HRTIM_OUTPUTSET_TIMEV_6
+#define HRTIM_OUTPUTRESET_TIMFEV7_TIMDCMP4 HRTIM_OUTPUTSET_TIMEV_7
+#define HRTIM_OUTPUTRESET_TIMFEV8_TIMECMP2 HRTIM_OUTPUTSET_TIMEV_8
+#define HRTIM_OUTPUTRESET_TIMFEV9_TIMECMP3 HRTIM_OUTPUTSET_TIMEV_9
+#endif /* STM32H7 */
+
+#if defined(STM32F3)
+/** @brief Constants defining available sources associated to external events.
+ */
+#define HRTIM_EVENTSRC_1 (0x00000000U)
+#define HRTIM_EVENTSRC_2 (HRTIM_EECR1_EE1SRC_0)
+#define HRTIM_EVENTSRC_3 (HRTIM_EECR1_EE1SRC_1)
+#define HRTIM_EVENTSRC_4 (HRTIM_EECR1_EE1SRC_1 | HRTIM_EECR1_EE1SRC_0)
+
+/** @brief Constants defining the events that can be selected to configure the
+ * set/reset crossbar of a timer output
+ */
+#define HRTIM_OUTPUTSET_TIMEV_1 (HRTIM_SET1R_TIMEVNT1)
+#define HRTIM_OUTPUTSET_TIMEV_2 (HRTIM_SET1R_TIMEVNT2)
+#define HRTIM_OUTPUTSET_TIMEV_3 (HRTIM_SET1R_TIMEVNT3)
+#define HRTIM_OUTPUTSET_TIMEV_4 (HRTIM_SET1R_TIMEVNT4)
+#define HRTIM_OUTPUTSET_TIMEV_5 (HRTIM_SET1R_TIMEVNT5)
+#define HRTIM_OUTPUTSET_TIMEV_6 (HRTIM_SET1R_TIMEVNT6)
+#define HRTIM_OUTPUTSET_TIMEV_7 (HRTIM_SET1R_TIMEVNT7)
+#define HRTIM_OUTPUTSET_TIMEV_8 (HRTIM_SET1R_TIMEVNT8)
+#define HRTIM_OUTPUTSET_TIMEV_9 (HRTIM_SET1R_TIMEVNT9)
+
+#define HRTIM_OUTPUTRESET_TIMEV_1 (HRTIM_RST1R_TIMEVNT1)
+#define HRTIM_OUTPUTRESET_TIMEV_2 (HRTIM_RST1R_TIMEVNT2)
+#define HRTIM_OUTPUTRESET_TIMEV_3 (HRTIM_RST1R_TIMEVNT3)
+#define HRTIM_OUTPUTRESET_TIMEV_4 (HRTIM_RST1R_TIMEVNT4)
+#define HRTIM_OUTPUTRESET_TIMEV_5 (HRTIM_RST1R_TIMEVNT5)
+#define HRTIM_OUTPUTRESET_TIMEV_6 (HRTIM_RST1R_TIMEVNT6)
+#define HRTIM_OUTPUTRESET_TIMEV_7 (HRTIM_RST1R_TIMEVNT7)
+#define HRTIM_OUTPUTRESET_TIMEV_8 (HRTIM_RST1R_TIMEVNT8)
+#define HRTIM_OUTPUTRESET_TIMEV_9 (HRTIM_RST1R_TIMEVNT9)
+
+/** @brief Constants defining the event filtering applied to external events
+ * by a timer
+ */
+#define HRTIM_TIMEVENTFILTER_NONE (0x00000000U)
+#define HRTIM_TIMEVENTFILTER_BLANKINGCMP1 (HRTIM_EEFR1_EE1FLTR_0)
+#define HRTIM_TIMEVENTFILTER_BLANKINGCMP2 (HRTIM_EEFR1_EE1FLTR_1)
+#define HRTIM_TIMEVENTFILTER_BLANKINGCMP3 (HRTIM_EEFR1_EE1FLTR_1 | HRTIM_EEFR1_EE1FLTR_0)
+#define HRTIM_TIMEVENTFILTER_BLANKINGCMP4 (HRTIM_EEFR1_EE1FLTR_2)
+#define HRTIM_TIMEVENTFILTER_BLANKINGFLTR1 (HRTIM_EEFR1_EE1FLTR_2 | HRTIM_EEFR1_EE1FLTR_0)
+#define HRTIM_TIMEVENTFILTER_BLANKINGFLTR2 (HRTIM_EEFR1_EE1FLTR_2 | HRTIM_EEFR1_EE1FLTR_1)
+#define HRTIM_TIMEVENTFILTER_BLANKINGFLTR3 (HRTIM_EEFR1_EE1FLTR_2 | HRTIM_EEFR1_EE1FLTR_1 | HRTIM_EEFR1_EE1FLTR_0)
+#define HRTIM_TIMEVENTFILTER_BLANKINGFLTR4 (HRTIM_EEFR1_EE1FLTR_3)
+#define HRTIM_TIMEVENTFILTER_BLANKINGFLTR5 (HRTIM_EEFR1_EE1FLTR_3 | HRTIM_EEFR1_EE1FLTR_0)
+#define HRTIM_TIMEVENTFILTER_BLANKINGFLTR6 (HRTIM_EEFR1_EE1FLTR_3 | HRTIM_EEFR1_EE1FLTR_1)
+#define HRTIM_TIMEVENTFILTER_BLANKINGFLTR7 (HRTIM_EEFR1_EE1FLTR_3 | HRTIM_EEFR1_EE1FLTR_1 | HRTIM_EEFR1_EE1FLTR_0)
+#define HRTIM_TIMEVENTFILTER_BLANKINGFLTR8 (HRTIM_EEFR1_EE1FLTR_3 | HRTIM_EEFR1_EE1FLTR_2)
+#define HRTIM_TIMEVENTFILTER_WINDOWINGCMP2 (HRTIM_EEFR1_EE1FLTR_3 | HRTIM_EEFR1_EE1FLTR_2 | HRTIM_EEFR1_EE1FLTR_0)
+#define HRTIM_TIMEVENTFILTER_WINDOWINGCMP3 (HRTIM_EEFR1_EE1FLTR_3 | HRTIM_EEFR1_EE1FLTR_2 | HRTIM_EEFR1_EE1FLTR_1)
+#define HRTIM_TIMEVENTFILTER_WINDOWINGTIM (HRTIM_EEFR1_EE1FLTR_3 | HRTIM_EEFR1_EE1FLTR_2 | HRTIM_EEFR1_EE1FLTR_1 | HRTIM_EEFR1_EE1FLTR_0)
+
+/** @brief Constants defining the DLL calibration periods (in micro seconds)
+ */
+#define HRTIM_CALIBRATIONRATE_7300 0x00000000U
+#define HRTIM_CALIBRATIONRATE_910 (HRTIM_DLLCR_CALRTE_0)
+#define HRTIM_CALIBRATIONRATE_114 (HRTIM_DLLCR_CALRTE_1)
+#define HRTIM_CALIBRATIONRATE_14 (HRTIM_DLLCR_CALRTE_1 | HRTIM_DLLCR_CALRTE_0)
+
+#endif /* STM32F3 */
/**
* @}
*/
@@ -738,6 +955,12 @@
#define OPAMP_PGACONNECT_VM0 OPAMP_PGA_CONNECT_INVERTINGINPUT_IO0
#define OPAMP_PGACONNECT_VM1 OPAMP_PGA_CONNECT_INVERTINGINPUT_IO1
+#if defined(STM32L1) || defined(STM32L4) || defined(STM32L5) || defined(STM32H7)
+#define HAL_OPAMP_MSP_INIT_CB_ID HAL_OPAMP_MSPINIT_CB_ID
+#define HAL_OPAMP_MSP_DEINIT_CB_ID HAL_OPAMP_MSPDEINIT_CB_ID
+#endif
+
+
/**
* @}
*/
@@ -753,7 +976,6 @@
#define I2S_FLAG_TXE I2S_FLAG_TXP
#define I2S_FLAG_RXNE I2S_FLAG_RXP
- #define I2S_FLAG_FRE I2S_FLAG_TIFRE
#endif
#if defined(STM32F7)
@@ -824,6 +1046,16 @@
#define RTC_TAMPERPIN_PA0 RTC_TAMPERPIN_POS1
#define RTC_TAMPERPIN_PI8 RTC_TAMPERPIN_POS1
+#if defined(STM32H7)
+#define RTC_TAMPCR_TAMPXE RTC_TAMPER_X
+#define RTC_TAMPCR_TAMPXIE RTC_TAMPER_X_INTERRUPT
+
+#define RTC_TAMPER1_INTERRUPT RTC_IT_TAMP1
+#define RTC_TAMPER2_INTERRUPT RTC_IT_TAMP2
+#define RTC_TAMPER3_INTERRUPT RTC_IT_TAMP3
+#define RTC_ALL_TAMPER_INTERRUPT RTC_IT_TAMPALL
+#endif /* STM32H7 */
+
/**
* @}
*/
@@ -971,6 +1203,24 @@
#define IS_TIM_HALL_INTERFACE_INSTANCE IS_TIM_HALL_SENSOR_INTERFACE_INSTANCE
#endif
+#if defined(STM32H7)
+#define TIM_TIM1_ETR_COMP1_OUT TIM_TIM1_ETR_COMP1
+#define TIM_TIM1_ETR_COMP2_OUT TIM_TIM1_ETR_COMP2
+#define TIM_TIM8_ETR_COMP1_OUT TIM_TIM8_ETR_COMP1
+#define TIM_TIM8_ETR_COMP2_OUT TIM_TIM8_ETR_COMP2
+#define TIM_TIM2_ETR_COMP1_OUT TIM_TIM2_ETR_COMP1
+#define TIM_TIM2_ETR_COMP2_OUT TIM_TIM2_ETR_COMP2
+#define TIM_TIM3_ETR_COMP1_OUT TIM_TIM3_ETR_COMP1
+#define TIM_TIM1_TI1_COMP1_OUT TIM_TIM1_TI1_COMP1
+#define TIM_TIM8_TI1_COMP2_OUT TIM_TIM8_TI1_COMP2
+#define TIM_TIM2_TI4_COMP1_OUT TIM_TIM2_TI4_COMP1
+#define TIM_TIM2_TI4_COMP2_OUT TIM_TIM2_TI4_COMP2
+#define TIM_TIM2_TI4_COMP1COMP2_OUT TIM_TIM2_TI4_COMP1_COMP2
+#define TIM_TIM3_TI1_COMP1_OUT TIM_TIM3_TI1_COMP1
+#define TIM_TIM3_TI1_COMP2_OUT TIM_TIM3_TI1_COMP2
+#define TIM_TIM3_TI1_COMP1COMP2_OUT TIM_TIM3_TI1_COMP1_COMP2
+#endif
+
/**
* @}
*/
@@ -1199,6 +1449,30 @@
#define HASH_HMACKeyType_ShortKey HASH_HMAC_KEYTYPE_SHORTKEY
#define HASH_HMACKeyType_LongKey HASH_HMAC_KEYTYPE_LONGKEY
+
+#if defined(STM32L4) || defined(STM32F4) || defined(STM32F7) || defined(STM32H7)
+
+#define HAL_HASH_MD5_Accumulate HAL_HASH_MD5_Accmlt
+#define HAL_HASH_MD5_Accumulate_End HAL_HASH_MD5_Accmlt_End
+#define HAL_HASH_MD5_Accumulate_IT HAL_HASH_MD5_Accmlt_IT
+#define HAL_HASH_MD5_Accumulate_End_IT HAL_HASH_MD5_Accmlt_End_IT
+
+#define HAL_HASH_SHA1_Accumulate HAL_HASH_SHA1_Accmlt
+#define HAL_HASH_SHA1_Accumulate_End HAL_HASH_SHA1_Accmlt_End
+#define HAL_HASH_SHA1_Accumulate_IT HAL_HASH_SHA1_Accmlt_IT
+#define HAL_HASH_SHA1_Accumulate_End_IT HAL_HASH_SHA1_Accmlt_End_IT
+
+#define HAL_HASHEx_SHA224_Accumulate HAL_HASHEx_SHA224_Accmlt
+#define HAL_HASHEx_SHA224_Accumulate_End HAL_HASHEx_SHA224_Accmlt_End
+#define HAL_HASHEx_SHA224_Accumulate_IT HAL_HASHEx_SHA224_Accmlt_IT
+#define HAL_HASHEx_SHA224_Accumulate_End_IT HAL_HASHEx_SHA224_Accmlt_End_IT
+
+#define HAL_HASHEx_SHA256_Accumulate HAL_HASHEx_SHA256_Accmlt
+#define HAL_HASHEx_SHA256_Accumulate_End HAL_HASHEx_SHA256_Accmlt_End
+#define HAL_HASHEx_SHA256_Accumulate_IT HAL_HASHEx_SHA256_Accmlt_IT
+#define HAL_HASHEx_SHA256_Accumulate_End_IT HAL_HASHEx_SHA256_Accmlt_End_IT
+
+#endif /* STM32L4 || STM32F4 || STM32F7 || STM32H7 */
/**
* @}
*/
@@ -1221,6 +1495,13 @@
#endif
#define HAL_ADC_EnableBuffer_Cmd(cmd) (((cmd)==ENABLE) ? HAL_ADCEx_EnableVREFINT() : HAL_ADCEx_DisableVREFINT())
#define HAL_ADC_EnableBufferSensor_Cmd(cmd) (((cmd)==ENABLE) ? HAL_ADCEx_EnableVREFINTTempSensor() : HAL_ADCEx_DisableVREFINTTempSensor())
+#if defined(STM32H7A3xx) || defined(STM32H7B3xx) || defined(STM32H7B0xx) || defined(STM32H7A3xxQ) || defined(STM32H7B3xxQ) || defined(STM32H7B0xxQ)
+#define HAL_EnableSRDomainDBGStopMode HAL_EnableDomain3DBGStopMode
+#define HAL_DisableSRDomainDBGStopMode HAL_DisableDomain3DBGStopMode
+#define HAL_EnableSRDomainDBGStandbyMode HAL_EnableDomain3DBGStandbyMode
+#define HAL_DisableSRDomainDBGStandbyMode HAL_DisableDomain3DBGStandbyMode
+#endif /* STM32H7A3xx || STM32H7B3xx || STM32H7B0xx || STM32H7A3xxQ || STM32H7B3xxQ || STM32H7B0xxQ */
+
/**
* @}
*/
@@ -1250,16 +1531,18 @@
#define HAL_I2CFastModePlusConfig(SYSCFG_I2CFastModePlus, cmd) (((cmd)==ENABLE)? HAL_I2CEx_EnableFastModePlus(SYSCFG_I2CFastModePlus): HAL_I2CEx_DisableFastModePlus(SYSCFG_I2CFastModePlus))
-#if defined(STM32H7) || defined(STM32WB) || defined(STM32G0) || defined(STM32F4) || defined(STM32F7)
+#if defined(STM32H7) || defined(STM32WB) || defined(STM32G0) || defined(STM32F0) || defined(STM32F1) || defined(STM32F2) || defined(STM32F3) || defined(STM32F4) || defined(STM32F7) || defined(STM32L0) || defined(STM32L4) || defined(STM32L5) || defined(STM32G4)
#define HAL_I2C_Master_Sequential_Transmit_IT HAL_I2C_Master_Seq_Transmit_IT
#define HAL_I2C_Master_Sequential_Receive_IT HAL_I2C_Master_Seq_Receive_IT
#define HAL_I2C_Slave_Sequential_Transmit_IT HAL_I2C_Slave_Seq_Transmit_IT
#define HAL_I2C_Slave_Sequential_Receive_IT HAL_I2C_Slave_Seq_Receive_IT
+#endif /* STM32H7 || STM32WB || STM32G0 || STM32F0 || STM32F1 || STM32F2 || STM32F3 || STM32F4 || STM32F7 || STM32L0 || STM32L4 || STM32L5 || STM32G4 */
+#if defined(STM32H7) || defined(STM32WB) || defined(STM32G0) || defined(STM32F4) || defined(STM32F7) || defined(STM32L0) || defined(STM32L4) || defined(STM32L5) || defined(STM32G4)
#define HAL_I2C_Master_Sequential_Transmit_DMA HAL_I2C_Master_Seq_Transmit_DMA
#define HAL_I2C_Master_Sequential_Receive_DMA HAL_I2C_Master_Seq_Receive_DMA
#define HAL_I2C_Slave_Sequential_Transmit_DMA HAL_I2C_Slave_Seq_Transmit_DMA
#define HAL_I2C_Slave_Sequential_Receive_DMA HAL_I2C_Slave_Seq_Receive_DMA
-#endif /* STM32H7 || STM32WB || STM32G0 || STM32F4 || STM32F7 */
+#endif /* STM32H7 || STM32WB || STM32G0 || STM32F4 || STM32F7 || STM32L0 || STM32L4 || STM32L5 || STM32G4 */
#if defined(STM32F4)
#define HAL_FMPI2C_Master_Sequential_Transmit_IT HAL_FMPI2C_Master_Seq_Transmit_IT
@@ -1278,6 +1561,13 @@
/** @defgroup HAL_PWR_Aliased HAL PWR Aliased maintained for legacy purpose
* @{
*/
+
+#if defined(STM32G0)
+#define HAL_PWR_ConfigPVD HAL_PWREx_ConfigPVD
+#define HAL_PWR_EnablePVD HAL_PWREx_EnablePVD
+#define HAL_PWR_DisablePVD HAL_PWREx_DisablePVD
+#define HAL_PWR_PVD_IRQHandler HAL_PWREx_PVD_IRQHandler
+#endif
#define HAL_PWR_PVDConfig HAL_PWR_ConfigPVD
#define HAL_PWR_DisableBkUpReg HAL_PWREx_DisableBkUpReg
#define HAL_PWR_DisableFlashPowerDown HAL_PWREx_DisableFlashPowerDown
@@ -1350,14 +1640,14 @@
#define HAL_TIM_DMAError TIM_DMAError
#define HAL_TIM_DMACaptureCplt TIM_DMACaptureCplt
#define HAL_TIMEx_DMACommutationCplt TIMEx_DMACommutationCplt
-#if defined(STM32H7) || defined(STM32G0) || defined(STM32F7) || defined(STM32F4) || defined(STM32L0)
+#if defined(STM32H7) || defined(STM32G0) || defined(STM32F0) || defined(STM32F1) || defined(STM32F2) || defined(STM32F3) || defined(STM32F4) || defined(STM32F7) || defined(STM32L0) || defined(STM32L4)
#define HAL_TIM_SlaveConfigSynchronization HAL_TIM_SlaveConfigSynchro
#define HAL_TIM_SlaveConfigSynchronization_IT HAL_TIM_SlaveConfigSynchro_IT
#define HAL_TIMEx_CommutationCallback HAL_TIMEx_CommutCallback
#define HAL_TIMEx_ConfigCommutationEvent HAL_TIMEx_ConfigCommutEvent
#define HAL_TIMEx_ConfigCommutationEvent_IT HAL_TIMEx_ConfigCommutEvent_IT
#define HAL_TIMEx_ConfigCommutationEvent_DMA HAL_TIMEx_ConfigCommutEvent_DMA
-#endif /* STM32H7 || STM32G0 || STM32F7 || STM32F4 || STM32L0 */
+#endif /* STM32H7 || STM32G0 || STM32F0 || STM32F1 || STM32F2 || STM32F3 || STM32F4 || STM32F7 || STM32L0 */
/**
* @}
*/
@@ -2476,12 +2766,28 @@
#define __USB_OTG_FS_CLK_DISABLE __HAL_RCC_USB_OTG_FS_CLK_DISABLE
#define __USB_OTG_FS_CLK_ENABLE __HAL_RCC_USB_OTG_FS_CLK_ENABLE
#define __USB_RELEASE_RESET __HAL_RCC_USB_RELEASE_RESET
+
+#if defined(STM32H7)
+#define __HAL_RCC_WWDG_CLK_DISABLE __HAL_RCC_WWDG1_CLK_DISABLE
+#define __HAL_RCC_WWDG_CLK_ENABLE __HAL_RCC_WWDG1_CLK_ENABLE
+#define __HAL_RCC_WWDG_CLK_SLEEP_DISABLE __HAL_RCC_WWDG1_CLK_SLEEP_DISABLE
+#define __HAL_RCC_WWDG_CLK_SLEEP_ENABLE __HAL_RCC_WWDG1_CLK_SLEEP_ENABLE
+
+#define __HAL_RCC_WWDG_FORCE_RESET ((void)0U) /* Not available on the STM32H7*/
+#define __HAL_RCC_WWDG_RELEASE_RESET ((void)0U) /* Not available on the STM32H7*/
+
+
+#define __HAL_RCC_WWDG_IS_CLK_ENABLED __HAL_RCC_WWDG1_IS_CLK_ENABLED
+#define __HAL_RCC_WWDG_IS_CLK_DISABLED __HAL_RCC_WWDG1_IS_CLK_DISABLED
+#endif
+
#define __WWDG_CLK_DISABLE __HAL_RCC_WWDG_CLK_DISABLE
#define __WWDG_CLK_ENABLE __HAL_RCC_WWDG_CLK_ENABLE
#define __WWDG_CLK_SLEEP_DISABLE __HAL_RCC_WWDG_CLK_SLEEP_DISABLE
#define __WWDG_CLK_SLEEP_ENABLE __HAL_RCC_WWDG_CLK_SLEEP_ENABLE
#define __WWDG_FORCE_RESET __HAL_RCC_WWDG_FORCE_RESET
#define __WWDG_RELEASE_RESET __HAL_RCC_WWDG_RELEASE_RESET
+
#define __TIM21_CLK_ENABLE __HAL_RCC_TIM21_CLK_ENABLE
#define __TIM21_CLK_DISABLE __HAL_RCC_TIM21_CLK_DISABLE
#define __TIM21_FORCE_RESET __HAL_RCC_TIM21_FORCE_RESET
@@ -2814,6 +3120,15 @@
#define __WWDG_IS_CLK_ENABLED __HAL_RCC_WWDG_IS_CLK_ENABLED
#define __WWDG_IS_CLK_DISABLED __HAL_RCC_WWDG_IS_CLK_DISABLED
+#if defined(STM32L1)
+#define __HAL_RCC_CRYP_CLK_DISABLE __HAL_RCC_AES_CLK_DISABLE
+#define __HAL_RCC_CRYP_CLK_ENABLE __HAL_RCC_AES_CLK_ENABLE
+#define __HAL_RCC_CRYP_CLK_SLEEP_DISABLE __HAL_RCC_AES_CLK_SLEEP_DISABLE
+#define __HAL_RCC_CRYP_CLK_SLEEP_ENABLE __HAL_RCC_AES_CLK_SLEEP_ENABLE
+#define __HAL_RCC_CRYP_FORCE_RESET __HAL_RCC_AES_FORCE_RESET
+#define __HAL_RCC_CRYP_RELEASE_RESET __HAL_RCC_AES_RELEASE_RESET
+#endif /* STM32L1 */
+
#if defined(STM32F4)
#define __HAL_RCC_SDMMC1_FORCE_RESET __HAL_RCC_SDIO_FORCE_RESET
#define __HAL_RCC_SDMMC1_RELEASE_RESET __HAL_RCC_SDIO_RELEASE_RESET
@@ -2930,7 +3245,7 @@
#if defined(STM32L4)
#define RCC_RTCCLKSOURCE_NO_CLK RCC_RTCCLKSOURCE_NONE
-#elif defined(STM32WB) || defined(STM32G0)
+#elif defined(STM32WB) || defined(STM32G0) || defined(STM32G4) || defined(STM32L5)
#else
#define RCC_RTCCLKSOURCE_NONE RCC_RTCCLKSOURCE_NO_CLK
#endif
@@ -3058,7 +3373,7 @@
/** @defgroup HAL_RTC_Aliased_Macros HAL RTC Aliased Macros maintained for legacy purpose
* @{
*/
-#if defined (STM32G0) || defined (STM32L412xx) || defined (STM32L422xx) || defined (STM32L4P5xx) || defined (STM32L4Q5xx)
+#if defined (STM32G0) || defined (STM32L5) || defined (STM32L412xx) || defined (STM32L422xx) || defined (STM32L4P5xx) || defined (STM32L4Q5xx) || defined (STM32G4)
#else
#define __HAL_RTC_CLEAR_FLAG __HAL_RTC_EXTI_CLEAR_FLAG
#endif
@@ -3174,14 +3489,14 @@
#define SDIO_IRQHandler SDMMC1_IRQHandler
#endif
-#if defined(STM32F7) || defined(STM32F4) || defined(STM32F2)
+#if defined(STM32F7) || defined(STM32F4) || defined(STM32F2) || defined(STM32L4) || defined(STM32H7)
#define HAL_SD_CardCIDTypedef HAL_SD_CardCIDTypeDef
#define HAL_SD_CardCSDTypedef HAL_SD_CardCSDTypeDef
#define HAL_SD_CardStatusTypedef HAL_SD_CardStatusTypeDef
#define HAL_SD_CardStateTypedef HAL_SD_CardStateTypeDef
#endif
-#if defined(STM32H7)
+#if defined(STM32H7) || defined(STM32L5)
#define HAL_MMCEx_Read_DMADoubleBuffer0CpltCallback HAL_MMCEx_Read_DMADoubleBuf0CpltCallback
#define HAL_MMCEx_Read_DMADoubleBuffer1CpltCallback HAL_MMCEx_Read_DMADoubleBuf1CpltCallback
#define HAL_MMCEx_Write_DMADoubleBuffer0CpltCallback HAL_MMCEx_Write_DMADoubleBuf0CpltCallback
@@ -3421,18 +3736,28 @@
/** @defgroup HAL_HRTIM_Aliased_Functions HAL HRTIM Aliased Functions maintained for legacy purpose
* @{
*/
-#if defined (STM32H7) || defined (STM32F3)
-#define HAL_HRTIM_WaveformCounterStart_IT HAL_HRTIM_WaveformCountStart_IT
-#define HAL_HRTIM_WaveformCounterStart_DMA HAL_HRTIM_WaveformCountStart_DMA
-#define HAL_HRTIM_WaveformCounterStart HAL_HRTIM_WaveformCountStart
-#define HAL_HRTIM_WaveformCounterStop_IT HAL_HRTIM_WaveformCountStop_IT
-#define HAL_HRTIM_WaveformCounterStop_DMA HAL_HRTIM_WaveformCountStop_DMA
-#define HAL_HRTIM_WaveformCounterStop HAL_HRTIM_WaveformCountStop
+#if defined (STM32H7) || defined (STM32G4) || defined (STM32F3)
+#define HAL_HRTIM_WaveformCounterStart_IT HAL_HRTIM_WaveformCountStart_IT
+#define HAL_HRTIM_WaveformCounterStart_DMA HAL_HRTIM_WaveformCountStart_DMA
+#define HAL_HRTIM_WaveformCounterStart HAL_HRTIM_WaveformCountStart
+#define HAL_HRTIM_WaveformCounterStop_IT HAL_HRTIM_WaveformCountStop_IT
+#define HAL_HRTIM_WaveformCounterStop_DMA HAL_HRTIM_WaveformCountStop_DMA
+#define HAL_HRTIM_WaveformCounterStop HAL_HRTIM_WaveformCountStop
#endif
/**
* @}
*/
+/** @defgroup HAL_QSPI_Aliased_Macros HAL QSPI Aliased Macros maintained for legacy purpose
+ * @{
+ */
+#if defined (STM32L4) || defined (STM32F4) || defined (STM32F7)
+#define HAL_QPSI_TIMEOUT_DEFAULT_VALUE HAL_QSPI_TIMEOUT_DEFAULT_VALUE
+#endif /* STM32L4 || STM32F4 || STM32F7 */
+/**
+ * @}
+ */
+
/** @defgroup HAL_PPP_Aliased_Macros HAL PPP Aliased Macros maintained for legacy purpose
* @{
*/
diff --git a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_IAR/Boot/lib/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_exti.h b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_IAR/Boot/lib/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_exti.h
index bf82a38e..c9f137c1 100644
--- a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_IAR/Boot/lib/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_exti.h
+++ b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_IAR/Boot/lib/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_exti.h
@@ -18,8 +18,8 @@
*/
/* Define to prevent recursive inclusion -------------------------------------*/
-#ifndef __STM32F7xx_HAL_EXTI_H
-#define __STM32F7xx_HAL_EXTI_H
+#ifndef STM32F7xx_HAL_EXTI_H
+#define STM32F7xx_HAL_EXTI_H
#ifdef __cplusplus
extern "C" {
@@ -38,14 +38,13 @@ extern "C" {
*/
/* Exported types ------------------------------------------------------------*/
+
/** @defgroup EXTI_Exported_Types EXTI Exported Types
* @{
*/
typedef enum
{
- HAL_EXTI_COMMON_CB_ID = 0x00U,
- HAL_EXTI_RISING_CB_ID = 0x01U,
- HAL_EXTI_FALLING_CB_ID = 0x02U,
+ HAL_EXTI_COMMON_CB_ID = 0x00U
} EXTI_CallbackIDTypeDef;
/**
@@ -68,6 +67,9 @@ typedef struct
This parameter can be a combination of @ref EXTI_Mode */
uint32_t Trigger; /*!< The Exti Trigger to be configured. This parameter
can be a value of @ref EXTI_Trigger */
+ uint32_t GPIOSel; /*!< The Exti GPIO multiplexer selection to be configured.
+ This parameter is only possible for line 0 to 15. It
+ can be a value of @ref EXTI_GPIOSel */
} EXTI_ConfigTypeDef;
/**
@@ -82,48 +84,36 @@ typedef struct
/** @defgroup EXTI_Line EXTI Line
* @{
*/
-#define EXTI_LINE_0 EXTI_IMR_IM0 /*!< External interrupt line 0 */
-#define EXTI_LINE_1 EXTI_IMR_IM1 /*!< External interrupt line 1 */
-#define EXTI_LINE_2 EXTI_IMR_IM2 /*!< External interrupt line 2 */
-#define EXTI_LINE_3 EXTI_IMR_IM3 /*!< External interrupt line 3 */
-#define EXTI_LINE_4 EXTI_IMR_IM4 /*!< External interrupt line 4 */
-#define EXTI_LINE_5 EXTI_IMR_IM5 /*!< External interrupt line 5 */
-#define EXTI_LINE_6 EXTI_IMR_IM6 /*!< External interrupt line 6 */
-#define EXTI_LINE_7 EXTI_IMR_IM7 /*!< External interrupt line 7 */
-#define EXTI_LINE_8 EXTI_IMR_IM8 /*!< External interrupt line 8 */
-#define EXTI_LINE_9 EXTI_IMR_IM9 /*!< External interrupt line 9 */
-#define EXTI_LINE_10 EXTI_IMR_IM10 /*!< External interrupt line 10 */
-#define EXTI_LINE_11 EXTI_IMR_IM11 /*!< External interrupt line 11 */
-#define EXTI_LINE_12 EXTI_IMR_IM12 /*!< External interrupt line 12 */
-#define EXTI_LINE_13 EXTI_IMR_IM13 /*!< External interrupt line 13 */
-#define EXTI_LINE_14 EXTI_IMR_IM14 /*!< External interrupt line 14 */
-#define EXTI_LINE_15 EXTI_IMR_IM15 /*!< External interrupt line 15 */
-#if defined(EXTI_IMR_IM16)
-#define EXTI_LINE_16 EXTI_IMR_IM16 /*!< External interrupt line 16 Connected to the PVD Output */
-#endif /* EXTI_IMR_IM16 */
-#if defined(EXTI_IMR_IM17)
-#define EXTI_LINE_17 EXTI_IMR_IM17 /*!< External interrupt line 17 Connected to the RTC Alarm event */
-#endif /* EXTI_IMR_IM17 */
-#if defined(EXTI_IMR_IM18)
-#define EXTI_LINE_18 EXTI_IMR_IM18 /*!< External interrupt line 18 Connected to the USB OTG FS Wakeup from suspend event */
-#endif /* EXTI_IMR_IM18 */
-#if defined(EXTI_IMR_IM19)
-#define EXTI_LINE_19 EXTI_IMR_IM19 /*!< External interrupt line 19 Connected to the Ethernet Wakeup event */
-#endif /* EXTI_IMR_IM19 */
-#if defined(EXTI_IMR_IM20)
-#define EXTI_LINE_20 EXTI_IMR_IM20 /*!< External interrupt line 20 Connected to the USB OTG HS (configured in FS) Wakeup event */
-#endif /* EXTI_IMR_IM20 */
-#if defined(EXTI_IMR_IM21)
-#define EXTI_LINE_21 EXTI_IMR_IM21 /*!< External interrupt line 21 Connected to the RTC Tamper and Time Stamp events */
-#endif /* EXTI_IMR_IM21 */
-#if defined(EXTI_IMR_IM22)
-#define EXTI_LINE_22 EXTI_IMR_IM22 /*!< External interrupt line 22 Connected to the RTC Wakeup event */
-#endif /* EXTI_IMR_IM22 */
-#if defined(EXTI_IMR_IM23)
-#define EXTI_LINE_23 EXTI_IMR_IM23 /*!< External interrupt line 23 Connected to the LPTIM Wakeup event */
-#endif /* EXTI_IMR_IM23 */
+#define EXTI_LINE_0 (EXTI_GPIO | 0x00u) /*!< External interrupt line 0 */
+#define EXTI_LINE_1 (EXTI_GPIO | 0x01u) /*!< External interrupt line 1 */
+#define EXTI_LINE_2 (EXTI_GPIO | 0x02u) /*!< External interrupt line 2 */
+#define EXTI_LINE_3 (EXTI_GPIO | 0x03u) /*!< External interrupt line 3 */
+#define EXTI_LINE_4 (EXTI_GPIO | 0x04u) /*!< External interrupt line 4 */
+#define EXTI_LINE_5 (EXTI_GPIO | 0x05u) /*!< External interrupt line 5 */
+#define EXTI_LINE_6 (EXTI_GPIO | 0x06u) /*!< External interrupt line 6 */
+#define EXTI_LINE_7 (EXTI_GPIO | 0x07u) /*!< External interrupt line 7 */
+#define EXTI_LINE_8 (EXTI_GPIO | 0x08u) /*!< External interrupt line 8 */
+#define EXTI_LINE_9 (EXTI_GPIO | 0x09u) /*!< External interrupt line 9 */
+#define EXTI_LINE_10 (EXTI_GPIO | 0x0Au) /*!< External interrupt line 10 */
+#define EXTI_LINE_11 (EXTI_GPIO | 0x0Bu) /*!< External interrupt line 11 */
+#define EXTI_LINE_12 (EXTI_GPIO | 0x0Cu) /*!< External interrupt line 12 */
+#define EXTI_LINE_13 (EXTI_GPIO | 0x0Du) /*!< External interrupt line 13 */
+#define EXTI_LINE_14 (EXTI_GPIO | 0x0Eu) /*!< External interrupt line 14 */
+#define EXTI_LINE_15 (EXTI_GPIO | 0x0Fu) /*!< External interrupt line 15 */
+#define EXTI_LINE_16 (EXTI_CONFIG | 0x10u) /*!< External interrupt line 16 Connected to the PVD Output */
+#define EXTI_LINE_17 (EXTI_CONFIG | 0x11u) /*!< External interrupt line 17 Connected to the RTC Alarm event */
+#define EXTI_LINE_18 (EXTI_CONFIG | 0x12u) /*!< External interrupt line 18 Connected to the USB OTG FS Wakeup from suspend event */
+#if defined(ETH)
+#define EXTI_LINE_19 (EXTI_CONFIG | 0x13u) /*!< External interrupt line 19 Connected to the Ethernet Wakeup event */
+#else
+#define EXTI_LINE_19 (EXTI_RESERVED | 0x13u) /*!< No interrupt supported in this line */
+#endif /* ETH */
+#define EXTI_LINE_20 (EXTI_CONFIG | 0x14u) /*!< External interrupt line 20 Connected to the USB OTG HS (configured in FS) Wakeup event */
+#define EXTI_LINE_21 (EXTI_CONFIG | 0x15u) /*!< External interrupt line 21 Connected to the RTC Tamper and Time Stamp events */
+#define EXTI_LINE_22 (EXTI_CONFIG | 0x16u) /*!< External interrupt line 22 Connected to the RTC Wakeup event */
+#define EXTI_LINE_23 (EXTI_CONFIG | 0x17u) /*!< External interrupt line 23 Connected to the LPTIM Wakeup event */
#if defined(EXTI_IMR_IM24)
-#define EXTI_LINE_24 EXTI_IMR_IM24 /*!< External interrupt line 24 Connected to the MDIO Slave global Interrupt Wakeup event */
+#define EXTI_LINE_24 (EXTI_CONFIG | 0x18u) /*!< External interrupt line 24 Connected to the MDIO Slave global Interrupt Wakeup event */
#endif /* EXTI_IMR_IM24 */
/**
* @}
@@ -142,6 +132,7 @@ typedef struct
/** @defgroup EXTI_Trigger EXTI Trigger
* @{
*/
+
#define EXTI_TRIGGER_NONE 0x00000000u
#define EXTI_TRIGGER_RISING 0x00000001u
#define EXTI_TRIGGER_FALLING 0x00000002u
@@ -150,6 +141,24 @@ typedef struct
* @}
*/
+/** @defgroup EXTI_GPIOSel EXTI GPIOSel
+ * @brief
+ * @{
+ */
+#define EXTI_GPIOA 0x00000000u
+#define EXTI_GPIOB 0x00000001u
+#define EXTI_GPIOC 0x00000002u
+#define EXTI_GPIOD 0x00000003u
+#define EXTI_GPIOE 0x00000004u
+#define EXTI_GPIOF 0x00000005u
+#define EXTI_GPIOG 0x00000006u
+#define EXTI_GPIOH 0x00000007u
+#define EXTI_GPIOI 0x00000008u
+#define EXTI_GPIOJ 0x00000009u
+#if defined (GPIOK)
+#define EXTI_GPIOK 0x0000000Au
+#endif /* GPIOK */
+
/**
* @}
*/
@@ -167,6 +176,20 @@ typedef struct
/** @defgroup EXTI_Private_Constants EXTI Private Constants
* @{
*/
+/**
+ * @brief EXTI Line property definition
+ */
+#define EXTI_PROPERTY_SHIFT 24u
+#define EXTI_CONFIG (0x02uL << EXTI_PROPERTY_SHIFT)
+#define EXTI_GPIO ((0x04uL << EXTI_PROPERTY_SHIFT) | EXTI_CONFIG)
+#define EXTI_RESERVED (0x08uL << EXTI_PROPERTY_SHIFT)
+#define EXTI_PROPERTY_MASK (EXTI_CONFIG | EXTI_GPIO)
+
+/**
+ * @brief EXTI bit usage
+ */
+#define EXTI_PIN_MASK 0x0000001Fu
+
/**
* @brief EXTI Mask for interrupt & event mode
*/
@@ -175,12 +198,17 @@ typedef struct
/**
* @brief EXTI Mask for trigger possibilities
*/
-#define EXTI_TRIGGER_MASK (EXTI_TRIGGER_RISING | EXTI_TRIGGER_FALLING | EXTI_TRIGGER_RISING_FALLING)
+#define EXTI_TRIGGER_MASK (EXTI_TRIGGER_RISING | EXTI_TRIGGER_FALLING)
/**
* @brief EXTI Line number
*/
+#if defined(EXTI_IMR_IM24)
#define EXTI_LINE_NB 25u
+#else
+#define EXTI_LINE_NB 24u
+#endif /* EXTI_IMR_IM24 */
+
/**
* @}
@@ -190,16 +218,47 @@ typedef struct
/** @defgroup EXTI_Private_Macros EXTI Private Macros
* @{
*/
-#define IS_EXTI_LINE(__LINE__) ((((__LINE__) & ~EXTI_IMR_IM) == 0x00U) && (__LINE__))
+#define IS_EXTI_LINE(__LINE__) ((((__LINE__) & ~(EXTI_PROPERTY_MASK | EXTI_PIN_MASK)) == 0x00u) && \
+ ((((__LINE__) & EXTI_PROPERTY_MASK) == EXTI_CONFIG) || \
+ (((__LINE__) & EXTI_PROPERTY_MASK) == EXTI_GPIO)) && \
+ (((__LINE__) & EXTI_PIN_MASK) < EXTI_LINE_NB))
-#define IS_EXTI_MODE(__LINE__) ((((__LINE__) & ~EXTI_MODE_MASK) == 0x00U))
+#define IS_EXTI_MODE(__LINE__) ((((__LINE__) & EXTI_MODE_MASK) != 0x00u) && \
+ (((__LINE__) & ~EXTI_MODE_MASK) == 0x00u))
-#define IS_EXTI_TRIGGER(__LINE__) (((__LINE__) & ~EXTI_TRIGGER_MASK) == 0x00U)
+#define IS_EXTI_TRIGGER(__LINE__) (((__LINE__) & ~EXTI_TRIGGER_MASK) == 0x00u)
#define IS_EXTI_PENDING_EDGE(__LINE__) (((__LINE__) == EXTI_TRIGGER_FALLING) || \
((__LINE__) == EXTI_TRIGGER_RISING) || \
((__LINE__) == EXTI_TRIGGER_RISING_FALLING))
+#define IS_EXTI_CONFIG_LINE(__LINE__) (((__LINE__) & EXTI_CONFIG) != 0x00u)
+
+#if defined (GPIOK)
+#define IS_EXTI_GPIO_PORT(__PORT__) (((__PORT__) == EXTI_GPIOA) || \
+ ((__PORT__) == EXTI_GPIOB) || \
+ ((__PORT__) == EXTI_GPIOC) || \
+ ((__PORT__) == EXTI_GPIOD) || \
+ ((__PORT__) == EXTI_GPIOE) || \
+ ((__PORT__) == EXTI_GPIOF) || \
+ ((__PORT__) == EXTI_GPIOG) || \
+ ((__PORT__) == EXTI_GPIOH) || \
+ ((__PORT__) == EXTI_GPIOI) || \
+ ((__PORT__) == EXTI_GPIOJ) || \
+ ((__PORT__) == EXTI_GPIOK))
+#else
+#define IS_EXTI_GPIO_PORT(__PORT__) (((__PORT__) == EXTI_GPIOA) || \
+ ((__PORT__) == EXTI_GPIOB) || \
+ ((__PORT__) == EXTI_GPIOC) || \
+ ((__PORT__) == EXTI_GPIOD) || \
+ ((__PORT__) == EXTI_GPIOE) || \
+ ((__PORT__) == EXTI_GPIOF) || \
+ ((__PORT__) == EXTI_GPIOG) || \
+ ((__PORT__) == EXTI_GPIOH) || \
+ ((__PORT__) == EXTI_GPIOI) || \
+ ((__PORT__) == EXTI_GPIOJ))
+#endif /* GPIOK */
+
#define IS_EXTI_GPIO_PIN(__PIN__) ((__PIN__) < 16U)
/**
* @}
@@ -255,6 +314,6 @@ void HAL_EXTI_GenerateSWI(EXTI_HandleTypeDef *hexti);
}
#endif
-#endif /* __STM32F7xx_HAL_EXTI_H */
+#endif /* STM32F7xx_HAL_EXTI_H */
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff --git a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_IAR/Boot/lib/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_gpio.h b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_IAR/Boot/lib/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_gpio.h
index 3d9de6e2..08e0acb2 100644
--- a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_IAR/Boot/lib/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_gpio.h
+++ b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_IAR/Boot/lib/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_gpio.h
@@ -262,7 +262,7 @@ void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin);
* @{
*/
#define IS_GPIO_PIN_ACTION(ACTION) (((ACTION) == GPIO_PIN_RESET) || ((ACTION) == GPIO_PIN_SET))
-#define IS_GPIO_PIN(__PIN__) ((((__PIN__) & GPIO_PIN_MASK) != (uint32_t)0x00))
+#define IS_GPIO_PIN(__PIN__) ((((uint32_t)(__PIN__) & GPIO_PIN_MASK) != 0x00U))
#define IS_GPIO_MODE(MODE) (((MODE) == GPIO_MODE_INPUT) ||\
((MODE) == GPIO_MODE_OUTPUT_PP) ||\
((MODE) == GPIO_MODE_OUTPUT_OD) ||\
diff --git a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_IAR/Boot/lib/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_i2c_ex.h b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_IAR/Boot/lib/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_i2c_ex.h
index d5d75314..83037894 100644
--- a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_IAR/Boot/lib/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_i2c_ex.h
+++ b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_IAR/Boot/lib/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_i2c_ex.h
@@ -167,6 +167,9 @@ void HAL_I2CEx_DisableFastModePlus(uint32_t ConfigFastModePlus);
(((__CONFIG__) & I2C_FASTMODEPLUS_PB9) == I2C_FASTMODEPLUS_PB9) || \
(((__CONFIG__) & I2C_FASTMODEPLUS_I2C1) == I2C_FASTMODEPLUS_I2C1))
#endif /* SYSCFG_PMC_I2C1_FMP && SYSCFG_PMC_I2C2_FMP && SYSCFG_PMC_I2C3_FMP && SYSCFG_PMC_I2C4_FMP */
+
+
+
/**
* @}
*/
diff --git a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_IAR/Boot/lib/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_pcd.h b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_IAR/Boot/lib/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_pcd.h
index 0633bb22..2650b739 100644
--- a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_IAR/Boot/lib/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_pcd.h
+++ b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_IAR/Boot/lib/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_pcd.h
@@ -96,16 +96,16 @@ typedef struct __PCD_HandleTypeDef
typedef struct
#endif /* USE_HAL_PCD_REGISTER_CALLBACKS */
{
- PCD_TypeDef *Instance; /*!< Register base address */
- PCD_InitTypeDef Init; /*!< PCD required parameters */
- __IO uint8_t USB_Address; /*!< USB Address */
- PCD_EPTypeDef IN_ep[16]; /*!< IN endpoint parameters */
- PCD_EPTypeDef OUT_ep[16]; /*!< OUT endpoint parameters */
- HAL_LockTypeDef Lock; /*!< PCD peripheral status */
- __IO PCD_StateTypeDef State; /*!< PCD communication state */
- __IO uint32_t ErrorCode; /*!< PCD Error code */
- uint32_t Setup[12]; /*!< Setup packet buffer */
- PCD_LPM_StateTypeDef LPM_State; /*!< LPM State */
+ PCD_TypeDef *Instance; /*!< Register base address */
+ PCD_InitTypeDef Init; /*!< PCD required parameters */
+ __IO uint8_t USB_Address; /*!< USB Address */
+ PCD_EPTypeDef IN_ep[16]; /*!< IN endpoint parameters */
+ PCD_EPTypeDef OUT_ep[16]; /*!< OUT endpoint parameters */
+ HAL_LockTypeDef Lock; /*!< PCD peripheral status */
+ __IO PCD_StateTypeDef State; /*!< PCD communication state */
+ __IO uint32_t ErrorCode; /*!< PCD Error code */
+ uint32_t Setup[12]; /*!< Setup packet buffer */
+ PCD_LPM_StateTypeDef LPM_State; /*!< LPM State */
uint32_t BESL;
@@ -148,9 +148,9 @@ typedef struct
/** @defgroup PCD_Speed PCD Speed
* @{
*/
-#define PCD_SPEED_HIGH 0U
-#define PCD_SPEED_HIGH_IN_FULL 1U
-#define PCD_SPEED_FULL 2U
+#define PCD_SPEED_HIGH USBD_HS_SPEED
+#define PCD_SPEED_HIGH_IN_FULL USBD_HSINFS_SPEED
+#define PCD_SPEED_FULL USBD_FS_SPEED
/**
* @}
*/
@@ -207,20 +207,20 @@ typedef struct
#define __HAL_USB_OTG_HS_WAKEUP_EXTI_GET_FLAG() EXTI->PR & (USB_OTG_HS_WAKEUP_EXTI_LINE)
#define __HAL_USB_OTG_HS_WAKEUP_EXTI_CLEAR_FLAG() EXTI->PR = (USB_OTG_HS_WAKEUP_EXTI_LINE)
-#define __HAL_USB_OTG_HS_WAKEUP_EXTI_ENABLE_RISING_EDGE() \
- do { \
+#define __HAL_USB_OTG_HS_WAKEUP_EXTI_ENABLE_RISING_EDGE() \
+ do { \
EXTI->FTSR &= ~(USB_OTG_HS_WAKEUP_EXTI_LINE); \
- EXTI->RTSR |= USB_OTG_HS_WAKEUP_EXTI_LINE; \
+ EXTI->RTSR |= USB_OTG_HS_WAKEUP_EXTI_LINE; \
} while(0U)
#define __HAL_USB_OTG_FS_WAKEUP_EXTI_ENABLE_IT() EXTI->IMR |= USB_OTG_FS_WAKEUP_EXTI_LINE
#define __HAL_USB_OTG_FS_WAKEUP_EXTI_DISABLE_IT() EXTI->IMR &= ~(USB_OTG_FS_WAKEUP_EXTI_LINE)
#define __HAL_USB_OTG_FS_WAKEUP_EXTI_GET_FLAG() EXTI->PR & (USB_OTG_FS_WAKEUP_EXTI_LINE)
#define __HAL_USB_OTG_FS_WAKEUP_EXTI_CLEAR_FLAG() EXTI->PR = USB_OTG_FS_WAKEUP_EXTI_LINE
-#define __HAL_USB_OTG_FS_WAKEUP_EXTI_ENABLE_RISING_EDGE() \
- do { \
+#define __HAL_USB_OTG_FS_WAKEUP_EXTI_ENABLE_RISING_EDGE() \
+ do { \
EXTI->FTSR &= ~(USB_OTG_FS_WAKEUP_EXTI_LINE); \
- EXTI->RTSR |= USB_OTG_FS_WAKEUP_EXTI_LINE; \
+ EXTI->RTSR |= USB_OTG_FS_WAKEUP_EXTI_LINE; \
} while(0U)
#endif /* defined (USB_OTG_FS) || defined (USB_OTG_HS) */
@@ -256,7 +256,7 @@ typedef enum
HAL_PCD_SUSPEND_CB_ID = 0x04, /*!< USB PCD Suspend callback ID */
HAL_PCD_RESUME_CB_ID = 0x05, /*!< USB PCD Resume callback ID */
HAL_PCD_CONNECT_CB_ID = 0x06, /*!< USB PCD Connect callback ID */
- HAL_PCD_DISCONNECT_CB_ID = 0x07, /*!< USB PCD Disconnect callback ID */
+ HAL_PCD_DISCONNECT_CB_ID = 0x07, /*!< USB PCD Disconnect callback ID */
HAL_PCD_MSPINIT_CB_ID = 0x08, /*!< USB PCD MspInit callback ID */
HAL_PCD_MSPDEINIT_CB_ID = 0x09 /*!< USB PCD MspDeInit callback ID */
@@ -371,14 +371,6 @@ PCD_StateTypeDef HAL_PCD_GetState(PCD_HandleTypeDef *hpcd);
* @{
*/
#if defined (USB_OTG_FS) || defined (USB_OTG_HS)
-#define USB_OTG_FS_WAKEUP_EXTI_RISING_EDGE 0x08U
-#define USB_OTG_FS_WAKEUP_EXTI_FALLING_EDGE 0x0CU
-#define USB_OTG_FS_WAKEUP_EXTI_RISING_FALLING_EDGE 0x10U
-
-#define USB_OTG_HS_WAKEUP_EXTI_RISING_EDGE 0x08U
-#define USB_OTG_HS_WAKEUP_EXTI_FALLING_EDGE 0x0CU
-#define USB_OTG_HS_WAKEUP_EXTI_RISING_FALLING_EDGE 0x10U
-
#define USB_OTG_FS_WAKEUP_EXTI_LINE (0x1U << 18) /*!< USB FS EXTI Line WakeUp Interrupt */
#define USB_OTG_HS_WAKEUP_EXTI_LINE (0x1U << 20) /*!< USB HS EXTI Line WakeUp Interrupt */
#endif /* defined (USB_OTG_FS) || defined (USB_OTG_HS) */
diff --git a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_IAR/Boot/lib/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_tim.h b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_IAR/Boot/lib/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_tim.h
index 6a29ae50..ab067a59 100644
--- a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_IAR/Boot/lib/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_tim.h
+++ b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_IAR/Boot/lib/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_tim.h
@@ -167,7 +167,7 @@ typedef struct
This parameter can be a value of @ref TIM_Encoder_Mode */
uint32_t IC1Polarity; /*!< Specifies the active edge of the input signal.
- This parameter can be a value of @ref TIM_Input_Capture_Polarity */
+ This parameter can be a value of @ref TIM_Encoder_Input_Polarity */
uint32_t IC1Selection; /*!< Specifies the input.
This parameter can be a value of @ref TIM_Input_Capture_Selection */
@@ -179,7 +179,7 @@ typedef struct
This parameter can be a number between Min_Data = 0x0 and Max_Data = 0xF */
uint32_t IC2Polarity; /*!< Specifies the active edge of the input signal.
- This parameter can be a value of @ref TIM_Input_Capture_Polarity */
+ This parameter can be a value of @ref TIM_Encoder_Input_Polarity */
uint32_t IC2Selection; /*!< Specifies the input.
This parameter can be a value of @ref TIM_Input_Capture_Selection */
@@ -235,7 +235,12 @@ typedef struct
uint32_t MasterOutputTrigger2; /*!< Trigger output2 (TRGO2) selection
This parameter can be a value of @ref TIM_Master_Mode_Selection_2 */
uint32_t MasterSlaveMode; /*!< Master/slave mode selection
- This parameter can be a value of @ref TIM_Master_Slave_Mode */
+ This parameter can be a value of @ref TIM_Master_Slave_Mode
+ @note When the Master/slave mode is enabled, the effect of
+ an event on the trigger input (TRGI) is delayed to allow a
+ perfect synchronization between the current timer and its
+ slaves (through TRGO). It is not mandatory in case of timer
+ synchronization mode. */
} TIM_MasterConfigTypeDef;
/**
@@ -518,6 +523,15 @@ typedef void (*pTIM_CallbackTypeDef)(TIM_HandleTypeDef *htim); /*!< pointer to
* @}
*/
+/** @defgroup TIM_Update_Interrupt_Flag_Remap TIM Update Interrupt Flag Remap
+ * @{
+ */
+#define TIM_UIFREMAP_DISABLE 0x00000000U /*!< Update interrupt flag remap disabled */
+#define TIM_UIFREMAP_ENABLE TIM_CR1_UIFREMAP /*!< Update interrupt flag remap enabled */
+/**
+ * @}
+ */
+
/** @defgroup TIM_ClockDivision TIM Clock Division
* @{
*/
@@ -611,6 +625,15 @@ typedef void (*pTIM_CallbackTypeDef)(TIM_HandleTypeDef *htim); /*!< pointer to
* @}
*/
+/** @defgroup TIM_Encoder_Input_Polarity TIM Encoder Input Polarity
+ * @{
+ */
+#define TIM_ENCODERINPUTPOLARITY_RISING TIM_INPUTCHANNELPOLARITY_RISING /*!< Encoder input with rising edge polarity */
+#define TIM_ENCODERINPUTPOLARITY_FALLING TIM_INPUTCHANNELPOLARITY_FALLING /*!< Encoder input with falling edge polarity */
+/**
+ * @}
+ */
+
/** @defgroup TIM_Input_Capture_Selection TIM Input Capture Selection
* @{
*/
@@ -1119,15 +1142,15 @@ typedef void (*pTIM_CallbackTypeDef)(TIM_HandleTypeDef *htim); /*!< pointer to
* @retval None
*/
#define __HAL_TIM_DISABLE(__HANDLE__) \
- do { \
- if (((__HANDLE__)->Instance->CCER & TIM_CCER_CCxE_MASK) == 0UL) \
- { \
- if(((__HANDLE__)->Instance->CCER & TIM_CCER_CCxNE_MASK) == 0UL) \
- { \
- (__HANDLE__)->Instance->CR1 &= ~(TIM_CR1_CEN); \
- } \
- } \
- } while(0)
+ do { \
+ if (((__HANDLE__)->Instance->CCER & TIM_CCER_CCxE_MASK) == 0UL) \
+ { \
+ if(((__HANDLE__)->Instance->CCER & TIM_CCER_CCxNE_MASK) == 0UL) \
+ { \
+ (__HANDLE__)->Instance->CR1 &= ~(TIM_CR1_CEN); \
+ } \
+ } \
+ } while(0)
/**
* @brief Disable the TIM main Output.
@@ -1136,15 +1159,15 @@ typedef void (*pTIM_CallbackTypeDef)(TIM_HandleTypeDef *htim); /*!< pointer to
* @note The Main Output Enable of a timer instance is disabled only if all the CCx and CCxN channels have been disabled
*/
#define __HAL_TIM_MOE_DISABLE(__HANDLE__) \
- do { \
- if (((__HANDLE__)->Instance->CCER & TIM_CCER_CCxE_MASK) == 0UL) \
- { \
- if(((__HANDLE__)->Instance->CCER & TIM_CCER_CCxNE_MASK) == 0UL) \
- { \
- (__HANDLE__)->Instance->BDTR &= ~(TIM_BDTR_MOE); \
- } \
- } \
- } while(0)
+ do { \
+ if (((__HANDLE__)->Instance->CCER & TIM_CCER_CCxE_MASK) == 0UL) \
+ { \
+ if(((__HANDLE__)->Instance->CCER & TIM_CCER_CCxNE_MASK) == 0UL) \
+ { \
+ (__HANDLE__)->Instance->BDTR &= ~(TIM_BDTR_MOE); \
+ } \
+ } \
+ } while(0)
/**
* @brief Disable the TIM main Output.
@@ -1279,7 +1302,8 @@ typedef void (*pTIM_CallbackTypeDef)(TIM_HandleTypeDef *htim); /*!< pointer to
* @arg TIM_IT_BREAK: Break interrupt
* @retval The state of TIM_IT (SET or RESET).
*/
-#define __HAL_TIM_GET_IT_SOURCE(__HANDLE__, __INTERRUPT__) ((((__HANDLE__)->Instance->DIER & (__INTERRUPT__)) == (__INTERRUPT__)) ? SET : RESET)
+#define __HAL_TIM_GET_IT_SOURCE(__HANDLE__, __INTERRUPT__) ((((__HANDLE__)->Instance->DIER & (__INTERRUPT__)) \
+ == (__INTERRUPT__)) ? SET : RESET)
/** @brief Clear the TIM interrupt pending bits.
* @param __HANDLE__ TIM handle
@@ -1297,6 +1321,31 @@ typedef void (*pTIM_CallbackTypeDef)(TIM_HandleTypeDef *htim); /*!< pointer to
*/
#define __HAL_TIM_CLEAR_IT(__HANDLE__, __INTERRUPT__) ((__HANDLE__)->Instance->SR = ~(__INTERRUPT__))
+/**
+ * @brief Force a continuous copy of the update interrupt flag (UIF) into the timer counter register (bit 31).
+ * @note This allows both the counter value and a potential roll-over condition signalled by the UIFCPY flag to be read in an atomic way.
+ * @param __HANDLE__ TIM handle.
+ * @retval None
+mode.
+ */
+#define __HAL_TIM_UIFREMAP_ENABLE(__HANDLE__) (((__HANDLE__)->Instance->CR1 |= TIM_CR1_UIFREMAP))
+
+/**
+ * @brief Disable update interrupt flag (UIF) remapping.
+ * @param __HANDLE__ TIM handle.
+ * @retval None
+mode.
+ */
+#define __HAL_TIM_UIFREMAP_DISABLE(__HANDLE__) (((__HANDLE__)->Instance->CR1 &= ~TIM_CR1_UIFREMAP))
+
+/**
+ * @brief Get update interrupt flag (UIF) copy status.
+ * @param __COUNTER__ Counter value.
+ * @retval The state of UIFCPY (TRUE or FALSE).
+mode.
+ */
+#define __HAL_TIM_GET_UIFCPY(__COUNTER__) (((__COUNTER__) & (TIM_CNT_UIFCPY)) == (TIM_CNT_UIFCPY))
+
/**
* @brief Indicates whether or not the TIM Counter is used as downcounter.
* @param __HANDLE__ TIM handle.
@@ -1316,6 +1365,8 @@ mode.
/**
* @brief Set the TIM Counter Register value on runtime.
+ * Note Please check if the bit 31 of CNT register is used as UIF copy or not, this may affect the counter range in case of 32 bits counter TIM instance.
+ * Bit 31 of CNT can be enabled/disabled using __HAL_TIM_UIFREMAP_ENABLE()/__HAL_TIM_UIFREMAP_DISABLE() macros.
* @param __HANDLE__ TIM handle.
* @param __COUNTER__ specifies the Counter register new value.
* @retval None
@@ -1327,8 +1378,7 @@ mode.
* @param __HANDLE__ TIM handle.
* @retval 16-bit or 32-bit value of the timer counter register (TIMx_CNT)
*/
-#define __HAL_TIM_GET_COUNTER(__HANDLE__) \
- ((__HANDLE__)->Instance->CNT)
+#define __HAL_TIM_GET_COUNTER(__HANDLE__) ((__HANDLE__)->Instance->CNT)
/**
* @brief Set the TIM Autoreload Register value on runtime without calling another time any Init function.
@@ -1337,18 +1387,17 @@ mode.
* @retval None
*/
#define __HAL_TIM_SET_AUTORELOAD(__HANDLE__, __AUTORELOAD__) \
- do{ \
- (__HANDLE__)->Instance->ARR = (__AUTORELOAD__); \
- (__HANDLE__)->Init.Period = (__AUTORELOAD__); \
- } while(0)
+ do{ \
+ (__HANDLE__)->Instance->ARR = (__AUTORELOAD__); \
+ (__HANDLE__)->Init.Period = (__AUTORELOAD__); \
+ } while(0)
/**
* @brief Get the TIM Autoreload Register value on runtime.
* @param __HANDLE__ TIM handle.
* @retval 16-bit or 32-bit value of the timer auto-reload register(TIMx_ARR)
*/
-#define __HAL_TIM_GET_AUTORELOAD(__HANDLE__) \
- ((__HANDLE__)->Instance->ARR)
+#define __HAL_TIM_GET_AUTORELOAD(__HANDLE__) ((__HANDLE__)->Instance->ARR)
/**
* @brief Set the TIM Clock Division value on runtime without calling another time any Init function.
@@ -1361,11 +1410,11 @@ mode.
* @retval None
*/
#define __HAL_TIM_SET_CLOCKDIVISION(__HANDLE__, __CKD__) \
- do{ \
- (__HANDLE__)->Instance->CR1 &= (~TIM_CR1_CKD); \
- (__HANDLE__)->Instance->CR1 |= (__CKD__); \
- (__HANDLE__)->Init.ClockDivision = (__CKD__); \
- } while(0)
+ do{ \
+ (__HANDLE__)->Instance->CR1 &= (~TIM_CR1_CKD); \
+ (__HANDLE__)->Instance->CR1 |= (__CKD__); \
+ (__HANDLE__)->Init.ClockDivision = (__CKD__); \
+ } while(0)
/**
* @brief Get the TIM Clock Division value on runtime.
@@ -1375,8 +1424,7 @@ mode.
* @arg TIM_CLOCKDIVISION_DIV2: tDTS=2*tCK_INT
* @arg TIM_CLOCKDIVISION_DIV4: tDTS=4*tCK_INT
*/
-#define __HAL_TIM_GET_CLOCKDIVISION(__HANDLE__) \
- ((__HANDLE__)->Instance->CR1 & TIM_CR1_CKD)
+#define __HAL_TIM_GET_CLOCKDIVISION(__HANDLE__) ((__HANDLE__)->Instance->CR1 & TIM_CR1_CKD)
/**
* @brief Set the TIM Input Capture prescaler on runtime without calling another time HAL_TIM_IC_ConfigChannel() function.
@@ -1396,10 +1444,10 @@ mode.
* @retval None
*/
#define __HAL_TIM_SET_ICPRESCALER(__HANDLE__, __CHANNEL__, __ICPSC__) \
- do{ \
- TIM_RESET_ICPRESCALERVALUE((__HANDLE__), (__CHANNEL__)); \
- TIM_SET_ICPRESCALERVALUE((__HANDLE__), (__CHANNEL__), (__ICPSC__)); \
- } while(0)
+ do{ \
+ TIM_RESET_ICPRESCALERVALUE((__HANDLE__), (__CHANNEL__)); \
+ TIM_SET_ICPRESCALERVALUE((__HANDLE__), (__CHANNEL__), (__ICPSC__)); \
+ } while(0)
/**
* @brief Get the TIM Input Capture prescaler on runtime.
@@ -1437,12 +1485,12 @@ mode.
* @retval None
*/
#define __HAL_TIM_SET_COMPARE(__HANDLE__, __CHANNEL__, __COMPARE__) \
-(((__CHANNEL__) == TIM_CHANNEL_1) ? ((__HANDLE__)->Instance->CCR1 = (__COMPARE__)) :\
- ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCR2 = (__COMPARE__)) :\
- ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCR3 = (__COMPARE__)) :\
- ((__CHANNEL__) == TIM_CHANNEL_4) ? ((__HANDLE__)->Instance->CCR4 = (__COMPARE__)) :\
- ((__CHANNEL__) == TIM_CHANNEL_5) ? ((__HANDLE__)->Instance->CCR5 = (__COMPARE__)) :\
- ((__HANDLE__)->Instance->CCR6 = (__COMPARE__)))
+ (((__CHANNEL__) == TIM_CHANNEL_1) ? ((__HANDLE__)->Instance->CCR1 = (__COMPARE__)) :\
+ ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCR2 = (__COMPARE__)) :\
+ ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCR3 = (__COMPARE__)) :\
+ ((__CHANNEL__) == TIM_CHANNEL_4) ? ((__HANDLE__)->Instance->CCR4 = (__COMPARE__)) :\
+ ((__CHANNEL__) == TIM_CHANNEL_5) ? ((__HANDLE__)->Instance->CCR5 = (__COMPARE__)) :\
+ ((__HANDLE__)->Instance->CCR6 = (__COMPARE__)))
/**
* @brief Get the TIM Capture Compare Register value on runtime.
@@ -1458,12 +1506,12 @@ mode.
* @retval 16-bit or 32-bit value of the capture/compare register (TIMx_CCRy)
*/
#define __HAL_TIM_GET_COMPARE(__HANDLE__, __CHANNEL__) \
-(((__CHANNEL__) == TIM_CHANNEL_1) ? ((__HANDLE__)->Instance->CCR1) :\
- ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCR2) :\
- ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCR3) :\
- ((__CHANNEL__) == TIM_CHANNEL_4) ? ((__HANDLE__)->Instance->CCR4) :\
- ((__CHANNEL__) == TIM_CHANNEL_5) ? ((__HANDLE__)->Instance->CCR5) :\
- ((__HANDLE__)->Instance->CCR6))
+ (((__CHANNEL__) == TIM_CHANNEL_1) ? ((__HANDLE__)->Instance->CCR1) :\
+ ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCR2) :\
+ ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCR3) :\
+ ((__CHANNEL__) == TIM_CHANNEL_4) ? ((__HANDLE__)->Instance->CCR4) :\
+ ((__CHANNEL__) == TIM_CHANNEL_5) ? ((__HANDLE__)->Instance->CCR5) :\
+ ((__HANDLE__)->Instance->CCR6))
/**
* @brief Set the TIM Output compare preload.
@@ -1479,12 +1527,12 @@ mode.
* @retval None
*/
#define __HAL_TIM_ENABLE_OCxPRELOAD(__HANDLE__, __CHANNEL__) \
- (((__CHANNEL__) == TIM_CHANNEL_1) ? ((__HANDLE__)->Instance->CCMR1 |= TIM_CCMR1_OC1PE) :\
- ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCMR1 |= TIM_CCMR1_OC2PE) :\
- ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCMR2 |= TIM_CCMR2_OC3PE) :\
- ((__CHANNEL__) == TIM_CHANNEL_4) ? ((__HANDLE__)->Instance->CCMR2 |= TIM_CCMR2_OC4PE) :\
- ((__CHANNEL__) == TIM_CHANNEL_5) ? ((__HANDLE__)->Instance->CCMR3 |= TIM_CCMR3_OC5PE) :\
- ((__HANDLE__)->Instance->CCMR3 |= TIM_CCMR3_OC6PE))
+ (((__CHANNEL__) == TIM_CHANNEL_1) ? ((__HANDLE__)->Instance->CCMR1 |= TIM_CCMR1_OC1PE) :\
+ ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCMR1 |= TIM_CCMR1_OC2PE) :\
+ ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCMR2 |= TIM_CCMR2_OC3PE) :\
+ ((__CHANNEL__) == TIM_CHANNEL_4) ? ((__HANDLE__)->Instance->CCMR2 |= TIM_CCMR2_OC4PE) :\
+ ((__CHANNEL__) == TIM_CHANNEL_5) ? ((__HANDLE__)->Instance->CCMR3 |= TIM_CCMR3_OC5PE) :\
+ ((__HANDLE__)->Instance->CCMR3 |= TIM_CCMR3_OC6PE))
/**
* @brief Reset the TIM Output compare preload.
@@ -1500,12 +1548,62 @@ mode.
* @retval None
*/
#define __HAL_TIM_DISABLE_OCxPRELOAD(__HANDLE__, __CHANNEL__) \
- (((__CHANNEL__) == TIM_CHANNEL_1) ? ((__HANDLE__)->Instance->CCMR1 &= (uint16_t)~TIM_CCMR1_OC1PE) :\
- ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCMR1 &= (uint16_t)~TIM_CCMR1_OC2PE) :\
- ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCMR2 &= (uint16_t)~TIM_CCMR2_OC3PE) :\
- ((__CHANNEL__) == TIM_CHANNEL_4) ? ((__HANDLE__)->Instance->CCMR2 &= (uint16_t)~TIM_CCMR2_OC4PE) :\
- ((__CHANNEL__) == TIM_CHANNEL_5) ? ((__HANDLE__)->Instance->CCMR3 &= (uint16_t)~TIM_CCMR3_OC5PE) :\
- ((__HANDLE__)->Instance->CCMR3 &= (uint16_t)~TIM_CCMR3_OC6PE))
+ (((__CHANNEL__) == TIM_CHANNEL_1) ? ((__HANDLE__)->Instance->CCMR1 &= ~TIM_CCMR1_OC1PE) :\
+ ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCMR1 &= ~TIM_CCMR1_OC2PE) :\
+ ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCMR2 &= ~TIM_CCMR2_OC3PE) :\
+ ((__CHANNEL__) == TIM_CHANNEL_4) ? ((__HANDLE__)->Instance->CCMR2 &= ~TIM_CCMR2_OC4PE) :\
+ ((__CHANNEL__) == TIM_CHANNEL_5) ? ((__HANDLE__)->Instance->CCMR3 &= ~TIM_CCMR3_OC5PE) :\
+ ((__HANDLE__)->Instance->CCMR3 &= ~TIM_CCMR3_OC6PE))
+
+/**
+ * @brief Enable fast mode for a given channel.
+ * @param __HANDLE__ TIM handle.
+ * @param __CHANNEL__ TIM Channels to be configured.
+ * This parameter can be one of the following values:
+ * @arg TIM_CHANNEL_1: TIM Channel 1 selected
+ * @arg TIM_CHANNEL_2: TIM Channel 2 selected
+ * @arg TIM_CHANNEL_3: TIM Channel 3 selected
+ * @arg TIM_CHANNEL_4: TIM Channel 4 selected
+ * @arg TIM_CHANNEL_5: TIM Channel 5 selected
+ * @arg TIM_CHANNEL_6: TIM Channel 6 selected
+ * @note When fast mode is enabled an active edge on the trigger input acts
+ * like a compare match on CCx output. Delay to sample the trigger
+ * input and to activate CCx output is reduced to 3 clock cycles.
+ * @note Fast mode acts only if the channel is configured in PWM1 or PWM2 mode.
+ * @retval None
+ */
+#define __HAL_TIM_ENABLE_OCxFAST(__HANDLE__, __CHANNEL__) \
+ (((__CHANNEL__) == TIM_CHANNEL_1) ? ((__HANDLE__)->Instance->CCMR1 |= TIM_CCMR1_OC1FE) :\
+ ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCMR1 |= TIM_CCMR1_OC2FE) :\
+ ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCMR2 |= TIM_CCMR2_OC3FE) :\
+ ((__CHANNEL__) == TIM_CHANNEL_4) ? ((__HANDLE__)->Instance->CCMR2 |= TIM_CCMR2_OC4FE) :\
+ ((__CHANNEL__) == TIM_CHANNEL_5) ? ((__HANDLE__)->Instance->CCMR3 |= TIM_CCMR3_OC5FE) :\
+ ((__HANDLE__)->Instance->CCMR3 |= TIM_CCMR3_OC6FE))
+
+/**
+ * @brief Disable fast mode for a given channel.
+ * @param __HANDLE__ TIM handle.
+ * @param __CHANNEL__ TIM Channels to be configured.
+ * This parameter can be one of the following values:
+ * @arg TIM_CHANNEL_1: TIM Channel 1 selected
+ * @arg TIM_CHANNEL_2: TIM Channel 2 selected
+ * @arg TIM_CHANNEL_3: TIM Channel 3 selected
+ * @arg TIM_CHANNEL_4: TIM Channel 4 selected
+ * @arg TIM_CHANNEL_5: TIM Channel 5 selected
+ * @arg TIM_CHANNEL_6: TIM Channel 6 selected
+ * @note When fast mode is disabled CCx output behaves normally depending
+ * on counter and CCRx values even when the trigger is ON. The minimum
+ * delay to activate CCx output when an active edge occurs on the
+ * trigger input is 5 clock cycles.
+ * @retval None
+ */
+#define __HAL_TIM_DISABLE_OCxFAST(__HANDLE__, __CHANNEL__) \
+ (((__CHANNEL__) == TIM_CHANNEL_1) ? ((__HANDLE__)->Instance->CCMR1 &= ~TIM_CCMR1_OC1FE) :\
+ ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCMR1 &= ~TIM_CCMR1_OC2FE) :\
+ ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCMR2 &= ~TIM_CCMR2_OC3FE) :\
+ ((__CHANNEL__) == TIM_CHANNEL_4) ? ((__HANDLE__)->Instance->CCMR2 &= ~TIM_CCMR2_OC4FE) :\
+ ((__CHANNEL__) == TIM_CHANNEL_5) ? ((__HANDLE__)->Instance->CCMR3 &= ~TIM_CCMR3_OC5FE) :\
+ ((__HANDLE__)->Instance->CCMR3 &= ~TIM_CCMR3_OC6FE))
/**
* @brief Set the Update Request Source (URS) bit of the TIMx_CR1 register.
@@ -1515,8 +1613,7 @@ mode.
* enabled)
* @retval None
*/
-#define __HAL_TIM_URS_ENABLE(__HANDLE__) \
- ((__HANDLE__)->Instance->CR1|= TIM_CR1_URS)
+#define __HAL_TIM_URS_ENABLE(__HANDLE__) ((__HANDLE__)->Instance->CR1|= TIM_CR1_URS)
/**
* @brief Reset the Update Request Source (URS) bit of the TIMx_CR1 register.
@@ -1529,8 +1626,7 @@ mode.
* _ Update generation through the slave mode controller
* @retval None
*/
-#define __HAL_TIM_URS_DISABLE(__HANDLE__) \
- ((__HANDLE__)->Instance->CR1&=~TIM_CR1_URS)
+#define __HAL_TIM_URS_DISABLE(__HANDLE__) ((__HANDLE__)->Instance->CR1&=~TIM_CR1_URS)
/**
* @brief Set the TIM Capture x input polarity on runtime.
@@ -1548,10 +1644,10 @@ mode.
* @retval None
*/
#define __HAL_TIM_SET_CAPTUREPOLARITY(__HANDLE__, __CHANNEL__, __POLARITY__) \
- do{ \
- TIM_RESET_CAPTUREPOLARITY((__HANDLE__), (__CHANNEL__)); \
- TIM_SET_CAPTUREPOLARITY((__HANDLE__), (__CHANNEL__), (__POLARITY__)); \
- }while(0)
+ do{ \
+ TIM_RESET_CAPTUREPOLARITY((__HANDLE__), (__CHANNEL__)); \
+ TIM_SET_CAPTUREPOLARITY((__HANDLE__), (__CHANNEL__), (__POLARITY__)); \
+ }while(0)
/**
* @}
@@ -1579,29 +1675,29 @@ mode.
((__MODE__) == TIM_CLEARINPUTSOURCE_ETR))
#if defined(TIM_AF1_BKINE)&&defined(TIM_AF2_BKINE)
-#define IS_TIM_DMA_BASE(__BASE__) (((__BASE__) == TIM_DMABASE_CR1) || \
- ((__BASE__) == TIM_DMABASE_CR2) || \
- ((__BASE__) == TIM_DMABASE_SMCR) || \
- ((__BASE__) == TIM_DMABASE_DIER) || \
- ((__BASE__) == TIM_DMABASE_SR) || \
- ((__BASE__) == TIM_DMABASE_EGR) || \
- ((__BASE__) == TIM_DMABASE_CCMR1) || \
- ((__BASE__) == TIM_DMABASE_CCMR2) || \
- ((__BASE__) == TIM_DMABASE_CCER) || \
- ((__BASE__) == TIM_DMABASE_CNT) || \
- ((__BASE__) == TIM_DMABASE_PSC) || \
- ((__BASE__) == TIM_DMABASE_ARR) || \
- ((__BASE__) == TIM_DMABASE_RCR) || \
- ((__BASE__) == TIM_DMABASE_CCR1) || \
- ((__BASE__) == TIM_DMABASE_CCR2) || \
- ((__BASE__) == TIM_DMABASE_CCR3) || \
- ((__BASE__) == TIM_DMABASE_CCR4) || \
- ((__BASE__) == TIM_DMABASE_BDTR) || \
- ((__BASE__) == TIM_DMABASE_OR) || \
- ((__BASE__) == TIM_DMABASE_CCMR3) || \
- ((__BASE__) == TIM_DMABASE_CCR5) || \
- ((__BASE__) == TIM_DMABASE_CCR6) || \
- ((__BASE__) == TIM_DMABASE_AF1) || \
+#define IS_TIM_DMA_BASE(__BASE__) (((__BASE__) == TIM_DMABASE_CR1) || \
+ ((__BASE__) == TIM_DMABASE_CR2) || \
+ ((__BASE__) == TIM_DMABASE_SMCR) || \
+ ((__BASE__) == TIM_DMABASE_DIER) || \
+ ((__BASE__) == TIM_DMABASE_SR) || \
+ ((__BASE__) == TIM_DMABASE_EGR) || \
+ ((__BASE__) == TIM_DMABASE_CCMR1) || \
+ ((__BASE__) == TIM_DMABASE_CCMR2) || \
+ ((__BASE__) == TIM_DMABASE_CCER) || \
+ ((__BASE__) == TIM_DMABASE_CNT) || \
+ ((__BASE__) == TIM_DMABASE_PSC) || \
+ ((__BASE__) == TIM_DMABASE_ARR) || \
+ ((__BASE__) == TIM_DMABASE_RCR) || \
+ ((__BASE__) == TIM_DMABASE_CCR1) || \
+ ((__BASE__) == TIM_DMABASE_CCR2) || \
+ ((__BASE__) == TIM_DMABASE_CCR3) || \
+ ((__BASE__) == TIM_DMABASE_CCR4) || \
+ ((__BASE__) == TIM_DMABASE_BDTR) || \
+ ((__BASE__) == TIM_DMABASE_OR) || \
+ ((__BASE__) == TIM_DMABASE_CCMR3) || \
+ ((__BASE__) == TIM_DMABASE_CCR5) || \
+ ((__BASE__) == TIM_DMABASE_CCR6) || \
+ ((__BASE__) == TIM_DMABASE_AF1) || \
((__BASE__) == TIM_DMABASE_AF2))
#else
#define IS_TIM_DMA_BASE(__BASE__) (((__BASE__) == TIM_DMABASE_CR1) || \
@@ -1636,6 +1732,9 @@ mode.
((__MODE__) == TIM_COUNTERMODE_CENTERALIGNED2) || \
((__MODE__) == TIM_COUNTERMODE_CENTERALIGNED3))
+#define IS_TIM_UIFREMAP_MODE(__MODE__) (((__MODE__) == TIM_UIFREMAP_DISABLE) || \
+ ((__MODE__) == TIM_UIFREMAP_ENALE))
+
#define IS_TIM_CLOCKDIVISION_DIV(__DIV__) (((__DIV__) == TIM_CLOCKDIVISION_DIV1) || \
((__DIV__) == TIM_CLOCKDIVISION_DIV2) || \
((__DIV__) == TIM_CLOCKDIVISION_DIV4))
@@ -1658,6 +1757,9 @@ mode.
#define IS_TIM_OCNIDLE_STATE(__STATE__) (((__STATE__) == TIM_OCNIDLESTATE_SET) || \
((__STATE__) == TIM_OCNIDLESTATE_RESET))
+#define IS_TIM_ENCODERINPUT_POLARITY(__POLARITY__) (((__POLARITY__) == TIM_ENCODERINPUTPOLARITY_RISING) || \
+ ((__POLARITY__) == TIM_ENCODERINPUTPOLARITY_FALLING))
+
#define IS_TIM_IC_POLARITY(__POLARITY__) (((__POLARITY__) == TIM_ICPOLARITY_RISING) || \
((__POLARITY__) == TIM_ICPOLARITY_FALLING) || \
((__POLARITY__) == TIM_ICPOLARITY_BOTHEDGE))
@@ -1876,28 +1978,28 @@ mode.
((__TRIGGER__) == TIM_SLAVEMODE_COMBINED_RESETTRIGGER))
#define TIM_SET_ICPRESCALERVALUE(__HANDLE__, __CHANNEL__, __ICPSC__) \
-(((__CHANNEL__) == TIM_CHANNEL_1) ? ((__HANDLE__)->Instance->CCMR1 |= (__ICPSC__)) :\
- ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCMR1 |= ((__ICPSC__) << 8U)) :\
- ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCMR2 |= (__ICPSC__)) :\
- ((__HANDLE__)->Instance->CCMR2 |= ((__ICPSC__) << 8U)))
+ (((__CHANNEL__) == TIM_CHANNEL_1) ? ((__HANDLE__)->Instance->CCMR1 |= (__ICPSC__)) :\
+ ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCMR1 |= ((__ICPSC__) << 8U)) :\
+ ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCMR2 |= (__ICPSC__)) :\
+ ((__HANDLE__)->Instance->CCMR2 |= ((__ICPSC__) << 8U)))
#define TIM_RESET_ICPRESCALERVALUE(__HANDLE__, __CHANNEL__) \
-(((__CHANNEL__) == TIM_CHANNEL_1) ? ((__HANDLE__)->Instance->CCMR1 &= (uint16_t)~TIM_CCMR1_IC1PSC) :\
- ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCMR1 &= (uint16_t)~TIM_CCMR1_IC2PSC) :\
- ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCMR2 &= (uint16_t)~TIM_CCMR2_IC3PSC) :\
- ((__HANDLE__)->Instance->CCMR2 &= (uint16_t)~TIM_CCMR2_IC4PSC))
+ (((__CHANNEL__) == TIM_CHANNEL_1) ? ((__HANDLE__)->Instance->CCMR1 &= ~TIM_CCMR1_IC1PSC) :\
+ ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCMR1 &= ~TIM_CCMR1_IC2PSC) :\
+ ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCMR2 &= ~TIM_CCMR2_IC3PSC) :\
+ ((__HANDLE__)->Instance->CCMR2 &= ~TIM_CCMR2_IC4PSC))
#define TIM_SET_CAPTUREPOLARITY(__HANDLE__, __CHANNEL__, __POLARITY__) \
-(((__CHANNEL__) == TIM_CHANNEL_1) ? ((__HANDLE__)->Instance->CCER |= (__POLARITY__)) :\
- ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCER |= ((__POLARITY__) << 4U)) :\
- ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCER |= ((__POLARITY__) << 8U)) :\
- ((__HANDLE__)->Instance->CCER |= (((__POLARITY__) << 12U))))
+ (((__CHANNEL__) == TIM_CHANNEL_1) ? ((__HANDLE__)->Instance->CCER |= (__POLARITY__)) :\
+ ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCER |= ((__POLARITY__) << 4U)) :\
+ ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCER |= ((__POLARITY__) << 8U)) :\
+ ((__HANDLE__)->Instance->CCER |= (((__POLARITY__) << 12U))))
#define TIM_RESET_CAPTUREPOLARITY(__HANDLE__, __CHANNEL__) \
-(((__CHANNEL__) == TIM_CHANNEL_1) ? ((__HANDLE__)->Instance->CCER &= (uint16_t)~(TIM_CCER_CC1P | TIM_CCER_CC1NP)) :\
- ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCER &= (uint16_t)~(TIM_CCER_CC2P | TIM_CCER_CC2NP)) :\
- ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCER &= (uint16_t)~(TIM_CCER_CC3P | TIM_CCER_CC3NP)) :\
- ((__HANDLE__)->Instance->CCER &= (uint16_t)~(TIM_CCER_CC4P | TIM_CCER_CC4NP)))
+ (((__CHANNEL__) == TIM_CHANNEL_1) ? ((__HANDLE__)->Instance->CCER &= ~(TIM_CCER_CC1P | TIM_CCER_CC1NP)) :\
+ ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCER &= ~(TIM_CCER_CC2P | TIM_CCER_CC2NP)) :\
+ ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCER &= ~(TIM_CCER_CC3P | TIM_CCER_CC3NP)) :\
+ ((__HANDLE__)->Instance->CCER &= ~(TIM_CCER_CC4P | TIM_CCER_CC4NP)))
/**
* @}
@@ -2035,7 +2137,8 @@ HAL_StatusTypeDef HAL_TIM_Encoder_Stop(TIM_HandleTypeDef *htim, uint32_t Channel
HAL_StatusTypeDef HAL_TIM_Encoder_Start_IT(TIM_HandleTypeDef *htim, uint32_t Channel);
HAL_StatusTypeDef HAL_TIM_Encoder_Stop_IT(TIM_HandleTypeDef *htim, uint32_t Channel);
/* Non-Blocking mode: DMA */
-HAL_StatusTypeDef HAL_TIM_Encoder_Start_DMA(TIM_HandleTypeDef *htim, uint32_t Channel, uint32_t *pData1, uint32_t *pData2, uint16_t Length);
+HAL_StatusTypeDef HAL_TIM_Encoder_Start_DMA(TIM_HandleTypeDef *htim, uint32_t Channel, uint32_t *pData1,
+ uint32_t *pData2, uint16_t Length);
HAL_StatusTypeDef HAL_TIM_Encoder_Stop_DMA(TIM_HandleTypeDef *htim, uint32_t Channel);
/**
* @}
@@ -2059,17 +2162,19 @@ void HAL_TIM_IRQHandler(TIM_HandleTypeDef *htim);
HAL_StatusTypeDef HAL_TIM_OC_ConfigChannel(TIM_HandleTypeDef *htim, TIM_OC_InitTypeDef *sConfig, uint32_t Channel);
HAL_StatusTypeDef HAL_TIM_PWM_ConfigChannel(TIM_HandleTypeDef *htim, TIM_OC_InitTypeDef *sConfig, uint32_t Channel);
HAL_StatusTypeDef HAL_TIM_IC_ConfigChannel(TIM_HandleTypeDef *htim, TIM_IC_InitTypeDef *sConfig, uint32_t Channel);
-HAL_StatusTypeDef HAL_TIM_OnePulse_ConfigChannel(TIM_HandleTypeDef *htim, TIM_OnePulse_InitTypeDef *sConfig, uint32_t OutputChannel, uint32_t InputChannel);
-HAL_StatusTypeDef HAL_TIM_ConfigOCrefClear(TIM_HandleTypeDef *htim, TIM_ClearInputConfigTypeDef *sClearInputConfig, uint32_t Channel);
+HAL_StatusTypeDef HAL_TIM_OnePulse_ConfigChannel(TIM_HandleTypeDef *htim, TIM_OnePulse_InitTypeDef *sConfig,
+ uint32_t OutputChannel, uint32_t InputChannel);
+HAL_StatusTypeDef HAL_TIM_ConfigOCrefClear(TIM_HandleTypeDef *htim, TIM_ClearInputConfigTypeDef *sClearInputConfig,
+ uint32_t Channel);
HAL_StatusTypeDef HAL_TIM_ConfigClockSource(TIM_HandleTypeDef *htim, TIM_ClockConfigTypeDef *sClockSourceConfig);
HAL_StatusTypeDef HAL_TIM_ConfigTI1Input(TIM_HandleTypeDef *htim, uint32_t TI1_Selection);
HAL_StatusTypeDef HAL_TIM_SlaveConfigSynchro(TIM_HandleTypeDef *htim, TIM_SlaveConfigTypeDef *sSlaveConfig);
HAL_StatusTypeDef HAL_TIM_SlaveConfigSynchro_IT(TIM_HandleTypeDef *htim, TIM_SlaveConfigTypeDef *sSlaveConfig);
-HAL_StatusTypeDef HAL_TIM_DMABurst_WriteStart(TIM_HandleTypeDef *htim, uint32_t BurstBaseAddress, uint32_t BurstRequestSrc, \
- uint32_t *BurstBuffer, uint32_t BurstLength);
+HAL_StatusTypeDef HAL_TIM_DMABurst_WriteStart(TIM_HandleTypeDef *htim, uint32_t BurstBaseAddress,
+ uint32_t BurstRequestSrc, uint32_t *BurstBuffer, uint32_t BurstLength);
HAL_StatusTypeDef HAL_TIM_DMABurst_WriteStop(TIM_HandleTypeDef *htim, uint32_t BurstRequestSrc);
-HAL_StatusTypeDef HAL_TIM_DMABurst_ReadStart(TIM_HandleTypeDef *htim, uint32_t BurstBaseAddress, uint32_t BurstRequestSrc, \
- uint32_t *BurstBuffer, uint32_t BurstLength);
+HAL_StatusTypeDef HAL_TIM_DMABurst_ReadStart(TIM_HandleTypeDef *htim, uint32_t BurstBaseAddress,
+ uint32_t BurstRequestSrc, uint32_t *BurstBuffer, uint32_t BurstLength);
HAL_StatusTypeDef HAL_TIM_DMABurst_ReadStop(TIM_HandleTypeDef *htim, uint32_t BurstRequestSrc);
HAL_StatusTypeDef HAL_TIM_GenerateEvent(TIM_HandleTypeDef *htim, uint32_t EventSource);
uint32_t HAL_TIM_ReadCapturedValue(TIM_HandleTypeDef *htim, uint32_t Channel);
@@ -2095,7 +2200,8 @@ void HAL_TIM_ErrorCallback(TIM_HandleTypeDef *htim);
/* Callbacks Register/UnRegister functions ***********************************/
#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)
-HAL_StatusTypeDef HAL_TIM_RegisterCallback(TIM_HandleTypeDef *htim, HAL_TIM_CallbackIDTypeDef CallbackID, pTIM_CallbackTypeDef pCallback);
+HAL_StatusTypeDef HAL_TIM_RegisterCallback(TIM_HandleTypeDef *htim, HAL_TIM_CallbackIDTypeDef CallbackID,
+ pTIM_CallbackTypeDef pCallback);
HAL_StatusTypeDef HAL_TIM_UnRegisterCallback(TIM_HandleTypeDef *htim, HAL_TIM_CallbackIDTypeDef CallbackID);
#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */
@@ -2125,8 +2231,8 @@ HAL_TIM_StateTypeDef HAL_TIM_Encoder_GetState(TIM_HandleTypeDef *htim);
/* Private functions----------------------------------------------------------*/
/** @defgroup TIM_Private_Functions TIM Private Functions
-* @{
-*/
+ * @{
+ */
void TIM_Base_SetConfig(TIM_TypeDef *TIMx, TIM_Base_InitTypeDef *Structure);
void TIM_TI1_SetConfig(TIM_TypeDef *TIMx, uint32_t TIM_ICPolarity, uint32_t TIM_ICSelection, uint32_t TIM_ICFilter);
void TIM_OC2_SetConfig(TIM_TypeDef *TIMx, TIM_OC_InitTypeDef *OC_Config);
@@ -2145,8 +2251,8 @@ void TIM_ResetCallback(TIM_HandleTypeDef *htim);
#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */
/**
-* @}
-*/
+ * @}
+ */
/* End of private functions --------------------------------------------------*/
/**
diff --git a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_IAR/Boot/lib/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_tim_ex.h b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_IAR/Boot/lib/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_tim_ex.h
index 598f5c6e..b8d3472e 100644
--- a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_IAR/Boot/lib/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_tim_ex.h
+++ b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_IAR/Boot/lib/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_tim_ex.h
@@ -201,9 +201,9 @@ TIMEx_BreakInputConfigTypeDef;
*/
/** @addtogroup TIMEx_Exported_Functions_Group1 Extended Timer Hall Sensor functions
- * @brief Timer Hall Sensor functions
- * @{
- */
+ * @brief Timer Hall Sensor functions
+ * @{
+ */
/* Timer Hall Sensor functions **********************************************/
HAL_StatusTypeDef HAL_TIMEx_HallSensor_Init(TIM_HandleTypeDef *htim, TIM_HallSensor_InitTypeDef *sConfig);
HAL_StatusTypeDef HAL_TIMEx_HallSensor_DeInit(TIM_HandleTypeDef *htim);
@@ -225,9 +225,9 @@ HAL_StatusTypeDef HAL_TIMEx_HallSensor_Stop_DMA(TIM_HandleTypeDef *htim);
*/
/** @addtogroup TIMEx_Exported_Functions_Group2 Extended Timer Complementary Output Compare functions
- * @brief Timer Complementary Output Compare functions
- * @{
- */
+ * @brief Timer Complementary Output Compare functions
+ * @{
+ */
/* Timer Complementary Output Compare functions *****************************/
/* Blocking mode: Polling */
HAL_StatusTypeDef HAL_TIMEx_OCN_Start(TIM_HandleTypeDef *htim, uint32_t Channel);
@@ -245,9 +245,9 @@ HAL_StatusTypeDef HAL_TIMEx_OCN_Stop_DMA(TIM_HandleTypeDef *htim, uint32_t Chann
*/
/** @addtogroup TIMEx_Exported_Functions_Group3 Extended Timer Complementary PWM functions
- * @brief Timer Complementary PWM functions
- * @{
- */
+ * @brief Timer Complementary PWM functions
+ * @{
+ */
/* Timer Complementary PWM functions ****************************************/
/* Blocking mode: Polling */
HAL_StatusTypeDef HAL_TIMEx_PWMN_Start(TIM_HandleTypeDef *htim, uint32_t Channel);
@@ -264,9 +264,9 @@ HAL_StatusTypeDef HAL_TIMEx_PWMN_Stop_DMA(TIM_HandleTypeDef *htim, uint32_t Chan
*/
/** @addtogroup TIMEx_Exported_Functions_Group4 Extended Timer Complementary One Pulse functions
- * @brief Timer Complementary One Pulse functions
- * @{
- */
+ * @brief Timer Complementary One Pulse functions
+ * @{
+ */
/* Timer Complementary One Pulse functions **********************************/
/* Blocking mode: Polling */
HAL_StatusTypeDef HAL_TIMEx_OnePulseN_Start(TIM_HandleTypeDef *htim, uint32_t OutputChannel);
@@ -280,17 +280,23 @@ HAL_StatusTypeDef HAL_TIMEx_OnePulseN_Stop_IT(TIM_HandleTypeDef *htim, uint32_t
*/
/** @addtogroup TIMEx_Exported_Functions_Group5 Extended Peripheral Control functions
- * @brief Peripheral Control functions
- * @{
- */
+ * @brief Peripheral Control functions
+ * @{
+ */
/* Extended Control functions ************************************************/
-HAL_StatusTypeDef HAL_TIMEx_ConfigCommutEvent(TIM_HandleTypeDef *htim, uint32_t InputTrigger, uint32_t CommutationSource);
-HAL_StatusTypeDef HAL_TIMEx_ConfigCommutEvent_IT(TIM_HandleTypeDef *htim, uint32_t InputTrigger, uint32_t CommutationSource);
-HAL_StatusTypeDef HAL_TIMEx_ConfigCommutEvent_DMA(TIM_HandleTypeDef *htim, uint32_t InputTrigger, uint32_t CommutationSource);
-HAL_StatusTypeDef HAL_TIMEx_MasterConfigSynchronization(TIM_HandleTypeDef *htim, TIM_MasterConfigTypeDef *sMasterConfig);
-HAL_StatusTypeDef HAL_TIMEx_ConfigBreakDeadTime(TIM_HandleTypeDef *htim, TIM_BreakDeadTimeConfigTypeDef *sBreakDeadTimeConfig);
+HAL_StatusTypeDef HAL_TIMEx_ConfigCommutEvent(TIM_HandleTypeDef *htim, uint32_t InputTrigger,
+ uint32_t CommutationSource);
+HAL_StatusTypeDef HAL_TIMEx_ConfigCommutEvent_IT(TIM_HandleTypeDef *htim, uint32_t InputTrigger,
+ uint32_t CommutationSource);
+HAL_StatusTypeDef HAL_TIMEx_ConfigCommutEvent_DMA(TIM_HandleTypeDef *htim, uint32_t InputTrigger,
+ uint32_t CommutationSource);
+HAL_StatusTypeDef HAL_TIMEx_MasterConfigSynchronization(TIM_HandleTypeDef *htim,
+ TIM_MasterConfigTypeDef *sMasterConfig);
+HAL_StatusTypeDef HAL_TIMEx_ConfigBreakDeadTime(TIM_HandleTypeDef *htim,
+ TIM_BreakDeadTimeConfigTypeDef *sBreakDeadTimeConfig);
#if defined(TIM_BREAK_INPUT_SUPPORT)
-HAL_StatusTypeDef HAL_TIMEx_ConfigBreakInput(TIM_HandleTypeDef *htim, uint32_t BreakInput, TIMEx_BreakInputConfigTypeDef *sBreakInputConfig);
+HAL_StatusTypeDef HAL_TIMEx_ConfigBreakInput(TIM_HandleTypeDef *htim, uint32_t BreakInput,
+ TIMEx_BreakInputConfigTypeDef *sBreakInputConfig);
#endif /* TIM_BREAK_INPUT_SUPPORT */
HAL_StatusTypeDef HAL_TIMEx_GroupChannel5(TIM_HandleTypeDef *htim, uint32_t Channels);
HAL_StatusTypeDef HAL_TIMEx_RemapConfig(TIM_HandleTypeDef *htim, uint32_t Remap);
@@ -327,7 +333,7 @@ HAL_TIM_StateTypeDef HAL_TIMEx_HallSensor_GetState(TIM_HandleTypeDef *htim);
/* End of exported functions -------------------------------------------------*/
/* Private functions----------------------------------------------------------*/
-/** @defgroup TIMEx_Private_Functions TIM Extended Private Functions
+/** @addtogroup TIMEx_Private_Functions TIMEx Private Functions
* @{
*/
void TIMEx_DMACommutationCplt(DMA_HandleTypeDef *hdma);
diff --git a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_IAR/Boot/lib/STM32F7xx_HAL_Driver/Inc/stm32f7xx_ll_usart.h b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_IAR/Boot/lib/STM32F7xx_HAL_Driver/Inc/stm32f7xx_ll_usart.h
index f151a3d3..9bbccb71 100644
--- a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_IAR/Boot/lib/STM32F7xx_HAL_Driver/Inc/stm32f7xx_ll_usart.h
+++ b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_IAR/Boot/lib/STM32F7xx_HAL_Driver/Inc/stm32f7xx_ll_usart.h
@@ -42,13 +42,6 @@ extern "C" {
/* Private variables ---------------------------------------------------------*/
/* Private constants ---------------------------------------------------------*/
-/** @defgroup USART_LL_Private_Constants USART Private Constants
- * @{
- */
-/**
- * @}
- */
-
/* Private macros ------------------------------------------------------------*/
#if defined(USE_FULL_LL_DRIVER)
/** @defgroup USART_LL_Private_Macros USART Private Macros
@@ -156,18 +149,21 @@ typedef struct
*/
#define LL_USART_ICR_PECF USART_ICR_PECF /*!< Parity error flag */
#define LL_USART_ICR_FECF USART_ICR_FECF /*!< Framing error flag */
-#define LL_USART_ICR_NCF USART_ICR_NCF /*!< Noise error detected flag */
+#define LL_USART_ICR_NCF USART_ICR_NCF /*!< Noise error detected flag */
#define LL_USART_ICR_ORECF USART_ICR_ORECF /*!< Overrun error flag */
#define LL_USART_ICR_IDLECF USART_ICR_IDLECF /*!< Idle line detected flag */
#define LL_USART_ICR_TCCF USART_ICR_TCCF /*!< Transmission complete flag */
#if defined(USART_TCBGT_SUPPORT)
#define LL_USART_ICR_TCBGTCF USART_ICR_TCBGTCF /*!< Transmission completed before guard time flag */
-#endif
+#endif /* USART_TCBGT_SUPPORT */
#define LL_USART_ICR_LBDCF USART_ICR_LBDCF /*!< LIN break detection flag */
#define LL_USART_ICR_CTSCF USART_ICR_CTSCF /*!< CTS flag */
#define LL_USART_ICR_RTOCF USART_ICR_RTOCF /*!< Receiver timeout flag */
#define LL_USART_ICR_EOBCF USART_ICR_EOBCF /*!< End of block flag */
#define LL_USART_ICR_CMCF USART_ICR_CMCF /*!< Character match flag */
+#if defined(USART_CR1_UESM)
+#define LL_USART_ICR_WUCF USART_ICR_WUCF /*!< Wakeup from Stop mode flag */
+#endif /* USART_CR1_UESM */
/**
* @}
*/
@@ -195,10 +191,16 @@ typedef struct
#define LL_USART_ISR_CMF USART_ISR_CMF /*!< Character match flag */
#define LL_USART_ISR_SBKF USART_ISR_SBKF /*!< Send break flag */
#define LL_USART_ISR_RWU USART_ISR_RWU /*!< Receiver wakeup from Mute mode flag */
+#if defined(USART_CR1_UESM)
+#define LL_USART_ISR_WUF USART_ISR_WUF /*!< Wakeup from Stop mode flag */
+#endif /* USART_CR1_UESM */
#define LL_USART_ISR_TEACK USART_ISR_TEACK /*!< Transmit enable acknowledge flag */
+#if defined(USART_ISR_REACK)
+#define LL_USART_ISR_REACK USART_ISR_REACK /*!< Receive enable acknowledge flag */
+#endif /* USART_ISR_REACK */
#if defined(USART_TCBGT_SUPPORT)
#define LL_USART_ISR_TCBGT USART_ISR_TCBGT /*!< Transmission complete before guard time completion flag */
-#endif
+#endif /* USART_TCBGT_SUPPORT */
/**
* @}
*/
@@ -218,9 +220,12 @@ typedef struct
#define LL_USART_CR2_LBDIE USART_CR2_LBDIE /*!< LIN break detection interrupt enable */
#define LL_USART_CR3_EIE USART_CR3_EIE /*!< Error interrupt enable */
#define LL_USART_CR3_CTSIE USART_CR3_CTSIE /*!< CTS interrupt enable */
+#if defined(USART_CR1_UESM)
+#define LL_USART_CR3_WUFIE USART_CR3_WUFIE /*!< Wakeup from Stop mode interrupt enable */
+#endif /* USART_CR1_UESM */
#if defined(USART_TCBGT_SUPPORT)
#define LL_USART_CR3_TCBGTIE USART_CR3_TCBGTIE /*!< Transmission complete before guard time interrupt enable */
-#endif
+#endif /* USART_TCBGT_SUPPORT */
/**
* @}
*/
@@ -400,6 +405,18 @@ typedef struct
* @}
*/
+#if defined(USART_CR1_UESM)
+/** @defgroup USART_LL_EC_WAKEUP_ON Wakeup Activation
+ * @{
+ */
+#define LL_USART_WAKEUP_ON_ADDRESS 0x00000000U /*!< Wake up active on address match */
+#define LL_USART_WAKEUP_ON_STARTBIT USART_CR3_WUS_1 /*!< Wake up active on Start bit detection */
+#define LL_USART_WAKEUP_ON_RXNE (USART_CR3_WUS_0 | USART_CR3_WUS_1) /*!< Wake up active on RXNE */
+/**
+ * @}
+ */
+
+#endif /* USART_CR1_UESM */
/** @defgroup USART_LL_EC_IRDA_POWER IrDA Power
* @{
*/
@@ -480,7 +497,8 @@ typedef struct
* @param __BAUDRATE__ Baud rate value to achieve
* @retval USARTDIV value to be used for BRR register filling in OverSampling_8 case
*/
-#define __LL_USART_DIV_SAMPLING8(__PERIPHCLK__, __BAUDRATE__) ((((__PERIPHCLK__)*2U) + ((__BAUDRATE__)/2U))/(__BAUDRATE__))
+#define __LL_USART_DIV_SAMPLING8(__PERIPHCLK__, __BAUDRATE__) ((((__PERIPHCLK__)*2U)\
+ + ((__BAUDRATE__)/2U))/(__BAUDRATE__))
/**
* @brief Compute USARTDIV value according to Peripheral Clock and
@@ -545,6 +563,87 @@ __STATIC_INLINE uint32_t LL_USART_IsEnabled(USART_TypeDef *USARTx)
return ((READ_BIT(USARTx->CR1, USART_CR1_UE) == (USART_CR1_UE)) ? 1UL : 0UL);
}
+#if defined(USART_CR1_UESM)
+/**
+ * @brief USART enabled in STOP Mode.
+ * @note When this function is enabled, USART is able to wake up the MCU from Stop mode, provided that
+ * USART clock selection is HSI or LSE in RCC.
+ * @note Macro @ref IS_UART_WAKEUP_FROMSTOP_INSTANCE(USARTx) can be used to check whether or not
+ * Wake-up from Stop mode feature is supported by the USARTx instance.
+ * @rmtoll CR1 UESM LL_USART_EnableInStopMode
+ * @param USARTx USART Instance
+ * @retval None
+ */
+__STATIC_INLINE void LL_USART_EnableInStopMode(USART_TypeDef *USARTx)
+{
+ SET_BIT(USARTx->CR1, USART_CR1_UESM);
+}
+
+/**
+ * @brief USART disabled in STOP Mode.
+ * @note When this function is disabled, USART is not able to wake up the MCU from Stop mode
+ * @note Macro @ref IS_UART_WAKEUP_FROMSTOP_INSTANCE(USARTx) can be used to check whether or not
+ * Wake-up from Stop mode feature is supported by the USARTx instance.
+ * @rmtoll CR1 UESM LL_USART_DisableInStopMode
+ * @param USARTx USART Instance
+ * @retval None
+ */
+__STATIC_INLINE void LL_USART_DisableInStopMode(USART_TypeDef *USARTx)
+{
+ CLEAR_BIT(USARTx->CR1, USART_CR1_UESM);
+}
+
+/**
+ * @brief Indicate if USART is enabled in STOP Mode (able to wake up MCU from Stop mode or not)
+ * @note Macro @ref IS_UART_WAKEUP_FROMSTOP_INSTANCE(USARTx) can be used to check whether or not
+ * Wake-up from Stop mode feature is supported by the USARTx instance.
+ * @rmtoll CR1 UESM LL_USART_IsEnabledInStopMode
+ * @param USARTx USART Instance
+ * @retval State of bit (1 or 0).
+ */
+__STATIC_INLINE uint32_t LL_USART_IsEnabledInStopMode(USART_TypeDef *USARTx)
+{
+ return ((READ_BIT(USARTx->CR1, USART_CR1_UESM) == (USART_CR1_UESM)) ? 1UL : 0UL);
+}
+
+#if defined(USART_CR3_UCESM)
+/**
+ * @brief USART Clock enabled in STOP Mode
+ * @note When this function is called, USART Clock is enabled while in STOP mode
+ * @rmtoll CR3 UCESM LL_USART_EnableClockInStopMode
+ * @param USARTx USART Instance
+ * @retval None
+ */
+__STATIC_INLINE void LL_USART_EnableClockInStopMode(USART_TypeDef *USARTx)
+{
+ SET_BIT(USARTx->CR3, USART_CR3_UCESM);
+}
+
+/**
+ * @brief USART clock disabled in STOP Mode
+ * @note When this function is called, USART Clock is disabled while in STOP mode
+ * @rmtoll CR3 UCESM LL_USART_DisableClockInStopMode
+ * @param USARTx USART Instance
+ * @retval None
+ */
+__STATIC_INLINE void LL_USART_DisableClockInStopMode(USART_TypeDef *USARTx)
+{
+ CLEAR_BIT(USARTx->CR3, USART_CR3_UCESM);
+}
+
+/**
+ * @brief Indicate if USART clock is enabled in STOP Mode
+ * @rmtoll CR3 UCESM LL_USART_IsClockEnabledInStopMode
+ * @param USARTx USART Instance
+ * @retval State of bit (1 or 0).
+ */
+__STATIC_INLINE uint32_t LL_USART_IsClockEnabledInStopMode(USART_TypeDef *USARTx)
+{
+ return (READ_BIT(USARTx->CR3, USART_CR3_UCESM) == (USART_CR3_UCESM));
+}
+
+#endif /* USART_CR3_UCESM */
+#endif /* USART_CR1_UESM*/
/**
* @brief Receiver Enable (Receiver is enabled and begins searching for a start bit)
* @rmtoll CR1 RE LL_USART_EnableDirectionRx
@@ -1461,6 +1560,41 @@ __STATIC_INLINE uint32_t LL_USART_IsEnabledOverrunDetect(USART_TypeDef *USARTx)
return ((READ_BIT(USARTx->CR3, USART_CR3_OVRDIS) != USART_CR3_OVRDIS) ? 1UL : 0UL);
}
+#if defined(USART_CR1_UESM)
+/**
+ * @brief Select event type for Wake UP Interrupt Flag (WUS[1:0] bits)
+ * @note Macro @ref IS_UART_WAKEUP_FROMSTOP_INSTANCE(USARTx) can be used to check whether or not
+ * Wake-up from Stop mode feature is supported by the USARTx instance.
+ * @rmtoll CR3 WUS LL_USART_SetWKUPType
+ * @param USARTx USART Instance
+ * @param Type This parameter can be one of the following values:
+ * @arg @ref LL_USART_WAKEUP_ON_ADDRESS
+ * @arg @ref LL_USART_WAKEUP_ON_STARTBIT
+ * @arg @ref LL_USART_WAKEUP_ON_RXNE
+ * @retval None
+ */
+__STATIC_INLINE void LL_USART_SetWKUPType(USART_TypeDef *USARTx, uint32_t Type)
+{
+ MODIFY_REG(USARTx->CR3, USART_CR3_WUS, Type);
+}
+
+/**
+ * @brief Return event type for Wake UP Interrupt Flag (WUS[1:0] bits)
+ * @note Macro @ref IS_UART_WAKEUP_FROMSTOP_INSTANCE(USARTx) can be used to check whether or not
+ * Wake-up from Stop mode feature is supported by the USARTx instance.
+ * @rmtoll CR3 WUS LL_USART_GetWKUPType
+ * @param USARTx USART Instance
+ * @retval Returned value can be one of the following values:
+ * @arg @ref LL_USART_WAKEUP_ON_ADDRESS
+ * @arg @ref LL_USART_WAKEUP_ON_STARTBIT
+ * @arg @ref LL_USART_WAKEUP_ON_RXNE
+ */
+__STATIC_INLINE uint32_t LL_USART_GetWKUPType(USART_TypeDef *USARTx)
+{
+ return (uint32_t)(READ_BIT(USARTx->CR3, USART_CR3_WUS));
+}
+
+#endif /* USART_CR1_UESM */
/**
* @brief Configure USART BRR register for achieving expected Baud Rate value.
* @note Compute and set USARTDIV value in BRR Register (full BRR content)
@@ -1480,7 +1614,7 @@ __STATIC_INLINE uint32_t LL_USART_IsEnabledOverrunDetect(USART_TypeDef *USARTx)
__STATIC_INLINE void LL_USART_SetBaudRate(USART_TypeDef *USARTx, uint32_t PeriphClk, uint32_t OverSampling,
uint32_t BaudRate)
{
- register uint32_t usartdiv;
+ uint32_t usartdiv;
register uint32_t brrtemp;
if (OverSampling == LL_USART_OVERSAMPLING_8)
@@ -2161,7 +2295,8 @@ __STATIC_INLINE void LL_USART_ConfigAsyncMode(USART_TypeDef *USARTx)
{
/* In Asynchronous mode, the following bits must be kept cleared:
- LINEN, CLKEN bits in the USART_CR2 register,
- - SCEN, IREN and HDSEL bits in the USART_CR3 register.*/
+ - SCEN, IREN and HDSEL bits in the USART_CR3 register.
+ */
CLEAR_BIT(USARTx->CR2, (USART_CR2_LINEN | USART_CR2_CLKEN));
CLEAR_BIT(USARTx->CR3, (USART_CR3_SCEN | USART_CR3_IREN | USART_CR3_HDSEL));
}
@@ -2197,7 +2332,8 @@ __STATIC_INLINE void LL_USART_ConfigSyncMode(USART_TypeDef *USARTx)
{
/* In Synchronous mode, the following bits must be kept cleared:
- LINEN bit in the USART_CR2 register,
- - SCEN, IREN and HDSEL bits in the USART_CR3 register.*/
+ - SCEN, IREN and HDSEL bits in the USART_CR3 register.
+ */
CLEAR_BIT(USARTx->CR2, (USART_CR2_LINEN));
CLEAR_BIT(USARTx->CR3, (USART_CR3_SCEN | USART_CR3_IREN | USART_CR3_HDSEL));
/* set the UART/USART in Synchronous mode */
@@ -2237,7 +2373,8 @@ __STATIC_INLINE void LL_USART_ConfigLINMode(USART_TypeDef *USARTx)
{
/* In LIN mode, the following bits must be kept cleared:
- STOP and CLKEN bits in the USART_CR2 register,
- - IREN, SCEN and HDSEL bits in the USART_CR3 register.*/
+ - IREN, SCEN and HDSEL bits in the USART_CR3 register.
+ */
CLEAR_BIT(USARTx->CR2, (USART_CR2_CLKEN | USART_CR2_STOP));
CLEAR_BIT(USARTx->CR3, (USART_CR3_IREN | USART_CR3_SCEN | USART_CR3_HDSEL));
/* Set the UART/USART in LIN mode */
@@ -2275,7 +2412,8 @@ __STATIC_INLINE void LL_USART_ConfigHalfDuplexMode(USART_TypeDef *USARTx)
{
/* In Half Duplex mode, the following bits must be kept cleared:
- LINEN and CLKEN bits in the USART_CR2 register,
- - SCEN and IREN bits in the USART_CR3 register.*/
+ - SCEN and IREN bits in the USART_CR3 register.
+ */
CLEAR_BIT(USARTx->CR2, (USART_CR2_LINEN | USART_CR2_CLKEN));
CLEAR_BIT(USARTx->CR3, (USART_CR3_SCEN | USART_CR3_IREN));
/* set the UART/USART in Half Duplex mode */
@@ -2315,7 +2453,8 @@ __STATIC_INLINE void LL_USART_ConfigSmartcardMode(USART_TypeDef *USARTx)
{
/* In Smartcard mode, the following bits must be kept cleared:
- LINEN bit in the USART_CR2 register,
- - IREN and HDSEL bits in the USART_CR3 register.*/
+ - IREN and HDSEL bits in the USART_CR3 register.
+ */
CLEAR_BIT(USARTx->CR2, (USART_CR2_LINEN));
CLEAR_BIT(USARTx->CR3, (USART_CR3_IREN | USART_CR3_HDSEL));
/* Configure Stop bits to 1.5 bits */
@@ -2358,7 +2497,8 @@ __STATIC_INLINE void LL_USART_ConfigIrdaMode(USART_TypeDef *USARTx)
{
/* In IRDA mode, the following bits must be kept cleared:
- LINEN, STOP and CLKEN bits in the USART_CR2 register,
- - SCEN and HDSEL bits in the USART_CR3 register.*/
+ - SCEN and HDSEL bits in the USART_CR3 register.
+ */
CLEAR_BIT(USARTx->CR2, (USART_CR2_LINEN | USART_CR2_CLKEN | USART_CR2_STOP));
CLEAR_BIT(USARTx->CR3, (USART_CR3_SCEN | USART_CR3_HDSEL));
/* set the UART/USART in IRDA mode */
@@ -2396,7 +2536,8 @@ __STATIC_INLINE void LL_USART_ConfigMultiProcessMode(USART_TypeDef *USARTx)
{
/* In Multi Processor mode, the following bits must be kept cleared:
- LINEN and CLKEN bits in the USART_CR2 register,
- - IREN, SCEN and HDSEL bits in the USART_CR3 register.*/
+ - IREN, SCEN and HDSEL bits in the USART_CR3 register.
+ */
CLEAR_BIT(USARTx->CR2, (USART_CR2_LINEN | USART_CR2_CLKEN));
CLEAR_BIT(USARTx->CR3, (USART_CR3_SCEN | USART_CR3_HDSEL | USART_CR3_IREN));
}
@@ -2630,6 +2771,21 @@ __STATIC_INLINE uint32_t LL_USART_IsActiveFlag_RWU(USART_TypeDef *USARTx)
return ((READ_BIT(USARTx->ISR, USART_ISR_RWU) == (USART_ISR_RWU)) ? 1UL : 0UL);
}
+#if defined(USART_CR1_UESM)
+/**
+ * @brief Check if the USART Wake Up from stop mode Flag is set or not
+ * @note Macro @ref IS_UART_WAKEUP_FROMSTOP_INSTANCE(USARTx) can be used to check whether or not
+ * Wake-up from Stop mode feature is supported by the USARTx instance.
+ * @rmtoll ISR WUF LL_USART_IsActiveFlag_WKUP
+ * @param USARTx USART Instance
+ * @retval State of bit (1 or 0).
+ */
+__STATIC_INLINE uint32_t LL_USART_IsActiveFlag_WKUP(USART_TypeDef *USARTx)
+{
+ return ((READ_BIT(USARTx->ISR, USART_ISR_WUF) == (USART_ISR_WUF)) ? 1UL : 0UL);
+}
+
+#endif /* USART_CR1_UESM */
/**
* @brief Check if the USART Transmit Enable Acknowledge Flag is set or not
* @rmtoll ISR TEACK LL_USART_IsActiveFlag_TEACK
@@ -2641,6 +2797,19 @@ __STATIC_INLINE uint32_t LL_USART_IsActiveFlag_TEACK(USART_TypeDef *USARTx)
return ((READ_BIT(USARTx->ISR, USART_ISR_TEACK) == (USART_ISR_TEACK)) ? 1UL : 0UL);
}
+#if defined(USART_ISR_REACK)
+/**
+ * @brief Check if the USART Receive Enable Acknowledge Flag is set or not
+ * @rmtoll ISR REACK LL_USART_IsActiveFlag_REACK
+ * @param USARTx USART Instance
+ * @retval State of bit (1 or 0).
+ */
+__STATIC_INLINE uint32_t LL_USART_IsActiveFlag_REACK(USART_TypeDef *USARTx)
+{
+ return ((READ_BIT(USARTx->ISR, USART_ISR_REACK) == (USART_ISR_REACK)) ? 1UL : 0UL);
+}
+
+#endif/* USART_ISR_REACK */
#if defined(USART_TCBGT_SUPPORT)
/* Function available only on devices supporting Transmit Complete before Guard Time feature */
/**
@@ -2653,8 +2822,8 @@ __STATIC_INLINE uint32_t LL_USART_IsActiveFlag_TCBGT(USART_TypeDef *USARTx)
{
return ((READ_BIT(USARTx->ISR, USART_ISR_TCBGT) == (USART_ISR_TCBGT)) ? 1UL : 0UL);
}
-#endif
+#endif /* USART_TCBGT_SUPPORT */
/**
* @brief Clear Parity Error Flag
* @rmtoll ICR PECF LL_USART_ClearFlag_PE
@@ -2733,7 +2902,7 @@ __STATIC_INLINE void LL_USART_ClearFlag_TCBGT(USART_TypeDef *USARTx)
{
WRITE_REG(USARTx->ICR, USART_ICR_TCBGTCF);
}
-#endif
+#endif /* USART_TCBGT_SUPPORT */
/**
* @brief Clear LIN Break Detection Flag
@@ -2796,6 +2965,21 @@ __STATIC_INLINE void LL_USART_ClearFlag_CM(USART_TypeDef *USARTx)
WRITE_REG(USARTx->ICR, USART_ICR_CMCF);
}
+#if defined(USART_CR1_UESM)
+/**
+ * @brief Clear Wake Up from stop mode Flag
+ * @note Macro @ref IS_UART_WAKEUP_FROMSTOP_INSTANCE(USARTx) can be used to check whether or not
+ * Wake-up from Stop mode feature is supported by the USARTx instance.
+ * @rmtoll ICR WUCF LL_USART_ClearFlag_WKUP
+ * @param USARTx USART Instance
+ * @retval None
+ */
+__STATIC_INLINE void LL_USART_ClearFlag_WKUP(USART_TypeDef *USARTx)
+{
+ WRITE_REG(USARTx->ICR, USART_ICR_WUCF);
+}
+
+#endif /* USART_CR1_UESM */
/**
* @}
*/
@@ -2935,6 +3119,21 @@ __STATIC_INLINE void LL_USART_EnableIT_CTS(USART_TypeDef *USARTx)
SET_BIT(USARTx->CR3, USART_CR3_CTSIE);
}
+#if defined(USART_CR1_UESM)
+/**
+ * @brief Enable Wake Up from Stop Mode Interrupt
+ * @note Macro @ref IS_UART_WAKEUP_FROMSTOP_INSTANCE(USARTx) can be used to check whether or not
+ * Wake-up from Stop mode feature is supported by the USARTx instance.
+ * @rmtoll CR3 WUFIE LL_USART_EnableIT_WKUP
+ * @param USARTx USART Instance
+ * @retval None
+ */
+__STATIC_INLINE void LL_USART_EnableIT_WKUP(USART_TypeDef *USARTx)
+{
+ SET_BIT(USARTx->CR3, USART_CR3_WUFIE);
+}
+
+#endif /* USART_CR1_UESM */
#if defined(USART_TCBGT_SUPPORT)
/* Function available only on devices supporting Transmit Complete before Guard Time feature */
/**
@@ -2949,7 +3148,7 @@ __STATIC_INLINE void LL_USART_EnableIT_TCBGT(USART_TypeDef *USARTx)
{
SET_BIT(USARTx->CR3, USART_CR3_TCBGTIE);
}
-#endif
+#endif /* USART_TCBGT_SUPPORT */
/**
* @brief Disable IDLE Interrupt
@@ -3082,6 +3281,21 @@ __STATIC_INLINE void LL_USART_DisableIT_CTS(USART_TypeDef *USARTx)
CLEAR_BIT(USARTx->CR3, USART_CR3_CTSIE);
}
+#if defined(USART_CR1_UESM)
+/**
+ * @brief Disable Wake Up from Stop Mode Interrupt
+ * @note Macro @ref IS_UART_WAKEUP_FROMSTOP_INSTANCE(USARTx) can be used to check whether or not
+ * Wake-up from Stop mode feature is supported by the USARTx instance.
+ * @rmtoll CR3 WUFIE LL_USART_DisableIT_WKUP
+ * @param USARTx USART Instance
+ * @retval None
+ */
+__STATIC_INLINE void LL_USART_DisableIT_WKUP(USART_TypeDef *USARTx)
+{
+ CLEAR_BIT(USARTx->CR3, USART_CR3_WUFIE);
+}
+
+#endif /* USART_CR1_UESM */
#if defined(USART_TCBGT_SUPPORT)
/* Function available only on devices supporting Transmit Complete before Guard Time feature */
/**
@@ -3096,7 +3310,7 @@ __STATIC_INLINE void LL_USART_DisableIT_TCBGT(USART_TypeDef *USARTx)
{
CLEAR_BIT(USARTx->CR3, USART_CR3_TCBGTIE);
}
-#endif
+#endif /* USART_TCBGT_SUPPORT */
/**
* @brief Check if the USART IDLE Interrupt source is enabled or disabled.
@@ -3225,6 +3439,21 @@ __STATIC_INLINE uint32_t LL_USART_IsEnabledIT_CTS(USART_TypeDef *USARTx)
return ((READ_BIT(USARTx->CR3, USART_CR3_CTSIE) == (USART_CR3_CTSIE)) ? 1UL : 0UL);
}
+#if defined(USART_CR1_UESM)
+/**
+ * @brief Check if the USART Wake Up from Stop Mode Interrupt is enabled or disabled.
+ * @note Macro @ref IS_UART_WAKEUP_FROMSTOP_INSTANCE(USARTx) can be used to check whether or not
+ * Wake-up from Stop mode feature is supported by the USARTx instance.
+ * @rmtoll CR3 WUFIE LL_USART_IsEnabledIT_WKUP
+ * @param USARTx USART Instance
+ * @retval State of bit (1 or 0).
+ */
+__STATIC_INLINE uint32_t LL_USART_IsEnabledIT_WKUP(USART_TypeDef *USARTx)
+{
+ return ((READ_BIT(USARTx->CR3, USART_CR3_WUFIE) == (USART_CR3_WUFIE)) ? 1UL : 0UL);
+}
+
+#endif /* USART_CR1_UESM */
#if defined(USART_TCBGT_SUPPORT)
/* Function available only on devices supporting Transmit Complete before Guard Time feature */
/**
@@ -3239,7 +3468,7 @@ __STATIC_INLINE uint32_t LL_USART_IsEnabledIT_TCBGT(USART_TypeDef *USARTx)
{
return ((READ_BIT(USARTx->CR3, USART_CR3_TCBGTIE) == (USART_CR3_TCBGTIE)) ? 1UL : 0UL);
}
-#endif
+#endif /* USART_TCBGT_SUPPORT */
/**
* @}
@@ -3365,12 +3594,12 @@ __STATIC_INLINE uint32_t LL_USART_DMA_GetRegAddr(USART_TypeDef *USARTx, uint32_t
if (Direction == LL_USART_DMA_REG_DATA_TRANSMIT)
{
/* return address of TDR register */
- data_reg_addr = (uint32_t) & (USARTx->TDR);
+ data_reg_addr = (uint32_t) &(USARTx->TDR);
}
else
{
/* return address of RDR register */
- data_reg_addr = (uint32_t) & (USARTx->RDR);
+ data_reg_addr = (uint32_t) &(USARTx->RDR);
}
return data_reg_addr;
@@ -3392,7 +3621,7 @@ __STATIC_INLINE uint32_t LL_USART_DMA_GetRegAddr(USART_TypeDef *USARTx, uint32_t
*/
__STATIC_INLINE uint8_t LL_USART_ReceiveData8(USART_TypeDef *USARTx)
{
- return (uint8_t)(READ_BIT(USARTx->RDR, USART_RDR_RDR));
+ return (uint8_t)(READ_BIT(USARTx->RDR, USART_RDR_RDR) & 0xFFU);
}
/**
diff --git a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_IAR/Boot/lib/STM32F7xx_HAL_Driver/Inc/stm32f7xx_ll_usb.h b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_IAR/Boot/lib/STM32F7xx_HAL_Driver/Inc/stm32f7xx_ll_usb.h
index 1f768abf..44bf4853 100644
--- a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_IAR/Boot/lib/STM32F7xx_HAL_Driver/Inc/stm32f7xx_ll_usb.h
+++ b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_IAR/Boot/lib/STM32F7xx_HAL_Driver/Inc/stm32f7xx_ll_usb.h
@@ -155,7 +155,7 @@ typedef struct
typedef struct
{
- uint8_t dev_addr ; /*!< USB device address.
+ uint8_t dev_addr; /*!< USB device address.
This parameter must be a number between Min_Data = 1 and Max_Data = 255 */
uint8_t ch_num; /*!< Host channel number.
@@ -199,10 +199,10 @@ typedef struct
uint32_t ErrCnt; /*!< Host channel error count.*/
- USB_OTG_URBStateTypeDef urb_state; /*!< URB state.
+ USB_OTG_URBStateTypeDef urb_state; /*!< URB state.
This parameter can be any value of @ref USB_OTG_URBStateTypeDef */
- USB_OTG_HCStateTypeDef state; /*!< Host Channel state.
+ USB_OTG_HCStateTypeDef state; /*!< Host Channel state.
This parameter can be any value of @ref USB_OTG_HCStateTypeDef */
} USB_OTG_HCTypeDef;
#endif /* defined (USB_OTG_FS) || defined (USB_OTG_HS) */
@@ -234,6 +234,18 @@ typedef struct
* @}
*/
+/** @defgroup USB_LL Device Speed
+ * @{
+ */
+#define USBD_HS_SPEED 0U
+#define USBD_HSINFS_SPEED 1U
+#define USBH_HS_SPEED 0U
+#define USBD_FS_SPEED 2U
+#define USBH_FSLS_SPEED 1U
+/**
+ * @}
+ */
+
/** @defgroup USB_LL_Core_Speed USB Low Layer Core Speed
* @{
*/
@@ -252,7 +264,7 @@ typedef struct
#define USB_OTG_HS_EMBEDDED_PHY 3U
#if !defined (USB_HS_PHYC_TUNE_VALUE)
-#define USB_HS_PHYC_TUNE_VALUE 0x00000F13U /*!< Value of USB HS PHY Tune */
+#define USB_HS_PHYC_TUNE_VALUE 0x00000F13U /*!< Value of USB HS PHY Tune */
#endif /* USB_HS_PHYC_TUNE_VALUE */
/**
* @}
@@ -262,11 +274,11 @@ typedef struct
* @{
*/
#ifndef USBD_HS_TRDT_VALUE
-#define USBD_HS_TRDT_VALUE 9U
+#define USBD_HS_TRDT_VALUE 9U
#endif /* USBD_HS_TRDT_VALUE */
#ifndef USBD_FS_TRDT_VALUE
-#define USBD_FS_TRDT_VALUE 5U
-#define USBD_DEFAULT_TRDT_VALUE 9U
+#define USBD_FS_TRDT_VALUE 5U
+#define USBD_DEFAULT_TRDT_VALUE 9U
#endif /* USBD_HS_TRDT_VALUE */
/**
* @}
@@ -275,9 +287,9 @@ typedef struct
/** @defgroup USB_LL_Core_MPS USB Low Layer Core MPS
* @{
*/
-#define USB_OTG_HS_MAX_PACKET_SIZE 512U
-#define USB_OTG_FS_MAX_PACKET_SIZE 64U
-#define USB_OTG_MAX_EP0_SIZE 64U
+#define USB_OTG_HS_MAX_PACKET_SIZE 512U
+#define USB_OTG_FS_MAX_PACKET_SIZE 64U
+#define USB_OTG_MAX_EP0_SIZE 64U
/**
* @}
*/
@@ -287,7 +299,6 @@ typedef struct
*/
#define DSTS_ENUMSPD_HS_PHY_30MHZ_OR_60MHZ (0U << 1)
#define DSTS_ENUMSPD_FS_PHY_30MHZ_OR_60MHZ (1U << 1)
-#define DSTS_ENUMSPD_LS_PHY_6MHZ (2U << 1)
#define DSTS_ENUMSPD_FS_PHY_48MHZ (3U << 1)
/**
* @}
@@ -397,7 +408,7 @@ typedef struct
#define USBPHYC ((USBPHYC_GlobalTypeDef *)((uint32_t )USB_PHY_HS_CONTROLLER_BASE))
#endif /* defined (USB_OTG_FS) || defined (USB_OTG_HS) */
-#define EP_ADDR_MSK 0xFU
+#define EP_ADDR_MSK 0xFU
/**
* @}
*/
@@ -462,13 +473,9 @@ HAL_StatusTypeDef USB_ResetPort(USB_OTG_GlobalTypeDef *USBx);
HAL_StatusTypeDef USB_DriveVbus(USB_OTG_GlobalTypeDef *USBx, uint8_t state);
uint32_t USB_GetHostSpeed(USB_OTG_GlobalTypeDef *USBx);
uint32_t USB_GetCurrentFrame(USB_OTG_GlobalTypeDef *USBx);
-HAL_StatusTypeDef USB_HC_Init(USB_OTG_GlobalTypeDef *USBx,
- uint8_t ch_num,
- uint8_t epnum,
- uint8_t dev_address,
- uint8_t speed,
- uint8_t ep_type,
- uint16_t mps);
+HAL_StatusTypeDef USB_HC_Init(USB_OTG_GlobalTypeDef *USBx, uint8_t ch_num,
+ uint8_t epnum, uint8_t dev_address, uint8_t speed,
+ uint8_t ep_type, uint16_t mps);
HAL_StatusTypeDef USB_HC_StartXfer(USB_OTG_GlobalTypeDef *USBx, USB_OTG_HCTypeDef *hc, uint8_t dma);
uint32_t USB_HC_ReadInterrupt(USB_OTG_GlobalTypeDef *USBx);
HAL_StatusTypeDef USB_HC_Halt(USB_OTG_GlobalTypeDef *USBx, uint8_t hc_num);
diff --git a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_IAR/Boot/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal.c b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_IAR/Boot/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal.c
index 81a39d76..48bbd535 100644
--- a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_IAR/Boot/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal.c
+++ b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_IAR/Boot/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal.c
@@ -50,11 +50,11 @@
* @{
*/
/**
- * @brief STM32F7xx HAL Driver version number V1.2.7
+ * @brief STM32F7xx HAL Driver version number V1.2.8
*/
#define __STM32F7xx_HAL_VERSION_MAIN (0x01) /*!< [31:24] main version */
#define __STM32F7xx_HAL_VERSION_SUB1 (0x02) /*!< [23:16] sub1 version */
-#define __STM32F7xx_HAL_VERSION_SUB2 (0x07) /*!< [15:8] sub2 version */
+#define __STM32F7xx_HAL_VERSION_SUB2 (0x08) /*!< [15:8] sub2 version */
#define __STM32F7xx_HAL_VERSION_RC (0x00) /*!< [7:0] release candidate */
#define __STM32F7xx_HAL_VERSION ((__STM32F7xx_HAL_VERSION_MAIN << 24)\
|(__STM32F7xx_HAL_VERSION_SUB1 << 16)\
@@ -319,14 +319,26 @@ uint32_t HAL_GetTickPrio(void)
HAL_StatusTypeDef HAL_SetTickFreq(HAL_TickFreqTypeDef Freq)
{
HAL_StatusTypeDef status = HAL_OK;
+ HAL_TickFreqTypeDef prevTickFreq;
+
assert_param(IS_TICKFREQ(Freq));
if (uwTickFreq != Freq)
{
+ /* Back up uwTickFreq frequency */
+ prevTickFreq = uwTickFreq;
+
+ /* Update uwTickFreq global variable used by HAL_InitTick() */
uwTickFreq = Freq;
/* Apply the new tick Freq */
status = HAL_InitTick(uwTickPrio);
+
+ if (status != HAL_OK)
+ {
+ /* Restore previous tick frequency */
+ uwTickFreq = prevTickFreq;
+ }
}
return status;
diff --git a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_IAR/Boot/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_can.c b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_IAR/Boot/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_can.c
index 6978c4da..a381dfc4 100644
--- a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_IAR/Boot/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_can.c
+++ b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_IAR/Boot/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_can.c
@@ -1556,7 +1556,7 @@ HAL_StatusTypeDef HAL_CAN_GetRxMessage(CAN_HandleTypeDef *hcan, uint32_t RxFifo,
{
pHeader->ExtId = ((CAN_RI0R_EXID | CAN_RI0R_STID) & hcan->Instance->sFIFOMailBox[RxFifo].RIR) >> CAN_RI0R_EXID_Pos;
}
- pHeader->RTR = (CAN_RI0R_RTR & hcan->Instance->sFIFOMailBox[RxFifo].RIR) >> CAN_RI0R_RTR_Pos;
+ pHeader->RTR = (CAN_RI0R_RTR & hcan->Instance->sFIFOMailBox[RxFifo].RIR);
pHeader->DLC = (CAN_RDT0R_DLC & hcan->Instance->sFIFOMailBox[RxFifo].RDTR) >> CAN_RDT0R_DLC_Pos;
pHeader->FilterMatchIndex = (CAN_RDT0R_FMI & hcan->Instance->sFIFOMailBox[RxFifo].RDTR) >> CAN_RDT0R_FMI_Pos;
pHeader->Timestamp = (CAN_RDT0R_TIME & hcan->Instance->sFIFOMailBox[RxFifo].RDTR) >> CAN_RDT0R_TIME_Pos;
diff --git a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_IAR/Boot/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_exti.c b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_IAR/Boot/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_exti.c
index 07e53536..246f4562 100644
--- a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_IAR/Boot/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_exti.c
+++ b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_IAR/Boot/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_exti.c
@@ -85,7 +85,6 @@
/* Includes ------------------------------------------------------------------*/
#include "stm32f7xx_hal.h"
-#include "stm32f7xx_hal_exti.h"
/** @addtogroup STM32F7xx_HAL_Driver
* @{
@@ -105,7 +104,7 @@
#ifdef HAL_EXTI_MODULE_ENABLED
/* Private typedef -----------------------------------------------------------*/
-/* Private defines ------------------------------------------------------------*/
+/* Private defines -----------------------------------------------------------*/
/** @defgroup EXTI_Private_Constants EXTI Private Constants
* @{
*/
@@ -144,6 +143,8 @@
HAL_StatusTypeDef HAL_EXTI_SetConfigLine(EXTI_HandleTypeDef *hexti, EXTI_ConfigTypeDef *pExtiConfig)
{
uint32_t regval;
+ uint32_t linepos;
+ uint32_t maskline;
/* Check null pointer */
if ((hexti == NULL) || (pExtiConfig == NULL))
@@ -154,37 +155,77 @@ HAL_StatusTypeDef HAL_EXTI_SetConfigLine(EXTI_HandleTypeDef *hexti, EXTI_ConfigT
/* Check parameters */
assert_param(IS_EXTI_LINE(pExtiConfig->Line));
assert_param(IS_EXTI_MODE(pExtiConfig->Mode));
- assert_param(IS_EXTI_TRIGGER(pExtiConfig->Trigger));
-
+
/* Assign line number to handle */
hexti->Line = pExtiConfig->Line;
-
- /* Clear EXTI line configuration */
- EXTI->IMR &= ~pExtiConfig->Line;
- EXTI->EMR &= ~pExtiConfig->Line;
-
- /* Select the Mode for the selected external interrupts */
- regval = (uint32_t)EXTI_BASE;
- regval += pExtiConfig->Mode;
- *(__IO uint32_t *) regval |= pExtiConfig->Line;
-
- /* Clear Rising Falling edge configuration */
- EXTI->RTSR &= ~pExtiConfig->Line;
- EXTI->FTSR &= ~pExtiConfig->Line;
-
- /* Select the trigger for the selected external interrupts */
- if (pExtiConfig->Trigger == EXTI_TRIGGER_RISING_FALLING)
+
+ /* Compute line mask */
+ linepos = (pExtiConfig->Line & EXTI_PIN_MASK);
+ maskline = (1uL << linepos);
+
+ /* Configure triggers for configurable lines */
+ if ((pExtiConfig->Line & EXTI_CONFIG) != 0x00u)
{
- /* Rising Falling edge */
- EXTI->RTSR |= pExtiConfig->Line;
- EXTI->FTSR |= pExtiConfig->Line;
+ assert_param(IS_EXTI_TRIGGER(pExtiConfig->Trigger));
+
+ /* Configure rising trigger */
+ /* Mask or set line */
+ if ((pExtiConfig->Trigger & EXTI_TRIGGER_RISING) != 0x00u)
+ {
+ EXTI->RTSR |= maskline;
+ }
+ else
+ {
+ EXTI->RTSR &= ~maskline;
+ }
+
+ /* Configure falling trigger */
+ /* Mask or set line */
+ if ((pExtiConfig->Trigger & EXTI_TRIGGER_FALLING) != 0x00u)
+ {
+ EXTI->FTSR |= maskline;
+ }
+ else
+ {
+ EXTI->FTSR &= ~maskline;
+ }
+
+
+ /* Configure gpio port selection in case of gpio exti line */
+ if ((pExtiConfig->Line & EXTI_GPIO) == EXTI_GPIO)
+ {
+ assert_param(IS_EXTI_GPIO_PORT(pExtiConfig->GPIOSel));
+ assert_param(IS_EXTI_GPIO_PIN(linepos));
+
+ regval = SYSCFG->EXTICR[linepos >> 2u];
+ regval &= ~(SYSCFG_EXTICR1_EXTI0 << (SYSCFG_EXTICR1_EXTI1_Pos * (linepos & 0x03u)));
+ regval |= (pExtiConfig->GPIOSel << (SYSCFG_EXTICR1_EXTI1_Pos * (linepos & 0x03u)));
+ SYSCFG->EXTICR[linepos >> 2u] = regval;
+ }
+ }
+
+ /* Configure interrupt mode : read current mode */
+ /* Mask or set line */
+ if ((pExtiConfig->Mode & EXTI_MODE_INTERRUPT) != 0x00u)
+ {
+ EXTI->IMR |= maskline;
}
else
{
- regval = (uint32_t)EXTI_BASE;
- regval += pExtiConfig->Trigger;
- *(__IO uint32_t *) regval |= pExtiConfig->Line;
+ EXTI->IMR &= ~maskline;
}
+
+ /* Configure event mode : read current mode */
+ /* Mask or set line */
+ if ((pExtiConfig->Mode & EXTI_MODE_EVENT) != 0x00u)
+ {
+ EXTI->EMR |= maskline;
+ }
+ else
+ {
+ EXTI->EMR &= ~maskline;
+ }
+
return HAL_OK;
}
@@ -196,6 +237,10 @@ HAL_StatusTypeDef HAL_EXTI_SetConfigLine(EXTI_HandleTypeDef *hexti, EXTI_ConfigT
*/
HAL_StatusTypeDef HAL_EXTI_GetConfigLine(EXTI_HandleTypeDef *hexti, EXTI_ConfigTypeDef *pExtiConfig)
{
+ uint32_t regval;
+ uint32_t linepos;
+ uint32_t maskline;
+
/* Check null pointer */
if ((hexti == NULL) || (pExtiConfig == NULL))
{
@@ -208,41 +253,67 @@ HAL_StatusTypeDef HAL_EXTI_GetConfigLine(EXTI_HandleTypeDef *hexti, EXTI_ConfigT
/* Store handle line number to configuration structure */
pExtiConfig->Line = hexti->Line;
- /* Get EXTI mode to configiguration structure */
- if ((EXTI->IMR & hexti->Line) == hexti->Line)
+ /* Compute line mask */
+ linepos = (pExtiConfig->Line & EXTI_PIN_MASK);
+ maskline = (1uL << linepos);
+
+ /* 1] Get core mode : interrupt */
+
+ /* Check if selected line is enable */
+ if ((EXTI->IMR & maskline) != 0x00u)
{
pExtiConfig->Mode = EXTI_MODE_INTERRUPT;
}
- else if ((EXTI->EMR & hexti->Line) == hexti->Line)
- {
- pExtiConfig->Mode = EXTI_MODE_EVENT;
- }
else
{
- /* No MODE selected */
- pExtiConfig->Mode = 0x0Bu;
+ pExtiConfig->Mode = EXTI_MODE_NONE;
}
- /* Get EXTI Trigger to configiguration structure */
- if ((EXTI->RTSR & hexti->Line) == hexti->Line)
+ /* Get event mode */
+ /* Check if selected line is enable */
+ if ((EXTI->EMR & maskline) != 0x00u)
{
- if ((EXTI->FTSR & hexti->Line) == hexti->Line)
- {
- pExtiConfig->Trigger = EXTI_TRIGGER_RISING_FALLING;
- }
- else
+ pExtiConfig->Mode |= EXTI_MODE_EVENT;
+ }
+
+ /* 2] Get trigger for configurable lines : rising */
+ if ((pExtiConfig->Line & EXTI_CONFIG) != 0x00u)
+ {
+ /* Check if configuration of selected line is enable */
+ if ((EXTI->RTSR & maskline) != 0x00u)
{
pExtiConfig->Trigger = EXTI_TRIGGER_RISING;
}
- }
- else if ((EXTI->FTSR & hexti->Line) == hexti->Line)
- {
- pExtiConfig->Trigger = EXTI_TRIGGER_FALLING;
+ else
+ {
+ pExtiConfig->Trigger = EXTI_TRIGGER_NONE;
+ }
+
+ /* Get falling configuration */
+ /* Check if configuration of selected line is enable */
+ if ((EXTI->FTSR & maskline) != 0x00u)
+ {
+ pExtiConfig->Trigger |= EXTI_TRIGGER_FALLING;
+ }
+
+ /* Get Gpio port selection for gpio lines */
+ if ((pExtiConfig->Line & EXTI_GPIO) == EXTI_GPIO)
+ {
+ assert_param(IS_EXTI_GPIO_PIN(linepos));
+
+ regval = SYSCFG->EXTICR[linepos >> 2u];
+ pExtiConfig->GPIOSel = ((regval << (SYSCFG_EXTICR1_EXTI1_Pos * (3uL - (linepos & 0x03u)))) >> 24);
+ }
+ else
+ {
+ pExtiConfig->GPIOSel = 0x00u;
+ }
}
else
{
/* No Trigger selected */
- pExtiConfig->Trigger = 0x00u;
+ pExtiConfig->Trigger = EXTI_TRIGGER_NONE;
+ pExtiConfig->GPIOSel = 0x00u;
}
return HAL_OK;
@@ -255,6 +326,10 @@ HAL_StatusTypeDef HAL_EXTI_GetConfigLine(EXTI_HandleTypeDef *hexti, EXTI_ConfigT
*/
HAL_StatusTypeDef HAL_EXTI_ClearConfigLine(EXTI_HandleTypeDef *hexti)
{
+ uint32_t regval;
+ uint32_t linepos;
+ uint32_t maskline;
+
/* Check null pointer */
if (hexti == NULL)
{
@@ -264,15 +339,32 @@ HAL_StatusTypeDef HAL_EXTI_ClearConfigLine(EXTI_HandleTypeDef *hexti)
/* Check the parameter */
assert_param(IS_EXTI_LINE(hexti->Line));
+ /* compute line mask */
+ linepos = (hexti->Line & EXTI_PIN_MASK);
+ maskline = (1uL << linepos);
+
/* 1] Clear interrupt mode */
- EXTI->IMR = (EXTI->IMR & ~hexti->Line);
+ EXTI->IMR = (EXTI->IMR & ~maskline);
/* 2] Clear event mode */
- EXTI->EMR = (EXTI->EMR & ~hexti->Line);
+ EXTI->EMR = (EXTI->EMR & ~maskline);
- /* 3] Clear triggers */
- EXTI->RTSR = (EXTI->RTSR & ~hexti->Line);
- EXTI->FTSR = (EXTI->FTSR & ~hexti->Line);
+ /* 3] Clear triggers in case of configurable lines */
+ if ((hexti->Line & EXTI_CONFIG) != 0x00u)
+ {
+ EXTI->RTSR = (EXTI->RTSR & ~maskline);
+ EXTI->FTSR = (EXTI->FTSR & ~maskline);
+
+ /* Get Gpio port selection for gpio lines */
+ if ((hexti->Line & EXTI_GPIO) == EXTI_GPIO)
+ {
+ assert_param(IS_EXTI_GPIO_PIN(linepos));
+
+ regval = SYSCFG->EXTICR[linepos >> 2u];
+ regval &= ~(SYSCFG_EXTICR1_EXTI0 << (SYSCFG_EXTICR1_EXTI1_Pos * (linepos & 0x03u)));
+ SYSCFG->EXTICR[linepos >> 2u] = regval;
+ }
+ }
return HAL_OK;
}
@@ -352,17 +444,18 @@ HAL_StatusTypeDef HAL_EXTI_GetHandle(EXTI_HandleTypeDef *hexti, uint32_t ExtiLin
*/
void HAL_EXTI_IRQHandler(EXTI_HandleTypeDef *hexti)
{
- __IO uint32_t *regaddr;
uint32_t regval;
+ uint32_t maskline;
+
+ /* Compute line mask */
+ maskline = (1uL << (hexti->Line & EXTI_PIN_MASK));
/* Get pending bit */
- regaddr = (&EXTI->PR);
- regval = (*regaddr & hexti->Line);
-
+ regval = (EXTI->PR & maskline);
if (regval != 0x00u)
{
/* Clear pending bit */
- *regaddr = hexti->Line;
+ EXTI->PR = maskline;
/* Call callback */
if (hexti->PendingCallback != NULL)
@@ -383,19 +476,21 @@ void HAL_EXTI_IRQHandler(EXTI_HandleTypeDef *hexti)
*/
uint32_t HAL_EXTI_GetPending(EXTI_HandleTypeDef *hexti, uint32_t Edge)
{
- __IO uint32_t *regaddr;
uint32_t regval;
+ uint32_t linepos;
+ uint32_t maskline;
/* Check parameters */
assert_param(IS_EXTI_LINE(hexti->Line));
+ assert_param(IS_EXTI_CONFIG_LINE(hexti->Line));
assert_param(IS_EXTI_PENDING_EDGE(Edge));
- /* Get pending bit */
- regaddr = &EXTI->PR;
+ /* Compute line mask */
+ linepos = (hexti->Line & EXTI_PIN_MASK);
+ maskline = (1uL << linepos);
/* return 1 if bit is set else 0 */
- regval = ((*regaddr & hexti->Line) >> POSITION_VAL(hexti->Line));
-
+ regval = ((EXTI->PR & maskline) >> linepos);
return regval;
}
@@ -410,12 +505,18 @@ uint32_t HAL_EXTI_GetPending(EXTI_HandleTypeDef *hexti, uint32_t Edge)
*/
void HAL_EXTI_ClearPending(EXTI_HandleTypeDef *hexti, uint32_t Edge)
{
+ uint32_t maskline;
+
/* Check parameters */
assert_param(IS_EXTI_LINE(hexti->Line));
+ assert_param(IS_EXTI_CONFIG_LINE(hexti->Line));
assert_param(IS_EXTI_PENDING_EDGE(Edge));
-
+
+ /* Compute line mask */
+ maskline = (1uL << (hexti->Line & EXTI_PIN_MASK));
+
/* Clear Pending bit */
- EXTI->PR = hexti->Line;
+ EXTI->PR = maskline;
}
/**
@@ -425,10 +526,17 @@ void HAL_EXTI_ClearPending(EXTI_HandleTypeDef *hexti, uint32_t Edge)
*/
void HAL_EXTI_GenerateSWI(EXTI_HandleTypeDef *hexti)
{
+ uint32_t maskline;
+
/* Check parameters */
assert_param(IS_EXTI_LINE(hexti->Line));
+ assert_param(IS_EXTI_CONFIG_LINE(hexti->Line));
- EXTI->SWIER = hexti->Line;
+ /* Compute line mask */
+ maskline = (1uL << (hexti->Line & EXTI_PIN_MASK));
+
+ /* Generate Software interrupt */
+ EXTI->SWIER = maskline;
}
/**
diff --git a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_IAR/Boot/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_gpio.c b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_IAR/Boot/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_gpio.c
index ffc617dd..0afa1df1 100644
--- a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_IAR/Boot/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_gpio.c
+++ b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_IAR/Boot/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_gpio.c
@@ -190,25 +190,6 @@ void HAL_GPIO_Init(GPIO_TypeDef *GPIOx, GPIO_InitTypeDef *GPIO_Init)
if(iocurrent == ioposition)
{
/*--------------------- GPIO Mode Configuration ------------------------*/
- /* In case of Alternate function mode selection */
- if((GPIO_Init->Mode == GPIO_MODE_AF_PP) || (GPIO_Init->Mode == GPIO_MODE_AF_OD))
- {
- /* Check the Alternate function parameter */
- assert_param(IS_GPIO_AF(GPIO_Init->Alternate));
-
- /* Configure Alternate function mapped with the current IO */
- temp = GPIOx->AFR[position >> 3];
- temp &= ~((uint32_t)0xF << ((uint32_t)(position & (uint32_t)0x07) * 4)) ;
- temp |= ((uint32_t)(GPIO_Init->Alternate) << (((uint32_t)position & (uint32_t)0x07) * 4));
- GPIOx->AFR[position >> 3] = temp;
- }
-
- /* Configure IO Direction mode (Input, Output, Alternate or Analog) */
- temp = GPIOx->MODER;
- temp &= ~(GPIO_MODER_MODER0 << (position * 2));
- temp |= ((GPIO_Init->Mode & GPIO_MODE) << (position * 2));
- GPIOx->MODER = temp;
-
/* In case of Output or Alternate function mode selection */
if((GPIO_Init->Mode == GPIO_MODE_OUTPUT_PP) || (GPIO_Init->Mode == GPIO_MODE_AF_PP) ||
(GPIO_Init->Mode == GPIO_MODE_OUTPUT_OD) || (GPIO_Init->Mode == GPIO_MODE_AF_OD))
@@ -234,6 +215,25 @@ void HAL_GPIO_Init(GPIO_TypeDef *GPIOx, GPIO_InitTypeDef *GPIO_Init)
temp |= ((GPIO_Init->Pull) << (position * 2));
GPIOx->PUPDR = temp;
+ /* In case of Alternate function mode selection */
+ if((GPIO_Init->Mode == GPIO_MODE_AF_PP) || (GPIO_Init->Mode == GPIO_MODE_AF_OD))
+ {
+ /* Check the Alternate function parameter */
+ assert_param(IS_GPIO_AF(GPIO_Init->Alternate));
+
+ /* Configure Alternate function mapped with the current IO */
+ temp = GPIOx->AFR[position >> 3];
+ temp &= ~((uint32_t)0xF << ((uint32_t)(position & (uint32_t)0x07) * 4)) ;
+ temp |= ((uint32_t)(GPIO_Init->Alternate) << (((uint32_t)position & (uint32_t)0x07) * 4));
+ GPIOx->AFR[position >> 3] = temp;
+ }
+
+ /* Configure IO Direction mode (Input, Output, Alternate or Analog) */
+ temp = GPIOx->MODER;
+ temp &= ~(GPIO_MODER_MODER0 << (position * 2));
+ temp |= ((GPIO_Init->Mode & GPIO_MODE) << (position * 2));
+ GPIOx->MODER = temp;
+
/*--------------------- EXTI Mode Configuration ------------------------*/
/* Configure the External Interrupt or event for the current IO */
if((GPIO_Init->Mode & EXTI_MODE) == EXTI_MODE)
@@ -300,7 +300,7 @@ void HAL_GPIO_DeInit(GPIO_TypeDef *GPIOx, uint32_t GPIO_Pin)
/* Check the parameters */
assert_param(IS_GPIO_ALL_INSTANCE(GPIOx));
-
+
/* Configure the port pins */
for(position = 0; position < GPIO_NUMBER; position++)
{
@@ -316,10 +316,6 @@ void HAL_GPIO_DeInit(GPIO_TypeDef *GPIOx, uint32_t GPIO_Pin)
tmp &= (((uint32_t)0x0F) << (4 * (position & 0x03)));
if(tmp == ((uint32_t)(GPIO_GET_INDEX(GPIOx)) << (4 * (position & 0x03))))
{
- /* Configure the External Interrupt or event for the current IO */
- tmp = ((uint32_t)0x0F) << (4 * (position & 0x03));
- SYSCFG->EXTICR[position >> 2] &= ~tmp;
-
/* Clear EXTI line configuration */
EXTI->IMR &= ~((uint32_t)iocurrent);
EXTI->EMR &= ~((uint32_t)iocurrent);
@@ -327,6 +323,10 @@ void HAL_GPIO_DeInit(GPIO_TypeDef *GPIOx, uint32_t GPIO_Pin)
/* Clear Rising Falling edge configuration */
EXTI->RTSR &= ~((uint32_t)iocurrent);
EXTI->FTSR &= ~((uint32_t)iocurrent);
+
+ /* Configure the External Interrupt or event for the current IO */
+ tmp = ((uint32_t)0x0F) << (4 * (position & 0x03));
+ SYSCFG->EXTICR[position >> 2] &= ~tmp;
}
/*------------------------- GPIO Mode Configuration --------------------*/
/* Configure IO Direction in Input Floating Mode */
@@ -335,14 +335,14 @@ void HAL_GPIO_DeInit(GPIO_TypeDef *GPIOx, uint32_t GPIO_Pin)
/* Configure the default Alternate Function in current IO */
GPIOx->AFR[position >> 3] &= ~((uint32_t)0xF << ((uint32_t)(position & (uint32_t)0x07) * 4)) ;
- /* Configure the default value for IO Speed */
- GPIOx->OSPEEDR &= ~(GPIO_OSPEEDER_OSPEEDR0 << (position * 2));
+ /* Deactivate the Pull-up and Pull-down resistor for the current IO */
+ GPIOx->PUPDR &= ~(GPIO_PUPDR_PUPDR0 << (position * 2));
/* Configure the default value IO Output Type */
GPIOx->OTYPER &= ~(GPIO_OTYPER_OT_0 << position) ;
- /* Deactivate the Pull-up and Pull-down resistor for the current IO */
- GPIOx->PUPDR &= ~(GPIO_PUPDR_PUPDR0 << (position * 2));
+ /* Configure the default value for IO Speed */
+ GPIOx->OSPEEDR &= ~(GPIO_OSPEEDER_OSPEEDR0 << (position * 2));
}
}
}
@@ -431,13 +431,13 @@ void HAL_GPIO_TogglePin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
/* Check the parameters */
assert_param(IS_GPIO_PIN(GPIO_Pin));
- if ((GPIOx->ODR & GPIO_Pin) == GPIO_Pin)
+ if ((GPIOx->ODR & GPIO_Pin) != 0X00u)
{
GPIOx->BSRR = (uint32_t)GPIO_Pin << GPIO_NUMBER;
}
else
{
- GPIOx->BSRR = GPIO_Pin;
+ GPIOx->BSRR = (uint32_t)GPIO_Pin;
}
}
@@ -467,10 +467,11 @@ HAL_StatusTypeDef HAL_GPIO_LockPin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
GPIOx->LCKR = GPIO_Pin;
/* Set LCKx bit(s): LCKK='1' + LCK[15-0] */
GPIOx->LCKR = tmp;
- /* Read LCKK bit*/
+ /* Read LCKR register. This read is mandatory to complete key lock sequence */
tmp = GPIOx->LCKR;
- if((GPIOx->LCKR & GPIO_LCKR_LCKK) != RESET)
+ /* Read again in order to confirm lock is active */
+ if((GPIOx->LCKR & GPIO_LCKR_LCKK) != RESET)
{
return HAL_OK;
}
diff --git a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_IAR/Boot/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_i2c.c b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_IAR/Boot/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_i2c.c
index 775bff23..ef049ec4 100644
--- a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_IAR/Boot/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_i2c.c
+++ b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_IAR/Boot/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_i2c.c
@@ -223,12 +223,12 @@
*** Callback registration ***
=============================================
-
+ [..]
The compilation flag USE_HAL_I2C_REGISTER_CALLBACKS when set to 1
allows the user to configure dynamically the driver callbacks.
Use Functions @ref HAL_I2C_RegisterCallback() or @ref HAL_I2C_RegisterAddrCallback()
to register an interrupt callback.
-
+ [..]
Function @ref HAL_I2C_RegisterCallback() allows to register following callbacks:
(+) MasterTxCpltCallback : callback for Master transmission end of transfer.
(+) MasterRxCpltCallback : callback for Master reception end of transfer.
@@ -243,9 +243,9 @@
(+) MspDeInitCallback : callback for Msp DeInit.
This function takes as parameters the HAL peripheral handle, the Callback ID
and a pointer to the user callback function.
-
+ [..]
For specific callback AddrCallback use dedicated register callbacks : @ref HAL_I2C_RegisterAddrCallback().
-
+ [..]
Use function @ref HAL_I2C_UnRegisterCallback to reset a callback to the default
weak function.
@ref HAL_I2C_UnRegisterCallback takes as parameters the HAL peripheral handle,
@@ -262,9 +262,9 @@
(+) AbortCpltCallback : callback for abort completion process.
(+) MspInitCallback : callback for Msp Init.
(+) MspDeInitCallback : callback for Msp DeInit.
-
+ [..]
For callback AddrCallback use dedicated register callbacks : @ref HAL_I2C_UnRegisterAddrCallback().
-
+ [..]
By default, after the @ref HAL_I2C_Init() and when the state is @ref HAL_I2C_STATE_RESET
all callbacks are set to the corresponding weak functions:
examples @ref HAL_I2C_MasterTxCpltCallback(), @ref HAL_I2C_MasterRxCpltCallback().
@@ -273,7 +273,7 @@
these callbacks are null (not registered beforehand).
If MspInit or MspDeInit are not null, the @ref HAL_I2C_Init()/ @ref HAL_I2C_DeInit()
keep and use the user MspInit/MspDeInit callbacks (registered beforehand) whatever the state.
-
+ [..]
Callbacks can be registered/unregistered in @ref HAL_I2C_STATE_READY state only.
Exception done MspInit/MspDeInit functions that can be registered/unregistered
in @ref HAL_I2C_STATE_READY or @ref HAL_I2C_STATE_RESET state,
@@ -281,7 +281,7 @@
Then, the user first registers the MspInit/MspDeInit user callbacks
using @ref HAL_I2C_RegisterCallback() before calling @ref HAL_I2C_DeInit()
or @ref HAL_I2C_Init() function.
-
+ [..]
When the compilation flag USE_HAL_I2C_REGISTER_CALLBACKS is set to 0 or
not defined, the callback registration feature is not available and all callbacks
are set to the corresponding weak functions.
@@ -4737,6 +4737,13 @@ static HAL_StatusTypeDef I2C_Slave_ISR_IT(struct __I2C_HandleTypeDef *hi2c, uint
/* Process locked */
__HAL_LOCK(hi2c);
+ /* Check if STOPF is set */
+ if ((I2C_CHECK_FLAG(tmpITFlags, I2C_FLAG_STOPF) != RESET) && (I2C_CHECK_IT_SOURCE(ITSources, I2C_IT_STOPI) != RESET))
+ {
+ /* Call I2C Slave complete process */
+ I2C_ITSlaveCplt(hi2c, tmpITFlags);
+ }
+
if ((I2C_CHECK_FLAG(tmpITFlags, I2C_FLAG_AF) != RESET) && (I2C_CHECK_IT_SOURCE(ITSources, I2C_IT_NACKI) != RESET))
{
/* Check that I2C transfer finished */
@@ -4788,9 +4795,6 @@ static HAL_StatusTypeDef I2C_Slave_ISR_IT(struct __I2C_HandleTypeDef *hi2c, uint
{
if (hi2c->XferCount > 0U)
{
- /* Remove RXNE flag on temporary variable as read done */
- tmpITFlags &= ~I2C_FLAG_RXNE;
-
/* Read data from RXDR */
*hi2c->pBuffPtr = (uint8_t)hi2c->Instance->RXDR;
@@ -4844,13 +4848,6 @@ static HAL_StatusTypeDef I2C_Slave_ISR_IT(struct __I2C_HandleTypeDef *hi2c, uint
/* Nothing to do */
}
- /* Check if STOPF is set */
- if ((I2C_CHECK_FLAG(tmpITFlags, I2C_FLAG_STOPF) != RESET) && (I2C_CHECK_IT_SOURCE(ITSources, I2C_IT_STOPI) != RESET))
- {
- /* Call I2C Slave complete process */
- I2C_ITSlaveCplt(hi2c, tmpITFlags);
- }
-
/* Process Unlocked */
__HAL_UNLOCK(hi2c);
@@ -5008,6 +5005,13 @@ static HAL_StatusTypeDef I2C_Slave_ISR_DMA(struct __I2C_HandleTypeDef *hi2c, uin
/* Process locked */
__HAL_LOCK(hi2c);
+ /* Check if STOPF is set */
+ if ((I2C_CHECK_FLAG(ITFlags, I2C_FLAG_STOPF) != RESET) && (I2C_CHECK_IT_SOURCE(ITSources, I2C_IT_STOPI) != RESET))
+ {
+ /* Call I2C Slave complete process */
+ I2C_ITSlaveCplt(hi2c, ITFlags);
+ }
+
if ((I2C_CHECK_FLAG(ITFlags, I2C_FLAG_AF) != RESET) && (I2C_CHECK_IT_SOURCE(ITSources, I2C_IT_NACKI) != RESET))
{
/* Check that I2C transfer finished */
@@ -5092,11 +5096,6 @@ static HAL_StatusTypeDef I2C_Slave_ISR_DMA(struct __I2C_HandleTypeDef *hi2c, uin
{
I2C_ITAddrCplt(hi2c, ITFlags);
}
- else if ((I2C_CHECK_FLAG(ITFlags, I2C_FLAG_STOPF) != RESET) && (I2C_CHECK_IT_SOURCE(ITSources, I2C_IT_STOPI) != RESET))
- {
- /* Call I2C Slave complete process */
- I2C_ITSlaveCplt(hi2c, ITFlags);
- }
else
{
/* Nothing to do */
diff --git a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_IAR/Boot/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_pcd.c b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_IAR/Boot/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_pcd.c
index 2b4a5eff..ea532df6 100644
--- a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_IAR/Boot/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_pcd.c
+++ b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_IAR/Boot/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_pcd.c
@@ -122,6 +122,7 @@ static HAL_StatusTypeDef PCD_EP_OutSetupPacket_int(PCD_HandleTypeDef *hpcd, uint
*/
HAL_StatusTypeDef HAL_PCD_Init(PCD_HandleTypeDef *hpcd)
{
+ USB_OTG_GlobalTypeDef *USBx;
uint8_t i;
/* Check the PCD handle allocation */
@@ -133,6 +134,8 @@ HAL_StatusTypeDef HAL_PCD_Init(PCD_HandleTypeDef *hpcd)
/* Check the parameters */
assert_param(IS_PCD_ALL_INSTANCE(hpcd->Instance));
+ USBx = hpcd->Instance;
+
if (hpcd->State == HAL_PCD_STATE_RESET)
{
/* Allocate lock resource and initialize it */
@@ -166,6 +169,12 @@ HAL_StatusTypeDef HAL_PCD_Init(PCD_HandleTypeDef *hpcd)
hpcd->State = HAL_PCD_STATE_BUSY;
+ /* Disable DMA mode for FS instance */
+ if ((USBx->CID & (0x1U << 8)) == 0U)
+ {
+ hpcd->Init.dma_enable = 0U;
+ }
+
/* Disable the Interrupts */
__HAL_PCD_DISABLE(hpcd);
@@ -943,7 +952,7 @@ void HAL_PCD_IRQHandler(PCD_HandleTypeDef *hpcd)
{
USB_OTG_GlobalTypeDef *USBx = hpcd->Instance;
uint32_t USBx_BASE = (uint32_t)USBx;
- uint32_t i, ep_intr, epint, epnum = 0U;
+ uint32_t i, ep_intr, epint, epnum;
uint32_t fifoemptymsk, temp;
USB_OTG_EPTypeDef *ep;
@@ -962,6 +971,38 @@ void HAL_PCD_IRQHandler(PCD_HandleTypeDef *hpcd)
__HAL_PCD_CLEAR_FLAG(hpcd, USB_OTG_GINTSTS_MMIS);
}
+ /* Handle RxQLevel Interrupt */
+ if (__HAL_PCD_GET_FLAG(hpcd, USB_OTG_GINTSTS_RXFLVL))
+ {
+ USB_MASK_INTERRUPT(hpcd->Instance, USB_OTG_GINTSTS_RXFLVL);
+
+ temp = USBx->GRXSTSP;
+
+ ep = &hpcd->OUT_ep[temp & USB_OTG_GRXSTSP_EPNUM];
+
+ if (((temp & USB_OTG_GRXSTSP_PKTSTS) >> 17) == STS_DATA_UPDT)
+ {
+ if ((temp & USB_OTG_GRXSTSP_BCNT) != 0U)
+ {
+ (void)USB_ReadPacket(USBx, ep->xfer_buff,
+ (uint16_t)((temp & USB_OTG_GRXSTSP_BCNT) >> 4));
+
+ ep->xfer_buff += (temp & USB_OTG_GRXSTSP_BCNT) >> 4;
+ ep->xfer_count += (temp & USB_OTG_GRXSTSP_BCNT) >> 4;
+ }
+ }
+ else if (((temp & USB_OTG_GRXSTSP_PKTSTS) >> 17) == STS_SETUP_UPDT)
+ {
+ (void)USB_ReadPacket(USBx, (uint8_t *)hpcd->Setup, 8U);
+ ep->xfer_count += (temp & USB_OTG_GRXSTSP_BCNT) >> 4;
+ }
+ else
+ {
+ /* ... */
+ }
+ USB_UNMASK_INTERRUPT(hpcd->Instance, USB_OTG_GINTSTS_RXFLVL);
+ }
+
if (__HAL_PCD_GET_FLAG(hpcd, USB_OTG_GINTSTS_OEPINT))
{
epnum = 0U;
@@ -983,9 +1024,9 @@ void HAL_PCD_IRQHandler(PCD_HandleTypeDef *hpcd)
if ((epint & USB_OTG_DOEPINT_STUP) == USB_OTG_DOEPINT_STUP)
{
+ CLEAR_OUT_EP_INTR(epnum, USB_OTG_DOEPINT_STUP);
/* Class B setup phase done for previous decoded setup */
(void)PCD_EP_OutSetupPacket_int(hpcd, epnum);
- CLEAR_OUT_EP_INTR(epnum, USB_OTG_DOEPINT_STUP);
}
if ((epint & USB_OTG_DOEPINT_OTEPDIS) == USB_OTG_DOEPINT_OTEPDIS)
@@ -996,10 +1037,6 @@ void HAL_PCD_IRQHandler(PCD_HandleTypeDef *hpcd)
/* Clear Status Phase Received interrupt */
if ((epint & USB_OTG_DOEPINT_OTEPSPR) == USB_OTG_DOEPINT_OTEPSPR)
{
- if (hpcd->Init.dma_enable == 1U)
- {
- (void)USB_EP0_OutStart(hpcd->Instance, 1U, (uint8_t *)hpcd->Setup);
- }
CLEAR_OUT_EP_INTR(epnum, USB_OTG_DOEPINT_OTEPSPR);
}
@@ -1037,16 +1074,7 @@ void HAL_PCD_IRQHandler(PCD_HandleTypeDef *hpcd)
if (hpcd->Init.dma_enable == 1U)
{
hpcd->IN_ep[epnum].xfer_buff += hpcd->IN_ep[epnum].maxpacket;
- }
-#if (USE_HAL_PCD_REGISTER_CALLBACKS == 1U)
- hpcd->DataInStageCallback(hpcd, (uint8_t)epnum);
-#else
- HAL_PCD_DataInStageCallback(hpcd, (uint8_t)epnum);
-#endif /* USE_HAL_PCD_REGISTER_CALLBACKS */
-
- if (hpcd->Init.dma_enable == 1U)
- {
/* this is ZLP, so prepare EP0 for next setup */
if ((epnum == 0U) && (hpcd->IN_ep[epnum].xfer_len == 0U))
{
@@ -1054,6 +1082,12 @@ void HAL_PCD_IRQHandler(PCD_HandleTypeDef *hpcd)
(void)USB_EP0_OutStart(hpcd->Instance, 1U, (uint8_t *)hpcd->Setup);
}
}
+
+#if (USE_HAL_PCD_REGISTER_CALLBACKS == 1U)
+ hpcd->DataInStageCallback(hpcd, (uint8_t)epnum);
+#else
+ HAL_PCD_DataInStageCallback(hpcd, (uint8_t)epnum);
+#endif /* USE_HAL_PCD_REGISTER_CALLBACKS */
}
if ((epint & USB_OTG_DIEPINT_TOC) == USB_OTG_DIEPINT_TOC)
{
@@ -1159,8 +1193,10 @@ void HAL_PCD_IRQHandler(PCD_HandleTypeDef *hpcd)
{
USBx_INEP(i)->DIEPINT = 0xFB7FU;
USBx_INEP(i)->DIEPCTL &= ~USB_OTG_DIEPCTL_STALL;
+ USBx_INEP(i)->DIEPCTL |= USB_OTG_DIEPCTL_SNAK;
USBx_OUTEP(i)->DOEPINT = 0xFB7FU;
USBx_OUTEP(i)->DOEPCTL &= ~USB_OTG_DOEPCTL_STALL;
+ USBx_OUTEP(i)->DOEPCTL |= USB_OTG_DOEPCTL_SNAK;
}
USBx_DEVICE->DAINTMSK |= 0x10001U;
@@ -1217,38 +1253,6 @@ void HAL_PCD_IRQHandler(PCD_HandleTypeDef *hpcd)
__HAL_PCD_CLEAR_FLAG(hpcd, USB_OTG_GINTSTS_ENUMDNE);
}
- /* Handle RxQLevel Interrupt */
- if (__HAL_PCD_GET_FLAG(hpcd, USB_OTG_GINTSTS_RXFLVL))
- {
- USB_MASK_INTERRUPT(hpcd->Instance, USB_OTG_GINTSTS_RXFLVL);
-
- temp = USBx->GRXSTSP;
-
- ep = &hpcd->OUT_ep[temp & USB_OTG_GRXSTSP_EPNUM];
-
- if (((temp & USB_OTG_GRXSTSP_PKTSTS) >> 17) == STS_DATA_UPDT)
- {
- if ((temp & USB_OTG_GRXSTSP_BCNT) != 0U)
- {
- (void)USB_ReadPacket(USBx, ep->xfer_buff,
- (uint16_t)((temp & USB_OTG_GRXSTSP_BCNT) >> 4));
-
- ep->xfer_buff += (temp & USB_OTG_GRXSTSP_BCNT) >> 4;
- ep->xfer_count += (temp & USB_OTG_GRXSTSP_BCNT) >> 4;
- }
- }
- else if (((temp & USB_OTG_GRXSTSP_PKTSTS) >> 17) == STS_SETUP_UPDT)
- {
- (void)USB_ReadPacket(USBx, (uint8_t *)hpcd->Setup, 8U);
- ep->xfer_count += (temp & USB_OTG_GRXSTSP_BCNT) >> 4;
- }
- else
- {
- /* ... */
- }
- USB_UNMASK_INTERRUPT(hpcd->Instance, USB_OTG_GINTSTS_RXFLVL);
- }
-
/* Handle SOF Interrupt */
if (__HAL_PCD_GET_FLAG(hpcd, USB_OTG_GINTSTS_SOF))
{
@@ -1264,6 +1268,10 @@ void HAL_PCD_IRQHandler(PCD_HandleTypeDef *hpcd)
/* Handle Incomplete ISO IN Interrupt */
if (__HAL_PCD_GET_FLAG(hpcd, USB_OTG_GINTSTS_IISOIXFR))
{
+ /* Keep application checking the corresponding Iso IN endpoint
+ causing the incomplete Interrupt */
+ epnum = 0U;
+
#if (USE_HAL_PCD_REGISTER_CALLBACKS == 1U)
hpcd->ISOINIncompleteCallback(hpcd, (uint8_t)epnum);
#else
@@ -1276,6 +1284,10 @@ void HAL_PCD_IRQHandler(PCD_HandleTypeDef *hpcd)
/* Handle Incomplete ISO OUT Interrupt */
if (__HAL_PCD_GET_FLAG(hpcd, USB_OTG_GINTSTS_PXFR_INCOMPISOOUT))
{
+ /* Keep application checking the corresponding Iso OUT endpoint
+ causing the incomplete Interrupt */
+ epnum = 0U;
+
#if (USE_HAL_PCD_REGISTER_CALLBACKS == 1U)
hpcd->ISOOUTIncompleteCallback(hpcd, (uint8_t)epnum);
#else
@@ -1955,16 +1967,6 @@ static HAL_StatusTypeDef PCD_EP_OutXfrComplete_int(PCD_HandleTypeDef *hpcd, uint
{
CLEAR_OUT_EP_INTR(epnum, USB_OTG_DOEPINT_STPKTRX);
}
-
- /* Inform the upper layer that a setup packet is available */
-#if (USE_HAL_PCD_REGISTER_CALLBACKS == 1U)
- hpcd->SetupStageCallback(hpcd);
-#else
- HAL_PCD_SetupStageCallback(hpcd);
-#endif /* USE_HAL_PCD_REGISTER_CALLBACKS */
-
- (void)USB_EP0_OutStart(hpcd->Instance, 1U, (uint8_t *)hpcd->Setup);
- CLEAR_OUT_EP_INTR(epnum, USB_OTG_DOEPINT_STUP);
}
else if ((DoepintReg & USB_OTG_DOEPINT_OTEPSPR) == USB_OTG_DOEPINT_OTEPSPR) /* Class E */
{
@@ -1987,17 +1989,16 @@ static HAL_StatusTypeDef PCD_EP_OutXfrComplete_int(PCD_HandleTypeDef *hpcd, uint
hpcd->OUT_ep[epnum].xfer_buff += hpcd->OUT_ep[epnum].maxpacket;
-#if (USE_HAL_PCD_REGISTER_CALLBACKS == 1U)
- hpcd->DataOutStageCallback(hpcd, (uint8_t)epnum);
-#else
- HAL_PCD_DataOutStageCallback(hpcd, (uint8_t)epnum);
-#endif /* USE_HAL_PCD_REGISTER_CALLBACKS */
-
if ((epnum == 0U) && (hpcd->OUT_ep[epnum].xfer_len == 0U))
{
/* this is ZLP, so prepare EP0 for next setup */
(void)USB_EP0_OutStart(hpcd->Instance, 1U, (uint8_t *)hpcd->Setup);
}
+#if (USE_HAL_PCD_REGISTER_CALLBACKS == 1U)
+ hpcd->DataOutStageCallback(hpcd, (uint8_t)epnum);
+#else
+ HAL_PCD_DataOutStageCallback(hpcd, (uint8_t)epnum);
+#endif /* USE_HAL_PCD_REGISTER_CALLBACKS */
}
}
else
@@ -2030,6 +2031,12 @@ static HAL_StatusTypeDef PCD_EP_OutXfrComplete_int(PCD_HandleTypeDef *hpcd, uint
}
else
{
+ if ((epnum == 0U) && (hpcd->OUT_ep[epnum].xfer_len == 0U))
+ {
+ /* this is ZLP, so prepare EP0 for next setup */
+ (void)USB_EP0_OutStart(hpcd->Instance, 0U, (uint8_t *)hpcd->Setup);
+ }
+
#if (USE_HAL_PCD_REGISTER_CALLBACKS == 1U)
hpcd->DataOutStageCallback(hpcd, (uint8_t)epnum);
#else
@@ -2055,22 +2062,10 @@ static HAL_StatusTypeDef PCD_EP_OutSetupPacket_int(PCD_HandleTypeDef *hpcd, uint
uint32_t gSNPSiD = *(__IO uint32_t *)(&USBx->CID + 0x1U);
uint32_t DoepintReg = USBx_OUTEP(epnum)->DOEPINT;
- if (hpcd->Init.dma_enable == 1U)
+ if ((gSNPSiD > USB_OTG_CORE_ID_300A) &&
+ ((DoepintReg & USB_OTG_DOEPINT_STPKTRX) == USB_OTG_DOEPINT_STPKTRX))
{
- /* StupPktRcvd = 1 pending setup packet int */
- if ((gSNPSiD > USB_OTG_CORE_ID_300A) &&
- ((DoepintReg & USB_OTG_DOEPINT_STPKTRX) == USB_OTG_DOEPINT_STPKTRX))
- {
- CLEAR_OUT_EP_INTR(epnum, USB_OTG_DOEPINT_STPKTRX);
- }
- }
- else
- {
- if ((gSNPSiD == USB_OTG_CORE_ID_310A) &&
- ((DoepintReg & USB_OTG_DOEPINT_STPKTRX) == USB_OTG_DOEPINT_STPKTRX))
- {
- CLEAR_OUT_EP_INTR(epnum, USB_OTG_DOEPINT_STPKTRX);
- }
+ CLEAR_OUT_EP_INTR(epnum, USB_OTG_DOEPINT_STPKTRX);
}
/* Inform the upper layer that a setup packet is available */
diff --git a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_IAR/Boot/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_rcc.c b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_IAR/Boot/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_rcc.c
index bf33cff4..d63a6f4e 100644
--- a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_IAR/Boot/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_rcc.c
+++ b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_IAR/Boot/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_rcc.c
@@ -317,7 +317,7 @@ HAL_StatusTypeDef HAL_RCC_DeInit(void)
SystemCoreClock = HSI_VALUE;
/* Adapt Systick interrupt period */
- if(HAL_InitTick(TICK_INT_PRIORITY) != HAL_OK)
+ if (HAL_InitTick(uwTickPrio) != HAL_OK)
{
return HAL_ERROR;
}
@@ -344,10 +344,11 @@ HAL_StatusTypeDef HAL_RCC_DeInit(void)
HAL_StatusTypeDef HAL_RCC_OscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct)
{
uint32_t tickstart;
+ uint32_t pll_config;
FlagStatus pwrclkchanged = RESET;
/* Check Null pointer */
- if(RCC_OscInitStruct == NULL)
+ if (RCC_OscInitStruct == NULL)
{
return HAL_ERROR;
}
@@ -356,15 +357,15 @@ HAL_StatusTypeDef HAL_RCC_OscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct)
assert_param(IS_RCC_OSCILLATORTYPE(RCC_OscInitStruct->OscillatorType));
/*------------------------------- HSE Configuration ------------------------*/
- if(((RCC_OscInitStruct->OscillatorType) & RCC_OSCILLATORTYPE_HSE) == RCC_OSCILLATORTYPE_HSE)
+ if (((RCC_OscInitStruct->OscillatorType) & RCC_OSCILLATORTYPE_HSE) == RCC_OSCILLATORTYPE_HSE)
{
/* Check the parameters */
assert_param(IS_RCC_HSE(RCC_OscInitStruct->HSEState));
/* When the HSE is used as system clock or clock source for PLL, It can not be disabled */
- if((__HAL_RCC_GET_SYSCLK_SOURCE() == RCC_SYSCLKSOURCE_STATUS_HSE)
- || ((__HAL_RCC_GET_SYSCLK_SOURCE() == RCC_SYSCLKSOURCE_STATUS_PLLCLK) && ((RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC) == RCC_PLLCFGR_PLLSRC_HSE)))
+ if ((__HAL_RCC_GET_SYSCLK_SOURCE() == RCC_SYSCLKSOURCE_STATUS_HSE)
+ || ((__HAL_RCC_GET_SYSCLK_SOURCE() == RCC_SYSCLKSOURCE_STATUS_PLLCLK) && ((RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC) == RCC_PLLCFGR_PLLSRC_HSE)))
{
- if((__HAL_RCC_GET_FLAG(RCC_FLAG_HSERDY) != RESET) && (RCC_OscInitStruct->HSEState == RCC_HSE_OFF))
+ if ((__HAL_RCC_GET_FLAG(RCC_FLAG_HSERDY) != RESET) && (RCC_OscInitStruct->HSEState == RCC_HSE_OFF))
{
return HAL_ERROR;
}
@@ -375,15 +376,15 @@ HAL_StatusTypeDef HAL_RCC_OscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct)
__HAL_RCC_HSE_CONFIG(RCC_OscInitStruct->HSEState);
/* Check the HSE State */
- if(RCC_OscInitStruct->HSEState != RCC_HSE_OFF)
+ if (RCC_OscInitStruct->HSEState != RCC_HSE_OFF)
{
/* Get Start Tick*/
tickstart = HAL_GetTick();
/* Wait till HSE is ready */
- while(__HAL_RCC_GET_FLAG(RCC_FLAG_HSERDY) == RESET)
+ while (__HAL_RCC_GET_FLAG(RCC_FLAG_HSERDY) == RESET)
{
- if((HAL_GetTick() - tickstart ) > HSE_TIMEOUT_VALUE)
+ if ((HAL_GetTick() - tickstart) > HSE_TIMEOUT_VALUE)
{
return HAL_TIMEOUT;
}
@@ -395,9 +396,9 @@ HAL_StatusTypeDef HAL_RCC_OscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct)
tickstart = HAL_GetTick();
/* Wait till HSE is bypassed or disabled */
- while(__HAL_RCC_GET_FLAG(RCC_FLAG_HSERDY) != RESET)
+ while (__HAL_RCC_GET_FLAG(RCC_FLAG_HSERDY) != RESET)
{
- if((HAL_GetTick() - tickstart ) > HSE_TIMEOUT_VALUE)
+ if ((HAL_GetTick() - tickstart) > HSE_TIMEOUT_VALUE)
{
return HAL_TIMEOUT;
}
@@ -406,18 +407,18 @@ HAL_StatusTypeDef HAL_RCC_OscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct)
}
}
/*----------------------------- HSI Configuration --------------------------*/
- if(((RCC_OscInitStruct->OscillatorType) & RCC_OSCILLATORTYPE_HSI) == RCC_OSCILLATORTYPE_HSI)
+ if (((RCC_OscInitStruct->OscillatorType) & RCC_OSCILLATORTYPE_HSI) == RCC_OSCILLATORTYPE_HSI)
{
/* Check the parameters */
assert_param(IS_RCC_HSI(RCC_OscInitStruct->HSIState));
assert_param(IS_RCC_CALIBRATION_VALUE(RCC_OscInitStruct->HSICalibrationValue));
/* Check if HSI is used as system clock or as PLL source when PLL is selected as system clock */
- if((__HAL_RCC_GET_SYSCLK_SOURCE() == RCC_SYSCLKSOURCE_STATUS_HSI)
- || ((__HAL_RCC_GET_SYSCLK_SOURCE() == RCC_SYSCLKSOURCE_STATUS_PLLCLK) && ((RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC) == RCC_PLLCFGR_PLLSRC_HSI)))
+ if ((__HAL_RCC_GET_SYSCLK_SOURCE() == RCC_SYSCLKSOURCE_STATUS_HSI)
+ || ((__HAL_RCC_GET_SYSCLK_SOURCE() == RCC_SYSCLKSOURCE_STATUS_PLLCLK) && ((RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC) == RCC_PLLCFGR_PLLSRC_HSI)))
{
/* When HSI is used as system clock it will not disabled */
- if((__HAL_RCC_GET_FLAG(RCC_FLAG_HSIRDY) != RESET) && (RCC_OscInitStruct->HSIState != RCC_HSI_ON))
+ if ((__HAL_RCC_GET_FLAG(RCC_FLAG_HSIRDY) != RESET) && (RCC_OscInitStruct->HSIState != RCC_HSI_ON))
{
return HAL_ERROR;
}
@@ -431,7 +432,7 @@ HAL_StatusTypeDef HAL_RCC_OscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct)
else
{
/* Check the HSI State */
- if((RCC_OscInitStruct->HSIState)!= RCC_HSI_OFF)
+ if ((RCC_OscInitStruct->HSIState) != RCC_HSI_OFF)
{
/* Enable the Internal High Speed oscillator (HSI). */
__HAL_RCC_HSI_ENABLE();
@@ -440,9 +441,9 @@ HAL_StatusTypeDef HAL_RCC_OscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct)
tickstart = HAL_GetTick();
/* Wait till HSI is ready */
- while(__HAL_RCC_GET_FLAG(RCC_FLAG_HSIRDY) == RESET)
+ while (__HAL_RCC_GET_FLAG(RCC_FLAG_HSIRDY) == RESET)
{
- if((HAL_GetTick() - tickstart ) > HSI_TIMEOUT_VALUE)
+ if ((HAL_GetTick() - tickstart) > HSI_TIMEOUT_VALUE)
{
return HAL_TIMEOUT;
}
@@ -460,9 +461,9 @@ HAL_StatusTypeDef HAL_RCC_OscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct)
tickstart = HAL_GetTick();
/* Wait till HSI is ready */
- while(__HAL_RCC_GET_FLAG(RCC_FLAG_HSIRDY) != RESET)
+ while (__HAL_RCC_GET_FLAG(RCC_FLAG_HSIRDY) != RESET)
{
- if((HAL_GetTick() - tickstart ) > HSI_TIMEOUT_VALUE)
+ if ((HAL_GetTick() - tickstart) > HSI_TIMEOUT_VALUE)
{
return HAL_TIMEOUT;
}
@@ -471,13 +472,13 @@ HAL_StatusTypeDef HAL_RCC_OscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct)
}
}
/*------------------------------ LSI Configuration -------------------------*/
- if(((RCC_OscInitStruct->OscillatorType) & RCC_OSCILLATORTYPE_LSI) == RCC_OSCILLATORTYPE_LSI)
+ if (((RCC_OscInitStruct->OscillatorType) & RCC_OSCILLATORTYPE_LSI) == RCC_OSCILLATORTYPE_LSI)
{
/* Check the parameters */
assert_param(IS_RCC_LSI(RCC_OscInitStruct->LSIState));
/* Check the LSI State */
- if((RCC_OscInitStruct->LSIState)!= RCC_LSI_OFF)
+ if ((RCC_OscInitStruct->LSIState) != RCC_LSI_OFF)
{
/* Enable the Internal Low Speed oscillator (LSI). */
__HAL_RCC_LSI_ENABLE();
@@ -486,9 +487,9 @@ HAL_StatusTypeDef HAL_RCC_OscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct)
tickstart = HAL_GetTick();
/* Wait till LSI is ready */
- while(__HAL_RCC_GET_FLAG(RCC_FLAG_LSIRDY) == RESET)
+ while (__HAL_RCC_GET_FLAG(RCC_FLAG_LSIRDY) == RESET)
{
- if((HAL_GetTick() - tickstart ) > LSI_TIMEOUT_VALUE)
+ if ((HAL_GetTick() - tickstart) > LSI_TIMEOUT_VALUE)
{
return HAL_TIMEOUT;
}
@@ -503,9 +504,9 @@ HAL_StatusTypeDef HAL_RCC_OscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct)
tickstart = HAL_GetTick();
/* Wait till LSI is ready */
- while(__HAL_RCC_GET_FLAG(RCC_FLAG_LSIRDY) != RESET)
+ while (__HAL_RCC_GET_FLAG(RCC_FLAG_LSIRDY) != RESET)
{
- if((HAL_GetTick() - tickstart ) > LSI_TIMEOUT_VALUE)
+ if ((HAL_GetTick() - tickstart) > LSI_TIMEOUT_VALUE)
{
return HAL_TIMEOUT;
}
@@ -513,21 +514,21 @@ HAL_StatusTypeDef HAL_RCC_OscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct)
}
}
/*------------------------------ LSE Configuration -------------------------*/
- if(((RCC_OscInitStruct->OscillatorType) & RCC_OSCILLATORTYPE_LSE) == RCC_OSCILLATORTYPE_LSE)
+ if (((RCC_OscInitStruct->OscillatorType) & RCC_OSCILLATORTYPE_LSE) == RCC_OSCILLATORTYPE_LSE)
{
/* Check the parameters */
assert_param(IS_RCC_LSE(RCC_OscInitStruct->LSEState));
/* Update LSE configuration in Backup Domain control register */
/* Requires to enable write access to Backup Domain of necessary */
- if(__HAL_RCC_PWR_IS_CLK_DISABLED())
+ if (__HAL_RCC_PWR_IS_CLK_DISABLED())
{
/* Enable Power Clock*/
__HAL_RCC_PWR_CLK_ENABLE();
pwrclkchanged = SET;
}
- if(HAL_IS_BIT_CLR(PWR->CR1, PWR_CR1_DBP))
+ if (HAL_IS_BIT_CLR(PWR->CR1, PWR_CR1_DBP))
{
/* Enable write access to Backup domain */
PWR->CR1 |= PWR_CR1_DBP;
@@ -535,9 +536,9 @@ HAL_StatusTypeDef HAL_RCC_OscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct)
/* Wait for Backup domain Write protection disable */
tickstart = HAL_GetTick();
- while(HAL_IS_BIT_CLR(PWR->CR1, PWR_CR1_DBP))
+ while (HAL_IS_BIT_CLR(PWR->CR1, PWR_CR1_DBP))
{
- if((HAL_GetTick() - tickstart ) > RCC_DBP_TIMEOUT_VALUE)
+ if ((HAL_GetTick() - tickstart) > RCC_DBP_TIMEOUT_VALUE)
{
return HAL_TIMEOUT;
}
@@ -547,15 +548,15 @@ HAL_StatusTypeDef HAL_RCC_OscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct)
/* Set the new LSE configuration -----------------------------------------*/
__HAL_RCC_LSE_CONFIG(RCC_OscInitStruct->LSEState);
/* Check the LSE State */
- if((RCC_OscInitStruct->LSEState) != RCC_LSE_OFF)
+ if ((RCC_OscInitStruct->LSEState) != RCC_LSE_OFF)
{
/* Get Start Tick*/
tickstart = HAL_GetTick();
/* Wait till LSE is ready */
- while(__HAL_RCC_GET_FLAG(RCC_FLAG_LSERDY) == RESET)
+ while (__HAL_RCC_GET_FLAG(RCC_FLAG_LSERDY) == RESET)
{
- if((HAL_GetTick() - tickstart ) > RCC_LSE_TIMEOUT_VALUE)
+ if ((HAL_GetTick() - tickstart) > RCC_LSE_TIMEOUT_VALUE)
{
return HAL_TIMEOUT;
}
@@ -567,9 +568,9 @@ HAL_StatusTypeDef HAL_RCC_OscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct)
tickstart = HAL_GetTick();
/* Wait till LSE is ready */
- while(__HAL_RCC_GET_FLAG(RCC_FLAG_LSERDY) != RESET)
+ while (__HAL_RCC_GET_FLAG(RCC_FLAG_LSERDY) != RESET)
{
- if((HAL_GetTick() - tickstart ) > RCC_LSE_TIMEOUT_VALUE)
+ if ((HAL_GetTick() - tickstart) > RCC_LSE_TIMEOUT_VALUE)
{
return HAL_TIMEOUT;
}
@@ -577,7 +578,7 @@ HAL_StatusTypeDef HAL_RCC_OscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct)
}
/* Restore clock configuration if changed */
- if(pwrclkchanged == SET)
+ if (pwrclkchanged == SET)
{
__HAL_RCC_PWR_CLK_DISABLE();
}
@@ -588,9 +589,9 @@ HAL_StatusTypeDef HAL_RCC_OscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct)
if ((RCC_OscInitStruct->PLL.PLLState) != RCC_PLL_NONE)
{
/* Check if the PLL is used as system clock or not */
- if(__HAL_RCC_GET_SYSCLK_SOURCE() != RCC_SYSCLKSOURCE_STATUS_PLLCLK)
+ if (__HAL_RCC_GET_SYSCLK_SOURCE() != RCC_SYSCLKSOURCE_STATUS_PLLCLK)
{
- if((RCC_OscInitStruct->PLL.PLLState) == RCC_PLL_ON)
+ if ((RCC_OscInitStruct->PLL.PLLState) == RCC_PLL_ON)
{
/* Check the parameters */
assert_param(IS_RCC_PLLSOURCE(RCC_OscInitStruct->PLL.PLLSource));
@@ -609,9 +610,9 @@ HAL_StatusTypeDef HAL_RCC_OscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct)
tickstart = HAL_GetTick();
/* Wait till PLL is ready */
- while(__HAL_RCC_GET_FLAG(RCC_FLAG_PLLRDY) != RESET)
+ while (__HAL_RCC_GET_FLAG(RCC_FLAG_PLLRDY) != RESET)
{
- if((HAL_GetTick() - tickstart ) > PLL_TIMEOUT_VALUE)
+ if ((HAL_GetTick() - tickstart) > PLL_TIMEOUT_VALUE)
{
return HAL_TIMEOUT;
}
@@ -640,9 +641,9 @@ HAL_StatusTypeDef HAL_RCC_OscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct)
tickstart = HAL_GetTick();
/* Wait till PLL is ready */
- while(__HAL_RCC_GET_FLAG(RCC_FLAG_PLLRDY) == RESET)
+ while (__HAL_RCC_GET_FLAG(RCC_FLAG_PLLRDY) == RESET)
{
- if((HAL_GetTick() - tickstart ) > PLL_TIMEOUT_VALUE)
+ if ((HAL_GetTick() - tickstart) > PLL_TIMEOUT_VALUE)
{
return HAL_TIMEOUT;
}
@@ -657,9 +658,9 @@ HAL_StatusTypeDef HAL_RCC_OscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct)
tickstart = HAL_GetTick();
/* Wait till PLL is ready */
- while(__HAL_RCC_GET_FLAG(RCC_FLAG_PLLRDY) != RESET)
+ while (__HAL_RCC_GET_FLAG(RCC_FLAG_PLLRDY) != RESET)
{
- if((HAL_GetTick() - tickstart ) > PLL_TIMEOUT_VALUE)
+ if ((HAL_GetTick() - tickstart) > PLL_TIMEOUT_VALUE)
{
return HAL_TIMEOUT;
}
@@ -668,7 +669,27 @@ HAL_StatusTypeDef HAL_RCC_OscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct)
}
else
{
- return HAL_ERROR;
+ /* Do not return HAL_ERROR if request repeats the current configuration */
+ pll_config = RCC->PLLCFGR;
+#if defined (RCC_PLLCFGR_PLLR)
+ if (((RCC_OscInitStruct->PLL.PLLState) == RCC_PLL_OFF) ||
+ (READ_BIT(pll_config, RCC_PLLCFGR_PLLSRC) != RCC_OscInitStruct->PLL.PLLSource) ||
+ (READ_BIT(pll_config, RCC_PLLCFGR_PLLM) != RCC_OscInitStruct->PLL.PLLM) ||
+ (READ_BIT(pll_config, RCC_PLLCFGR_PLLN) != (RCC_OscInitStruct->PLL.PLLN << RCC_PLLCFGR_PLLN_Pos)) ||
+ (READ_BIT(pll_config, RCC_PLLCFGR_PLLP) != ((((RCC_OscInitStruct->PLL.PLLP) >> 1U) - 1U) << RCC_PLLCFGR_PLLP_Pos)) ||
+ (READ_BIT(pll_config, RCC_PLLCFGR_PLLQ) != (RCC_OscInitStruct->PLL.PLLQ << RCC_PLLCFGR_PLLQ_Pos)) ||
+ (READ_BIT(pll_config, RCC_PLLCFGR_PLLR) != (RCC_OscInitStruct->PLL.PLLR << RCC_PLLCFGR_PLLR_Pos)))
+#else
+ if (((RCC_OscInitStruct->PLL.PLLState) == RCC_PLL_OFF) ||
+ (READ_BIT(pll_config, RCC_PLLCFGR_PLLSRC) != RCC_OscInitStruct->PLL.PLLSource) ||
+ (READ_BIT(pll_config, RCC_PLLCFGR_PLLM) != RCC_OscInitStruct->PLL.PLLM) ||
+ (READ_BIT(pll_config, RCC_PLLCFGR_PLLN) != (RCC_OscInitStruct->PLL.PLLN << RCC_PLLCFGR_PLLN_Pos)) ||
+ (READ_BIT(pll_config, RCC_PLLCFGR_PLLP) != ((((RCC_OscInitStruct->PLL.PLLP) >> 1U) - 1U) << RCC_PLLCFGR_PLLP_Pos)) ||
+ (READ_BIT(pll_config, RCC_PLLCFGR_PLLQ) != (RCC_OscInitStruct->PLL.PLLQ << RCC_PLLCFGR_PLLQ_Pos)))
+#endif
+ {
+ return HAL_ERROR;
+ }
}
}
return HAL_OK;
@@ -705,7 +726,7 @@ HAL_StatusTypeDef HAL_RCC_ClockConfig(RCC_ClkInitTypeDef *RCC_ClkInitStruct, ui
uint32_t tickstart = 0;
/* Check Null pointer */
- if(RCC_ClkInitStruct == NULL)
+ if (RCC_ClkInitStruct == NULL)
{
return HAL_ERROR;
}
@@ -719,30 +740,30 @@ HAL_StatusTypeDef HAL_RCC_ClockConfig(RCC_ClkInitTypeDef *RCC_ClkInitStruct, ui
(HCLK) and the supply voltage of the device. */
/* Increasing the CPU frequency */
- if(FLatency > __HAL_FLASH_GET_LATENCY())
+ if (FLatency > __HAL_FLASH_GET_LATENCY())
{
/* Program the new number of wait states to the LATENCY bits in the FLASH_ACR register */
__HAL_FLASH_SET_LATENCY(FLatency);
/* Check that the new number of wait states is taken into account to access the Flash
memory by reading the FLASH_ACR register */
- if(__HAL_FLASH_GET_LATENCY() != FLatency)
+ if (__HAL_FLASH_GET_LATENCY() != FLatency)
{
return HAL_ERROR;
}
}
/*-------------------------- HCLK Configuration --------------------------*/
- if(((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_HCLK) == RCC_CLOCKTYPE_HCLK)
+ if (((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_HCLK) == RCC_CLOCKTYPE_HCLK)
{
/* Set the highest APBx dividers in order to ensure that we do not go through
a non-spec phase whatever we decrease or increase HCLK. */
- if(((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_PCLK1) == RCC_CLOCKTYPE_PCLK1)
+ if (((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_PCLK1) == RCC_CLOCKTYPE_PCLK1)
{
MODIFY_REG(RCC->CFGR, RCC_CFGR_PPRE1, RCC_HCLK_DIV16);
}
- if(((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_PCLK2) == RCC_CLOCKTYPE_PCLK2)
+ if (((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_PCLK2) == RCC_CLOCKTYPE_PCLK2)
{
MODIFY_REG(RCC->CFGR, RCC_CFGR_PPRE2, (RCC_HCLK_DIV16 << 3));
}
@@ -753,24 +774,24 @@ HAL_StatusTypeDef HAL_RCC_ClockConfig(RCC_ClkInitTypeDef *RCC_ClkInitStruct, ui
}
/*------------------------- SYSCLK Configuration ---------------------------*/
- if(((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_SYSCLK) == RCC_CLOCKTYPE_SYSCLK)
+ if (((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_SYSCLK) == RCC_CLOCKTYPE_SYSCLK)
{
assert_param(IS_RCC_SYSCLKSOURCE(RCC_ClkInitStruct->SYSCLKSource));
/* HSE is selected as System Clock Source */
- if(RCC_ClkInitStruct->SYSCLKSource == RCC_SYSCLKSOURCE_HSE)
+ if (RCC_ClkInitStruct->SYSCLKSource == RCC_SYSCLKSOURCE_HSE)
{
/* Check the HSE ready flag */
- if(__HAL_RCC_GET_FLAG(RCC_FLAG_HSERDY) == RESET)
+ if (__HAL_RCC_GET_FLAG(RCC_FLAG_HSERDY) == RESET)
{
return HAL_ERROR;
}
}
/* PLL is selected as System Clock Source */
- else if(RCC_ClkInitStruct->SYSCLKSource == RCC_SYSCLKSOURCE_PLLCLK)
+ else if (RCC_ClkInitStruct->SYSCLKSource == RCC_SYSCLKSOURCE_PLLCLK)
{
/* Check the PLL ready flag */
- if(__HAL_RCC_GET_FLAG(RCC_FLAG_PLLRDY) == RESET)
+ if (__HAL_RCC_GET_FLAG(RCC_FLAG_PLLRDY) == RESET)
{
return HAL_ERROR;
}
@@ -779,7 +800,7 @@ HAL_StatusTypeDef HAL_RCC_ClockConfig(RCC_ClkInitTypeDef *RCC_ClkInitStruct, ui
else
{
/* Check the HSI ready flag */
- if(__HAL_RCC_GET_FLAG(RCC_FLAG_HSIRDY) == RESET)
+ if (__HAL_RCC_GET_FLAG(RCC_FLAG_HSIRDY) == RESET)
{
return HAL_ERROR;
}
@@ -800,38 +821,38 @@ HAL_StatusTypeDef HAL_RCC_ClockConfig(RCC_ClkInitTypeDef *RCC_ClkInitStruct, ui
}
/* Decreasing the number of wait states because of lower CPU frequency */
- if(FLatency < __HAL_FLASH_GET_LATENCY())
+ if (FLatency < __HAL_FLASH_GET_LATENCY())
{
/* Program the new number of wait states to the LATENCY bits in the FLASH_ACR register */
__HAL_FLASH_SET_LATENCY(FLatency);
/* Check that the new number of wait states is taken into account to access the Flash
memory by reading the FLASH_ACR register */
- if(__HAL_FLASH_GET_LATENCY() != FLatency)
+ if (__HAL_FLASH_GET_LATENCY() != FLatency)
{
return HAL_ERROR;
}
}
/*-------------------------- PCLK1 Configuration ---------------------------*/
- if(((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_PCLK1) == RCC_CLOCKTYPE_PCLK1)
+ if (((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_PCLK1) == RCC_CLOCKTYPE_PCLK1)
{
assert_param(IS_RCC_PCLK(RCC_ClkInitStruct->APB1CLKDivider));
MODIFY_REG(RCC->CFGR, RCC_CFGR_PPRE1, RCC_ClkInitStruct->APB1CLKDivider);
}
/*-------------------------- PCLK2 Configuration ---------------------------*/
- if(((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_PCLK2) == RCC_CLOCKTYPE_PCLK2)
+ if (((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_PCLK2) == RCC_CLOCKTYPE_PCLK2)
{
assert_param(IS_RCC_PCLK(RCC_ClkInitStruct->APB2CLKDivider));
MODIFY_REG(RCC->CFGR, RCC_CFGR_PPRE2, ((RCC_ClkInitStruct->APB2CLKDivider) << 3));
}
/* Update the SystemCoreClock global variable */
- SystemCoreClock = HAL_RCC_GetSysClockFreq() >> AHBPrescTable[(RCC->CFGR & RCC_CFGR_HPRE)>> RCC_CFGR_HPRE_Pos];
+ SystemCoreClock = HAL_RCC_GetSysClockFreq() >> AHBPrescTable[(RCC->CFGR & RCC_CFGR_HPRE) >> RCC_CFGR_HPRE_Pos];
/* Configure the source of time base considering new system clocks settings*/
- HAL_InitTick (TICK_INT_PRIORITY);
+ HAL_InitTick(uwTickPrio);
return HAL_OK;
}
@@ -888,7 +909,7 @@ void HAL_RCC_MCOConfig(uint32_t RCC_MCOx, uint32_t RCC_MCOSource, uint32_t RCC_M
assert_param(IS_RCC_MCO(RCC_MCOx));
assert_param(IS_RCC_MCODIV(RCC_MCODiv));
/* RCC_MCO1 */
- if(RCC_MCOx == RCC_MCO1)
+ if (RCC_MCOx == RCC_MCO1)
{
assert_param(IS_RCC_MCO1SOURCE(RCC_MCOSource));
@@ -990,7 +1011,7 @@ uint32_t HAL_RCC_GetSysClockFreq(void)
case RCC_SYSCLKSOURCE_STATUS_HSI: /* HSI used as system clock source */
{
sysclockfreq = HSI_VALUE;
- break;
+ break;
}
case RCC_SYSCLKSOURCE_STATUS_HSE: /* HSE used as system clock source */
{
@@ -1005,16 +1026,16 @@ uint32_t HAL_RCC_GetSysClockFreq(void)
if (__HAL_RCC_GET_PLL_OSCSOURCE() != RCC_PLLCFGR_PLLSRC_HSI)
{
/* HSE used as PLL clock source */
- pllvco = (uint32_t) ((((uint64_t) HSE_VALUE * ((uint64_t) ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> RCC_PLLCFGR_PLLN_Pos)))) / (uint64_t)pllm);
+ pllvco = (uint32_t)((((uint64_t) HSE_VALUE * ((uint64_t)((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> RCC_PLLCFGR_PLLN_Pos)))) / (uint64_t)pllm);
}
else
{
/* HSI used as PLL clock source */
- pllvco = (uint32_t) ((((uint64_t) HSI_VALUE * ((uint64_t) ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> RCC_PLLCFGR_PLLN_Pos)))) / (uint64_t)pllm);
+ pllvco = (uint32_t)((((uint64_t) HSI_VALUE * ((uint64_t)((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> RCC_PLLCFGR_PLLN_Pos)))) / (uint64_t)pllm);
}
- pllp = ((((RCC->PLLCFGR & RCC_PLLCFGR_PLLP) >> RCC_PLLCFGR_PLLP_Pos) + 1 ) *2);
+ pllp = ((((RCC->PLLCFGR & RCC_PLLCFGR_PLLP) >> RCC_PLLCFGR_PLLP_Pos) + 1) * 2);
- sysclockfreq = pllvco/pllp;
+ sysclockfreq = pllvco / pllp;
break;
}
default:
@@ -1047,7 +1068,7 @@ uint32_t HAL_RCC_GetHCLKFreq(void)
uint32_t HAL_RCC_GetPCLK1Freq(void)
{
/* Get HCLK source and Compute PCLK1 frequency ---------------------------*/
- return (HAL_RCC_GetHCLKFreq() >> APBPrescTable[(RCC->CFGR & RCC_CFGR_PPRE1)>> RCC_CFGR_PPRE1_Pos]);
+ return (HAL_RCC_GetHCLKFreq() >> APBPrescTable[(RCC->CFGR & RCC_CFGR_PPRE1) >> RCC_CFGR_PPRE1_Pos]);
}
/**
@@ -1059,7 +1080,7 @@ uint32_t HAL_RCC_GetPCLK1Freq(void)
uint32_t HAL_RCC_GetPCLK2Freq(void)
{
/* Get HCLK source and Compute PCLK2 frequency ---------------------------*/
- return (HAL_RCC_GetHCLKFreq()>> APBPrescTable[(RCC->CFGR & RCC_CFGR_PPRE2)>> RCC_CFGR_PPRE2_Pos]);
+ return (HAL_RCC_GetHCLKFreq() >> APBPrescTable[(RCC->CFGR & RCC_CFGR_PPRE2) >> RCC_CFGR_PPRE2_Pos]);
}
/**
@@ -1075,11 +1096,11 @@ void HAL_RCC_GetOscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct)
RCC_OscInitStruct->OscillatorType = RCC_OSCILLATORTYPE_HSE | RCC_OSCILLATORTYPE_HSI | RCC_OSCILLATORTYPE_LSE | RCC_OSCILLATORTYPE_LSI;
/* Get the HSE configuration -----------------------------------------------*/
- if((RCC->CR &RCC_CR_HSEBYP) == RCC_CR_HSEBYP)
+ if ((RCC->CR & RCC_CR_HSEBYP) == RCC_CR_HSEBYP)
{
RCC_OscInitStruct->HSEState = RCC_HSE_BYPASS;
}
- else if((RCC->CR &RCC_CR_HSEON) == RCC_CR_HSEON)
+ else if ((RCC->CR & RCC_CR_HSEON) == RCC_CR_HSEON)
{
RCC_OscInitStruct->HSEState = RCC_HSE_ON;
}
@@ -1089,7 +1110,7 @@ void HAL_RCC_GetOscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct)
}
/* Get the HSI configuration -----------------------------------------------*/
- if((RCC->CR &RCC_CR_HSION) == RCC_CR_HSION)
+ if ((RCC->CR & RCC_CR_HSION) == RCC_CR_HSION)
{
RCC_OscInitStruct->HSIState = RCC_HSI_ON;
}
@@ -1098,14 +1119,14 @@ void HAL_RCC_GetOscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct)
RCC_OscInitStruct->HSIState = RCC_HSI_OFF;
}
- RCC_OscInitStruct->HSICalibrationValue = (uint32_t)((RCC->CR &RCC_CR_HSITRIM) >> RCC_CR_HSITRIM_Pos);
+ RCC_OscInitStruct->HSICalibrationValue = (uint32_t)((RCC->CR & RCC_CR_HSITRIM) >> RCC_CR_HSITRIM_Pos);
/* Get the LSE configuration -----------------------------------------------*/
- if((RCC->BDCR &RCC_BDCR_LSEBYP) == RCC_BDCR_LSEBYP)
+ if ((RCC->BDCR & RCC_BDCR_LSEBYP) == RCC_BDCR_LSEBYP)
{
RCC_OscInitStruct->LSEState = RCC_LSE_BYPASS;
}
- else if((RCC->BDCR &RCC_BDCR_LSEON) == RCC_BDCR_LSEON)
+ else if ((RCC->BDCR & RCC_BDCR_LSEON) == RCC_BDCR_LSEON)
{
RCC_OscInitStruct->LSEState = RCC_LSE_ON;
}
@@ -1115,7 +1136,7 @@ void HAL_RCC_GetOscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct)
}
/* Get the LSI configuration -----------------------------------------------*/
- if((RCC->CSR &RCC_CSR_LSION) == RCC_CSR_LSION)
+ if ((RCC->CSR & RCC_CSR_LSION) == RCC_CSR_LSION)
{
RCC_OscInitStruct->LSIState = RCC_LSI_ON;
}
@@ -1125,7 +1146,7 @@ void HAL_RCC_GetOscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct)
}
/* Get the PLL configuration -----------------------------------------------*/
- if((RCC->CR &RCC_CR_PLLON) == RCC_CR_PLLON)
+ if ((RCC->CR & RCC_CR_PLLON) == RCC_CR_PLLON)
{
RCC_OscInitStruct->PLL.PLLState = RCC_PLL_ON;
}
@@ -1180,7 +1201,7 @@ void HAL_RCC_GetClockConfig(RCC_ClkInitTypeDef *RCC_ClkInitStruct, uint32_t *pF
void HAL_RCC_NMI_IRQHandler(void)
{
/* Check RCC CSSF flag */
- if(__HAL_RCC_GET_IT(RCC_IT_CSS))
+ if (__HAL_RCC_GET_IT(RCC_IT_CSS))
{
/* RCC Clock Security System interrupt user callback */
HAL_RCC_CSSCallback();
diff --git a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_IAR/Boot/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_tim.c b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_IAR/Boot/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_tim.c
index c4676923..29de7d5b 100644
--- a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_IAR/Boot/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_tim.c
+++ b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_IAR/Boot/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_tim.c
@@ -98,18 +98,22 @@
*** Callback registration ***
=============================================
+ [..]
The compilation define USE_HAL_TIM_REGISTER_CALLBACKS when set to 1
allows the user to configure dynamically the driver callbacks.
+ [..]
Use Function @ref HAL_TIM_RegisterCallback() to register a callback.
@ref HAL_TIM_RegisterCallback() takes as parameters the HAL peripheral handle,
the Callback ID and a pointer to the user callback function.
+ [..]
Use function @ref HAL_TIM_UnRegisterCallback() to reset a callback to the default
weak function.
@ref HAL_TIM_UnRegisterCallback takes as parameters the HAL peripheral handle,
and the Callback ID.
+ [..]
These functions allow to register/unregister following callbacks:
(+) Base_MspInitCallback : TIM Base Msp Init Callback.
(+) Base_MspDeInitCallback : TIM Base Msp DeInit Callback.
@@ -140,15 +144,18 @@
(+) BreakCallback : TIM Break Callback.
(+) Break2Callback : TIM Break2 Callback.
+ [..]
By default, after the Init and when the state is HAL_TIM_STATE_RESET
all interrupt callbacks are set to the corresponding weak functions:
examples @ref HAL_TIM_TriggerCallback(), @ref HAL_TIM_ErrorCallback().
+ [..]
Exception done for MspInit and MspDeInit functions that are reset to the legacy weak
functionalities in the Init / DeInit only when these callbacks are null
(not registered beforehand). If not, MspInit or MspDeInit are not null, the Init / DeInit
keep and use the user MspInit / MspDeInit callbacks(registered beforehand)
+ [..]
Callbacks can be registered / unregistered in HAL_TIM_STATE_READY state only.
Exception done MspInit / MspDeInit that can be registered / unregistered
in HAL_TIM_STATE_READY or HAL_TIM_STATE_RESET state,
@@ -156,6 +163,7 @@ all interrupt callbacks are set to the corresponding weak functions:
In that case first register the MspInit/MspDeInit user callbacks
using @ref HAL_TIM_RegisterCallback() before calling DeInit or Init function.
+ [..]
When The compilation define USE_HAL_TIM_REGISTER_CALLBACKS is set to 0 or
not defined, the callback registration feature is not available and all callbacks
are set to the corresponding weak functions.
@@ -216,7 +224,7 @@ static void TIM_DMAPeriodElapsedHalfCplt(DMA_HandleTypeDef *hdma);
static void TIM_DMATriggerCplt(DMA_HandleTypeDef *hdma);
static void TIM_DMATriggerHalfCplt(DMA_HandleTypeDef *hdma);
static HAL_StatusTypeDef TIM_SlaveTimer_SetConfig(TIM_HandleTypeDef *htim,
- TIM_SlaveConfigTypeDef *sSlaveConfig);
+ TIM_SlaveConfigTypeDef *sSlaveConfig);
/**
* @}
*/
@@ -227,8 +235,8 @@ static HAL_StatusTypeDef TIM_SlaveTimer_SetConfig(TIM_HandleTypeDef *htim,
*/
/** @defgroup TIM_Exported_Functions_Group1 TIM Time Base functions
- * @brief Time Base functions
- *
+ * @brief Time Base functions
+ *
@verbatim
==============================================================================
##### Time Base functions #####
@@ -482,11 +490,11 @@ HAL_StatusTypeDef HAL_TIM_Base_Start_DMA(TIM_HandleTypeDef *htim, uint32_t *pDat
/* Check the parameters */
assert_param(IS_TIM_DMA_INSTANCE(htim->Instance));
- if ((htim->State == HAL_TIM_STATE_BUSY))
+ if (htim->State == HAL_TIM_STATE_BUSY)
{
return HAL_BUSY;
}
- else if ((htim->State == HAL_TIM_STATE_READY))
+ else if (htim->State == HAL_TIM_STATE_READY)
{
if ((pData == NULL) && (Length > 0U))
{
@@ -559,8 +567,8 @@ HAL_StatusTypeDef HAL_TIM_Base_Stop_DMA(TIM_HandleTypeDef *htim)
*/
/** @defgroup TIM_Exported_Functions_Group2 TIM Output Compare functions
- * @brief TIM Output Compare functions
- *
+ * @brief TIM Output Compare functions
+ *
@verbatim
==============================================================================
##### TIM Output Compare functions #####
@@ -929,16 +937,16 @@ HAL_StatusTypeDef HAL_TIM_OC_Stop_IT(TIM_HandleTypeDef *htim, uint32_t Channel)
*/
HAL_StatusTypeDef HAL_TIM_OC_Start_DMA(TIM_HandleTypeDef *htim, uint32_t Channel, uint32_t *pData, uint16_t Length)
{
- uint32_t tmpsmcr;
+ uint32_t tmpsmcr;
/* Check the parameters */
assert_param(IS_TIM_CCX_INSTANCE(htim->Instance, Channel));
- if ((htim->State == HAL_TIM_STATE_BUSY))
+ if (htim->State == HAL_TIM_STATE_BUSY)
{
return HAL_BUSY;
}
- else if ((htim->State == HAL_TIM_STATE_READY))
+ else if (htim->State == HAL_TIM_STATE_READY)
{
if ((pData == NULL) && (Length > 0U))
{
@@ -1136,8 +1144,8 @@ HAL_StatusTypeDef HAL_TIM_OC_Stop_DMA(TIM_HandleTypeDef *htim, uint32_t Channel)
*/
/** @defgroup TIM_Exported_Functions_Group3 TIM PWM functions
- * @brief TIM PWM functions
- *
+ * @brief TIM PWM functions
+ *
@verbatim
==============================================================================
##### TIM PWM functions #####
@@ -1513,11 +1521,11 @@ HAL_StatusTypeDef HAL_TIM_PWM_Start_DMA(TIM_HandleTypeDef *htim, uint32_t Channe
/* Check the parameters */
assert_param(IS_TIM_CCX_INSTANCE(htim->Instance, Channel));
- if ((htim->State == HAL_TIM_STATE_BUSY))
+ if (htim->State == HAL_TIM_STATE_BUSY)
{
return HAL_BUSY;
}
- else if ((htim->State == HAL_TIM_STATE_READY))
+ else if (htim->State == HAL_TIM_STATE_READY)
{
if ((pData == NULL) && (Length > 0U))
{
@@ -1714,8 +1722,8 @@ HAL_StatusTypeDef HAL_TIM_PWM_Stop_DMA(TIM_HandleTypeDef *htim, uint32_t Channel
*/
/** @defgroup TIM_Exported_Functions_Group4 TIM Input Capture functions
- * @brief TIM Input Capture functions
- *
+ * @brief TIM Input Capture functions
+ *
@verbatim
==============================================================================
##### TIM Input Capture functions #####
@@ -2061,11 +2069,11 @@ HAL_StatusTypeDef HAL_TIM_IC_Start_DMA(TIM_HandleTypeDef *htim, uint32_t Channel
assert_param(IS_TIM_CCX_INSTANCE(htim->Instance, Channel));
assert_param(IS_TIM_DMA_CC_INSTANCE(htim->Instance));
- if ((htim->State == HAL_TIM_STATE_BUSY))
+ if (htim->State == HAL_TIM_STATE_BUSY)
{
return HAL_BUSY;
}
- else if ((htim->State == HAL_TIM_STATE_READY))
+ else if (htim->State == HAL_TIM_STATE_READY)
{
if ((pData == NULL) && (Length > 0U))
{
@@ -2249,8 +2257,8 @@ HAL_StatusTypeDef HAL_TIM_IC_Stop_DMA(TIM_HandleTypeDef *htim, uint32_t Channel)
*/
/** @defgroup TIM_Exported_Functions_Group5 TIM One Pulse functions
- * @brief TIM One Pulse functions
- *
+ * @brief TIM One Pulse functions
+ *
@verbatim
==============================================================================
##### TIM One Pulse functions #####
@@ -2563,8 +2571,8 @@ HAL_StatusTypeDef HAL_TIM_OnePulse_Stop_IT(TIM_HandleTypeDef *htim, uint32_t Out
*/
/** @defgroup TIM_Exported_Functions_Group6 TIM Encoder functions
- * @brief TIM Encoder functions
- *
+ * @brief TIM Encoder functions
+ *
@verbatim
==============================================================================
##### TIM Encoder functions #####
@@ -2609,15 +2617,15 @@ HAL_StatusTypeDef HAL_TIM_Encoder_Init(TIM_HandleTypeDef *htim, TIM_Encoder_Ini
}
/* Check the parameters */
+ assert_param(IS_TIM_ENCODER_INTERFACE_INSTANCE(htim->Instance));
assert_param(IS_TIM_COUNTER_MODE(htim->Init.CounterMode));
assert_param(IS_TIM_CLOCKDIVISION_DIV(htim->Init.ClockDivision));
assert_param(IS_TIM_AUTORELOAD_PRELOAD(htim->Init.AutoReloadPreload));
- assert_param(IS_TIM_CC2_INSTANCE(htim->Instance));
assert_param(IS_TIM_ENCODER_MODE(sConfig->EncoderMode));
assert_param(IS_TIM_IC_SELECTION(sConfig->IC1Selection));
assert_param(IS_TIM_IC_SELECTION(sConfig->IC2Selection));
- assert_param(IS_TIM_IC_POLARITY(sConfig->IC1Polarity));
- assert_param(IS_TIM_IC_POLARITY(sConfig->IC2Polarity));
+ assert_param(IS_TIM_ENCODERINPUT_POLARITY(sConfig->IC1Polarity));
+ assert_param(IS_TIM_ENCODERINPUT_POLARITY(sConfig->IC2Polarity));
assert_param(IS_TIM_IC_PRESCALER(sConfig->IC1Prescaler));
assert_param(IS_TIM_IC_PRESCALER(sConfig->IC2Prescaler));
assert_param(IS_TIM_IC_FILTER(sConfig->IC1Filter));
@@ -2775,7 +2783,7 @@ __weak void HAL_TIM_Encoder_MspDeInit(TIM_HandleTypeDef *htim)
HAL_StatusTypeDef HAL_TIM_Encoder_Start(TIM_HandleTypeDef *htim, uint32_t Channel)
{
/* Check the parameters */
- assert_param(IS_TIM_CC2_INSTANCE(htim->Instance));
+ assert_param(IS_TIM_ENCODER_INTERFACE_INSTANCE(htim->Instance));
/* Enable the encoder interface channels */
switch (Channel)
@@ -2819,7 +2827,7 @@ HAL_StatusTypeDef HAL_TIM_Encoder_Start(TIM_HandleTypeDef *htim, uint32_t Channe
HAL_StatusTypeDef HAL_TIM_Encoder_Stop(TIM_HandleTypeDef *htim, uint32_t Channel)
{
/* Check the parameters */
- assert_param(IS_TIM_CC2_INSTANCE(htim->Instance));
+ assert_param(IS_TIM_ENCODER_INTERFACE_INSTANCE(htim->Instance));
/* Disable the Input Capture channels 1 and 2
(in the EncoderInterface the two possible channels that can be used are TIM_CHANNEL_1 and TIM_CHANNEL_2) */
@@ -2865,7 +2873,7 @@ HAL_StatusTypeDef HAL_TIM_Encoder_Stop(TIM_HandleTypeDef *htim, uint32_t Channel
HAL_StatusTypeDef HAL_TIM_Encoder_Start_IT(TIM_HandleTypeDef *htim, uint32_t Channel)
{
/* Check the parameters */
- assert_param(IS_TIM_CC2_INSTANCE(htim->Instance));
+ assert_param(IS_TIM_ENCODER_INTERFACE_INSTANCE(htim->Instance));
/* Enable the encoder interface channels */
/* Enable the capture compare Interrupts 1 and/or 2 */
@@ -2915,7 +2923,7 @@ HAL_StatusTypeDef HAL_TIM_Encoder_Start_IT(TIM_HandleTypeDef *htim, uint32_t Cha
HAL_StatusTypeDef HAL_TIM_Encoder_Stop_IT(TIM_HandleTypeDef *htim, uint32_t Channel)
{
/* Check the parameters */
- assert_param(IS_TIM_CC2_INSTANCE(htim->Instance));
+ assert_param(IS_TIM_ENCODER_INTERFACE_INSTANCE(htim->Instance));
/* Disable the Input Capture channels 1 and 2
(in the EncoderInterface the two possible channels that can be used are TIM_CHANNEL_1 and TIM_CHANNEL_2) */
@@ -2966,16 +2974,17 @@ HAL_StatusTypeDef HAL_TIM_Encoder_Stop_IT(TIM_HandleTypeDef *htim, uint32_t Chan
* @param Length The length of data to be transferred from TIM peripheral to memory.
* @retval HAL status
*/
-HAL_StatusTypeDef HAL_TIM_Encoder_Start_DMA(TIM_HandleTypeDef *htim, uint32_t Channel, uint32_t *pData1, uint32_t *pData2, uint16_t Length)
+HAL_StatusTypeDef HAL_TIM_Encoder_Start_DMA(TIM_HandleTypeDef *htim, uint32_t Channel, uint32_t *pData1,
+ uint32_t *pData2, uint16_t Length)
{
/* Check the parameters */
- assert_param(IS_TIM_DMA_CC_INSTANCE(htim->Instance));
+ assert_param(IS_TIM_ENCODER_INTERFACE_INSTANCE(htim->Instance));
- if ((htim->State == HAL_TIM_STATE_BUSY))
+ if (htim->State == HAL_TIM_STATE_BUSY)
{
return HAL_BUSY;
}
- else if ((htim->State == HAL_TIM_STATE_READY))
+ else if (htim->State == HAL_TIM_STATE_READY)
{
if ((((pData1 == NULL) || (pData2 == NULL))) && (Length > 0U))
{
@@ -3103,7 +3112,7 @@ HAL_StatusTypeDef HAL_TIM_Encoder_Start_DMA(TIM_HandleTypeDef *htim, uint32_t Ch
HAL_StatusTypeDef HAL_TIM_Encoder_Stop_DMA(TIM_HandleTypeDef *htim, uint32_t Channel)
{
/* Check the parameters */
- assert_param(IS_TIM_DMA_CC_INSTANCE(htim->Instance));
+ assert_param(IS_TIM_ENCODER_INTERFACE_INSTANCE(htim->Instance));
/* Disable the Input Capture channels 1 and 2
(in the EncoderInterface the two possible channels that can be used are TIM_CHANNEL_1 and TIM_CHANNEL_2) */
@@ -3149,8 +3158,8 @@ HAL_StatusTypeDef HAL_TIM_Encoder_Stop_DMA(TIM_HandleTypeDef *htim, uint32_t Cha
* @}
*/
/** @defgroup TIM_Exported_Functions_Group7 TIM IRQ handler management
- * @brief TIM IRQ handler management
- *
+ * @brief TIM IRQ handler management
+ *
@verbatim
==============================================================================
##### IRQ handler management #####
@@ -3363,8 +3372,8 @@ void HAL_TIM_IRQHandler(TIM_HandleTypeDef *htim)
*/
/** @defgroup TIM_Exported_Functions_Group8 TIM Peripheral Control functions
- * @brief TIM Peripheral Control functions
- *
+ * @brief TIM Peripheral Control functions
+ *
@verbatim
==============================================================================
##### Peripheral Control functions #####
@@ -3738,9 +3747,14 @@ HAL_StatusTypeDef HAL_TIM_PWM_ConfigChannel(TIM_HandleTypeDef *htim,
* This parameter can be one of the following values:
* @arg TIM_CHANNEL_1: TIM Channel 1 selected
* @arg TIM_CHANNEL_2: TIM Channel 2 selected
+ * @note To output a waveform with a minimum delay user can enable the fast
+ * mode by calling the @ref __HAL_TIM_ENABLE_OCxFAST macro. Then CCx
+ * output is forced in response to the edge detection on TIx input,
+ * without taking in account the comparison.
* @retval HAL status
*/
-HAL_StatusTypeDef HAL_TIM_OnePulse_ConfigChannel(TIM_HandleTypeDef *htim, TIM_OnePulse_InitTypeDef *sConfig, uint32_t OutputChannel, uint32_t InputChannel)
+HAL_StatusTypeDef HAL_TIM_OnePulse_ConfigChannel(TIM_HandleTypeDef *htim, TIM_OnePulse_InitTypeDef *sConfig,
+ uint32_t OutputChannel, uint32_t InputChannel)
{
TIM_OC_InitTypeDef temp1;
@@ -3894,11 +3908,11 @@ HAL_StatusTypeDef HAL_TIM_DMABurst_WriteStart(TIM_HandleTypeDef *htim, uint32_t
assert_param(IS_TIM_DMA_SOURCE(BurstRequestSrc));
assert_param(IS_TIM_DMA_LENGTH(BurstLength));
- if ((htim->State == HAL_TIM_STATE_BUSY))
+ if (htim->State == HAL_TIM_STATE_BUSY)
{
return HAL_BUSY;
}
- else if ((htim->State == HAL_TIM_STATE_READY))
+ else if (htim->State == HAL_TIM_STATE_READY)
{
if ((BurstBuffer == NULL) && (BurstLength > 0U))
{
@@ -3941,7 +3955,8 @@ HAL_StatusTypeDef HAL_TIM_DMABurst_WriteStart(TIM_HandleTypeDef *htim, uint32_t
htim->hdma[TIM_DMA_ID_CC1]->XferErrorCallback = TIM_DMAError ;
/* Enable the DMA stream */
- if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC1], (uint32_t)BurstBuffer, (uint32_t)&htim->Instance->DMAR, ((BurstLength) >> 8U) + 1U) != HAL_OK)
+ if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC1], (uint32_t)BurstBuffer,
+ (uint32_t)&htim->Instance->DMAR, ((BurstLength) >> 8U) + 1U) != HAL_OK)
{
return HAL_ERROR;
}
@@ -3957,7 +3972,8 @@ HAL_StatusTypeDef HAL_TIM_DMABurst_WriteStart(TIM_HandleTypeDef *htim, uint32_t
htim->hdma[TIM_DMA_ID_CC2]->XferErrorCallback = TIM_DMAError ;
/* Enable the DMA stream */
- if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC2], (uint32_t)BurstBuffer, (uint32_t)&htim->Instance->DMAR, ((BurstLength) >> 8U) + 1U) != HAL_OK)
+ if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC2], (uint32_t)BurstBuffer,
+ (uint32_t)&htim->Instance->DMAR, ((BurstLength) >> 8U) + 1U) != HAL_OK)
{
return HAL_ERROR;
}
@@ -3973,7 +3989,8 @@ HAL_StatusTypeDef HAL_TIM_DMABurst_WriteStart(TIM_HandleTypeDef *htim, uint32_t
htim->hdma[TIM_DMA_ID_CC3]->XferErrorCallback = TIM_DMAError ;
/* Enable the DMA stream */
- if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC3], (uint32_t)BurstBuffer, (uint32_t)&htim->Instance->DMAR, ((BurstLength) >> 8U) + 1U) != HAL_OK)
+ if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC3], (uint32_t)BurstBuffer,
+ (uint32_t)&htim->Instance->DMAR, ((BurstLength) >> 8U) + 1U) != HAL_OK)
{
return HAL_ERROR;
}
@@ -3989,7 +4006,8 @@ HAL_StatusTypeDef HAL_TIM_DMABurst_WriteStart(TIM_HandleTypeDef *htim, uint32_t
htim->hdma[TIM_DMA_ID_CC4]->XferErrorCallback = TIM_DMAError ;
/* Enable the DMA stream */
- if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC4], (uint32_t)BurstBuffer, (uint32_t)&htim->Instance->DMAR, ((BurstLength) >> 8U) + 1U) != HAL_OK)
+ if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC4], (uint32_t)BurstBuffer,
+ (uint32_t)&htim->Instance->DMAR, ((BurstLength) >> 8U) + 1U) != HAL_OK)
{
return HAL_ERROR;
}
@@ -4005,7 +4023,8 @@ HAL_StatusTypeDef HAL_TIM_DMABurst_WriteStart(TIM_HandleTypeDef *htim, uint32_t
htim->hdma[TIM_DMA_ID_COMMUTATION]->XferErrorCallback = TIM_DMAError ;
/* Enable the DMA stream */
- if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_COMMUTATION], (uint32_t)BurstBuffer, (uint32_t)&htim->Instance->DMAR, ((BurstLength) >> 8U) + 1U) != HAL_OK)
+ if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_COMMUTATION], (uint32_t)BurstBuffer,
+ (uint32_t)&htim->Instance->DMAR, ((BurstLength) >> 8U) + 1U) != HAL_OK)
{
return HAL_ERROR;
}
@@ -4021,7 +4040,8 @@ HAL_StatusTypeDef HAL_TIM_DMABurst_WriteStart(TIM_HandleTypeDef *htim, uint32_t
htim->hdma[TIM_DMA_ID_TRIGGER]->XferErrorCallback = TIM_DMAError ;
/* Enable the DMA stream */
- if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_TRIGGER], (uint32_t)BurstBuffer, (uint32_t)&htim->Instance->DMAR, ((BurstLength) >> 8U) + 1U) != HAL_OK)
+ if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_TRIGGER], (uint32_t)BurstBuffer,
+ (uint32_t)&htim->Instance->DMAR, ((BurstLength) >> 8U) + 1U) != HAL_OK)
{
return HAL_ERROR;
}
@@ -4151,8 +4171,8 @@ HAL_StatusTypeDef HAL_TIM_DMABurst_WriteStop(TIM_HandleTypeDef *htim, uint32_t B
* @note This function should be used only when BurstLength is equal to DMA data transfer length.
* @retval HAL status
*/
-HAL_StatusTypeDef HAL_TIM_DMABurst_ReadStart(TIM_HandleTypeDef *htim, uint32_t BurstBaseAddress, uint32_t BurstRequestSrc,
- uint32_t *BurstBuffer, uint32_t BurstLength)
+HAL_StatusTypeDef HAL_TIM_DMABurst_ReadStart(TIM_HandleTypeDef *htim, uint32_t BurstBaseAddress,
+ uint32_t BurstRequestSrc, uint32_t *BurstBuffer, uint32_t BurstLength)
{
/* Check the parameters */
assert_param(IS_TIM_DMABURST_INSTANCE(htim->Instance));
@@ -4160,11 +4180,11 @@ HAL_StatusTypeDef HAL_TIM_DMABurst_ReadStart(TIM_HandleTypeDef *htim, uint32_t B
assert_param(IS_TIM_DMA_SOURCE(BurstRequestSrc));
assert_param(IS_TIM_DMA_LENGTH(BurstLength));
- if ((htim->State == HAL_TIM_STATE_BUSY))
+ if (htim->State == HAL_TIM_STATE_BUSY)
{
return HAL_BUSY;
}
- else if ((htim->State == HAL_TIM_STATE_READY))
+ else if (htim->State == HAL_TIM_STATE_READY)
{
if ((BurstBuffer == NULL) && (BurstLength > 0U))
{
@@ -4465,7 +4485,7 @@ HAL_StatusTypeDef HAL_TIM_ConfigOCrefClear(TIM_HandleTypeDef *htim,
/* When OCRef clear feature is used with ETR source, ETR prescaler must be off */
if (sClearInputConfig->ClearInputPrescaler != TIM_CLEARINPUTPRESCALER_DIV1)
{
- htim->State = HAL_TIM_STATE_READY;
+ htim->State = HAL_TIM_STATE_READY;
__HAL_UNLOCK(htim);
return HAL_ERROR;
}
@@ -4780,9 +4800,9 @@ HAL_StatusTypeDef HAL_TIM_SlaveConfigSynchro(TIM_HandleTypeDef *htim, TIM_SlaveC
htim->State = HAL_TIM_STATE_BUSY;
- if(TIM_SlaveTimer_SetConfig(htim, sSlaveConfig) != HAL_OK)
+ if (TIM_SlaveTimer_SetConfig(htim, sSlaveConfig) != HAL_OK)
{
- htim->State = HAL_TIM_STATE_READY;
+ htim->State = HAL_TIM_STATE_READY;
__HAL_UNLOCK(htim);
return HAL_ERROR;
}
@@ -4810,7 +4830,7 @@ HAL_StatusTypeDef HAL_TIM_SlaveConfigSynchro(TIM_HandleTypeDef *htim, TIM_SlaveC
* @retval HAL status
*/
HAL_StatusTypeDef HAL_TIM_SlaveConfigSynchro_IT(TIM_HandleTypeDef *htim,
- TIM_SlaveConfigTypeDef *sSlaveConfig)
+ TIM_SlaveConfigTypeDef *sSlaveConfig)
{
/* Check the parameters */
assert_param(IS_TIM_SLAVE_INSTANCE(htim->Instance));
@@ -4821,9 +4841,9 @@ HAL_StatusTypeDef HAL_TIM_SlaveConfigSynchro_IT(TIM_HandleTypeDef *htim,
htim->State = HAL_TIM_STATE_BUSY;
- if(TIM_SlaveTimer_SetConfig(htim, sSlaveConfig) != HAL_OK)
+ if (TIM_SlaveTimer_SetConfig(htim, sSlaveConfig) != HAL_OK)
{
- htim->State = HAL_TIM_STATE_READY;
+ htim->State = HAL_TIM_STATE_READY;
__HAL_UNLOCK(htim);
return HAL_ERROR;
}
@@ -4913,8 +4933,8 @@ uint32_t HAL_TIM_ReadCapturedValue(TIM_HandleTypeDef *htim, uint32_t Channel)
*/
/** @defgroup TIM_Exported_Functions_Group9 TIM Callbacks functions
- * @brief TIM Callbacks functions
- *
+ * @brief TIM Callbacks functions
+ *
@verbatim
==============================================================================
##### TIM Callbacks functions #####
@@ -5118,7 +5138,8 @@ __weak void HAL_TIM_ErrorCallback(TIM_HandleTypeDef *htim)
* @param pCallback pointer to the callback function
* @retval status
*/
-HAL_StatusTypeDef HAL_TIM_RegisterCallback(TIM_HandleTypeDef *htim, HAL_TIM_CallbackIDTypeDef CallbackID, pTIM_CallbackTypeDef pCallback)
+HAL_StatusTypeDef HAL_TIM_RegisterCallback(TIM_HandleTypeDef *htim, HAL_TIM_CallbackIDTypeDef CallbackID,
+ pTIM_CallbackTypeDef pCallback)
{
HAL_StatusTypeDef status = HAL_OK;
@@ -5578,8 +5599,8 @@ HAL_StatusTypeDef HAL_TIM_UnRegisterCallback(TIM_HandleTypeDef *htim, HAL_TIM_Ca
*/
/** @defgroup TIM_Exported_Functions_Group10 TIM Peripheral State functions
- * @brief TIM Peripheral State functions
- *
+ * @brief TIM Peripheral State functions
+ *
@verbatim
==============================================================================
##### Peripheral State functions #####
@@ -6365,7 +6386,7 @@ static void TIM_OC6_SetConfig(TIM_TypeDef *TIMx,
* @retval None
*/
static HAL_StatusTypeDef TIM_SlaveTimer_SetConfig(TIM_HandleTypeDef *htim,
- TIM_SlaveConfigTypeDef *sSlaveConfig)
+ TIM_SlaveConfigTypeDef *sSlaveConfig)
{
uint32_t tmpsmcr;
uint32_t tmpccmr1;
diff --git a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_IAR/Boot/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_tim_ex.c b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_IAR/Boot/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_tim_ex.c
index 271f11ec..f2d976ae 100644
--- a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_IAR/Boot/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_tim_ex.c
+++ b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_IAR/Boot/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_tim_ex.c
@@ -73,7 +73,7 @@
* opensource.org/licenses/BSD-3-Clause
*
******************************************************************************
-*/
+ */
/* Includes ------------------------------------------------------------------*/
#include "stm32f7xx_hal.h"
@@ -397,11 +397,11 @@ HAL_StatusTypeDef HAL_TIMEx_HallSensor_Start_DMA(TIM_HandleTypeDef *htim, uint32
/* Check the parameters */
assert_param(IS_TIM_HALL_SENSOR_INTERFACE_INSTANCE(htim->Instance));
- if ((htim->State == HAL_TIM_STATE_BUSY))
+ if (htim->State == HAL_TIM_STATE_BUSY)
{
return HAL_BUSY;
}
- else if ((htim->State == HAL_TIM_STATE_READY))
+ else if (htim->State == HAL_TIM_STATE_READY)
{
if (((uint32_t)pData == 0U) && (Length > 0U))
{
@@ -709,11 +709,11 @@ HAL_StatusTypeDef HAL_TIMEx_OCN_Start_DMA(TIM_HandleTypeDef *htim, uint32_t Chan
/* Check the parameters */
assert_param(IS_TIM_CCXN_INSTANCE(htim->Instance, Channel));
- if ((htim->State == HAL_TIM_STATE_BUSY))
+ if (htim->State == HAL_TIM_STATE_BUSY)
{
return HAL_BUSY;
}
- else if ((htim->State == HAL_TIM_STATE_READY))
+ else if (htim->State == HAL_TIM_STATE_READY)
{
if (((uint32_t)pData == 0U) && (Length > 0U))
{
@@ -1117,11 +1117,11 @@ HAL_StatusTypeDef HAL_TIMEx_PWMN_Start_DMA(TIM_HandleTypeDef *htim, uint32_t Cha
/* Check the parameters */
assert_param(IS_TIM_CCXN_INSTANCE(htim->Instance, Channel));
- if ((htim->State == HAL_TIM_STATE_BUSY))
+ if (htim->State == HAL_TIM_STATE_BUSY)
{
return HAL_BUSY;
}
- else if ((htim->State == HAL_TIM_STATE_READY))
+ else if (htim->State == HAL_TIM_STATE_READY)
{
if (((uint32_t)pData == 0U) && (Length > 0U))
{
@@ -1466,7 +1466,8 @@ HAL_StatusTypeDef HAL_TIMEx_OnePulseN_Stop_IT(TIM_HandleTypeDef *htim, uint32_t
* @arg TIM_COMMUTATION_SOFTWARE: Commutation source is set by software using the COMG bit
* @retval HAL status
*/
-HAL_StatusTypeDef HAL_TIMEx_ConfigCommutEvent(TIM_HandleTypeDef *htim, uint32_t InputTrigger, uint32_t CommutationSource)
+HAL_StatusTypeDef HAL_TIMEx_ConfigCommutEvent(TIM_HandleTypeDef *htim, uint32_t InputTrigger,
+ uint32_t CommutationSource)
{
/* Check the parameters */
assert_param(IS_TIM_COMMUTATION_EVENT_INSTANCE(htim->Instance));
@@ -1521,7 +1522,8 @@ HAL_StatusTypeDef HAL_TIMEx_ConfigCommutEvent(TIM_HandleTypeDef *htim, uint32_t
* @arg TIM_COMMUTATION_SOFTWARE: Commutation source is set by software using the COMG bit
* @retval HAL status
*/
-HAL_StatusTypeDef HAL_TIMEx_ConfigCommutEvent_IT(TIM_HandleTypeDef *htim, uint32_t InputTrigger, uint32_t CommutationSource)
+HAL_StatusTypeDef HAL_TIMEx_ConfigCommutEvent_IT(TIM_HandleTypeDef *htim, uint32_t InputTrigger,
+ uint32_t CommutationSource)
{
/* Check the parameters */
assert_param(IS_TIM_COMMUTATION_EVENT_INSTANCE(htim->Instance));
@@ -1577,7 +1579,8 @@ HAL_StatusTypeDef HAL_TIMEx_ConfigCommutEvent_IT(TIM_HandleTypeDef *htim, uint32
* @arg TIM_COMMUTATION_SOFTWARE: Commutation source is set by software using the COMG bit
* @retval HAL status
*/
-HAL_StatusTypeDef HAL_TIMEx_ConfigCommutEvent_DMA(TIM_HandleTypeDef *htim, uint32_t InputTrigger, uint32_t CommutationSource)
+HAL_StatusTypeDef HAL_TIMEx_ConfigCommutEvent_DMA(TIM_HandleTypeDef *htim, uint32_t InputTrigger,
+ uint32_t CommutationSource)
{
/* Check the parameters */
assert_param(IS_TIM_COMMUTATION_EVENT_INSTANCE(htim->Instance));
@@ -1632,7 +1635,7 @@ HAL_StatusTypeDef HAL_TIMEx_MasterConfigSynchronization(TIM_HandleTypeDef *htim,
uint32_t tmpsmcr;
/* Check the parameters */
- assert_param(IS_TIM_SYNCHRO_INSTANCE(htim->Instance));
+ assert_param(IS_TIM_MASTER_INSTANCE(htim->Instance));
assert_param(IS_TIM_TRGO_SOURCE(sMasterConfig->MasterOutputTrigger));
assert_param(IS_TIM_MSM_STATE(sMasterConfig->MasterSlaveMode));
@@ -1665,16 +1668,19 @@ HAL_StatusTypeDef HAL_TIMEx_MasterConfigSynchronization(TIM_HandleTypeDef *htim,
/* Select the TRGO source */
tmpcr2 |= sMasterConfig->MasterOutputTrigger;
- /* Reset the MSM Bit */
- tmpsmcr &= ~TIM_SMCR_MSM;
- /* Set master mode */
- tmpsmcr |= sMasterConfig->MasterSlaveMode;
-
/* Update TIMx CR2 */
htim->Instance->CR2 = tmpcr2;
- /* Update TIMx SMCR */
- htim->Instance->SMCR = tmpsmcr;
+ if (IS_TIM_SLAVE_INSTANCE(htim->Instance))
+ {
+ /* Reset the MSM Bit */
+ tmpsmcr &= ~TIM_SMCR_MSM;
+ /* Set master mode */
+ tmpsmcr |= sMasterConfig->MasterSlaveMode;
+
+ /* Update TIMx SMCR */
+ htim->Instance->SMCR = tmpsmcr;
+ }
/* Change the htim state */
htim->State = HAL_TIM_STATE_READY;
@@ -1690,6 +1696,9 @@ HAL_StatusTypeDef HAL_TIMEx_MasterConfigSynchronization(TIM_HandleTypeDef *htim,
* @param htim TIM handle
* @param sBreakDeadTimeConfig pointer to a TIM_ConfigBreakDeadConfigTypeDef structure that
* contains the BDTR Register configuration information for the TIM peripheral.
+ * @note Interrupts can be generated when an active level is detected on the
+ * break input, the break 2 input or the system break input. Break
+ * interrupt can be enabled by calling the @ref __HAL_TIM_ENABLE_IT macro.
* @retval HAL status
*/
HAL_StatusTypeDef HAL_TIMEx_ConfigBreakDeadTime(TIM_HandleTypeDef *htim,
@@ -1763,10 +1772,10 @@ HAL_StatusTypeDef HAL_TIMEx_ConfigBreakInput(TIM_HandleTypeDef *htim,
{
uint32_t tmporx;
- uint32_t bkin_enable_mask = 0U;
- uint32_t bkin_polarity_mask = 0U;
- uint32_t bkin_enable_bitpos = 0U;
- uint32_t bkin_polarity_bitpos = 0U;
+ uint32_t bkin_enable_mask;
+ uint32_t bkin_polarity_mask;
+ uint32_t bkin_enable_bitpos;
+ uint32_t bkin_polarity_bitpos;
/* Check the parameters */
assert_param(IS_TIM_BREAK_INSTANCE(htim->Instance));
@@ -1800,11 +1809,19 @@ HAL_StatusTypeDef HAL_TIMEx_ConfigBreakInput(TIM_HandleTypeDef *htim,
{
bkin_enable_mask = TIM1_AF1_BKDF1BKE;
bkin_enable_bitpos = 8;
+ bkin_polarity_mask = 0U;
+ bkin_polarity_bitpos = 0U;
break;
}
default:
+ {
+ bkin_enable_mask = 0U;
+ bkin_polarity_mask = 0U;
+ bkin_enable_bitpos = 0U;
+ bkin_polarity_bitpos = 0U;
break;
+ }
}
switch (BreakInput)
@@ -2054,7 +2071,7 @@ HAL_TIM_StateTypeDef HAL_TIMEx_HallSensor_GetState(TIM_HandleTypeDef *htim)
*/
/* Private functions ---------------------------------------------------------*/
-/** @defgroup TIMEx_Private_Functions TIM Extended Private Functions
+/** @defgroup TIMEx_Private_Functions TIMEx Private Functions
* @{
*/
diff --git a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_IAR/Boot/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_ll_gpio.c b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_IAR/Boot/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_ll_gpio.c
index 987e5bef..0f04752c 100644
--- a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_IAR/Boot/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_ll_gpio.c
+++ b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_IAR/Boot/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_ll_gpio.c
@@ -220,9 +220,6 @@ ErrorStatus LL_GPIO_Init(GPIO_TypeDef *GPIOx, LL_GPIO_InitTypeDef *GPIO_InitStru
if (currentpin)
{
- /* Pin Mode configuration */
- LL_GPIO_SetPinMode(GPIOx, currentpin, GPIO_InitStruct->Mode);
-
if ((GPIO_InitStruct->Mode == LL_GPIO_MODE_OUTPUT) || (GPIO_InitStruct->Mode == LL_GPIO_MODE_ALTERNATE))
{
/* Check Speed mode parameters */
@@ -230,6 +227,12 @@ ErrorStatus LL_GPIO_Init(GPIO_TypeDef *GPIOx, LL_GPIO_InitTypeDef *GPIO_InitStru
/* Speed mode configuration */
LL_GPIO_SetPinSpeed(GPIOx, currentpin, GPIO_InitStruct->Speed);
+
+ /* Check Output mode parameters */
+ assert_param(IS_LL_GPIO_OUTPUT_TYPE(GPIO_InitStruct->OutputType));
+
+ /* Output mode configuration*/
+ LL_GPIO_SetPinOutputType(GPIOx, GPIO_InitStruct->Pin, GPIO_InitStruct->OutputType);
}
/* Pull-up Pull down resistor configuration*/
@@ -250,19 +253,11 @@ ErrorStatus LL_GPIO_Init(GPIO_TypeDef *GPIOx, LL_GPIO_InitTypeDef *GPIO_InitStru
LL_GPIO_SetAFPin_8_15(GPIOx, currentpin, GPIO_InitStruct->Alternate);
}
}
+ /* Pin Mode configuration */
+ LL_GPIO_SetPinMode(GPIOx, currentpin, GPIO_InitStruct->Mode);
}
pinpos++;
}
-
- if ((GPIO_InitStruct->Mode == LL_GPIO_MODE_OUTPUT) || (GPIO_InitStruct->Mode == LL_GPIO_MODE_ALTERNATE))
- {
- /* Check Output mode parameters */
- assert_param(IS_LL_GPIO_OUTPUT_TYPE(GPIO_InitStruct->OutputType));
-
- /* Output mode configuration*/
- LL_GPIO_SetPinOutputType(GPIOx, GPIO_InitStruct->Pin, GPIO_InitStruct->OutputType);
-
- }
return (SUCCESS);
}
diff --git a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_IAR/Boot/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_ll_rcc.c b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_IAR/Boot/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_ll_rcc.c
index 0197818f..588d0bb5 100644
--- a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_IAR/Boot/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_ll_rcc.c
+++ b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_IAR/Boot/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_ll_rcc.c
@@ -163,7 +163,7 @@ uint32_t RCC_PLLI2S_GetFreqDomain_SPDIFRX(void);
*/
ErrorStatus LL_RCC_DeInit(void)
{
- uint32_t vl_mask = 0xFFFFFFFFU;
+ __IO uint32_t vl_mask;
/* Set HSION bit */
LL_RCC_HSI_Enable();
@@ -175,10 +175,13 @@ ErrorStatus LL_RCC_DeInit(void)
/* Reset CFGR register */
LL_RCC_WriteReg(CFGR, 0x00000000U);
+ /* Read CR register */
+ vl_mask = LL_RCC_ReadReg(CR);
+
/* Reset HSEON, HSEBYP, PLLON, CSSON, PLLI2SON and PLLSAION bits */
CLEAR_BIT(vl_mask, (RCC_CR_HSEON | RCC_CR_HSEBYP | RCC_CR_PLLON | RCC_CR_CSSON | RCC_CR_PLLSAION | RCC_CR_PLLI2SON));
- /* Write new mask in CR register */
+ /* Write new value in CR register */
LL_RCC_WriteReg(CR, vl_mask);
/* Set HSITRIM bits to the reset value*/
diff --git a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_IAR/Boot/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_ll_usart.c b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_IAR/Boot/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_ll_usart.c
index 2f82ef49..b3db0e6a 100644
--- a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_IAR/Boot/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_ll_usart.c
+++ b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_IAR/Boot/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_ll_usart.c
@@ -22,11 +22,11 @@
#include "stm32f7xx_ll_usart.h"
#include "stm32f7xx_ll_rcc.h"
#include "stm32f7xx_ll_bus.h"
-#ifdef USE_FULL_ASSERT
+#ifdef USE_FULL_ASSERT
#include "stm32_assert.h"
#else
#define assert_param(expr) ((void)0U)
-#endif
+#endif /* USE_FULL_ASSERT */
/** @addtogroup STM32F7xx_LL_Driver
* @{
@@ -41,14 +41,6 @@
/* Private types -------------------------------------------------------------*/
/* Private variables ---------------------------------------------------------*/
/* Private constants ---------------------------------------------------------*/
-/** @addtogroup USART_LL_Private_Constants
- * @{
- */
-
-/**
- * @}
- */
-
/* Private macros ------------------------------------------------------------*/
/** @addtogroup USART_LL_Private_Macros
* @{
@@ -65,42 +57,42 @@
#define IS_LL_USART_BRR_MAX(__VALUE__) ((__VALUE__) <= 0x0000FFFFU)
#define IS_LL_USART_DIRECTION(__VALUE__) (((__VALUE__) == LL_USART_DIRECTION_NONE) \
- || ((__VALUE__) == LL_USART_DIRECTION_RX) \
- || ((__VALUE__) == LL_USART_DIRECTION_TX) \
- || ((__VALUE__) == LL_USART_DIRECTION_TX_RX))
+ || ((__VALUE__) == LL_USART_DIRECTION_RX) \
+ || ((__VALUE__) == LL_USART_DIRECTION_TX) \
+ || ((__VALUE__) == LL_USART_DIRECTION_TX_RX))
#define IS_LL_USART_PARITY(__VALUE__) (((__VALUE__) == LL_USART_PARITY_NONE) \
- || ((__VALUE__) == LL_USART_PARITY_EVEN) \
- || ((__VALUE__) == LL_USART_PARITY_ODD))
+ || ((__VALUE__) == LL_USART_PARITY_EVEN) \
+ || ((__VALUE__) == LL_USART_PARITY_ODD))
#define IS_LL_USART_DATAWIDTH(__VALUE__) (((__VALUE__) == LL_USART_DATAWIDTH_7B) \
- || ((__VALUE__) == LL_USART_DATAWIDTH_8B) \
- || ((__VALUE__) == LL_USART_DATAWIDTH_9B))
+ || ((__VALUE__) == LL_USART_DATAWIDTH_8B) \
+ || ((__VALUE__) == LL_USART_DATAWIDTH_9B))
#define IS_LL_USART_OVERSAMPLING(__VALUE__) (((__VALUE__) == LL_USART_OVERSAMPLING_16) \
- || ((__VALUE__) == LL_USART_OVERSAMPLING_8))
+ || ((__VALUE__) == LL_USART_OVERSAMPLING_8))
#define IS_LL_USART_LASTBITCLKOUTPUT(__VALUE__) (((__VALUE__) == LL_USART_LASTCLKPULSE_NO_OUTPUT) \
- || ((__VALUE__) == LL_USART_LASTCLKPULSE_OUTPUT))
+ || ((__VALUE__) == LL_USART_LASTCLKPULSE_OUTPUT))
#define IS_LL_USART_CLOCKPHASE(__VALUE__) (((__VALUE__) == LL_USART_PHASE_1EDGE) \
- || ((__VALUE__) == LL_USART_PHASE_2EDGE))
+ || ((__VALUE__) == LL_USART_PHASE_2EDGE))
#define IS_LL_USART_CLOCKPOLARITY(__VALUE__) (((__VALUE__) == LL_USART_POLARITY_LOW) \
- || ((__VALUE__) == LL_USART_POLARITY_HIGH))
+ || ((__VALUE__) == LL_USART_POLARITY_HIGH))
#define IS_LL_USART_CLOCKOUTPUT(__VALUE__) (((__VALUE__) == LL_USART_CLOCK_DISABLE) \
- || ((__VALUE__) == LL_USART_CLOCK_ENABLE))
+ || ((__VALUE__) == LL_USART_CLOCK_ENABLE))
#define IS_LL_USART_STOPBITS(__VALUE__) (((__VALUE__) == LL_USART_STOPBITS_0_5) \
- || ((__VALUE__) == LL_USART_STOPBITS_1) \
- || ((__VALUE__) == LL_USART_STOPBITS_1_5) \
- || ((__VALUE__) == LL_USART_STOPBITS_2))
+ || ((__VALUE__) == LL_USART_STOPBITS_1) \
+ || ((__VALUE__) == LL_USART_STOPBITS_1_5) \
+ || ((__VALUE__) == LL_USART_STOPBITS_2))
#define IS_LL_USART_HWCONTROL(__VALUE__) (((__VALUE__) == LL_USART_HWCONTROL_NONE) \
- || ((__VALUE__) == LL_USART_HWCONTROL_RTS) \
- || ((__VALUE__) == LL_USART_HWCONTROL_CTS) \
- || ((__VALUE__) == LL_USART_HWCONTROL_RTS_CTS))
+ || ((__VALUE__) == LL_USART_HWCONTROL_RTS) \
+ || ((__VALUE__) == LL_USART_HWCONTROL_CTS) \
+ || ((__VALUE__) == LL_USART_HWCONTROL_RTS_CTS))
/**
* @}
diff --git a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_IAR/Boot/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_ll_usb.c b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_IAR/Boot/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_ll_usb.c
index ece23086..8d9dbb24 100644
--- a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_IAR/Boot/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_ll_usb.c
+++ b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_IAR/Boot/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_ll_usb.c
@@ -94,6 +94,11 @@ HAL_StatusTypeDef USB_CoreInit(USB_OTG_GlobalTypeDef *USBx, USB_OTG_CfgTypeDef c
/* Init The ULPI Interface */
USBx->GUSBCFG &= ~(USB_OTG_GUSBCFG_TSDPS | USB_OTG_GUSBCFG_ULPIFSLS | USB_OTG_GUSBCFG_PHYSEL);
+#if defined(STM32F722xx) || defined(STM32F723xx) || defined(STM32F730xx) || defined(STM32F732xx) || defined(STM32F733xx)
+ /* Select ULPI Interface */
+ USBx->GUSBCFG |= USB_OTG_GUSBCFG_ULPI_UTMI_SEL;
+#endif /* defined(STM32F722xx) || defined(STM32F723xx) || defined(STM32F730xx) || defined(STM32F732xx) || defined(STM32F733xx) */
+
/* Select vbus source */
USBx->GUSBCFG &= ~(USB_OTG_GUSBCFG_ULPIEVBUSD | USB_OTG_GUSBCFG_ULPIEVBUSI);
if (cfg.use_external_vbus == 1U)
@@ -115,7 +120,7 @@ HAL_StatusTypeDef USB_CoreInit(USB_OTG_GlobalTypeDef *USBx, USB_OTG_CfgTypeDef c
USBx->GUSBCFG &= ~(USB_OTG_GUSBCFG_ULPIEVBUSD | USB_OTG_GUSBCFG_ULPIEVBUSI);
/* Select UTMI Interace */
- USBx->GUSBCFG &= ~ USB_OTG_GUSBCFG_ULPI_UTMI_SEL;
+ USBx->GUSBCFG &= ~USB_OTG_GUSBCFG_ULPI_UTMI_SEL;
USBx->GCCFG |= USB_OTG_GCCFG_PHYHSEN;
/* Enables control of a High Speed USB PHY */
@@ -158,10 +163,6 @@ HAL_StatusTypeDef USB_CoreInit(USB_OTG_GlobalTypeDef *USBx, USB_OTG_CfgTypeDef c
* @brief Set the USB turnaround time
* @param USBx USB Instance
* @param hclk: AHB clock frequency
- * @param speed device speed
- * This parameter can be one of these values:
- * @arg PCD_SPEED_HIGH: High speed mode
- * @arg PCD_SPEED_FULL: Full speed mode
* @retval USB turnaround time In PHY Clocks number
*/
HAL_StatusTypeDef USB_SetTurnaroundTime(USB_OTG_GlobalTypeDef *USBx,
@@ -173,7 +174,7 @@ HAL_StatusTypeDef USB_SetTurnaroundTime(USB_OTG_GlobalTypeDef *USBx,
used by application. In the low AHB frequency range it is used to stretch enough the USB response
time to IN tokens, the USB turnaround time, so to compensate for the longer AHB read access
latency to the Data FIFO */
- if (speed == PCD_SPEED_FULL)
+ if (speed == USBD_FS_SPEED)
{
if ((hclk >= 14200000U) && (hclk < 15000000U))
{
@@ -226,7 +227,7 @@ HAL_StatusTypeDef USB_SetTurnaroundTime(USB_OTG_GlobalTypeDef *USBx,
UsbTrd = 0x6U;
}
}
- else if (speed == PCD_SPEED_HIGH)
+ else if (speed == USBD_HS_SPEED)
{
UsbTrd = USBD_HS_TRDT_VALUE;
}
@@ -318,6 +319,8 @@ HAL_StatusTypeDef USB_DevInit(USB_OTG_GlobalTypeDef *USBx, USB_OTG_CfgTypeDef cf
/* VBUS Sensing setup */
if (cfg.vbus_sensing_enable == 0U)
{
+ USBx_DEVICE->DCTL |= USB_OTG_DCTL_SDIS;
+
/* Deactivate VBUS Sensing B */
USBx->GCCFG &= ~USB_OTG_GCCFG_VBDEN;
@@ -339,33 +342,33 @@ HAL_StatusTypeDef USB_DevInit(USB_OTG_GlobalTypeDef *USBx, USB_OTG_CfgTypeDef cf
if (cfg.phy_itface == USB_OTG_ULPI_PHY)
{
- if (cfg.speed == USB_OTG_SPEED_HIGH)
+ if (cfg.speed == USBD_HS_SPEED)
{
- /* Set High speed phy */
+ /* Set Core speed to High speed mode */
(void)USB_SetDevSpeed(USBx, USB_OTG_SPEED_HIGH);
}
else
{
- /* set High speed phy in Full speed mode */
+ /* Set Core speed to Full speed mode */
(void)USB_SetDevSpeed(USBx, USB_OTG_SPEED_HIGH_IN_FULL);
}
}
else if (cfg.phy_itface == USB_OTG_HS_EMBEDDED_PHY)
{
- if (cfg.speed == USB_OTG_SPEED_HIGH)
+ if (cfg.speed == USBD_HS_SPEED)
{
- /* Set High speed phy */
+ /* Set Core speed to High speed mode */
(void)USB_SetDevSpeed(USBx, USB_OTG_SPEED_HIGH);
}
else
{
- /* set High speed phy in Full speed mode */
+ /* Set Core speed to Full speed mode */
(void)USB_SetDevSpeed(USBx, USB_OTG_SPEED_HIGH_IN_FULL);
}
}
else
{
- /* Set Full speed phy */
+ /* Set Core speed to Full speed mode */
(void)USB_SetDevSpeed(USBx, USB_OTG_SPEED_FULL);
}
@@ -431,17 +434,6 @@ HAL_StatusTypeDef USB_DevInit(USB_OTG_GlobalTypeDef *USBx, USB_OTG_CfgTypeDef cf
USBx_DEVICE->DIEPMSK &= ~(USB_OTG_DIEPMSK_TXFURM);
- if (cfg.dma_enable == 1U)
- {
- /*Set threshold parameters */
- USBx_DEVICE->DTHRCTL = USB_OTG_DTHRCTL_TXTHRLEN_6 |
- USB_OTG_DTHRCTL_RXTHRLEN_6;
-
- USBx_DEVICE->DTHRCTL |= USB_OTG_DTHRCTL_RXTHREN |
- USB_OTG_DTHRCTL_ISOTHREN |
- USB_OTG_DTHRCTL_NONISOTHREN;
- }
-
/* Disable all interrupts. */
USBx->GINTMSK = 0U;
@@ -557,16 +549,16 @@ uint8_t USB_GetDevSpeed(USB_OTG_GlobalTypeDef *USBx)
if (DevEnumSpeed == DSTS_ENUMSPD_HS_PHY_30MHZ_OR_60MHZ)
{
- speed = PCD_SPEED_HIGH;
+ speed = USBD_HS_SPEED;
}
else if ((DevEnumSpeed == DSTS_ENUMSPD_FS_PHY_30MHZ_OR_60MHZ) ||
(DevEnumSpeed == DSTS_ENUMSPD_FS_PHY_48MHZ))
{
- speed = PCD_SPEED_FULL;
+ speed = USBD_FS_SPEED;
}
else
{
- speed = 0U;
+ speed = 0xFU;
}
return speed;
@@ -663,6 +655,12 @@ HAL_StatusTypeDef USB_DeactivateEndpoint(USB_OTG_GlobalTypeDef *USBx, USB_OTG_EP
/* Read DEPCTLn register */
if (ep->is_in == 1U)
{
+ if ((USBx_INEP(epnum)->DIEPCTL & USB_OTG_DIEPCTL_EPENA) == USB_OTG_DIEPCTL_EPENA)
+ {
+ USBx_INEP(epnum)->DIEPCTL |= USB_OTG_DIEPCTL_SNAK;
+ USBx_INEP(epnum)->DIEPCTL |= USB_OTG_DIEPCTL_EPDIS;
+ }
+
USBx_DEVICE->DEACHMSK &= ~(USB_OTG_DAINTMSK_IEPM & (uint32_t)(1UL << (ep->num & EP_ADDR_MSK)));
USBx_DEVICE->DAINTMSK &= ~(USB_OTG_DAINTMSK_IEPM & (uint32_t)(1UL << (ep->num & EP_ADDR_MSK)));
USBx_INEP(epnum)->DIEPCTL &= ~(USB_OTG_DIEPCTL_USBAEP |
@@ -673,6 +671,12 @@ HAL_StatusTypeDef USB_DeactivateEndpoint(USB_OTG_GlobalTypeDef *USBx, USB_OTG_EP
}
else
{
+ if ((USBx_OUTEP(epnum)->DOEPCTL & USB_OTG_DOEPCTL_EPENA) == USB_OTG_DOEPCTL_EPENA)
+ {
+ USBx_OUTEP(epnum)->DOEPCTL |= USB_OTG_DOEPCTL_SNAK;
+ USBx_OUTEP(epnum)->DOEPCTL |= USB_OTG_DOEPCTL_EPDIS;
+ }
+
USBx_DEVICE->DEACHMSK &= ~(USB_OTG_DAINTMSK_OEPM & ((uint32_t)(1UL << (ep->num & EP_ADDR_MSK)) << 16));
USBx_DEVICE->DAINTMSK &= ~(USB_OTG_DAINTMSK_OEPM & ((uint32_t)(1UL << (ep->num & EP_ADDR_MSK)) << 16));
USBx_OUTEP(epnum)->DOEPCTL &= ~(USB_OTG_DOEPCTL_USBAEP |
@@ -698,11 +702,23 @@ HAL_StatusTypeDef USB_DeactivateDedicatedEndpoint(USB_OTG_GlobalTypeDef *USBx, U
/* Read DEPCTLn register */
if (ep->is_in == 1U)
{
+ if ((USBx_INEP(epnum)->DIEPCTL & USB_OTG_DIEPCTL_EPENA) == USB_OTG_DIEPCTL_EPENA)
+ {
+ USBx_INEP(epnum)->DIEPCTL |= USB_OTG_DIEPCTL_SNAK;
+ USBx_INEP(epnum)->DIEPCTL |= USB_OTG_DIEPCTL_EPDIS;
+ }
+
USBx_INEP(epnum)->DIEPCTL &= ~ USB_OTG_DIEPCTL_USBAEP;
USBx_DEVICE->DAINTMSK &= ~(USB_OTG_DAINTMSK_IEPM & (uint32_t)(1UL << (ep->num & EP_ADDR_MSK)));
}
else
{
+ if ((USBx_OUTEP(epnum)->DOEPCTL & USB_OTG_DOEPCTL_EPENA) == USB_OTG_DOEPCTL_EPENA)
+ {
+ USBx_OUTEP(epnum)->DOEPCTL |= USB_OTG_DOEPCTL_SNAK;
+ USBx_OUTEP(epnum)->DOEPCTL |= USB_OTG_DOEPCTL_EPDIS;
+ }
+
USBx_OUTEP(epnum)->DOEPCTL &= ~USB_OTG_DOEPCTL_USBAEP;
USBx_DEVICE->DAINTMSK &= ~(USB_OTG_DAINTMSK_OEPM & ((uint32_t)(1UL << (ep->num & EP_ADDR_MSK)) << 16));
}
@@ -761,9 +777,27 @@ HAL_StatusTypeDef USB_EPStartXfer(USB_OTG_GlobalTypeDef *USBx, USB_OTG_EPTypeDef
{
USBx_INEP(epnum)->DIEPDMA = (uint32_t)(ep->dma_addr);
}
+
+ if (ep->type == EP_TYPE_ISOC)
+ {
+ if ((USBx_DEVICE->DSTS & (1U << 8)) == 0U)
+ {
+ USBx_INEP(epnum)->DIEPCTL |= USB_OTG_DIEPCTL_SODDFRM;
+ }
+ else
+ {
+ USBx_INEP(epnum)->DIEPCTL |= USB_OTG_DIEPCTL_SD0PID_SEVNFRM;
+ }
+ }
+
+ /* EP enable, IN data in FIFO */
+ USBx_INEP(epnum)->DIEPCTL |= (USB_OTG_DIEPCTL_CNAK | USB_OTG_DIEPCTL_EPENA);
}
else
{
+ /* EP enable, IN data in FIFO */
+ USBx_INEP(epnum)->DIEPCTL |= (USB_OTG_DIEPCTL_CNAK | USB_OTG_DIEPCTL_EPENA);
+
if (ep->type != EP_TYPE_ISOC)
{
/* Enable the Tx FIFO Empty Interrupt for this EP */
@@ -772,27 +806,20 @@ HAL_StatusTypeDef USB_EPStartXfer(USB_OTG_GlobalTypeDef *USBx, USB_OTG_EPTypeDef
USBx_DEVICE->DIEPEMPMSK |= 1UL << (ep->num & EP_ADDR_MSK);
}
}
- }
-
- if (ep->type == EP_TYPE_ISOC)
- {
- if ((USBx_DEVICE->DSTS & (1U << 8)) == 0U)
- {
- USBx_INEP(epnum)->DIEPCTL |= USB_OTG_DIEPCTL_SODDFRM;
- }
else
{
- USBx_INEP(epnum)->DIEPCTL |= USB_OTG_DIEPCTL_SD0PID_SEVNFRM;
+ if ((USBx_DEVICE->DSTS & (1U << 8)) == 0U)
+ {
+ USBx_INEP(epnum)->DIEPCTL |= USB_OTG_DIEPCTL_SODDFRM;
+ }
+ else
+ {
+ USBx_INEP(epnum)->DIEPCTL |= USB_OTG_DIEPCTL_SD0PID_SEVNFRM;
+ }
+
+ (void)USB_WritePacket(USBx, ep->xfer_buff, ep->num, (uint16_t)ep->xfer_len, dma);
}
}
-
- /* EP enable, IN data in FIFO */
- USBx_INEP(epnum)->DIEPCTL |= (USB_OTG_DIEPCTL_CNAK | USB_OTG_DIEPCTL_EPENA);
-
- if (ep->type == EP_TYPE_ISOC)
- {
- (void)USB_WritePacket(USBx, ep->xfer_buff, ep->num, (uint16_t)ep->xfer_len, dma);
- }
}
else /* OUT endpoint */
{
@@ -890,18 +917,21 @@ HAL_StatusTypeDef USB_EP0StartXfer(USB_OTG_GlobalTypeDef *USBx, USB_OTG_EPTypeDe
{
USBx_INEP(epnum)->DIEPDMA = (uint32_t)(ep->dma_addr);
}
+
+ /* EP enable, IN data in FIFO */
+ USBx_INEP(epnum)->DIEPCTL |= (USB_OTG_DIEPCTL_CNAK | USB_OTG_DIEPCTL_EPENA);
}
else
{
+ /* EP enable, IN data in FIFO */
+ USBx_INEP(epnum)->DIEPCTL |= (USB_OTG_DIEPCTL_CNAK | USB_OTG_DIEPCTL_EPENA);
+
/* Enable the Tx FIFO Empty Interrupt for this EP */
if (ep->xfer_len > 0U)
{
USBx_DEVICE->DIEPEMPMSK |= 1UL << (ep->num & EP_ADDR_MSK);
}
}
-
- /* EP enable, IN data in FIFO */
- USBx_INEP(epnum)->DIEPCTL |= (USB_OTG_DIEPCTL_CNAK | USB_OTG_DIEPCTL_EPENA);
}
else /* OUT endpoint */
{
@@ -959,7 +989,7 @@ HAL_StatusTypeDef USB_WritePacket(USB_OTG_GlobalTypeDef *USBx, uint8_t *src, uin
count32b = ((uint32_t)len + 3U) / 4U;
for (i = 0U; i < count32b; i++)
{
- USBx_DFIFO((uint32_t)ch_ep_num) = *((__packed uint32_t *)pSrc);
+ USBx_DFIFO((uint32_t)ch_ep_num) = __UNALIGNED_UINT32_READ(pSrc);
pSrc++;
}
}
@@ -968,15 +998,10 @@ HAL_StatusTypeDef USB_WritePacket(USB_OTG_GlobalTypeDef *USBx, uint8_t *src, uin
}
/**
- * @brief USB_ReadPacket : read a packet from the Tx FIFO associated
- * with the EP/channel
+ * @brief USB_ReadPacket : read a packet from the RX FIFO
* @param USBx Selected device
* @param dest source pointer
* @param len Number of bytes to read
- * @param dma USB dma enabled or disabled
- * This parameter can be one of these values:
- * 0 : DMA feature not used
- * 1 : DMA feature used
* @retval pointer to destination buffer
*/
void *USB_ReadPacket(USB_OTG_GlobalTypeDef *USBx, uint8_t *dest, uint16_t len)
@@ -988,7 +1013,7 @@ void *USB_ReadPacket(USB_OTG_GlobalTypeDef *USBx, uint8_t *dest, uint16_t len)
for (i = 0U; i < count32b; i++)
{
- *(__packed uint32_t *)pDest = USBx_DFIFO(0U);
+ __UNALIGNED_UINT32_WRITE(pDest, USBx_DFIFO(0U));
pDest++;
}
@@ -1260,13 +1285,9 @@ HAL_StatusTypeDef USB_ActivateSetup(USB_OTG_GlobalTypeDef *USBx)
{
uint32_t USBx_BASE = (uint32_t)USBx;
- /* Set the MPS of the IN EP based on the enumeration speed */
+ /* Set the MPS of the IN EP0 to 64 bytes */
USBx_INEP(0U)->DIEPCTL &= ~USB_OTG_DIEPCTL_MPSIZ;
- if ((USBx_DEVICE->DSTS & USB_OTG_DSTS_ENUMSPD) == DSTS_ENUMSPD_LS_PHY_6MHZ)
- {
- USBx_INEP(0U)->DIEPCTL |= 3U;
- }
USBx_DEVICE->DCTL |= USB_OTG_DCTL_CGINAK;
return HAL_OK;
@@ -1433,7 +1454,7 @@ HAL_StatusTypeDef USB_HostInit(USB_OTG_GlobalTypeDef *USBx, USB_OTG_CfgTypeDef c
if ((USBx->CID & (0x1U << 8)) != 0U)
{
- if (cfg.speed == USB_OTG_SPEED_FULL)
+ if (cfg.speed == USBH_FSLS_SPEED)
{
/* Force Device Enumeration to FS/LS mode only */
USBx_HOST->HCFG |= USB_OTG_HCFG_FSLSS;
@@ -1594,9 +1615,9 @@ HAL_StatusTypeDef USB_DriveVbus(USB_OTG_GlobalTypeDef *USBx, uint8_t state)
* @param USBx Selected device
* @retval speed : Host speed
* This parameter can be one of these values:
- * @arg USB_OTG_SPEED_HIGH: High speed mode
- * @arg USB_OTG_SPEED_FULL: Full speed mode
- * @arg USB_OTG_SPEED_LOW: Low speed mode
+ * @arg HCD_SPEED_HIGH: High speed mode
+ * @arg HCD_SPEED_FULL: Full speed mode
+ * @arg HCD_SPEED_LOW: Low speed mode
*/
uint32_t USB_GetHostSpeed(USB_OTG_GlobalTypeDef *USBx)
{
@@ -1774,7 +1795,7 @@ HAL_StatusTypeDef USB_HC_StartXfer(USB_OTG_GlobalTypeDef *USBx, USB_OTG_HCTypeDe
uint16_t num_packets;
uint16_t max_hc_pkt_count = 256U;
- if (((USBx->CID & (0x1U << 8)) != 0U) && (hc->speed == USB_OTG_SPEED_HIGH))
+ if (((USBx->CID & (0x1U << 8)) != 0U) && (hc->speed == USBH_HS_SPEED))
{
if ((dma == 0U) && (hc->do_ping == 1U))
{
@@ -2002,7 +2023,6 @@ HAL_StatusTypeDef USB_StopHost(USB_OTG_GlobalTypeDef *USBx)
uint32_t value;
uint32_t i;
-
(void)USB_DisableGlobalInt(USBx);
/* Flush FIFO */
@@ -2041,6 +2061,7 @@ HAL_StatusTypeDef USB_StopHost(USB_OTG_GlobalTypeDef *USBx)
/* Clear any pending Host interrupts */
USBx_HOST->HAINT = 0xFFFFFFFFU;
USBx->GINTSTS = 0xFFFFFFFFU;
+
(void)USB_EnableGlobalInt(USBx);
return HAL_OK;
diff --git a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_IAR/Boot/lib/STM32_USB_Device_Library/Core/Inc/usbd_core.h b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_IAR/Boot/lib/STM32_USB_Device_Library/Core/Inc/usbd_core.h
index 31ec3b02..988ba1ff 100644
--- a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_IAR/Boot/lib/STM32_USB_Device_Library/Core/Inc/usbd_core.h
+++ b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_IAR/Boot/lib/STM32_USB_Device_Library/Core/Inc/usbd_core.h
@@ -12,7 +12,7 @@
* This software component is licensed by ST under Ultimate Liberty license
* SLA0044, the "License"; You may not use this file except in compliance with
* the License. You may obtain a copy of the License at:
- * http://www.st.com/SLA0044
+ * www.st.com/SLA0044
*
******************************************************************************
*/
@@ -22,7 +22,7 @@
#define __USBD_CORE_H
#ifdef __cplusplus
- extern "C" {
+extern "C" {
#endif
/* Includes ------------------------------------------------------------------*/
@@ -84,58 +84,55 @@
*/
USBD_StatusTypeDef USBD_Init(USBD_HandleTypeDef *pdev, USBD_DescriptorsTypeDef *pdesc, uint8_t id);
USBD_StatusTypeDef USBD_DeInit(USBD_HandleTypeDef *pdev);
-USBD_StatusTypeDef USBD_Start (USBD_HandleTypeDef *pdev);
-USBD_StatusTypeDef USBD_Stop (USBD_HandleTypeDef *pdev);
+USBD_StatusTypeDef USBD_Start(USBD_HandleTypeDef *pdev);
+USBD_StatusTypeDef USBD_Stop(USBD_HandleTypeDef *pdev);
USBD_StatusTypeDef USBD_RegisterClass(USBD_HandleTypeDef *pdev, USBD_ClassTypeDef *pclass);
-USBD_StatusTypeDef USBD_RunTestMode (USBD_HandleTypeDef *pdev);
-USBD_StatusTypeDef USBD_SetClassConfig(USBD_HandleTypeDef *pdev, uint8_t cfgidx);
-USBD_StatusTypeDef USBD_ClrClassConfig(USBD_HandleTypeDef *pdev, uint8_t cfgidx);
+USBD_StatusTypeDef USBD_RunTestMode(USBD_HandleTypeDef *pdev);
+USBD_StatusTypeDef USBD_SetClassConfig(USBD_HandleTypeDef *pdev, uint8_t cfgidx);
+USBD_StatusTypeDef USBD_ClrClassConfig(USBD_HandleTypeDef *pdev, uint8_t cfgidx);
USBD_StatusTypeDef USBD_LL_SetupStage(USBD_HandleTypeDef *pdev, uint8_t *psetup);
-USBD_StatusTypeDef USBD_LL_DataOutStage(USBD_HandleTypeDef *pdev , uint8_t epnum, uint8_t *pdata);
-USBD_StatusTypeDef USBD_LL_DataInStage(USBD_HandleTypeDef *pdev , uint8_t epnum, uint8_t *pdata);
+USBD_StatusTypeDef USBD_LL_DataOutStage(USBD_HandleTypeDef *pdev, uint8_t epnum, uint8_t *pdata);
+USBD_StatusTypeDef USBD_LL_DataInStage(USBD_HandleTypeDef *pdev, uint8_t epnum, uint8_t *pdata);
-USBD_StatusTypeDef USBD_LL_Reset(USBD_HandleTypeDef *pdev);
-USBD_StatusTypeDef USBD_LL_SetSpeed(USBD_HandleTypeDef *pdev, USBD_SpeedTypeDef speed);
-USBD_StatusTypeDef USBD_LL_Suspend(USBD_HandleTypeDef *pdev);
-USBD_StatusTypeDef USBD_LL_Resume(USBD_HandleTypeDef *pdev);
+USBD_StatusTypeDef USBD_LL_Reset(USBD_HandleTypeDef *pdev);
+USBD_StatusTypeDef USBD_LL_SetSpeed(USBD_HandleTypeDef *pdev, USBD_SpeedTypeDef speed);
+USBD_StatusTypeDef USBD_LL_Suspend(USBD_HandleTypeDef *pdev);
+USBD_StatusTypeDef USBD_LL_Resume(USBD_HandleTypeDef *pdev);
USBD_StatusTypeDef USBD_LL_SOF(USBD_HandleTypeDef *pdev);
-USBD_StatusTypeDef USBD_LL_IsoINIncomplete(USBD_HandleTypeDef *pdev, uint8_t epnum);
-USBD_StatusTypeDef USBD_LL_IsoOUTIncomplete(USBD_HandleTypeDef *pdev, uint8_t epnum);
+USBD_StatusTypeDef USBD_LL_IsoINIncomplete(USBD_HandleTypeDef *pdev, uint8_t epnum);
+USBD_StatusTypeDef USBD_LL_IsoOUTIncomplete(USBD_HandleTypeDef *pdev, uint8_t epnum);
-USBD_StatusTypeDef USBD_LL_DevConnected(USBD_HandleTypeDef *pdev);
-USBD_StatusTypeDef USBD_LL_DevDisconnected(USBD_HandleTypeDef *pdev);
+USBD_StatusTypeDef USBD_LL_DevConnected(USBD_HandleTypeDef *pdev);
+USBD_StatusTypeDef USBD_LL_DevDisconnected(USBD_HandleTypeDef *pdev);
/* USBD Low Level Driver */
-USBD_StatusTypeDef USBD_LL_Init (USBD_HandleTypeDef *pdev);
-USBD_StatusTypeDef USBD_LL_DeInit (USBD_HandleTypeDef *pdev);
-USBD_StatusTypeDef USBD_LL_Start(USBD_HandleTypeDef *pdev);
-USBD_StatusTypeDef USBD_LL_Stop (USBD_HandleTypeDef *pdev);
-USBD_StatusTypeDef USBD_LL_OpenEP (USBD_HandleTypeDef *pdev,
- uint8_t ep_addr,
- uint8_t ep_type,
- uint16_t ep_mps);
+USBD_StatusTypeDef USBD_LL_Init(USBD_HandleTypeDef *pdev);
+USBD_StatusTypeDef USBD_LL_DeInit(USBD_HandleTypeDef *pdev);
+USBD_StatusTypeDef USBD_LL_Start(USBD_HandleTypeDef *pdev);
+USBD_StatusTypeDef USBD_LL_Stop(USBD_HandleTypeDef *pdev);
-USBD_StatusTypeDef USBD_LL_CloseEP (USBD_HandleTypeDef *pdev, uint8_t ep_addr);
-USBD_StatusTypeDef USBD_LL_FlushEP (USBD_HandleTypeDef *pdev, uint8_t ep_addr);
-USBD_StatusTypeDef USBD_LL_StallEP (USBD_HandleTypeDef *pdev, uint8_t ep_addr);
-USBD_StatusTypeDef USBD_LL_ClearStallEP (USBD_HandleTypeDef *pdev, uint8_t ep_addr);
-uint8_t USBD_LL_IsStallEP (USBD_HandleTypeDef *pdev, uint8_t ep_addr);
-USBD_StatusTypeDef USBD_LL_SetUSBAddress (USBD_HandleTypeDef *pdev, uint8_t dev_addr);
-USBD_StatusTypeDef USBD_LL_Transmit (USBD_HandleTypeDef *pdev,
- uint8_t ep_addr,
- uint8_t *pbuf,
- uint16_t size);
+USBD_StatusTypeDef USBD_LL_OpenEP(USBD_HandleTypeDef *pdev, uint8_t ep_addr,
+ uint8_t ep_type, uint16_t ep_mps);
-USBD_StatusTypeDef USBD_LL_PrepareReceive(USBD_HandleTypeDef *pdev,
- uint8_t ep_addr,
- uint8_t *pbuf,
- uint16_t size);
+USBD_StatusTypeDef USBD_LL_CloseEP(USBD_HandleTypeDef *pdev, uint8_t ep_addr);
+USBD_StatusTypeDef USBD_LL_FlushEP(USBD_HandleTypeDef *pdev, uint8_t ep_addr);
+USBD_StatusTypeDef USBD_LL_StallEP(USBD_HandleTypeDef *pdev, uint8_t ep_addr);
+USBD_StatusTypeDef USBD_LL_ClearStallEP(USBD_HandleTypeDef *pdev, uint8_t ep_addr);
+USBD_StatusTypeDef USBD_LL_SetUSBAddress(USBD_HandleTypeDef *pdev, uint8_t dev_addr);
-uint32_t USBD_LL_GetRxDataSize (USBD_HandleTypeDef *pdev, uint8_t ep_addr);
-void USBD_LL_Delay (uint32_t Delay);
+USBD_StatusTypeDef USBD_LL_Transmit(USBD_HandleTypeDef *pdev, uint8_t ep_addr,
+ uint8_t *pbuf, uint32_t size);
+
+USBD_StatusTypeDef USBD_LL_PrepareReceive(USBD_HandleTypeDef *pdev, uint8_t ep_addr,
+ uint8_t *pbuf, uint32_t size);
+
+uint8_t USBD_LL_IsStallEP(USBD_HandleTypeDef *pdev, uint8_t ep_addr);
+uint32_t USBD_LL_GetRxDataSize(USBD_HandleTypeDef *pdev, uint8_t ep_addr);
+
+void USBD_LL_Delay(uint32_t Delay);
/**
* @}
diff --git a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_IAR/Boot/lib/STM32_USB_Device_Library/Core/Inc/usbd_ctlreq.h b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_IAR/Boot/lib/STM32_USB_Device_Library/Core/Inc/usbd_ctlreq.h
index 9fa2873a..a4bfc44b 100644
--- a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_IAR/Boot/lib/STM32_USB_Device_Library/Core/Inc/usbd_ctlreq.h
+++ b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_IAR/Boot/lib/STM32_USB_Device_Library/Core/Inc/usbd_ctlreq.h
@@ -12,7 +12,7 @@
* This software component is licensed by ST under Ultimate Liberty license
* SLA0044, the "License"; You may not use this file except in compliance with
* the License. You may obtain a copy of the License at:
- * http://www.st.com/SLA0044
+ * www.st.com/SLA0044
*
******************************************************************************
*/
@@ -22,7 +22,7 @@
#define __USB_REQUEST_H
#ifdef __cplusplus
- extern "C" {
+extern "C" {
#endif
/* Includes ------------------------------------------------------------------*/
@@ -73,16 +73,14 @@
* @{
*/
-USBD_StatusTypeDef USBD_StdDevReq (USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req);
-USBD_StatusTypeDef USBD_StdItfReq (USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req);
-USBD_StatusTypeDef USBD_StdEPReq (USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req);
+USBD_StatusTypeDef USBD_StdDevReq(USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req);
+USBD_StatusTypeDef USBD_StdItfReq(USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req);
+USBD_StatusTypeDef USBD_StdEPReq(USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req);
+void USBD_CtlError(USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req);
+void USBD_ParseSetupRequest(USBD_SetupReqTypedef *req, uint8_t *pdata);
+void USBD_GetString(uint8_t *desc, uint8_t *unicode, uint16_t *len);
-void USBD_CtlError (USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req);
-
-void USBD_ParseSetupRequest (USBD_SetupReqTypedef *req, uint8_t *pdata);
-
-void USBD_GetString (uint8_t *desc, uint8_t *unicode, uint16_t *len);
/**
* @}
*/
diff --git a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_IAR/Boot/lib/STM32_USB_Device_Library/Core/Inc/usbd_def.h b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_IAR/Boot/lib/STM32_USB_Device_Library/Core/Inc/usbd_def.h
index b1e7968d..8219140f 100644
--- a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_IAR/Boot/lib/STM32_USB_Device_Library/Core/Inc/usbd_def.h
+++ b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_IAR/Boot/lib/STM32_USB_Device_Library/Core/Inc/usbd_def.h
@@ -12,7 +12,7 @@
* This software component is licensed by ST under Ultimate Liberty license
* SLA0044, the "License"; You may not use this file except in compliance with
* the License. You may obtain a copy of the License at:
- * http://www.st.com/SLA0044
+ * www.st.com/SLA0044
*
******************************************************************************
*/
@@ -22,7 +22,7 @@
#define __USBD_DEF_H
#ifdef __cplusplus
- extern "C" {
+extern "C" {
#endif
/* Includes ------------------------------------------------------------------*/
@@ -61,9 +61,13 @@
#define USBD_SELF_POWERED 1U
#endif /*USBD_SELF_POWERED */
-#ifndef USBD_SUPPORT_USER_STRING
-#define USBD_SUPPORT_USER_STRING 0U
-#endif /* USBD_SUPPORT_USER_STRING */
+#ifndef USBD_SUPPORT_USER_STRING_DESC
+#define USBD_SUPPORT_USER_STRING_DESC 0U
+#endif /* USBD_SUPPORT_USER_STRING_DESC */
+
+#ifndef USBD_CLASS_USER_STRING_DESC
+#define USBD_CLASS_USER_STRING_DESC 0U
+#endif /* USBD_CLASS_USER_STRING_DESC */
#define USB_LEN_DEV_QUALIFIER_DESC 0x0AU
#define USB_LEN_DEV_DESC 0x12U
@@ -158,37 +162,58 @@
typedef struct usb_setup_req
{
+ uint8_t bmRequest;
+ uint8_t bRequest;
+ uint16_t wValue;
+ uint16_t wIndex;
+ uint16_t wLength;
+} USBD_SetupReqTypedef;
+
+typedef struct
+{
+ uint8_t bLength;
+ uint8_t bDescriptorType;
+ uint8_t wDescriptorLengthLow;
+ uint8_t wDescriptorLengthHigh;
+ uint8_t bNumInterfaces;
+ uint8_t bConfigurationValue;
+ uint8_t iConfiguration;
+ uint8_t bmAttributes;
+ uint8_t bMaxPower;
+} USBD_ConfigDescTypedef;
+
+typedef struct
+{
+ uint8_t bLength;
+ uint8_t bDescriptorType;
+ uint16_t wTotalLength;
+ uint8_t bNumDeviceCaps;
+} USBD_BosDescTypedef;
- uint8_t bmRequest;
- uint8_t bRequest;
- uint16_t wValue;
- uint16_t wIndex;
- uint16_t wLength;
-}USBD_SetupReqTypedef;
struct _USBD_HandleTypeDef;
typedef struct _Device_cb
{
- uint8_t (*Init) (struct _USBD_HandleTypeDef *pdev , uint8_t cfgidx);
- uint8_t (*DeInit) (struct _USBD_HandleTypeDef *pdev , uint8_t cfgidx);
- /* Control Endpoints*/
- uint8_t (*Setup) (struct _USBD_HandleTypeDef *pdev , USBD_SetupReqTypedef *req);
- uint8_t (*EP0_TxSent) (struct _USBD_HandleTypeDef *pdev );
- uint8_t (*EP0_RxReady) (struct _USBD_HandleTypeDef *pdev );
+ uint8_t (*Init)(struct _USBD_HandleTypeDef *pdev, uint8_t cfgidx);
+ uint8_t (*DeInit)(struct _USBD_HandleTypeDef *pdev, uint8_t cfgidx);
+ /* Control Endpoints*/
+ uint8_t (*Setup)(struct _USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req);
+ uint8_t (*EP0_TxSent)(struct _USBD_HandleTypeDef *pdev);
+ uint8_t (*EP0_RxReady)(struct _USBD_HandleTypeDef *pdev);
/* Class Specific Endpoints*/
- uint8_t (*DataIn) (struct _USBD_HandleTypeDef *pdev , uint8_t epnum);
- uint8_t (*DataOut) (struct _USBD_HandleTypeDef *pdev , uint8_t epnum);
- uint8_t (*SOF) (struct _USBD_HandleTypeDef *pdev);
- uint8_t (*IsoINIncomplete) (struct _USBD_HandleTypeDef *pdev , uint8_t epnum);
- uint8_t (*IsoOUTIncomplete) (struct _USBD_HandleTypeDef *pdev , uint8_t epnum);
+ uint8_t (*DataIn)(struct _USBD_HandleTypeDef *pdev, uint8_t epnum);
+ uint8_t (*DataOut)(struct _USBD_HandleTypeDef *pdev, uint8_t epnum);
+ uint8_t (*SOF)(struct _USBD_HandleTypeDef *pdev);
+ uint8_t (*IsoINIncomplete)(struct _USBD_HandleTypeDef *pdev, uint8_t epnum);
+ uint8_t (*IsoOUTIncomplete)(struct _USBD_HandleTypeDef *pdev, uint8_t epnum);
uint8_t *(*GetHSConfigDescriptor)(uint16_t *length);
uint8_t *(*GetFSConfigDescriptor)(uint16_t *length);
uint8_t *(*GetOtherSpeedConfigDescriptor)(uint16_t *length);
uint8_t *(*GetDeviceQualifierDescriptor)(uint16_t *length);
-#if (USBD_SUPPORT_USER_STRING == 1U)
- uint8_t *(*GetUsrStrDescriptor)(struct _USBD_HandleTypeDef *pdev ,uint8_t index, uint16_t *length);
+#if (USBD_SUPPORT_USER_STRING_DESC == 1U)
+ uint8_t *(*GetUsrStrDescriptor)(struct _USBD_HandleTypeDef *pdev, uint8_t index, uint16_t *length);
#endif
} USBD_ClassTypeDef;
@@ -199,38 +224,44 @@ typedef enum
USBD_SPEED_HIGH = 0U,
USBD_SPEED_FULL = 1U,
USBD_SPEED_LOW = 2U,
-}USBD_SpeedTypeDef;
+} USBD_SpeedTypeDef;
/* Following USB Device status */
-typedef enum {
- USBD_OK = 0U,
+typedef enum
+{
+ USBD_OK = 0U,
USBD_BUSY,
+ USBD_EMEM,
USBD_FAIL,
-}USBD_StatusTypeDef;
+} USBD_StatusTypeDef;
/* USB Device descriptors structure */
typedef struct
{
- uint8_t *(*GetDeviceDescriptor)( USBD_SpeedTypeDef speed , uint16_t *length);
- uint8_t *(*GetLangIDStrDescriptor)( USBD_SpeedTypeDef speed , uint16_t *length);
- uint8_t *(*GetManufacturerStrDescriptor)( USBD_SpeedTypeDef speed , uint16_t *length);
- uint8_t *(*GetProductStrDescriptor)( USBD_SpeedTypeDef speed , uint16_t *length);
- uint8_t *(*GetSerialStrDescriptor)( USBD_SpeedTypeDef speed , uint16_t *length);
- uint8_t *(*GetConfigurationStrDescriptor)( USBD_SpeedTypeDef speed , uint16_t *length);
- uint8_t *(*GetInterfaceStrDescriptor)( USBD_SpeedTypeDef speed , uint16_t *length);
-#if (USBD_LPM_ENABLED == 1U)
- uint8_t *(*GetBOSDescriptor)( USBD_SpeedTypeDef speed , uint16_t *length);
+ uint8_t *(*GetDeviceDescriptor)(USBD_SpeedTypeDef speed, uint16_t *length);
+ uint8_t *(*GetLangIDStrDescriptor)(USBD_SpeedTypeDef speed, uint16_t *length);
+ uint8_t *(*GetManufacturerStrDescriptor)(USBD_SpeedTypeDef speed, uint16_t *length);
+ uint8_t *(*GetProductStrDescriptor)(USBD_SpeedTypeDef speed, uint16_t *length);
+ uint8_t *(*GetSerialStrDescriptor)(USBD_SpeedTypeDef speed, uint16_t *length);
+ uint8_t *(*GetConfigurationStrDescriptor)(USBD_SpeedTypeDef speed, uint16_t *length);
+ uint8_t *(*GetInterfaceStrDescriptor)(USBD_SpeedTypeDef speed, uint16_t *length);
+#if (USBD_CLASS_USER_STRING_DESC == 1)
+ uint8_t *(*GetUserStrDescriptor)(USBD_SpeedTypeDef speed, uint8_t idx, uint16_t *length);
+#endif
+#if ((USBD_LPM_ENABLED == 1U) || (USBD_CLASS_BOS_ENABLED == 1))
+ uint8_t *(*GetBOSDescriptor)(USBD_SpeedTypeDef speed, uint16_t *length);
#endif
} USBD_DescriptorsTypeDef;
/* USB Device handle structure */
typedef struct
{
- uint32_t status;
- uint32_t is_used;
- uint32_t total_length;
- uint32_t rem_length;
- uint32_t maxpacket;
+ uint32_t status;
+ uint32_t total_length;
+ uint32_t rem_length;
+ uint32_t maxpacket;
+ uint16_t is_used;
+ uint16_t bInterval;
} USBD_EndpointTypeDef;
/* USB Device handle structure */
@@ -241,8 +272,8 @@ typedef struct _USBD_HandleTypeDef
uint32_t dev_default_config;
uint32_t dev_config_status;
USBD_SpeedTypeDef dev_speed;
- USBD_EndpointTypeDef ep_in[15];
- USBD_EndpointTypeDef ep_out[15];
+ USBD_EndpointTypeDef ep_in[16];
+ USBD_EndpointTypeDef ep_out[16];
uint32_t ep0_state;
uint32_t ep0_data_len;
uint8_t dev_state;
@@ -251,6 +282,7 @@ typedef struct _USBD_HandleTypeDef
uint8_t dev_connection_status;
uint8_t dev_test_mode;
uint32_t dev_remote_wakeup;
+ uint8_t ConfIdx;
USBD_SetupReqTypedef request;
USBD_DescriptorsTypeDef *pDesc;
@@ -258,6 +290,8 @@ typedef struct _USBD_HandleTypeDef
void *pClassData;
void *pUserData;
void *pData;
+ void *pBosDesc;
+ void *pConfDesc;
} USBD_HandleTypeDef;
/**
@@ -269,40 +303,57 @@ typedef struct _USBD_HandleTypeDef
/** @defgroup USBD_DEF_Exported_Macros
* @{
*/
-#define SWAPBYTE(addr) (((uint16_t)(*((uint8_t *)(addr)))) + \
- (((uint16_t)(*(((uint8_t *)(addr)) + 1U))) << 8U))
+__STATIC_INLINE uint16_t SWAPBYTE(uint8_t *addr)
+{
+ uint16_t _SwapVal, _Byte1, _Byte2;
+ uint8_t *_pbuff = addr;
-#define LOBYTE(x) ((uint8_t)(x & 0x00FFU))
-#define HIBYTE(x) ((uint8_t)((x & 0xFF00U) >> 8U))
+ _Byte1 = *(uint8_t *)_pbuff;
+ _pbuff++;
+ _Byte2 = *(uint8_t *)_pbuff;
+
+ _SwapVal = (_Byte2 << 8) | _Byte1;
+
+ return _SwapVal;
+}
+
+#define LOBYTE(x) ((uint8_t)((x) & 0x00FFU))
+#define HIBYTE(x) ((uint8_t)(((x) & 0xFF00U) >> 8U))
#define MIN(a, b) (((a) < (b)) ? (a) : (b))
#define MAX(a, b) (((a) > (b)) ? (a) : (b))
#if defined ( __GNUC__ )
- #ifndef __weak
- #define __weak __attribute__((weak))
- #endif /* __weak */
- #ifndef __packed
- #define __packed __attribute__((__packed__))
- #endif /* __packed */
+#ifndef __weak
+#define __weak __attribute__((weak))
+#endif /* __weak */
+#ifndef __packed
+#define __packed __attribute__((__packed__))
+#endif /* __packed */
#endif /* __GNUC__ */
/* In HS mode and when the DMA is used, all variables and data structures dealing
with the DMA during the transaction process should be 4-bytes aligned */
-#if defined (__GNUC__) /* GNU Compiler */
- #define __ALIGN_END __attribute__ ((aligned (4)))
- #define __ALIGN_BEGIN
+#if defined ( __GNUC__ ) && !defined (__CC_ARM) /* GNU Compiler */
+#ifndef __ALIGN_END
+#define __ALIGN_END __attribute__ ((aligned (4U)))
+#endif /* __ALIGN_END */
+#ifndef __ALIGN_BEGIN
+#define __ALIGN_BEGIN
+#endif /* __ALIGN_BEGIN */
#else
- #define __ALIGN_END
- #if defined (__CC_ARM) /* ARM Compiler */
- #define __ALIGN_BEGIN __align(4)
- #elif defined (__ICCARM__) /* IAR Compiler */
- #define __ALIGN_BEGIN
- #elif defined (__TASKING__) /* TASKING Compiler */
- #define __ALIGN_BEGIN __align(4)
- #endif /* __CC_ARM */
+#ifndef __ALIGN_END
+#define __ALIGN_END
+#endif /* __ALIGN_END */
+#ifndef __ALIGN_BEGIN
+#if defined (__CC_ARM) /* ARM Compiler */
+#define __ALIGN_BEGIN __align(4U)
+#elif defined (__ICCARM__) /* IAR Compiler */
+#define __ALIGN_BEGIN
+#endif /* __CC_ARM */
+#endif /* __ALIGN_BEGIN */
#endif /* __GNUC__ */
diff --git a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_IAR/Boot/lib/STM32_USB_Device_Library/Core/Inc/usbd_ioreq.h b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_IAR/Boot/lib/STM32_USB_Device_Library/Core/Inc/usbd_ioreq.h
index 0552e00f..8f077c79 100644
--- a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_IAR/Boot/lib/STM32_USB_Device_Library/Core/Inc/usbd_ioreq.h
+++ b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_IAR/Boot/lib/STM32_USB_Device_Library/Core/Inc/usbd_ioreq.h
@@ -12,7 +12,7 @@
* This software component is licensed by ST under Ultimate Liberty license
* SLA0044, the "License"; You may not use this file except in compliance with
* the License. You may obtain a copy of the License at:
- * http://www.st.com/SLA0044
+ * www.st.com/SLA0044
*
******************************************************************************
*/
@@ -22,7 +22,7 @@
#define __USBD_IOREQ_H
#ifdef __cplusplus
- extern "C" {
+extern "C" {
#endif
/* Includes ------------------------------------------------------------------*/
@@ -77,27 +77,22 @@
* @{
*/
-USBD_StatusTypeDef USBD_CtlSendData (USBD_HandleTypeDef *pdev,
- uint8_t *pbuf,
- uint16_t len);
+USBD_StatusTypeDef USBD_CtlSendData(USBD_HandleTypeDef *pdev,
+ uint8_t *pbuf, uint32_t len);
-USBD_StatusTypeDef USBD_CtlContinueSendData (USBD_HandleTypeDef *pdev,
- uint8_t *pbuf,
- uint16_t len);
+USBD_StatusTypeDef USBD_CtlContinueSendData(USBD_HandleTypeDef *pdev,
+ uint8_t *pbuf, uint32_t len);
-USBD_StatusTypeDef USBD_CtlPrepareRx (USBD_HandleTypeDef *pdev,
- uint8_t *pbuf,
- uint16_t len);
+USBD_StatusTypeDef USBD_CtlPrepareRx(USBD_HandleTypeDef *pdev,
+ uint8_t *pbuf, uint32_t len);
-USBD_StatusTypeDef USBD_CtlContinueRx (USBD_HandleTypeDef *pdev,
- uint8_t *pbuf,
- uint16_t len);
+USBD_StatusTypeDef USBD_CtlContinueRx(USBD_HandleTypeDef *pdev,
+ uint8_t *pbuf, uint32_t len);
-USBD_StatusTypeDef USBD_CtlSendStatus (USBD_HandleTypeDef *pdev);
+USBD_StatusTypeDef USBD_CtlSendStatus(USBD_HandleTypeDef *pdev);
+USBD_StatusTypeDef USBD_CtlReceiveStatus(USBD_HandleTypeDef *pdev);
-USBD_StatusTypeDef USBD_CtlReceiveStatus (USBD_HandleTypeDef *pdev);
-
-uint32_t USBD_GetRxCount (USBD_HandleTypeDef *pdev, uint8_t ep_addr);
+uint32_t USBD_GetRxCount(USBD_HandleTypeDef *pdev, uint8_t ep_addr);
/**
* @}
diff --git a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_IAR/Boot/lib/STM32_USB_Device_Library/Core/Src/usbd_core.c b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_IAR/Boot/lib/STM32_USB_Device_Library/Core/Src/usbd_core.c
index 1cc9b19f..e3db03fd 100644
--- a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_IAR/Boot/lib/STM32_USB_Device_Library/Core/Src/usbd_core.c
+++ b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_IAR/Boot/lib/STM32_USB_Device_Library/Core/Src/usbd_core.c
@@ -12,7 +12,7 @@
* This software component is licensed by ST under Ultimate Liberty license
* SLA0044, the "License"; You may not use this file except in compliance with
* the License. You may obtain a copy of the License at:
- * http://www.st.com/SLA0044
+ * www.st.com/SLA0044
*
******************************************************************************
*/
@@ -33,6 +33,7 @@
/** @defgroup USBD_CORE_Private_TypesDefinitions
* @{
*/
+
/**
* @}
*/
@@ -50,13 +51,12 @@
/** @defgroup USBD_CORE_Private_Macros
* @{
*/
+
/**
* @}
*/
-
-
/** @defgroup USBD_CORE_Private_FunctionPrototypes
* @{
*/
@@ -73,6 +73,7 @@
* @}
*/
+
/** @defgroup USBD_CORE_Private_Functions
* @{
*/
@@ -85,10 +86,13 @@
* @param id: Low level core index
* @retval None
*/
-USBD_StatusTypeDef USBD_Init(USBD_HandleTypeDef *pdev, USBD_DescriptorsTypeDef *pdesc, uint8_t id)
+USBD_StatusTypeDef USBD_Init(USBD_HandleTypeDef *pdev,
+ USBD_DescriptorsTypeDef *pdesc, uint8_t id)
{
+ USBD_StatusTypeDef ret;
+
/* Check whether the USB Host handle is valid */
- if(pdev == NULL)
+ if (pdev == NULL)
{
#if (USBD_DEBUG_LEVEL > 1U)
USBD_ErrLog("Invalid Device handle");
@@ -96,25 +100,31 @@ USBD_StatusTypeDef USBD_Init(USBD_HandleTypeDef *pdev, USBD_DescriptorsTypeDef *
return USBD_FAIL;
}
- /* Unlink previous class*/
- if(pdev->pClass != NULL)
+ /* Unlink previous class */
+ if (pdev->pClass != NULL)
{
pdev->pClass = NULL;
}
+ if (pdev->pConfDesc != NULL)
+ {
+ pdev->pConfDesc = NULL;
+ }
+
/* Assign USBD Descriptors */
- if(pdesc != NULL)
+ if (pdesc != NULL)
{
pdev->pDesc = pdesc;
}
/* Set Device initial State */
- pdev->dev_state = USBD_STATE_DEFAULT;
+ pdev->dev_state = USBD_STATE_DEFAULT;
pdev->id = id;
- /* Initialize low level driver */
- USBD_LL_Init(pdev);
- return USBD_OK;
+ /* Initialize low level driver */
+ ret = USBD_LL_Init(pdev);
+
+ return ret;
}
/**
@@ -125,19 +135,34 @@ USBD_StatusTypeDef USBD_Init(USBD_HandleTypeDef *pdev, USBD_DescriptorsTypeDef *
*/
USBD_StatusTypeDef USBD_DeInit(USBD_HandleTypeDef *pdev)
{
+ USBD_StatusTypeDef ret;
+
/* Set Default State */
- pdev->dev_state = USBD_STATE_DEFAULT;
+ pdev->dev_state = USBD_STATE_DEFAULT;
/* Free Class Resources */
- pdev->pClass->DeInit(pdev, (uint8_t)pdev->dev_config);
+ if (pdev->pClass != NULL)
+ {
+ pdev->pClass->DeInit(pdev, (uint8_t)pdev->dev_config);
+ }
- /* Stop the low level driver */
- USBD_LL_Stop(pdev);
+ if (pdev->pConfDesc != NULL)
+ {
+ pdev->pConfDesc = NULL;
+ }
+
+ /* Stop the low level driver */
+ ret = USBD_LL_Stop(pdev);
+
+ if (ret != USBD_OK)
+ {
+ return ret;
+ }
/* Initialize low level driver */
- USBD_LL_DeInit(pdev);
+ ret = USBD_LL_DeInit(pdev);
- return USBD_OK;
+ return ret;
}
/**
@@ -147,24 +172,30 @@ USBD_StatusTypeDef USBD_DeInit(USBD_HandleTypeDef *pdev)
* @param pclass: Class handle
* @retval USBD Status
*/
-USBD_StatusTypeDef USBD_RegisterClass(USBD_HandleTypeDef *pdev, USBD_ClassTypeDef *pclass)
+USBD_StatusTypeDef USBD_RegisterClass(USBD_HandleTypeDef *pdev, USBD_ClassTypeDef *pclass)
{
- USBD_StatusTypeDef status = USBD_OK;
- if(pclass != 0)
- {
- /* link the class to the USB Device handle */
- pdev->pClass = pclass;
- status = USBD_OK;
- }
- else
+ uint16_t len = 0U;
+
+ if (pclass == NULL)
{
#if (USBD_DEBUG_LEVEL > 1U)
USBD_ErrLog("Invalid Class handle");
#endif
- status = USBD_FAIL;
+ return USBD_FAIL;
}
- return status;
+ /* link the class to the USB Device handle */
+ pdev->pClass = pclass;
+
+ /* Get Device Configuration Descriptor */
+#ifdef USE_USB_FS
+ pdev->pConfDesc = (void *)pdev->pClass->GetFSConfigDescriptor(&len);
+#else /* USE_USB_HS */
+ pdev->pConfDesc = (void *)pdev->pClass->GetHSConfigDescriptor(&len);
+#endif /* USE_USB_FS */
+
+
+ return USBD_OK;
}
/**
@@ -173,13 +204,10 @@ USBD_StatusTypeDef USBD_RegisterClass(USBD_HandleTypeDef *pdev, USBD_ClassTypeD
* @param pdev: Device Handle
* @retval USBD Status
*/
-USBD_StatusTypeDef USBD_Start (USBD_HandleTypeDef *pdev)
+USBD_StatusTypeDef USBD_Start(USBD_HandleTypeDef *pdev)
{
-
/* Start the low level driver */
- USBD_LL_Start(pdev);
-
- return USBD_OK;
+ return USBD_LL_Start(pdev);
}
/**
@@ -188,15 +216,25 @@ USBD_StatusTypeDef USBD_Start (USBD_HandleTypeDef *pdev)
* @param pdev: Device Handle
* @retval USBD Status
*/
-USBD_StatusTypeDef USBD_Stop (USBD_HandleTypeDef *pdev)
+USBD_StatusTypeDef USBD_Stop(USBD_HandleTypeDef *pdev)
{
+ USBD_StatusTypeDef ret;
+
/* Free Class Resources */
- pdev->pClass->DeInit(pdev, (uint8_t)pdev->dev_config);
+ if (pdev->pClass != NULL)
+ {
+ pdev->pClass->DeInit(pdev, (uint8_t)pdev->dev_config);
+ }
- /* Stop the low level driver */
- USBD_LL_Stop(pdev);
+ if (pdev->pConfDesc != NULL)
+ {
+ pdev->pConfDesc = NULL;
+ }
- return USBD_OK;
+ /* Stop the low level driver */
+ ret = USBD_LL_Stop(pdev);
+
+ return ret;
}
/**
@@ -205,7 +243,7 @@ USBD_StatusTypeDef USBD_Stop (USBD_HandleTypeDef *pdev)
* @param pdev: device instance
* @retval status
*/
-USBD_StatusTypeDef USBD_RunTestMode (USBD_HandleTypeDef *pdev)
+USBD_StatusTypeDef USBD_RunTestMode(USBD_HandleTypeDef *pdev)
{
/* Prevent unused argument compilation warning */
UNUSED(pdev);
@@ -221,17 +259,14 @@ USBD_StatusTypeDef USBD_RunTestMode (USBD_HandleTypeDef *pdev)
* @retval status
*/
-USBD_StatusTypeDef USBD_SetClassConfig(USBD_HandleTypeDef *pdev, uint8_t cfgidx)
+USBD_StatusTypeDef USBD_SetClassConfig(USBD_HandleTypeDef *pdev, uint8_t cfgidx)
{
- USBD_StatusTypeDef ret = USBD_FAIL;
+ USBD_StatusTypeDef ret = USBD_FAIL;
- if(pdev->pClass != NULL)
+ if (pdev->pClass != NULL)
{
- /* Set configuration and Start the Class*/
- if(pdev->pClass->Init(pdev, cfgidx) == 0U)
- {
- ret = USBD_OK;
- }
+ /* Set configuration and Start the Class */
+ ret = (USBD_StatusTypeDef)pdev->pClass->Init(pdev, cfgidx);
}
return ret;
@@ -244,10 +279,14 @@ USBD_StatusTypeDef USBD_SetClassConfig(USBD_HandleTypeDef *pdev, uint8_t cfgidx
* @param cfgidx: configuration index
* @retval status: USBD_StatusTypeDef
*/
-USBD_StatusTypeDef USBD_ClrClassConfig(USBD_HandleTypeDef *pdev, uint8_t cfgidx)
+USBD_StatusTypeDef USBD_ClrClassConfig(USBD_HandleTypeDef *pdev, uint8_t cfgidx)
{
- /* Clear configuration and De-initialize the Class process*/
- pdev->pClass->DeInit(pdev, cfgidx);
+ /* Clear configuration and De-initialize the Class process */
+ if (pdev->pClass != NULL)
+ {
+ pdev->pClass->DeInit(pdev, cfgidx);
+ }
+
return USBD_OK;
}
@@ -260,6 +299,8 @@ USBD_StatusTypeDef USBD_ClrClassConfig(USBD_HandleTypeDef *pdev, uint8_t cfgidx
*/
USBD_StatusTypeDef USBD_LL_SetupStage(USBD_HandleTypeDef *pdev, uint8_t *psetup)
{
+ USBD_StatusTypeDef ret;
+
USBD_ParseSetupRequest(&pdev->request, psetup);
pdev->ep0_state = USBD_EP0_SETUP;
@@ -268,24 +309,24 @@ USBD_StatusTypeDef USBD_LL_SetupStage(USBD_HandleTypeDef *pdev, uint8_t *psetup)
switch (pdev->request.bmRequest & 0x1FU)
{
- case USB_REQ_RECIPIENT_DEVICE:
- USBD_StdDevReq (pdev, &pdev->request);
- break;
+ case USB_REQ_RECIPIENT_DEVICE:
+ ret = USBD_StdDevReq(pdev, &pdev->request);
+ break;
- case USB_REQ_RECIPIENT_INTERFACE:
- USBD_StdItfReq(pdev, &pdev->request);
- break;
+ case USB_REQ_RECIPIENT_INTERFACE:
+ ret = USBD_StdItfReq(pdev, &pdev->request);
+ break;
- case USB_REQ_RECIPIENT_ENDPOINT:
- USBD_StdEPReq(pdev, &pdev->request);
- break;
+ case USB_REQ_RECIPIENT_ENDPOINT:
+ ret = USBD_StdEPReq(pdev, &pdev->request);
+ break;
- default:
- USBD_LL_StallEP(pdev, (pdev->request.bmRequest & 0x80U));
- break;
+ default:
+ ret = USBD_LL_StallEP(pdev, (pdev->request.bmRequest & 0x80U));
+ break;
}
- return USBD_OK;
+ return ret;
}
/**
@@ -298,48 +339,54 @@ USBD_StatusTypeDef USBD_LL_SetupStage(USBD_HandleTypeDef *pdev, uint8_t *psetup)
USBD_StatusTypeDef USBD_LL_DataOutStage(USBD_HandleTypeDef *pdev,
uint8_t epnum, uint8_t *pdata)
{
- USBD_EndpointTypeDef *pep;
+ USBD_EndpointTypeDef *pep;
+ USBD_StatusTypeDef ret;
- if(epnum == 0U)
+ if (epnum == 0U)
{
pep = &pdev->ep_out[0];
- if ( pdev->ep0_state == USBD_EP0_DATA_OUT)
+ if (pdev->ep0_state == USBD_EP0_DATA_OUT)
{
- if(pep->rem_length > pep->maxpacket)
+ if (pep->rem_length > pep->maxpacket)
{
- pep->rem_length -= pep->maxpacket;
+ pep->rem_length -= pep->maxpacket;
- USBD_CtlContinueRx (pdev,
- pdata,
- (uint16_t)MIN(pep->rem_length, pep->maxpacket));
+ (void)USBD_CtlContinueRx(pdev, pdata, MIN(pep->rem_length, pep->maxpacket));
}
else
{
- if((pdev->pClass->EP0_RxReady != NULL)&&
- (pdev->dev_state == USBD_STATE_CONFIGURED))
+ if ((pdev->pClass->EP0_RxReady != NULL) &&
+ (pdev->dev_state == USBD_STATE_CONFIGURED))
{
pdev->pClass->EP0_RxReady(pdev);
}
- USBD_CtlSendStatus(pdev);
+ (void)USBD_CtlSendStatus(pdev);
}
}
else
{
+#if 0
if (pdev->ep0_state == USBD_EP0_STATUS_OUT)
{
/*
* STATUS PHASE completed, update ep0_state to idle
*/
pdev->ep0_state = USBD_EP0_IDLE;
- USBD_LL_StallEP(pdev, 0U);
+ (void)USBD_LL_StallEP(pdev, 0U);
}
+#endif
}
}
- else if((pdev->pClass->DataOut != NULL) &&
- (pdev->dev_state == USBD_STATE_CONFIGURED))
+ else if ((pdev->pClass->DataOut != NULL) &&
+ (pdev->dev_state == USBD_STATE_CONFIGURED))
{
- pdev->pClass->DataOut(pdev, epnum);
+ ret = (USBD_StatusTypeDef)pdev->pClass->DataOut(pdev, epnum);
+
+ if (ret != USBD_OK)
+ {
+ return ret;
+ }
}
else
{
@@ -357,69 +404,78 @@ USBD_StatusTypeDef USBD_LL_DataOutStage(USBD_HandleTypeDef *pdev,
* @param epnum: endpoint index
* @retval status
*/
-USBD_StatusTypeDef USBD_LL_DataInStage(USBD_HandleTypeDef *pdev, uint8_t epnum,
- uint8_t *pdata)
+USBD_StatusTypeDef USBD_LL_DataInStage(USBD_HandleTypeDef *pdev,
+ uint8_t epnum, uint8_t *pdata)
{
USBD_EndpointTypeDef *pep;
+ USBD_StatusTypeDef ret;
- if(epnum == 0U)
+ if (epnum == 0U)
{
pep = &pdev->ep_in[0];
- if ( pdev->ep0_state == USBD_EP0_DATA_IN)
+ if (pdev->ep0_state == USBD_EP0_DATA_IN)
{
- if(pep->rem_length > pep->maxpacket)
+ if (pep->rem_length > pep->maxpacket)
{
pep->rem_length -= pep->maxpacket;
- USBD_CtlContinueSendData (pdev, pdata, (uint16_t)pep->rem_length);
+ (void)USBD_CtlContinueSendData(pdev, pdata, pep->rem_length);
/* Prepare endpoint for premature end of transfer */
- USBD_LL_PrepareReceive (pdev, 0U, NULL, 0U);
+ (void)USBD_LL_PrepareReceive(pdev, 0U, NULL, 0U);
}
else
- { /* last packet is MPS multiple, so send ZLP packet */
- if((pep->total_length % pep->maxpacket == 0U) &&
- (pep->total_length >= pep->maxpacket) &&
- (pep->total_length < pdev->ep0_data_len))
+ {
+ /* last packet is MPS multiple, so send ZLP packet */
+ if ((pep->maxpacket == pep->rem_length) &&
+ (pep->total_length >= pep->maxpacket) &&
+ (pep->total_length < pdev->ep0_data_len))
{
- USBD_CtlContinueSendData(pdev, NULL, 0U);
+ (void)USBD_CtlContinueSendData(pdev, NULL, 0U);
pdev->ep0_data_len = 0U;
/* Prepare endpoint for premature end of transfer */
- USBD_LL_PrepareReceive (pdev, 0U, NULL, 0U);
+ (void)USBD_LL_PrepareReceive(pdev, 0U, NULL, 0U);
}
else
{
- if((pdev->pClass->EP0_TxSent != NULL)&&
- (pdev->dev_state == USBD_STATE_CONFIGURED))
+ if ((pdev->pClass->EP0_TxSent != NULL) &&
+ (pdev->dev_state == USBD_STATE_CONFIGURED))
{
pdev->pClass->EP0_TxSent(pdev);
}
- USBD_LL_StallEP(pdev, 0x80U);
- USBD_CtlReceiveStatus(pdev);
+ (void)USBD_LL_StallEP(pdev, 0x80U);
+ (void)USBD_CtlReceiveStatus(pdev);
}
}
}
else
{
+#if 0
if ((pdev->ep0_state == USBD_EP0_STATUS_IN) ||
(pdev->ep0_state == USBD_EP0_IDLE))
{
- USBD_LL_StallEP(pdev, 0x80U);
+ (void)USBD_LL_StallEP(pdev, 0x80U);
}
+#endif
}
if (pdev->dev_test_mode == 1U)
{
- USBD_RunTestMode(pdev);
+ (void)USBD_RunTestMode(pdev);
pdev->dev_test_mode = 0U;
}
}
- else if((pdev->pClass->DataIn != NULL) &&
- (pdev->dev_state == USBD_STATE_CONFIGURED))
+ else if ((pdev->pClass->DataIn != NULL) &&
+ (pdev->dev_state == USBD_STATE_CONFIGURED))
{
- pdev->pClass->DataIn(pdev, epnum);
+ ret = (USBD_StatusTypeDef)pdev->pClass->DataIn(pdev, epnum);
+
+ if (ret != USBD_OK)
+ {
+ return ret;
+ }
}
else
{
@@ -437,29 +493,30 @@ USBD_StatusTypeDef USBD_LL_DataInStage(USBD_HandleTypeDef *pdev, uint8_t epnum,
* @retval status
*/
-USBD_StatusTypeDef USBD_LL_Reset(USBD_HandleTypeDef *pdev)
+USBD_StatusTypeDef USBD_LL_Reset(USBD_HandleTypeDef *pdev)
{
- /* Open EP0 OUT */
- USBD_LL_OpenEP(pdev, 0x00U, USBD_EP_TYPE_CTRL, USB_MAX_EP0_SIZE);
+ /* Upon Reset call user call back */
+ pdev->dev_state = USBD_STATE_DEFAULT;
+ pdev->ep0_state = USBD_EP0_IDLE;
+ pdev->dev_config = 0U;
+ pdev->dev_remote_wakeup = 0U;
+
+ if (pdev->pClassData != NULL)
+ {
+ pdev->pClass->DeInit(pdev, (uint8_t)pdev->dev_config);
+ }
+
+ /* Open EP0 OUT */
+ (void)USBD_LL_OpenEP(pdev, 0x00U, USBD_EP_TYPE_CTRL, USB_MAX_EP0_SIZE);
pdev->ep_out[0x00U & 0xFU].is_used = 1U;
pdev->ep_out[0].maxpacket = USB_MAX_EP0_SIZE;
/* Open EP0 IN */
- USBD_LL_OpenEP(pdev, 0x80U, USBD_EP_TYPE_CTRL, USB_MAX_EP0_SIZE);
+ (void)USBD_LL_OpenEP(pdev, 0x80U, USBD_EP_TYPE_CTRL, USB_MAX_EP0_SIZE);
pdev->ep_in[0x80U & 0xFU].is_used = 1U;
pdev->ep_in[0].maxpacket = USB_MAX_EP0_SIZE;
- /* Upon Reset call user call back */
- pdev->dev_state = USBD_STATE_DEFAULT;
- pdev->ep0_state = USBD_EP0_IDLE;
- pdev->dev_config= 0U;
- pdev->dev_remote_wakeup = 0U;
-
- if (pdev->pClassData)
- {
- pdev->pClass->DeInit(pdev, (uint8_t)pdev->dev_config);
- }
return USBD_OK;
}
@@ -470,9 +527,11 @@ USBD_StatusTypeDef USBD_LL_Reset(USBD_HandleTypeDef *pdev)
* @param pdev: device instance
* @retval status
*/
-USBD_StatusTypeDef USBD_LL_SetSpeed(USBD_HandleTypeDef *pdev, USBD_SpeedTypeDef speed)
+USBD_StatusTypeDef USBD_LL_SetSpeed(USBD_HandleTypeDef *pdev,
+ USBD_SpeedTypeDef speed)
{
pdev->dev_speed = speed;
+
return USBD_OK;
}
@@ -483,10 +542,11 @@ USBD_StatusTypeDef USBD_LL_SetSpeed(USBD_HandleTypeDef *pdev, USBD_SpeedTypeDef
* @retval status
*/
-USBD_StatusTypeDef USBD_LL_Suspend(USBD_HandleTypeDef *pdev)
+USBD_StatusTypeDef USBD_LL_Suspend(USBD_HandleTypeDef *pdev)
{
- pdev->dev_old_state = pdev->dev_state;
- pdev->dev_state = USBD_STATE_SUSPENDED;
+ pdev->dev_old_state = pdev->dev_state;
+ pdev->dev_state = USBD_STATE_SUSPENDED;
+
return USBD_OK;
}
@@ -497,9 +557,13 @@ USBD_StatusTypeDef USBD_LL_Suspend(USBD_HandleTypeDef *pdev)
* @retval status
*/
-USBD_StatusTypeDef USBD_LL_Resume(USBD_HandleTypeDef *pdev)
+USBD_StatusTypeDef USBD_LL_Resume(USBD_HandleTypeDef *pdev)
{
- pdev->dev_state = pdev->dev_old_state;
+ if (pdev->dev_state == USBD_STATE_SUSPENDED)
+ {
+ pdev->dev_state = pdev->dev_old_state;
+ }
+
return USBD_OK;
}
@@ -510,15 +574,16 @@ USBD_StatusTypeDef USBD_LL_Resume(USBD_HandleTypeDef *pdev)
* @retval status
*/
-USBD_StatusTypeDef USBD_LL_SOF(USBD_HandleTypeDef *pdev)
+USBD_StatusTypeDef USBD_LL_SOF(USBD_HandleTypeDef *pdev)
{
- if(pdev->dev_state == USBD_STATE_CONFIGURED)
+ if (pdev->dev_state == USBD_STATE_CONFIGURED)
{
- if(pdev->pClass->SOF != NULL)
+ if (pdev->pClass->SOF != NULL)
{
pdev->pClass->SOF(pdev);
}
}
+
return USBD_OK;
}
@@ -528,7 +593,8 @@ USBD_StatusTypeDef USBD_LL_SOF(USBD_HandleTypeDef *pdev)
* @param pdev: device instance
* @retval status
*/
-USBD_StatusTypeDef USBD_LL_IsoINIncomplete(USBD_HandleTypeDef *pdev, uint8_t epnum)
+USBD_StatusTypeDef USBD_LL_IsoINIncomplete(USBD_HandleTypeDef *pdev,
+ uint8_t epnum)
{
/* Prevent unused arguments compilation warning */
UNUSED(pdev);
@@ -543,7 +609,8 @@ USBD_StatusTypeDef USBD_LL_IsoINIncomplete(USBD_HandleTypeDef *pdev, uint8_t ep
* @param pdev: device instance
* @retval status
*/
-USBD_StatusTypeDef USBD_LL_IsoOUTIncomplete(USBD_HandleTypeDef *pdev, uint8_t epnum)
+USBD_StatusTypeDef USBD_LL_IsoOUTIncomplete(USBD_HandleTypeDef *pdev,
+ uint8_t epnum)
{
/* Prevent unused arguments compilation warning */
UNUSED(pdev);
@@ -558,7 +625,7 @@ USBD_StatusTypeDef USBD_LL_IsoOUTIncomplete(USBD_HandleTypeDef *pdev, uint8_t e
* @param pdev: device instance
* @retval status
*/
-USBD_StatusTypeDef USBD_LL_DevConnected(USBD_HandleTypeDef *pdev)
+USBD_StatusTypeDef USBD_LL_DevConnected(USBD_HandleTypeDef *pdev)
{
/* Prevent unused argument compilation warning */
UNUSED(pdev);
@@ -572,11 +639,15 @@ USBD_StatusTypeDef USBD_LL_DevConnected(USBD_HandleTypeDef *pdev)
* @param pdev: device instance
* @retval status
*/
-USBD_StatusTypeDef USBD_LL_DevDisconnected(USBD_HandleTypeDef *pdev)
+USBD_StatusTypeDef USBD_LL_DevDisconnected(USBD_HandleTypeDef *pdev)
{
/* Free Class Resources */
pdev->dev_state = USBD_STATE_DEFAULT;
- pdev->pClass->DeInit(pdev, (uint8_t)pdev->dev_config);
+
+ if (pdev->pClass != NULL)
+ {
+ pdev->pClass->DeInit(pdev, (uint8_t)pdev->dev_config);
+ }
return USBD_OK;
}
diff --git a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_IAR/Boot/lib/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.c b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_IAR/Boot/lib/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.c
index c3e7ecbe..c51f3497 100644
--- a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_IAR/Boot/lib/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.c
+++ b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_IAR/Boot/lib/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.c
@@ -12,7 +12,7 @@
* This software component is licensed by ST under Ultimate Liberty license
* SLA0044, the "License"; You may not use this file except in compliance with
* the License. You may obtain a copy of the License at:
- * http://www.st.com/SLA0044
+ * www.st.com/SLA0044
*
******************************************************************************
*/
@@ -35,6 +35,7 @@
/** @defgroup USBD_REQ_Private_TypesDefinitions
* @{
*/
+
/**
* @}
*/
@@ -52,6 +53,7 @@
/** @defgroup USBD_REQ_Private_Macros
* @{
*/
+
/**
* @}
*/
@@ -60,6 +62,7 @@
/** @defgroup USBD_REQ_Private_Variables
* @{
*/
+
/**
* @}
*/
@@ -68,27 +71,13 @@
/** @defgroup USBD_REQ_Private_FunctionPrototypes
* @{
*/
-static void USBD_GetDescriptor(USBD_HandleTypeDef *pdev ,
- USBD_SetupReqTypedef *req);
-
-static void USBD_SetAddress(USBD_HandleTypeDef *pdev ,
- USBD_SetupReqTypedef *req);
-
-static void USBD_SetConfig(USBD_HandleTypeDef *pdev ,
- USBD_SetupReqTypedef *req);
-
-static void USBD_GetConfig(USBD_HandleTypeDef *pdev ,
- USBD_SetupReqTypedef *req);
-
-static void USBD_GetStatus(USBD_HandleTypeDef *pdev ,
- USBD_SetupReqTypedef *req);
-
-static void USBD_SetFeature(USBD_HandleTypeDef *pdev ,
- USBD_SetupReqTypedef *req);
-
-static void USBD_ClrFeature(USBD_HandleTypeDef *pdev ,
- USBD_SetupReqTypedef *req);
-
+static void USBD_GetDescriptor(USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req);
+static void USBD_SetAddress(USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req);
+static USBD_StatusTypeDef USBD_SetConfig(USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req);
+static void USBD_GetConfig(USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req);
+static void USBD_GetStatus(USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req);
+static void USBD_SetFeature(USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req);
+static void USBD_ClrFeature(USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req);
static uint8_t USBD_GetLen(uint8_t *buf);
/**
@@ -108,7 +97,7 @@ static uint8_t USBD_GetLen(uint8_t *buf);
* @param req: usb request
* @retval status
*/
-USBD_StatusTypeDef USBD_StdDevReq (USBD_HandleTypeDef *pdev , USBD_SetupReqTypedef *req)
+USBD_StatusTypeDef USBD_StdDevReq(USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req)
{
USBD_StatusTypeDef ret = USBD_OK;
@@ -116,41 +105,38 @@ USBD_StatusTypeDef USBD_StdDevReq (USBD_HandleTypeDef *pdev , USBD_SetupReqType
{
case USB_REQ_TYPE_CLASS:
case USB_REQ_TYPE_VENDOR:
- pdev->pClass->Setup(pdev, req);
+ ret = (USBD_StatusTypeDef)pdev->pClass->Setup(pdev, req);
break;
case USB_REQ_TYPE_STANDARD:
-
switch (req->bRequest)
{
case USB_REQ_GET_DESCRIPTOR:
-
- USBD_GetDescriptor (pdev, req);
+ USBD_GetDescriptor(pdev, req);
break;
case USB_REQ_SET_ADDRESS:
- USBD_SetAddress (pdev, req);
+ USBD_SetAddress(pdev, req);
break;
case USB_REQ_SET_CONFIGURATION:
- USBD_SetConfig (pdev, req);
+ ret = USBD_SetConfig(pdev, req);
break;
case USB_REQ_GET_CONFIGURATION:
- USBD_GetConfig (pdev, req);
+ USBD_GetConfig(pdev, req);
break;
case USB_REQ_GET_STATUS:
- USBD_GetStatus (pdev, req);
+ USBD_GetStatus(pdev, req);
break;
-
case USB_REQ_SET_FEATURE:
- USBD_SetFeature (pdev, req);
+ USBD_SetFeature(pdev, req);
break;
case USB_REQ_CLEAR_FEATURE:
- USBD_ClrFeature (pdev, req);
+ USBD_ClrFeature(pdev, req);
break;
default:
@@ -174,7 +160,7 @@ USBD_StatusTypeDef USBD_StdDevReq (USBD_HandleTypeDef *pdev , USBD_SetupReqType
* @param req: usb request
* @retval status
*/
-USBD_StatusTypeDef USBD_StdItfReq (USBD_HandleTypeDef *pdev , USBD_SetupReqTypedef *req)
+USBD_StatusTypeDef USBD_StdItfReq(USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req)
{
USBD_StatusTypeDef ret = USBD_OK;
@@ -191,11 +177,11 @@ USBD_StatusTypeDef USBD_StdItfReq (USBD_HandleTypeDef *pdev , USBD_SetupReqType
if (LOBYTE(req->wIndex) <= USBD_MAX_NUM_INTERFACES)
{
- ret = (USBD_StatusTypeDef)pdev->pClass->Setup (pdev, req);
+ ret = (USBD_StatusTypeDef)pdev->pClass->Setup(pdev, req);
if ((req->wLength == 0U) && (ret == USBD_OK))
{
- USBD_CtlSendStatus(pdev);
+ (void)USBD_CtlSendStatus(pdev);
}
}
else
@@ -215,7 +201,7 @@ USBD_StatusTypeDef USBD_StdItfReq (USBD_HandleTypeDef *pdev , USBD_SetupReqType
break;
}
- return USBD_OK;
+ return ret;
}
/**
@@ -225,43 +211,31 @@ USBD_StatusTypeDef USBD_StdItfReq (USBD_HandleTypeDef *pdev , USBD_SetupReqType
* @param req: usb request
* @retval status
*/
-USBD_StatusTypeDef USBD_StdEPReq (USBD_HandleTypeDef *pdev , USBD_SetupReqTypedef *req)
+USBD_StatusTypeDef USBD_StdEPReq(USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req)
{
-
- uint8_t ep_addr;
+ USBD_EndpointTypeDef *pep;
+ uint8_t ep_addr;
USBD_StatusTypeDef ret = USBD_OK;
- USBD_EndpointTypeDef *pep;
- ep_addr = LOBYTE(req->wIndex);
+ ep_addr = LOBYTE(req->wIndex);
switch (req->bmRequest & USB_REQ_TYPE_MASK)
{
-
case USB_REQ_TYPE_CLASS:
case USB_REQ_TYPE_VENDOR:
- pdev->pClass->Setup (pdev, req);
+ ret = (USBD_StatusTypeDef)pdev->pClass->Setup(pdev, req);
break;
case USB_REQ_TYPE_STANDARD:
- /* Check if it is a class request */
- if ((req->bmRequest & 0x60U) == 0x20U)
- {
- ret = (USBD_StatusTypeDef)pdev->pClass->Setup (pdev, req);
-
- return ret;
- }
-
switch (req->bRequest)
{
-
- case USB_REQ_SET_FEATURE :
-
+ case USB_REQ_SET_FEATURE:
switch (pdev->dev_state)
{
case USBD_STATE_ADDRESSED:
if ((ep_addr != 0x00U) && (ep_addr != 0x80U))
{
- USBD_LL_StallEP(pdev, ep_addr);
- USBD_LL_StallEP(pdev, 0x80U);
+ (void)USBD_LL_StallEP(pdev, ep_addr);
+ (void)USBD_LL_StallEP(pdev, 0x80U);
}
else
{
@@ -274,10 +248,10 @@ USBD_StatusTypeDef USBD_StdEPReq (USBD_HandleTypeDef *pdev , USBD_SetupReqTyped
{
if ((ep_addr != 0x00U) && (ep_addr != 0x80U) && (req->wLength == 0x00U))
{
- USBD_LL_StallEP(pdev, ep_addr);
+ (void)USBD_LL_StallEP(pdev, ep_addr);
}
}
- USBD_CtlSendStatus(pdev);
+ (void)USBD_CtlSendStatus(pdev);
break;
@@ -287,15 +261,15 @@ USBD_StatusTypeDef USBD_StdEPReq (USBD_HandleTypeDef *pdev , USBD_SetupReqTyped
}
break;
- case USB_REQ_CLEAR_FEATURE :
+ case USB_REQ_CLEAR_FEATURE:
switch (pdev->dev_state)
{
case USBD_STATE_ADDRESSED:
if ((ep_addr != 0x00U) && (ep_addr != 0x80U))
{
- USBD_LL_StallEP(pdev, ep_addr);
- USBD_LL_StallEP(pdev, 0x80U);
+ (void)USBD_LL_StallEP(pdev, ep_addr);
+ (void)USBD_LL_StallEP(pdev, 0x80U);
}
else
{
@@ -308,9 +282,10 @@ USBD_StatusTypeDef USBD_StdEPReq (USBD_HandleTypeDef *pdev , USBD_SetupReqTyped
{
if ((ep_addr & 0x7FU) != 0x00U)
{
- USBD_LL_ClearStallEP(pdev, ep_addr);
+ (void)USBD_LL_ClearStallEP(pdev, ep_addr);
}
- USBD_CtlSendStatus(pdev);
+ (void)USBD_CtlSendStatus(pdev);
+ (USBD_StatusTypeDef)pdev->pClass->Setup(pdev, req);
}
break;
@@ -329,16 +304,16 @@ USBD_StatusTypeDef USBD_StdEPReq (USBD_HandleTypeDef *pdev , USBD_SetupReqTyped
USBD_CtlError(pdev, req);
break;
}
- pep = ((ep_addr & 0x80U) == 0x80U) ? &pdev->ep_in[ep_addr & 0x7FU]:\
- &pdev->ep_out[ep_addr & 0x7FU];
+ pep = ((ep_addr & 0x80U) == 0x80U) ? &pdev->ep_in[ep_addr & 0x7FU] : \
+ &pdev->ep_out[ep_addr & 0x7FU];
- pep->status = 0x0000U;
+ pep->status = 0x0000U;
- USBD_CtlSendData (pdev, (uint8_t *)(void *)&pep->status, 2U);
- break;
+ (void)USBD_CtlSendData(pdev, (uint8_t *)&pep->status, 2U);
+ break;
case USBD_STATE_CONFIGURED:
- if((ep_addr & 0x80U) == 0x80U)
+ if ((ep_addr & 0x80U) == 0x80U)
{
if (pdev->ep_in[ep_addr & 0xFU].is_used == 0U)
{
@@ -355,14 +330,14 @@ USBD_StatusTypeDef USBD_StdEPReq (USBD_HandleTypeDef *pdev , USBD_SetupReqTyped
}
}
- pep = ((ep_addr & 0x80U) == 0x80U) ? &pdev->ep_in[ep_addr & 0x7FU]:\
- &pdev->ep_out[ep_addr & 0x7FU];
+ pep = ((ep_addr & 0x80U) == 0x80U) ? &pdev->ep_in[ep_addr & 0x7FU] : \
+ &pdev->ep_out[ep_addr & 0x7FU];
if ((ep_addr == 0x00U) || (ep_addr == 0x80U))
{
pep->status = 0x0000U;
}
- else if(USBD_LL_IsStallEP(pdev, ep_addr))
+ else if (USBD_LL_IsStallEP(pdev, ep_addr) != 0U)
{
pep->status = 0x0001U;
}
@@ -371,7 +346,7 @@ USBD_StatusTypeDef USBD_StdEPReq (USBD_HandleTypeDef *pdev , USBD_SetupReqTyped
pep->status = 0x0000U;
}
- USBD_CtlSendData (pdev, (uint8_t *)(void *)&pep->status, 2U);
+ (void)USBD_CtlSendData(pdev, (uint8_t *)&pep->status, 2U);
break;
default:
@@ -393,6 +368,8 @@ USBD_StatusTypeDef USBD_StdEPReq (USBD_HandleTypeDef *pdev , USBD_SetupReqTyped
return ret;
}
+
+
/**
* @brief USBD_GetDescriptor
* Handle Get Descriptor requests
@@ -400,18 +377,25 @@ USBD_StatusTypeDef USBD_StdEPReq (USBD_HandleTypeDef *pdev , USBD_SetupReqTyped
* @param req: usb request
* @retval status
*/
-static void USBD_GetDescriptor(USBD_HandleTypeDef *pdev ,
- USBD_SetupReqTypedef *req)
+static void USBD_GetDescriptor(USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req)
{
- uint16_t len;
- uint8_t *pbuf;
-
+ uint16_t len = 0U;
+ uint8_t *pbuf = NULL;
+ uint8_t err = 0U;
switch (req->wValue >> 8)
{
-#if (USBD_LPM_ENABLED == 1U)
+#if ((USBD_LPM_ENABLED == 1U) || (USBD_CLASS_BOS_ENABLED == 1U))
case USB_DESC_TYPE_BOS:
- pbuf = pdev->pDesc->GetBOSDescriptor(pdev->dev_speed, &len);
+ if (pdev->pDesc->GetBOSDescriptor != NULL)
+ {
+ pbuf = pdev->pDesc->GetBOSDescriptor(pdev->dev_speed, &len);
+ }
+ else
+ {
+ USBD_CtlError(pdev, req);
+ err++;
+ }
break;
#endif
case USB_DESC_TYPE_DEVICE:
@@ -419,14 +403,14 @@ static void USBD_GetDescriptor(USBD_HandleTypeDef *pdev ,
break;
case USB_DESC_TYPE_CONFIGURATION:
- if(pdev->dev_speed == USBD_SPEED_HIGH )
+ if (pdev->dev_speed == USBD_SPEED_HIGH)
{
- pbuf = (uint8_t *)pdev->pClass->GetHSConfigDescriptor(&len);
+ pbuf = pdev->pClass->GetHSConfigDescriptor(&len);
pbuf[1] = USB_DESC_TYPE_CONFIGURATION;
}
else
{
- pbuf = (uint8_t *)pdev->pClass->GetFSConfigDescriptor(&len);
+ pbuf = pdev->pClass->GetFSConfigDescriptor(&len);
pbuf[1] = USB_DESC_TYPE_CONFIGURATION;
}
break;
@@ -435,81 +419,159 @@ static void USBD_GetDescriptor(USBD_HandleTypeDef *pdev ,
switch ((uint8_t)(req->wValue))
{
case USBD_IDX_LANGID_STR:
- pbuf = pdev->pDesc->GetLangIDStrDescriptor(pdev->dev_speed, &len);
+ if (pdev->pDesc->GetLangIDStrDescriptor != NULL)
+ {
+ pbuf = pdev->pDesc->GetLangIDStrDescriptor(pdev->dev_speed, &len);
+ }
+ else
+ {
+ USBD_CtlError(pdev, req);
+ err++;
+ }
break;
case USBD_IDX_MFC_STR:
- pbuf = pdev->pDesc->GetManufacturerStrDescriptor(pdev->dev_speed, &len);
+ if (pdev->pDesc->GetManufacturerStrDescriptor != NULL)
+ {
+ pbuf = pdev->pDesc->GetManufacturerStrDescriptor(pdev->dev_speed, &len);
+ }
+ else
+ {
+ USBD_CtlError(pdev, req);
+ err++;
+ }
break;
case USBD_IDX_PRODUCT_STR:
- pbuf = pdev->pDesc->GetProductStrDescriptor(pdev->dev_speed, &len);
+ if (pdev->pDesc->GetProductStrDescriptor != NULL)
+ {
+ pbuf = pdev->pDesc->GetProductStrDescriptor(pdev->dev_speed, &len);
+ }
+ else
+ {
+ USBD_CtlError(pdev, req);
+ err++;
+ }
break;
case USBD_IDX_SERIAL_STR:
- pbuf = pdev->pDesc->GetSerialStrDescriptor(pdev->dev_speed, &len);
+ if (pdev->pDesc->GetSerialStrDescriptor != NULL)
+ {
+ pbuf = pdev->pDesc->GetSerialStrDescriptor(pdev->dev_speed, &len);
+ }
+ else
+ {
+ USBD_CtlError(pdev, req);
+ err++;
+ }
break;
case USBD_IDX_CONFIG_STR:
- pbuf = pdev->pDesc->GetConfigurationStrDescriptor(pdev->dev_speed, &len);
+ if (pdev->pDesc->GetConfigurationStrDescriptor != NULL)
+ {
+ pbuf = pdev->pDesc->GetConfigurationStrDescriptor(pdev->dev_speed, &len);
+ }
+ else
+ {
+ USBD_CtlError(pdev, req);
+ err++;
+ }
break;
case USBD_IDX_INTERFACE_STR:
- pbuf = pdev->pDesc->GetInterfaceStrDescriptor(pdev->dev_speed, &len);
+ if (pdev->pDesc->GetInterfaceStrDescriptor != NULL)
+ {
+ pbuf = pdev->pDesc->GetInterfaceStrDescriptor(pdev->dev_speed, &len);
+ }
+ else
+ {
+ USBD_CtlError(pdev, req);
+ err++;
+ }
break;
default:
-#if (USBD_SUPPORT_USER_STRING == 1U)
- pbuf = pdev->pClass->GetUsrStrDescriptor(pdev, (req->wValue) , &len);
- break;
+#if (USBD_SUPPORT_USER_STRING_DESC == 1U)
+ if (pdev->pClass->GetUsrStrDescriptor != NULL)
+ {
+ pbuf = pdev->pClass->GetUsrStrDescriptor(pdev, (req->wValue), &len);
+ }
+ else
+ {
+ USBD_CtlError(pdev, req);
+ err++;
+ }
+#elif (USBD_CLASS_USER_STRING_DESC == 1U)
+ if (pdev->pDesc->GetUserStrDescriptor != NULL)
+ {
+ pbuf = pdev->pDesc->GetUserStrDescriptor(pdev->dev_speed, (req->wValue), &len);
+ }
+ else
+ {
+ USBD_CtlError(pdev, req);
+ err++;
+ }
#else
- USBD_CtlError(pdev , req);
- return;
+ USBD_CtlError(pdev, req);
+ err++;
#endif
+ break;
}
break;
- case USB_DESC_TYPE_DEVICE_QUALIFIER:
- if(pdev->dev_speed == USBD_SPEED_HIGH)
+ case USB_DESC_TYPE_DEVICE_QUALIFIER:
+ if (pdev->dev_speed == USBD_SPEED_HIGH)
{
- pbuf = (uint8_t *)pdev->pClass->GetDeviceQualifierDescriptor(&len);
- break;
+ pbuf = pdev->pClass->GetDeviceQualifierDescriptor(&len);
}
else
{
- USBD_CtlError(pdev , req);
- return;
+ USBD_CtlError(pdev, req);
+ err++;
}
+ break;
case USB_DESC_TYPE_OTHER_SPEED_CONFIGURATION:
- if(pdev->dev_speed == USBD_SPEED_HIGH )
+ if (pdev->dev_speed == USBD_SPEED_HIGH)
{
- pbuf = (uint8_t *)pdev->pClass->GetOtherSpeedConfigDescriptor(&len);
+ pbuf = pdev->pClass->GetOtherSpeedConfigDescriptor(&len);
pbuf[1] = USB_DESC_TYPE_OTHER_SPEED_CONFIGURATION;
- break;
}
else
{
- USBD_CtlError(pdev , req);
- return;
+ USBD_CtlError(pdev, req);
+ err++;
}
+ break;
default:
- USBD_CtlError(pdev , req);
+ USBD_CtlError(pdev, req);
+ err++;
+ break;
+ }
+
+ if (err != 0U)
+ {
return;
}
-
- if((len != 0U) && (req->wLength != 0U))
+ else
{
-
- len = MIN(len, req->wLength);
-
- USBD_CtlSendData (pdev, pbuf, len);
- }
-
- if(req->wLength == 0U)
- {
- USBD_CtlSendStatus(pdev);
+ if (req->wLength != 0U)
+ {
+ if (len != 0U)
+ {
+ len = MIN(len, req->wLength);
+ (void)USBD_CtlSendData(pdev, pbuf, len);
+ }
+ else
+ {
+ USBD_CtlError(pdev, req);
+ }
+ }
+ else
+ {
+ (void)USBD_CtlSendStatus(pdev);
+ }
}
}
@@ -520,8 +582,7 @@ static void USBD_GetDescriptor(USBD_HandleTypeDef *pdev ,
* @param req: usb request
* @retval status
*/
-static void USBD_SetAddress(USBD_HandleTypeDef *pdev ,
- USBD_SetupReqTypedef *req)
+static void USBD_SetAddress(USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req)
{
uint8_t dev_addr;
@@ -531,13 +592,13 @@ static void USBD_SetAddress(USBD_HandleTypeDef *pdev ,
if (pdev->dev_state == USBD_STATE_CONFIGURED)
{
- USBD_CtlError(pdev , req);
+ USBD_CtlError(pdev, req);
}
else
{
pdev->dev_address = dev_addr;
- USBD_LL_SetUSBAddress(pdev, dev_addr);
- USBD_CtlSendStatus(pdev);
+ (void)USBD_LL_SetUSBAddress(pdev, dev_addr);
+ (void)USBD_CtlSendStatus(pdev);
if (dev_addr != 0U)
{
@@ -562,8 +623,9 @@ static void USBD_SetAddress(USBD_HandleTypeDef *pdev ,
* @param req: usb request
* @retval status
*/
-static void USBD_SetConfig(USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req)
+static USBD_StatusTypeDef USBD_SetConfig(USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req)
{
+ USBD_StatusTypeDef ret = USBD_OK;
static uint8_t cfgidx;
cfgidx = (uint8_t)(req->wValue);
@@ -571,63 +633,77 @@ static void USBD_SetConfig(USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req)
if (cfgidx > USBD_MAX_NUM_CONFIGURATION)
{
USBD_CtlError(pdev, req);
+ return USBD_FAIL;
}
- else
+
+ switch (pdev->dev_state)
{
- switch (pdev->dev_state)
+ case USBD_STATE_ADDRESSED:
+ if (cfgidx != 0U)
{
- case USBD_STATE_ADDRESSED:
- if (cfgidx)
+ pdev->dev_config = cfgidx;
+
+ ret = USBD_SetClassConfig(pdev, cfgidx);
+
+ if (ret != USBD_OK)
{
- pdev->dev_config = cfgidx;
+ USBD_CtlError(pdev, req);
+ }
+ else
+ {
+ (void)USBD_CtlSendStatus(pdev);
pdev->dev_state = USBD_STATE_CONFIGURED;
- if(USBD_SetClassConfig(pdev, cfgidx) == USBD_FAIL)
- {
- USBD_CtlError(pdev, req);
- return;
- }
- USBD_CtlSendStatus(pdev);
}
- else
- {
- USBD_CtlSendStatus(pdev);
- }
- break;
-
- case USBD_STATE_CONFIGURED:
- if (cfgidx == 0U)
- {
- pdev->dev_state = USBD_STATE_ADDRESSED;
- pdev->dev_config = cfgidx;
- USBD_ClrClassConfig(pdev, cfgidx);
- USBD_CtlSendStatus(pdev);
- }
- else if (cfgidx != pdev->dev_config)
- {
- /* Clear old configuration */
- USBD_ClrClassConfig(pdev, (uint8_t)pdev->dev_config);
-
- /* set new configuration */
- pdev->dev_config = cfgidx;
- if(USBD_SetClassConfig(pdev, cfgidx) == USBD_FAIL)
- {
- USBD_CtlError(pdev, req);
- return;
- }
- USBD_CtlSendStatus(pdev);
- }
- else
- {
- USBD_CtlSendStatus(pdev);
- }
- break;
-
- default:
- USBD_CtlError(pdev, req);
- USBD_ClrClassConfig(pdev, cfgidx);
- break;
}
+ else
+ {
+ (void)USBD_CtlSendStatus(pdev);
+ }
+ break;
+
+ case USBD_STATE_CONFIGURED:
+ if (cfgidx == 0U)
+ {
+ pdev->dev_state = USBD_STATE_ADDRESSED;
+ pdev->dev_config = cfgidx;
+ (void)USBD_ClrClassConfig(pdev, cfgidx);
+ (void)USBD_CtlSendStatus(pdev);
+ }
+ else if (cfgidx != pdev->dev_config)
+ {
+ /* Clear old configuration */
+ (void)USBD_ClrClassConfig(pdev, (uint8_t)pdev->dev_config);
+
+ /* set new configuration */
+ pdev->dev_config = cfgidx;
+
+ ret = USBD_SetClassConfig(pdev, cfgidx);
+
+ if (ret != USBD_OK)
+ {
+ USBD_CtlError(pdev, req);
+ (void)USBD_ClrClassConfig(pdev, (uint8_t)pdev->dev_config);
+ pdev->dev_state = USBD_STATE_ADDRESSED;
+ }
+ else
+ {
+ (void)USBD_CtlSendStatus(pdev);
+ }
+ }
+ else
+ {
+ (void)USBD_CtlSendStatus(pdev);
+ }
+ break;
+
+ default:
+ USBD_CtlError(pdev, req);
+ (void)USBD_ClrClassConfig(pdev, cfgidx);
+ ret = USBD_FAIL;
+ break;
}
+
+ return ret;
}
/**
@@ -641,7 +717,7 @@ static void USBD_GetConfig(USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req)
{
if (req->wLength != 1U)
{
- USBD_CtlError(pdev , req);
+ USBD_CtlError(pdev, req);
}
else
{
@@ -650,15 +726,15 @@ static void USBD_GetConfig(USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req)
case USBD_STATE_DEFAULT:
case USBD_STATE_ADDRESSED:
pdev->dev_default_config = 0U;
- USBD_CtlSendData (pdev, (uint8_t *)(void *)&pdev->dev_default_config, 1U);
+ (void)USBD_CtlSendData(pdev, (uint8_t *)&pdev->dev_default_config, 1U);
break;
case USBD_STATE_CONFIGURED:
- USBD_CtlSendData (pdev, (uint8_t *)(void *)&pdev->dev_config, 1U);
+ (void)USBD_CtlSendData(pdev, (uint8_t *)&pdev->dev_config, 1U);
break;
default:
- USBD_CtlError(pdev , req);
+ USBD_CtlError(pdev, req);
break;
}
}
@@ -678,28 +754,28 @@ static void USBD_GetStatus(USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req)
case USBD_STATE_DEFAULT:
case USBD_STATE_ADDRESSED:
case USBD_STATE_CONFIGURED:
- if(req->wLength != 0x2U)
+ if (req->wLength != 0x2U)
{
USBD_CtlError(pdev, req);
break;
}
-#if ( USBD_SELF_POWERED == 1U)
+#if (USBD_SELF_POWERED == 1U)
pdev->dev_config_status = USB_CONFIG_SELF_POWERED;
#else
pdev->dev_config_status = 0U;
#endif
- if (pdev->dev_remote_wakeup)
+ if (pdev->dev_remote_wakeup != 0U)
{
pdev->dev_config_status |= USB_CONFIG_REMOTE_WAKEUP;
}
- USBD_CtlSendData (pdev, (uint8_t *)(void *)&pdev->dev_config_status, 2U);
+ (void)USBD_CtlSendData(pdev, (uint8_t *)&pdev->dev_config_status, 2U);
break;
- default :
- USBD_CtlError(pdev , req);
+ default:
+ USBD_CtlError(pdev, req);
break;
}
}
@@ -712,16 +788,13 @@ static void USBD_GetStatus(USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req)
* @param req: usb request
* @retval status
*/
-static void USBD_SetFeature(USBD_HandleTypeDef *pdev ,
- USBD_SetupReqTypedef *req)
+static void USBD_SetFeature(USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req)
{
-
if (req->wValue == USB_FEATURE_REMOTE_WAKEUP)
{
pdev->dev_remote_wakeup = 1U;
- USBD_CtlSendStatus(pdev);
+ (void)USBD_CtlSendStatus(pdev);
}
-
}
@@ -732,24 +805,23 @@ static void USBD_SetFeature(USBD_HandleTypeDef *pdev ,
* @param req: usb request
* @retval status
*/
-static void USBD_ClrFeature(USBD_HandleTypeDef *pdev ,
- USBD_SetupReqTypedef *req)
+static void USBD_ClrFeature(USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req)
{
switch (pdev->dev_state)
{
- case USBD_STATE_DEFAULT:
- case USBD_STATE_ADDRESSED:
- case USBD_STATE_CONFIGURED:
- if (req->wValue == USB_FEATURE_REMOTE_WAKEUP)
- {
- pdev->dev_remote_wakeup = 0U;
- USBD_CtlSendStatus(pdev);
- }
- break;
+ case USBD_STATE_DEFAULT:
+ case USBD_STATE_ADDRESSED:
+ case USBD_STATE_CONFIGURED:
+ if (req->wValue == USB_FEATURE_REMOTE_WAKEUP)
+ {
+ pdev->dev_remote_wakeup = 0U;
+ (void)USBD_CtlSendStatus(pdev);
+ }
+ break;
- default :
- USBD_CtlError(pdev , req);
- break;
+ default:
+ USBD_CtlError(pdev, req);
+ break;
}
}
@@ -763,12 +835,23 @@ static void USBD_ClrFeature(USBD_HandleTypeDef *pdev ,
void USBD_ParseSetupRequest(USBD_SetupReqTypedef *req, uint8_t *pdata)
{
- req->bmRequest = *(uint8_t *) (pdata);
- req->bRequest = *(uint8_t *) (pdata + 1);
- req->wValue = SWAPBYTE (pdata + 2);
- req->wIndex = SWAPBYTE (pdata + 4);
- req->wLength = SWAPBYTE (pdata + 6);
+ uint8_t *pbuff = pdata;
+ req->bmRequest = *(uint8_t *)(pbuff);
+
+ pbuff++;
+ req->bRequest = *(uint8_t *)(pbuff);
+
+ pbuff++;
+ req->wValue = SWAPBYTE(pbuff);
+
+ pbuff++;
+ pbuff++;
+ req->wIndex = SWAPBYTE(pbuff);
+
+ pbuff++;
+ pbuff++;
+ req->wLength = SWAPBYTE(pbuff);
}
/**
@@ -779,11 +862,12 @@ void USBD_ParseSetupRequest(USBD_SetupReqTypedef *req, uint8_t *pdata)
* @retval None
*/
-void USBD_CtlError( USBD_HandleTypeDef *pdev ,
- USBD_SetupReqTypedef *req)
+void USBD_CtlError(USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req)
{
- USBD_LL_StallEP(pdev , 0x80U);
- USBD_LL_StallEP(pdev , 0U);
+ UNUSED(req);
+
+ (void)USBD_LL_StallEP(pdev, 0x80U);
+ (void)USBD_LL_StallEP(pdev, 0U);
}
@@ -798,18 +882,29 @@ void USBD_CtlError( USBD_HandleTypeDef *pdev ,
void USBD_GetString(uint8_t *desc, uint8_t *unicode, uint16_t *len)
{
uint8_t idx = 0U;
+ uint8_t *pdesc;
- if (desc != NULL)
+ if (desc == NULL)
{
- *len = (uint16_t)USBD_GetLen(desc) * 2U + 2U;
- unicode[idx++] = *(uint8_t *)(void *)len;
- unicode[idx++] = USB_DESC_TYPE_STRING;
+ return;
+ }
- while (*desc != '\0')
- {
- unicode[idx++] = *desc++;
- unicode[idx++] = 0U;
- }
+ pdesc = desc;
+ *len = ((uint16_t)USBD_GetLen(pdesc) * 2U) + 2U;
+
+ unicode[idx] = *(uint8_t *)len;
+ idx++;
+ unicode[idx] = USB_DESC_TYPE_STRING;
+ idx++;
+
+ while (*pdesc != (uint8_t)'\0')
+ {
+ unicode[idx] = *pdesc;
+ pdesc++;
+ idx++;
+
+ unicode[idx] = 0U;
+ idx++;
}
}
@@ -821,15 +916,16 @@ void USBD_GetString(uint8_t *desc, uint8_t *unicode, uint16_t *len)
*/
static uint8_t USBD_GetLen(uint8_t *buf)
{
- uint8_t len = 0U;
+ uint8_t len = 0U;
+ uint8_t *pbuff = buf;
- while (*buf != '\0')
- {
- len++;
- buf++;
- }
+ while (*pbuff != (uint8_t)'\0')
+ {
+ len++;
+ pbuff++;
+ }
- return len;
+ return len;
}
/**
* @}
diff --git a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_IAR/Boot/lib/STM32_USB_Device_Library/Core/Src/usbd_ioreq.c b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_IAR/Boot/lib/STM32_USB_Device_Library/Core/Src/usbd_ioreq.c
index 5600c370..4d5c8efe 100644
--- a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_IAR/Boot/lib/STM32_USB_Device_Library/Core/Src/usbd_ioreq.c
+++ b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_IAR/Boot/lib/STM32_USB_Device_Library/Core/Src/usbd_ioreq.c
@@ -12,7 +12,7 @@
* This software component is licensed by ST under Ultimate Liberty license
* SLA0044, the "License"; You may not use this file except in compliance with
* the License. You may obtain a copy of the License at:
- * http://www.st.com/SLA0044
+ * www.st.com/SLA0044
*
******************************************************************************
*/
@@ -84,16 +84,16 @@
* @param len: length of data to be sent
* @retval status
*/
-USBD_StatusTypeDef USBD_CtlSendData (USBD_HandleTypeDef *pdev, uint8_t *pbuf,
- uint16_t len)
+USBD_StatusTypeDef USBD_CtlSendData(USBD_HandleTypeDef *pdev,
+ uint8_t *pbuf, uint32_t len)
{
/* Set EP0 State */
pdev->ep0_state = USBD_EP0_DATA_IN;
pdev->ep_in[0].total_length = len;
- pdev->ep_in[0].rem_length = len;
+ pdev->ep_in[0].rem_length = len;
- /* Start the transfer */
- USBD_LL_Transmit (pdev, 0x00U, pbuf, len);
+ /* Start the transfer */
+ (void)USBD_LL_Transmit(pdev, 0x00U, pbuf, len);
return USBD_OK;
}
@@ -106,11 +106,11 @@ USBD_StatusTypeDef USBD_CtlSendData (USBD_HandleTypeDef *pdev, uint8_t *pbuf,
* @param len: length of data to be sent
* @retval status
*/
-USBD_StatusTypeDef USBD_CtlContinueSendData (USBD_HandleTypeDef *pdev,
- uint8_t *pbuf, uint16_t len)
+USBD_StatusTypeDef USBD_CtlContinueSendData(USBD_HandleTypeDef *pdev,
+ uint8_t *pbuf, uint32_t len)
{
- /* Start the next transfer */
- USBD_LL_Transmit (pdev, 0x00U, pbuf, len);
+ /* Start the next transfer */
+ (void)USBD_LL_Transmit(pdev, 0x00U, pbuf, len);
return USBD_OK;
}
@@ -123,16 +123,16 @@ USBD_StatusTypeDef USBD_CtlContinueSendData (USBD_HandleTypeDef *pdev,
* @param len: length of data to be received
* @retval status
*/
-USBD_StatusTypeDef USBD_CtlPrepareRx (USBD_HandleTypeDef *pdev, uint8_t *pbuf,
- uint16_t len)
+USBD_StatusTypeDef USBD_CtlPrepareRx(USBD_HandleTypeDef *pdev,
+ uint8_t *pbuf, uint32_t len)
{
/* Set EP0 State */
pdev->ep0_state = USBD_EP0_DATA_OUT;
pdev->ep_out[0].total_length = len;
- pdev->ep_out[0].rem_length = len;
+ pdev->ep_out[0].rem_length = len;
/* Start the transfer */
- USBD_LL_PrepareReceive (pdev, 0U, pbuf, len);
+ (void)USBD_LL_PrepareReceive(pdev, 0U, pbuf, len);
return USBD_OK;
}
@@ -145,10 +145,10 @@ USBD_StatusTypeDef USBD_CtlPrepareRx (USBD_HandleTypeDef *pdev, uint8_t *pbuf,
* @param len: length of data to be received
* @retval status
*/
-USBD_StatusTypeDef USBD_CtlContinueRx (USBD_HandleTypeDef *pdev, uint8_t *pbuf,
- uint16_t len)
+USBD_StatusTypeDef USBD_CtlContinueRx(USBD_HandleTypeDef *pdev,
+ uint8_t *pbuf, uint32_t len)
{
- USBD_LL_PrepareReceive(pdev, 0U, pbuf, len);
+ (void)USBD_LL_PrepareReceive(pdev, 0U, pbuf, len);
return USBD_OK;
}
@@ -159,13 +159,13 @@ USBD_StatusTypeDef USBD_CtlContinueRx (USBD_HandleTypeDef *pdev, uint8_t *pbuf,
* @param pdev: device instance
* @retval status
*/
-USBD_StatusTypeDef USBD_CtlSendStatus (USBD_HandleTypeDef *pdev)
+USBD_StatusTypeDef USBD_CtlSendStatus(USBD_HandleTypeDef *pdev)
{
/* Set EP0 State */
pdev->ep0_state = USBD_EP0_STATUS_IN;
/* Start the transfer */
- USBD_LL_Transmit(pdev, 0x00U, NULL, 0U);
+ (void)USBD_LL_Transmit(pdev, 0x00U, NULL, 0U);
return USBD_OK;
}
@@ -176,13 +176,13 @@ USBD_StatusTypeDef USBD_CtlSendStatus (USBD_HandleTypeDef *pdev)
* @param pdev: device instance
* @retval status
*/
-USBD_StatusTypeDef USBD_CtlReceiveStatus (USBD_HandleTypeDef *pdev)
+USBD_StatusTypeDef USBD_CtlReceiveStatus(USBD_HandleTypeDef *pdev)
{
/* Set EP0 State */
pdev->ep0_state = USBD_EP0_STATUS_OUT;
- /* Start the transfer */
- USBD_LL_PrepareReceive (pdev, 0U, NULL, 0U);
+ /* Start the transfer */
+ (void)USBD_LL_PrepareReceive(pdev, 0U, NULL, 0U);
return USBD_OK;
}
@@ -194,7 +194,7 @@ USBD_StatusTypeDef USBD_CtlReceiveStatus (USBD_HandleTypeDef *pdev)
* @param ep_addr: endpoint address
* @retval Rx Data blength
*/
-uint32_t USBD_GetRxCount (USBD_HandleTypeDef *pdev, uint8_t ep_addr)
+uint32_t USBD_GetRxCount(USBD_HandleTypeDef *pdev, uint8_t ep_addr)
{
return USBD_LL_GetRxDataSize(pdev, ep_addr);
}
diff --git a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_IAR/Boot/lib/system_stm32f7xx.c b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_IAR/Boot/lib/system_stm32f7xx.c
index cb4e5662..7282bc83 100644
--- a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_IAR/Boot/lib/system_stm32f7xx.c
+++ b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_IAR/Boot/lib/system_stm32f7xx.c
@@ -1,278 +1,244 @@
-/**
- ******************************************************************************
- * @file system_stm32f7xx.c
- * @author MCD Application Team
- * @brief CMSIS Cortex-M7 Device Peripheral Access Layer System Source File.
- *
- * This file provides two functions and one global variable to be called from
- * user application:
- * - SystemInit(): This function is called at startup just after reset and
- * before branch to main program. This call is made inside
- * the "startup_stm32f7xx.s" file.
- *
- * - SystemCoreClock variable: Contains the core clock (HCLK), it can be used
- * by the user application to setup the SysTick
- * timer or configure other parameters.
- *
- * - SystemCoreClockUpdate(): Updates the variable SystemCoreClock and must
- * be called whenever the core clock is changed
- * during program execution.
- *
- *
- ******************************************************************************
- * @attention
- *
- * © COPYRIGHT 2016 STMicroelectronics
- *
- * Redistribution and use in source and binary forms, with or without modification,
- * are permitted provided that the following conditions are met:
- * 1. Redistributions of source code must retain the above copyright notice,
- * this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright notice,
- * this list of conditions and the following disclaimer in the documentation
- * and/or other materials provided with the distribution.
- * 3. Neither the name of STMicroelectronics nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
- * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
- * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- ******************************************************************************
- */
-
-/** @addtogroup CMSIS
- * @{
- */
-
-/** @addtogroup stm32f7xx_system
- * @{
- */
-
-/** @addtogroup STM32F7xx_System_Private_Includes
- * @{
- */
-
-#include "stm32f7xx.h"
-
-#if !defined (HSE_VALUE)
- #define HSE_VALUE ((uint32_t)25000000) /*!< Default value of the External oscillator in Hz */
-#endif /* HSE_VALUE */
-
-#if !defined (HSI_VALUE)
- #define HSI_VALUE ((uint32_t)16000000) /*!< Value of the Internal oscillator in Hz*/
-#endif /* HSI_VALUE */
-
-/**
- * @}
- */
-
-/** @addtogroup STM32F7xx_System_Private_TypesDefinitions
- * @{
- */
-
-/**
- * @}
- */
-
-/** @addtogroup STM32F7xx_System_Private_Defines
- * @{
- */
-
-/************************* Miscellaneous Configuration ************************/
-
-/*!< Uncomment the following line if you need to relocate your vector Table in
- Internal SRAM. */
-/* #define VECT_TAB_SRAM */
-#define VECT_TAB_OFFSET 0x00 /*!< Vector Table base offset field.
- This value must be a multiple of 0x200. */
-/******************************************************************************/
-
-/**
- * @}
- */
-
-/** @addtogroup STM32F7xx_System_Private_Macros
- * @{
- */
-
-/**
- * @}
- */
-
-/** @addtogroup STM32F7xx_System_Private_Variables
- * @{
- */
-
- /* This variable is updated in three ways:
- 1) by calling CMSIS function SystemCoreClockUpdate()
- 2) by calling HAL API function HAL_RCC_GetHCLKFreq()
- 3) each time HAL_RCC_ClockConfig() is called to configure the system clock frequency
- Note: If you use this function to configure the system clock; then there
- is no need to call the 2 first functions listed above, since SystemCoreClock
- variable is updated automatically.
- */
- uint32_t SystemCoreClock = 16000000;
- const uint8_t AHBPrescTable[16] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 6, 7, 8, 9};
- const uint8_t APBPrescTable[8] = {0, 0, 0, 0, 1, 2, 3, 4};
-
-/**
- * @}
- */
-
-/** @addtogroup STM32F7xx_System_Private_FunctionPrototypes
- * @{
- */
-
-/**
- * @}
- */
-
-/** @addtogroup STM32F7xx_System_Private_Functions
- * @{
- */
-
-/**
- * @brief Setup the microcontroller system
- * Initialize the Embedded Flash Interface, the PLL and update the
- * SystemFrequency variable.
- * @param None
- * @retval None
- */
-void SystemInit(void)
-{
- /* FPU settings ------------------------------------------------------------*/
- #if (__FPU_PRESENT == 1) && (__FPU_USED == 1)
- SCB->CPACR |= ((3UL << 10*2)|(3UL << 11*2)); /* set CP10 and CP11 Full Access */
- #endif
- /* Reset the RCC clock configuration to the default reset state ------------*/
- /* Set HSION bit */
- RCC->CR |= (uint32_t)0x00000001;
-
- /* Reset CFGR register */
- RCC->CFGR = 0x00000000;
-
- /* Reset HSEON, CSSON and PLLON bits */
- RCC->CR &= (uint32_t)0xFEF6FFFF;
-
- /* Reset PLLCFGR register */
- RCC->PLLCFGR = 0x24003010;
-
- /* Reset HSEBYP bit */
- RCC->CR &= (uint32_t)0xFFFBFFFF;
-
- /* Disable all interrupts */
- RCC->CIR = 0x00000000;
-
- /* Configure the Vector Table location add offset address ------------------*/
-#ifdef VECT_TAB_SRAM
- SCB->VTOR = RAMDTCM_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAM */
-#else
- SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal FLASH */
-#endif
-}
-
-/**
- * @brief Update SystemCoreClock variable according to Clock Register Values.
- * The SystemCoreClock variable contains the core clock (HCLK), it can
- * be used by the user application to setup the SysTick timer or configure
- * other parameters.
- *
- * @note Each time the core clock (HCLK) changes, this function must be called
- * to update SystemCoreClock variable value. Otherwise, any configuration
- * based on this variable will be incorrect.
- *
- * @note - The system frequency computed by this function is not the real
- * frequency in the chip. It is calculated based on the predefined
- * constant and the selected clock source:
- *
- * - If SYSCLK source is HSI, SystemCoreClock will contain the HSI_VALUE(*)
- *
- * - If SYSCLK source is HSE, SystemCoreClock will contain the HSE_VALUE(**)
- *
- * - If SYSCLK source is PLL, SystemCoreClock will contain the HSE_VALUE(**)
- * or HSI_VALUE(*) multiplied/divided by the PLL factors.
- *
- * (*) HSI_VALUE is a constant defined in stm32f7xx_hal_conf.h file (default value
- * 16 MHz) but the real value may vary depending on the variations
- * in voltage and temperature.
- *
- * (**) HSE_VALUE is a constant defined in stm32f7xx_hal_conf.h file (default value
- * 25 MHz), user has to ensure that HSE_VALUE is same as the real
- * frequency of the crystal used. Otherwise, this function may
- * have wrong result.
- *
- * - The result of this function could be not correct when using fractional
- * value for HSE crystal.
- *
- * @param None
- * @retval None
- */
-void SystemCoreClockUpdate(void)
-{
- uint32_t tmp = 0, pllvco = 0, pllp = 2, pllsource = 0, pllm = 2;
-
- /* Get SYSCLK source -------------------------------------------------------*/
- tmp = RCC->CFGR & RCC_CFGR_SWS;
-
- switch (tmp)
- {
- case 0x00: /* HSI used as system clock source */
- SystemCoreClock = HSI_VALUE;
- break;
- case 0x04: /* HSE used as system clock source */
- SystemCoreClock = HSE_VALUE;
- break;
- case 0x08: /* PLL used as system clock source */
-
- /* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N
- SYSCLK = PLL_VCO / PLL_P
- */
- pllsource = (RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC) >> 22;
- pllm = RCC->PLLCFGR & RCC_PLLCFGR_PLLM;
-
- if (pllsource != 0)
- {
- /* HSE used as PLL clock source */
- pllvco = (HSE_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6);
- }
- else
- {
- /* HSI used as PLL clock source */
- pllvco = (HSI_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6);
- }
-
- pllp = (((RCC->PLLCFGR & RCC_PLLCFGR_PLLP) >>16) + 1 ) *2;
- SystemCoreClock = pllvco/pllp;
- break;
- default:
- SystemCoreClock = HSI_VALUE;
- break;
- }
- /* Compute HCLK frequency --------------------------------------------------*/
- /* Get HCLK prescaler */
- tmp = AHBPrescTable[((RCC->CFGR & RCC_CFGR_HPRE) >> 4)];
- /* HCLK frequency */
- SystemCoreClock >>= tmp;
-}
-
-/**
- * @}
- */
-
-/**
- * @}
- */
-
-/**
- * @}
- */
-/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
+/**
+ ******************************************************************************
+ * @file system_stm32f7xx.c
+ * @author MCD Application Team
+ * @brief CMSIS Cortex-M7 Device Peripheral Access Layer System Source File.
+ *
+ * This file provides two functions and one global variable to be called from
+ * user application:
+ * - SystemInit(): This function is called at startup just after reset and
+ * before branch to main program. This call is made inside
+ * the "startup_stm32f7xx.s" file.
+ *
+ * - SystemCoreClock variable: Contains the core clock (HCLK), it can be used
+ * by the user application to setup the SysTick
+ * timer or configure other parameters.
+ *
+ * - SystemCoreClockUpdate(): Updates the variable SystemCoreClock and must
+ * be called whenever the core clock is changed
+ * during program execution.
+ *
+ *
+ ******************************************************************************
+ * @attention
+ *
+ * © Copyright (c) 2016 STMicroelectronics.
+ * All rights reserved.
+ *
+ * This software component is licensed by ST under BSD 3-Clause license,
+ * the "License"; You may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at:
+ * opensource.org/licenses/BSD-3-Clause
+ *
+ ******************************************************************************
+ */
+
+/** @addtogroup CMSIS
+ * @{
+ */
+
+/** @addtogroup stm32f7xx_system
+ * @{
+ */
+
+/** @addtogroup STM32F7xx_System_Private_Includes
+ * @{
+ */
+
+#include "stm32f7xx.h"
+
+#if !defined (HSE_VALUE)
+ #define HSE_VALUE ((uint32_t)25000000) /*!< Default value of the External oscillator in Hz */
+#endif /* HSE_VALUE */
+
+#if !defined (HSI_VALUE)
+ #define HSI_VALUE ((uint32_t)16000000) /*!< Value of the Internal oscillator in Hz*/
+#endif /* HSI_VALUE */
+
+/**
+ * @}
+ */
+
+/** @addtogroup STM32F7xx_System_Private_TypesDefinitions
+ * @{
+ */
+
+/**
+ * @}
+ */
+
+/** @addtogroup STM32F7xx_System_Private_Defines
+ * @{
+ */
+
+/************************* Miscellaneous Configuration ************************/
+
+/*!< Uncomment the following line if you need to relocate your vector Table in
+ Internal SRAM. */
+/* #define VECT_TAB_SRAM */
+#define VECT_TAB_OFFSET 0x00 /*!< Vector Table base offset field.
+ This value must be a multiple of 0x200. */
+/******************************************************************************/
+
+/**
+ * @}
+ */
+
+/** @addtogroup STM32F7xx_System_Private_Macros
+ * @{
+ */
+
+/**
+ * @}
+ */
+
+/** @addtogroup STM32F7xx_System_Private_Variables
+ * @{
+ */
+
+ /* This variable is updated in three ways:
+ 1) by calling CMSIS function SystemCoreClockUpdate()
+ 2) by calling HAL API function HAL_RCC_GetHCLKFreq()
+ 3) each time HAL_RCC_ClockConfig() is called to configure the system clock frequency
+ Note: If you use this function to configure the system clock; then there
+ is no need to call the 2 first functions listed above, since SystemCoreClock
+ variable is updated automatically.
+ */
+ uint32_t SystemCoreClock = 16000000;
+ const uint8_t AHBPrescTable[16] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 6, 7, 8, 9};
+ const uint8_t APBPrescTable[8] = {0, 0, 0, 0, 1, 2, 3, 4};
+
+/**
+ * @}
+ */
+
+/** @addtogroup STM32F7xx_System_Private_FunctionPrototypes
+ * @{
+ */
+
+/**
+ * @}
+ */
+
+/** @addtogroup STM32F7xx_System_Private_Functions
+ * @{
+ */
+
+/**
+ * @brief Setup the microcontroller system
+ * Initialize the Embedded Flash Interface, the PLL and update the
+ * SystemFrequency variable.
+ * @param None
+ * @retval None
+ */
+void SystemInit(void)
+{
+ /* FPU settings ------------------------------------------------------------*/
+#if (__FPU_PRESENT == 1) && (__FPU_USED == 1)
+ SCB->CPACR |= ((3UL << 10*2)|(3UL << 11*2)); /* set CP10 and CP11 Full Access */
+#endif
+
+ /* Configure the Vector Table location add offset address ------------------*/
+#ifdef VECT_TAB_SRAM
+ SCB->VTOR = RAMDTCM_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAM */
+#else
+ SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal FLASH */
+#endif
+}
+
+/**
+ * @brief Update SystemCoreClock variable according to Clock Register Values.
+ * The SystemCoreClock variable contains the core clock (HCLK), it can
+ * be used by the user application to setup the SysTick timer or configure
+ * other parameters.
+ *
+ * @note Each time the core clock (HCLK) changes, this function must be called
+ * to update SystemCoreClock variable value. Otherwise, any configuration
+ * based on this variable will be incorrect.
+ *
+ * @note - The system frequency computed by this function is not the real
+ * frequency in the chip. It is calculated based on the predefined
+ * constant and the selected clock source:
+ *
+ * - If SYSCLK source is HSI, SystemCoreClock will contain the HSI_VALUE(*)
+ *
+ * - If SYSCLK source is HSE, SystemCoreClock will contain the HSE_VALUE(**)
+ *
+ * - If SYSCLK source is PLL, SystemCoreClock will contain the HSE_VALUE(**)
+ * or HSI_VALUE(*) multiplied/divided by the PLL factors.
+ *
+ * (*) HSI_VALUE is a constant defined in stm32f7xx_hal_conf.h file (default value
+ * 16 MHz) but the real value may vary depending on the variations
+ * in voltage and temperature.
+ *
+ * (**) HSE_VALUE is a constant defined in stm32f7xx_hal_conf.h file (default value
+ * 25 MHz), user has to ensure that HSE_VALUE is same as the real
+ * frequency of the crystal used. Otherwise, this function may
+ * have wrong result.
+ *
+ * - The result of this function could be not correct when using fractional
+ * value for HSE crystal.
+ *
+ * @param None
+ * @retval None
+ */
+void SystemCoreClockUpdate(void)
+{
+ uint32_t tmp = 0, pllvco = 0, pllp = 2, pllsource = 0, pllm = 2;
+
+ /* Get SYSCLK source -------------------------------------------------------*/
+ tmp = RCC->CFGR & RCC_CFGR_SWS;
+
+ switch (tmp)
+ {
+ case 0x00: /* HSI used as system clock source */
+ SystemCoreClock = HSI_VALUE;
+ break;
+ case 0x04: /* HSE used as system clock source */
+ SystemCoreClock = HSE_VALUE;
+ break;
+ case 0x08: /* PLL used as system clock source */
+
+ /* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N
+ SYSCLK = PLL_VCO / PLL_P
+ */
+ pllsource = (RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC) >> 22;
+ pllm = RCC->PLLCFGR & RCC_PLLCFGR_PLLM;
+
+ if (pllsource != 0)
+ {
+ /* HSE used as PLL clock source */
+ pllvco = (HSE_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6);
+ }
+ else
+ {
+ /* HSI used as PLL clock source */
+ pllvco = (HSI_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6);
+ }
+
+ pllp = (((RCC->PLLCFGR & RCC_PLLCFGR_PLLP) >>16) + 1 ) *2;
+ SystemCoreClock = pllvco/pllp;
+ break;
+ default:
+ SystemCoreClock = HSI_VALUE;
+ break;
+ }
+ /* Compute HCLK frequency --------------------------------------------------*/
+ /* Get HCLK prescaler */
+ tmp = AHBPrescTable[((RCC->CFGR & RCC_CFGR_HPRE) >> 4)];
+ /* HCLK frequency */
+ SystemCoreClock >>= tmp;
+}
+
+/**
+ * @}
+ */
+
+/**
+ * @}
+ */
+
+/**
+ * @}
+ */
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff --git a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_IAR/Boot/usbd_conf.c b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_IAR/Boot/usbd_conf.c
index 2c7b2f09..6738d157 100644
--- a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_IAR/Boot/usbd_conf.c
+++ b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_IAR/Boot/usbd_conf.c
@@ -504,7 +504,7 @@ USBD_StatusTypeDef USBD_LL_SetUSBAddress(USBD_HandleTypeDef *pdev, uint8_t dev_a
* @param size: Data size
* @retval USBD status
*/
-USBD_StatusTypeDef USBD_LL_Transmit(USBD_HandleTypeDef *pdev, uint8_t ep_addr, uint8_t *pbuf, uint16_t size)
+USBD_StatusTypeDef USBD_LL_Transmit(USBD_HandleTypeDef *pdev, uint8_t ep_addr, uint8_t *pbuf, uint32_t size)
{
HAL_StatusTypeDef hal_status = HAL_OK;
USBD_StatusTypeDef usb_status = USBD_OK;
@@ -524,7 +524,7 @@ USBD_StatusTypeDef USBD_LL_Transmit(USBD_HandleTypeDef *pdev, uint8_t ep_addr, u
* @param size: Data size
* @retval USBD status
*/
-USBD_StatusTypeDef USBD_LL_PrepareReceive(USBD_HandleTypeDef *pdev, uint8_t ep_addr, uint8_t *pbuf, uint16_t size)
+USBD_StatusTypeDef USBD_LL_PrepareReceive(USBD_HandleTypeDef *pdev, uint8_t ep_addr, uint8_t *pbuf, uint32_t size)
{
HAL_StatusTypeDef hal_status = HAL_OK;
USBD_StatusTypeDef usb_status = USBD_OK;
diff --git a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_IAR/Boot/usbd_conf.h b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_IAR/Boot/usbd_conf.h
index 457df6b8..13647fbd 100644
--- a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_IAR/Boot/usbd_conf.h
+++ b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_IAR/Boot/usbd_conf.h
@@ -68,8 +68,6 @@
/*---------- -----------*/
#define USBD_MAX_STR_DESC_SIZ 512U
/*---------- -----------*/
-#define USBD_SUPPORT_USER_STRING 0U
-/*---------- -----------*/
#define USBD_DEBUG_LEVEL 0U
/*---------- -----------*/
#define USBD_LPM_ENABLED 0U
@@ -81,6 +79,9 @@
#define DEVICE_FS 0
#define DEVICE_HS 1
+/* Inform USB core that a full speed device is used. */
+#define USE_USB_FS
+
/**
* @}
*/
diff --git a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_IAR/Boot/usbd_desc.c b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_IAR/Boot/usbd_desc.c
index c26b821d..344676bb 100644
--- a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_IAR/Boot/usbd_desc.c
+++ b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_IAR/Boot/usbd_desc.c
@@ -123,11 +123,6 @@ uint8_t * USBD_FS_ProductStrDescriptor(USBD_SpeedTypeDef speed, uint16_t *length
uint8_t * USBD_FS_SerialStrDescriptor(USBD_SpeedTypeDef speed, uint16_t *length);
uint8_t * USBD_FS_ConfigStrDescriptor(USBD_SpeedTypeDef speed, uint16_t *length);
uint8_t * USBD_FS_InterfaceStrDescriptor(USBD_SpeedTypeDef speed, uint16_t *length);
-
-#ifdef USBD_SUPPORT_USER_STRING_DESC
-uint8_t * USBD_FS_USRStringDesc(USBD_SpeedTypeDef speed, uint8_t idx, uint16_t *length);
-#endif /* USBD_SUPPORT_USER_STRING_DESC */
-
#if (USBD_LPM_ENABLED == 1)
uint8_t * USBD_FS_USR_BOSDescriptor(USBD_SpeedTypeDef speed, uint16_t *length);
#endif /* (USBD_LPM_ENABLED == 1) */
@@ -328,7 +323,9 @@ uint8_t * USBD_FS_SerialStrDescriptor(USBD_SpeedTypeDef speed, uint16_t *length)
/* Update the serial number string descriptor with the data from the unique
* ID */
Get_SerialNum();
-
+ /* USER CODE BEGIN USBD_FS_SerialStrDescriptor */
+
+ /* USER CODE END USBD_FS_SerialStrDescriptor */
return (uint8_t *) USBD_StringSerial;
}
diff --git a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_IAR/Prog/bin/demoprog_stm32f746.out b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_IAR/Prog/bin/demoprog_stm32f746.out
index 9007b51d..0ee1ccc5 100644
Binary files a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_IAR/Prog/bin/demoprog_stm32f746.out and b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_IAR/Prog/bin/demoprog_stm32f746.out differ
diff --git a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_IAR/Prog/bin/demoprog_stm32f746.srec b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_IAR/Prog/bin/demoprog_stm32f746.srec
index 5e3c034b..b8bcea92 100644
--- a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_IAR/Prog/bin/demoprog_stm32f746.srec
+++ b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_IAR/Prog/bin/demoprog_stm32f746.srec
@@ -1,35 +1,35 @@
S01A000064656D6F70726F675F73746D3332663734362E737265638E
-S31508008000080500202DA1000875A1000879A100081F
-S315080080107DA1000881A1000885A1000800000000D4
-S3150800802000000000000000000000000089A1000810
-S315080080308DA100080000000091A10008039A00081D
-S3150800804095A1000899A100089DA10008A1A1000812
-S31508008050A5A10008A9A10008ADA10008B1A10008C2
-S31508008060B5A10008B9A10008BDA10008C1A1000872
-S31508008070C5A10008C9A10008CDA10008D1A1000822
-S31508008080D5A10008D9A10008DDA10008E1A10008D2
-S31508008090E5A10008E9A10008EDA10008F1A1000882
-S315080080A0F5A10008F9A10008FDA1000801A2000831
-S315080080B005A2000809A200080DA2000811A20008DE
-S315080080C015A2000819A200081DA2000821A200088E
-S315080080D025A2000829A200082DA2000831A200083E
-S315080080E035A2000839A200083DA2000841A20008EE
-S315080080F045A2000849A200084DA2000851A200089E
-S3150800810055A2000859A200085DA2000861A200084D
-S3150800811065A2000869A200086DA2000871A20008FD
-S3150800812075A2000879A200087DA2000881A20008AD
-S3150800813085A2000889A200088DA2000891A200085D
-S3150800814095A2000899A200089DA20008A1A200080D
-S31508008150A5A20008A9A20008ADA20008B1A20008BD
-S31508008160B5A20008B9A20008BDA20008C1A200086D
-S31508008170C5A20008C9A20008CDA200080000000098
-S31508008180D1A20008D5A20008D9A20008DDA20008DD
-S31508008190E1A20008E5A20008E9A20008EDA200088D
-S315080081A0F1A20008F5A20008F9A20008FDA200083D
-S315080081B001A3000805A3000809A300080DA30008E9
-S315080081C011A3000815A30008EE11AA5510B504005E
+S315080080000805002075A10008BDA10008C1A1000847
+S31508008010C5A10008C9A10008CDA1000800000000FC
+S31508008020000000000000000000000000D1A10008C8
+S31508008030D5A1000800000000D9A100089B9A0008F5
+S31508008040DDA10008E1A10008E5A10008E9A10008F2
+S31508008050EDA10008F1A10008F5A10008F9A10008A2
+S31508008060FDA1000801A2000805A2000809A200084F
+S315080080700DA2000811A2000815A2000819A20008FE
+S315080080801DA2000821A2000825A2000829A20008AE
+S315080080902DA2000831A2000835A2000839A200085E
+S315080080A03DA2000841A2000845A2000849A200080E
+S315080080B04DA2000851A2000855A2000859A20008BE
+S315080080C05DA2000861A2000865A2000869A200086E
+S315080080D06DA2000871A2000875A2000879A200081E
+S315080080E07DA2000881A2000885A2000889A20008CE
+S315080080F08DA2000891A2000895A2000899A200087E
+S315080081009DA20008A1A20008A5A20008A9A200082D
+S31508008110ADA20008B1A20008B5A20008B9A20008DD
+S31508008120BDA20008C1A20008C5A20008C9A200088D
+S31508008130CDA20008D1A20008D5A20008D9A200083D
+S31508008140DDA20008E1A20008E5A20008E9A20008ED
+S31508008150EDA20008F1A20008F5A20008F9A200089D
+S31508008160FDA2000801A3000805A3000809A300084A
+S315080081700DA3000811A3000815A3000800000000BD
+S3150800818019A300081DA3000821A3000825A30008B9
+S3150800819029A300082DA3000831A3000835A3000869
+S315080081A039A300083DA3000841A3000845A3000819
+S315080081B049A300084DA3000851A3000855A30008C9
+S315080081C059A300085DA30008EE11AA5510B50400CE
S315080081D0002C01D1012035E0A0690028FFD1606F8D
-S315080081E0002805D1002084F87000200000F047FB25
+S315080081E0002805D1002084F87000200000F06AFB02
S315080081F024206067206800684008400021680860FD
S31508008200200000F0B1F8012801D101201AE0606AC7
S31508008210002802D0200000F06FFA2068406830F489
@@ -39,7 +39,7 @@ S3150800824000F0C7FA10BD2DE9F84306000D0014002A
S315080082501F00B06F202840F08480002D03D0200036
S3150800826080B2002801D101207CE096F87000012830
S3150800827001D1022076E0012086F870000020F06720
-S315080082802220B06700F0FCFA8046A6F85840A6F807
+S315080082802220B06700F03CFB8046A6F85840A6F8C6
S315080082905A40B068B0F5805F0BD13069002804D128
S315080082A040F2FF10A6F85C0023E0FF20A6F85C0069
S315080082B01FE0B06800280AD13069002803D1FF20E2
@@ -47,12 +47,12 @@ S315080082C0A6F85C0015E07F20A6F85C0011E0B0680F
S315080082D0B0F1805F0AD13069002803D17F20A6F863
S315080082E05C0006E03F20A6F85C0002E00020A6F845
S315080082F05C00B6F85C90B068B0F5805F04D1306970
-S31508008300002801D1002416E02C00002513E030686F
-S31508008310406A19EA00002070641C07E0002CF6D1B8
-S315080083203068406A19EA00002880AD1CB6F85A0081
-S31508008330401EA6F85A00B6F85A0000280AD0009738
-S31508008340434600222021300000F064FA0028E5D0D8
-S31508008350032007E02020B067002086F87000002080
+S31508008300002801D1002401E02C000025002086F871
+S31508008310700013E03068406A19EA00002070641C97
+S3150800832007E0002CF6D13068406A19EA0000288078
+S31508008330AD1CB6F85A00401EA6F85A00B6F85A0000
+S3150800834000280AD00097434600222021300000F07A
+S3150800835061FA0028E5D0032004E02020B067002059
S3150800836000E00220BDE8F28338B5040000210025AC
S31508008370A2682069024360690243E06902432068F3
S315080083800368DFF8440303401A4320680260206844
@@ -89,20 +89,20 @@ S31508008560004F05D0B0F5404F06D007E0002008E0E0
S31508008570022006E0042004E0082002E0102000E0C3
S315080085801020E269B2F5004F4FD1C0B2002808D0DA
S31508008590012811D002281AD0042821D008282AD068
-S315080085A032E000F031FC6168490811EB400160686F
-S315080085B0B1FBF0F189B228E000F031FC61684908A6
+S315080085A032E000F097FC6168490811EB4001606809
+S315080085B0B1FBF0F189B228E000F097FC6168490840
S315080085C011EB40016068B1FBF0F189B21DE060680B
S315080085D0474911EB50016068B1FBF0F189B214E02C
-S315080085E000F0D7FB6168490811EB40016068B1FBF0
+S315080085E000F03DFC6168490811EB40016068B1FB89
S315080085F0F0F189B209E06068400810F580306168DA
S31508008600B0FBF1F189B200E001254FF6F072B1F145
S315080086101000904207D20A40C1F34200024392B2C8
S315080086202068C26048E0012546E0C0B2002808D0AC
S31508008630012810D0022818D004281FD0082827D0CF
-S315080086402FE000F0E1FB616810EB51006168B0FBB8
-S31508008650F1F189B226E000F0E2FB616810EB510007
+S315080086402FE000F047FC616810EB51006168B0FB51
+S31508008650F1F189B226E000F048FC616810EB5100A0
S315080086606168B0FBF1F189B21CE06068214911EB41
-S3150800867050016068B1FBF0F189B213E000F089FBA4
+S3150800867050016068B1FBF0F189B213E000F0EFFB3E
S31508008680616810EB51006168B0FBF1F189B209E04D
S315080086906068400810F500406168B0FBF1F189B2E6
S315080086A000E00125B1F110004FF6F072904202D2B7
@@ -124,421 +124,421 @@ S3150800879001684A6832F48012016C0A4301684A602B
S315080087A0016CB1F5801F07D101684A6832F4C0022E
S315080087B0416C0A4301684A6090F82410090607D5F7
S315080087C001684A6832F40022816C0A4300684260F4
-S315080087D070471CB504000020E06700F051F803005C
+S315080087D070471CB504000020E06700F091F803001C
S315080087E02068006800070CD57FF07E4000900022C4
S315080087F05FF40011200000F00DF8002801D00320D6
S3150800880007E0202060672020A067002084F8700019
S31508008810002016BD2DE9F04105000E0090461F0008
S31508008820069C2868C0693040B04201D1012000E0AA
-S3150800883000204146C9B288421ED114F1010FF0D07A
-S3150800884000F01EF8C01B844201D3002CE9D1286829
+S3150800883000204146C9B2884241D114F1010FF0D057
+S3150800884000F05EF8C01B844201D3002C14D12868BE
S31508008850006830F4D0702968086028688068400885
S31508008860400029688860202068672020A8670020C3
-S3150800887085F87000032000E00020BDE8F08170470D
-S3150800888001480068704700BF000100202DE9FC413F
-S3150800889004000025002C01D10120D1E12078C00771
-S315080088A06DD5DFF89405016811F00C01042909D08B
-S315080088B0006810F00C0008280ED1DFF88005006863
-S315080088C0400209D5DFF86C050068800357D5606853
-S315080088D0002854D10120B3E16068B0F5803F06D185
-S315080088E0DFF85005016851F48031016026E06068C0
-S315080088F000280AD1DFF83C05016831F480310160AF
-S31508008900016831F48021016018E06068B0F5A02F95
-S315080089100AD1DFF82005016851F480210160016859
-S3150800892051F48031016009E0DFF80805016831F487
-S3150800893080310160016831F4802101606068002897
-S315080089400ED0FFF79DFF0600DFF8E80400688003F5
-S3150800895015D4FFF795FF801B6528F5D303206FE133
-S31508008960FFF78EFF0600DFF8CC040068800306D503
-S31508008970FFF786FF801B6528F5D3032060E1207882
-S31508008980800720D5DFF8B004016811F00C0F09D074
-S31508008990006810F00C0008282ED1DFF8A004006843
-S315080089A0400229D4DFF88C040168890704D5E168F8
-S315080089B0012901D0012043E1016831F0F80122695B
-S315080089C051EAC20101602078000759D5606900287C
-S315080089D043D0DFF86C74386850F001003860FFF750
-S315080089E04FFF0600386880074AD4FFF749FF801B07
-S315080089F00328F7D3032023E1E06800281AD0DFF81C
-S31508008A003464306850F001003060FFF739FF070022
-S31508008A103068800706D4FFF733FFC01B0328F7D357
-S31508008A2003200DE1306830F0F800216950EAC100F2
-S31508008A303060C8E7DFF8FC733868400840003860E3
-S31508008A40FFF71EFF060038688007BCD5FFF718FF3A
-S31508008A50801B0328F7D30320F2E0DFF8E4733868B5
-S31508008A60400840003860FFF70BFF060038688007AB
-S31508008A7006D5FFF705FF801B0328F7D30320DFE0A1
-S31508008A802078400740F18280DFF8C0633068C00074
-S31508008A9009D4306850F080503060306810F080504B
-S31508008AA0009000980125DFF8A8733868C00511D42E
-S31508008AB0386850F480703860FFF7E2FE8046386800
-S31508008AC0C00507D4FFF7DCFEB0EB08006528F6D32F
-S31508008AD00320B5E0A068012806D1DFF8780301680D
-S31508008AE051F00101016025E0A06800280AD1DFF8ED
-S31508008AF064030168490849000160016831F004010E
-S31508008B00016017E0A06805280AD1DFF84803016864
-S31508008B1051F004010160016851F00101016009E0AA
-S31508008B20DFF830030168490849000160016831F03F
-S31508008B3004010160A068002810D0FFF7A1FE070015
-S31508008B40DFF810030068800719D4FFF799FEC01BE9
-S31508008B5041F289318842F3D3032071E0FFF790FE92
-S31508008B600700DFF8F0020068800708D5FFF788FEDF
-S31508008B70C01B41F289318842F3D3032060E0EDB28D
-S31508008B80012D03D1306830F080503060A06900288C
-S31508008B9055D0DFF8A402006810F00C0008284CD065
-S31508008BA0A069022836D1DFF88C52286830F0807028
-S31508008BB02860FFF765FE06002868800106D5FFF7DE
-S31508008BC05FFE801B0328F7D3032039E0E169206A9A
-S31508008BD00143606A51EA8011A06A4008401E51EAC2
-S31508008BE00041E06A51EA006151F00051DFF84C0299
-S31508008BF00160286850F080702860FFF741FE040085
-S31508008C00286880011BD4FFF73BFE001B0328F7D317
-S31508008C10032015E0DFF81C52286830F080702860C1
-S31508008C20FFF72EFE04002868800108D5FFF728FE06
-S31508008C30001B0328F7D3032002E0012000E00020F0
-S31508008C40BDE8F6812DE9F04104000D000020002C56
-S31508008C5001D101209BE0DFF80062306810F00F00B8
-S31508008C60A8420BD2306800090001284330603068FA
-S31508008C7010F00F00A84201D0012088E02078800774
-S31508008C8019D52078400705D5DFF8AC01016851F4FD
-S31508008C90E05101602078000705D5DFF89C010168DE
-S31508008CA051F460410160DFF890110A6832F0F00271
-S31508008CB0A06802430A602078C00733D56068012897
-S31508008CC006D1DFF870010068800310D401205EE049
-S31508008CD06068022805D157480068800107D401203A
-S31508008CE055E054480068800701D401204FE0524FF0
-S31508008CF0396889088900606801433960FFF7C0FD53
-S31508008D008046386810F00C006168B0EB810F09D016
-S31508008D10FFF7B6FDB0EB080041F289318842F0D37F
-S31508008D20032034E0306810F00F0085420BD230681B
+S3150800887085F87000032023E0286800684007D0D5F3
+S315080088802868C0690005CCD54FF4006029680862DD
+S315080088902868006830F4D0702968086028688068FD
+S315080088A04008400029688860202068672020A8675B
+S315080088B02020E867002085F87000032000E00020EB
+S315080088C0BDE8F081704730B4002513E050F8042B5A
+S315080088D0D30744BFA9F101039A18091F042942F8CE
+S315080088E0045BFAD213468C0744BF15809B1CC90744
+S315080088F048BF1D7050F8041B0029E7D130BC7047EB
+S3150800890001480068704700BF000100202DE9FC41BE
+S3150800891004000025002C01D10120F6E12078C007CB
+S315080089206DD5DFF8E005016811F00C01042909D0BE
+S31508008930006810F00C0008280ED1DFF8CC05006896
+S31508008940400209D5DFF8B8050068800357D5606886
+S31508008950002854D10120D8E16068B0F5803F06D1DF
+S31508008960DFF89C05016851F48031016026E06068F3
+S3150800897000280AD1DFF88805016831F480310160E2
+S31508008980016831F48021016018E06068B0F5A02F15
+S315080089900AD1DFF86C05016851F48021016001688D
+S315080089A051F48031016009E0DFF85405016831F4BB
+S315080089B080310160016831F4802101606068002817
+S315080089C00ED0FFF79DFF0600DFF834050068800328
+S315080089D015D4FFF795FF801B6528F5D3032094E18E
+S315080089E0FFF78EFF0600DFF818050068800306D536
+S315080089F0FFF786FF801B6528F5D3032085E12078DD
+S31508008A00800720D5DFF8FC04016811F00C0F09D0A7
+S31508008A10006810F00C0008282ED1DFF8EC04006876
+S31508008A20400229D4DFF8D8040168890704D5E1682B
+S31508008A30012901D0012068E1016831F0F8012269B5
+S31508008A4051EAC20101602078000759D560690028FB
+S31508008A5043D0DFF8B874386850F001003860FFF783
+S31508008A604FFF0600386880074AD4FFF749FF801B86
+S31508008A700328F7D3032048E1E06800281AD0DFF876
+S31508008A808064306850F001003060FFF739FF070056
+S31508008A903068800706D4FFF733FFC01B0328F7D3D7
+S31508008AA0032032E1306830F0F800216950EAC1004D
+S31508008AB03060C8E7DFF84874386840084000386016
+S31508008AC0FFF71EFF060038688007BCD5FFF718FFBA
+S31508008AD0801B0328F7D3032017E1DFF830743868C2
+S31508008AE0400840003860FFF70BFF0600386880072B
+S31508008AF006D5FFF705FF801B0328F7D3032004E1FB
+S31508008B002078400740F18280DFF810643068C000A2
+S31508008B1009D4306850F080503060306810F08050CA
+S31508008B20009000980125DFF8F8733868C00511D45D
+S31508008B30386850F480703860FFF7E2FE804638687F
+S31508008B40C00507D4FFF7DCFEB0EB08006528F6D3AE
+S31508008B500320DAE0A068012806D1DFF8C803016817
+S31508008B6051F00101016025E0A06800280AD1DFF86C
+S31508008B70B4030168490849000160016831F004013D
+S31508008B80016017E0A06805280AD1DFF89803016894
+S31508008B9051F004010160016851F00101016009E02A
+S31508008BA0DFF880030168490849000160016831F06F
+S31508008BB004010160A068002810D0FFF7A1FE070095
+S31508008BC0DFF860030068800719D4FFF799FEC01B19
+S31508008BD041F289318842F3D3032096E0FFF790FEED
+S31508008BE00700DFF840030068800708D5FFF788FE0E
+S31508008BF0C01B41F289318842F3D3032085E0EDB2E8
+S31508008C00012D03D1306830F080503060A06900280B
+S31508008C107AD0DFF8F002006810F00C0008284CD073
+S31508008C20A069022836D1DFF8D852286830F080705B
+S31508008C302860FFF765FE06002868800106D5FFF75D
+S31508008C405FFE801B0328F7D303205EE0E169206AF4
+S31508008C500143606A51EA8011A06A4008401E51EA41
+S31508008C600041E06A51EA006151F00051DFF89802CC
+S31508008C700160286850F080702860FFF741FE040004
+S31508008C802868800140D4FFF73BFE001B0328F7D372
+S31508008C9003203AE0DFF86852286830F080702860D0
+S31508008CA0FFF72EFE0400286880012DD5FFF728FE61
+S31508008CB0001B0328F7D3032027E0DFF84C020068DF
+S31508008CC0A16901291ED010F48001E269914219D1E7
+S31508008CD010F03F01226A914214D147F6C071014053
+S31508008CE0626AB1EB821F0DD110F44031A26A5208B4
+S31508008CF0521EB1EB024F05D110F07060E16AB0EB7D
+S31508008D00016F01D0012000E00020BDE8F6812DE9C1
+S31508008D10F04104000D000020002C01D101209CE048
+S31508008D20DFF80462306810F00F00A8420BD23068F2
S31508008D300009000128433060306810F00F00A8428F
-S31508008D4001D0012023E02078400706D53A490A6871
-S31508008D5032F4E052E06802430A602078000707D53B
-S31508008D603548016831F46041226951EAC20101605F
-S31508008D7000F00FF83949304A1268C2F30312895CC9
-S31508008D80C84031490860002000F06EF80020BDE8B0
-S31508008D90F08110B500200020002000202648006839
-S31508008DA010F00C00002804D0042804D0082804D0A9
-S31508008DB025E0244824E02A4822E0204C226812F0C4
-S31508008DC03F022068400209D52068C0F3881024496C
-S31508008DD0A1FB0001002300F06DF808E02068C0F34D
-S31508008DE088101849A1FB0001002300F063F82168E8
-S31508008DF0C1F30141491C4900B0FBF1F000E01148FC
-S31508008E0010BD11480068704780B5FFF7FAFF15498D
-S31508008E10094A1268C2F38222895CC84002BD80B53D
-S31508008E20FFF7EFFF0F49044A1268C2F34232895C22
-S31508008E30C84002BD003802400838024004380240E3
-S31508008E40743802400024F400040000204038024030
-S31508008E500070004070380240003C024044A10008FF
-S31508008E6000127A006CA1000810B504004FF47A705D
-S31508008E700D490978B0FBF1F00C490968B1FBF0F02F
-S31508008E8000F09EF9002801D001200CE0102C09D230
-S31508008E90002221005FF0FF3000F081F904480460E9
-S31508008EA0002000E0012010BD08000020040000207A
-S31508008EB000000020BBBBE1B1B2F5803F80F07E80A8
-S31508008EC0022A1ED98C46B1FBF2F102FB11C31B0420
-S31508008ED043EA1043B3FBF2FC02FB1C3380B240EAC0
-S31508008EE00343B3FBF2F002FB103240EA0C400023C6
-S31508008EF07047022A05D98446B0FBF2F002FB10C27D
-S31508008F0070474AB105D100F0010249085FEA30000E
-S31508008F10704700220023704700F096B90B00020044
-S31508008F20002100207047904271EB030CF6D3B3F58D
-S31508008F30803F2FD2F0B5B3FA83F7B1FA81F4A7F1DF
-S31508008F400F0E3D1B5340CEF1200602FA0EF2F341F6
-S31508008F505340B5F10F0746D80F3C2C444140C4F1A5
-S31508008F602006A040F1414140B1FBF3F603FB161180
-S31508008F70A2FB0645001BA94102D2761E801859415C
-S31508008F8080EA010221FA0EF362FA0EF200215A4033
-S31508008F903046F0BD30B4B1FBF3FC03FB1C11A2FB59
-S31508008FA00C45001BA94103D2ACF1010C80185941AC
-S31508008FB030BC02460B46604600217047B2F1807FFE
-S31508008FC065D3F0B5B2FA82F7B1FA81F4C7F10F06A4
-S31508008FD03D1B22FA06F307F1110EF24120355A40DD
-S31508008FE0B5F10F07B8D94140C4F12006A040F141B8
-S31508008FF04140B1FBF3FC03FB1C11A2FB0C45001B13
-S31508009000A94103D2BCF1010C801859410F2F12D384
-S315080090100F3FC90341EA5041B1FBF3F603FB1611B2
-S31508009020A2FB0645D4EBC030A94102D2761E8018B1
-S31508009030594146EACC3C07B34140C7F12006B8403F
-S31508009040F1414140B1FBF3F603FB1611A2FB0645BD
-S31508009050001BA94102D2761E8018594180EA0102F6
-S3150800906021FA0EF3C7F1200462FA0EF20CFA07F0A1
-S315080090705A402CFA04F13043F0BD80EA010221FA85
-S315080090800EF3002162FA0EF260465A40F0BD8C4695
-S31508009090B1FBF2F102FB11C31B0243EA1063B3FBF7
-S315080090A0F2FC02FB1C331B024CEA002043EA106365
-S315080090B0B3FBF2FC02FB1C331B024CEA002043EA1A
-S315080090C01063B3FBF2FC02FB1C331B024CEA0020C4
-S315080090D043EA1063B3FBF2FC02FB1C324CEA0020A5
-S315080090E00023704710F007003F4B1A684FF6FF0140
-S315080090F00A403E4951EA00210A431A6070473A4835
-S315080091000068C0F302207047020052B2002A04D455
-S315080091100901374A40B2115407E00901354A40B2FD
-S3150800912010F00F00104400F8041C704710B410F03B
-S315080091300700D0F10703052B01D3042301E0D0F182
-S315080091400703041D072C01D2002000E0C01E0124DD
-S3150800915014FA03F35B1E1940814014FA00F0401E0E
-S315080091601040084310BC704780B5411EB1F1807F9E
-S3150800917001D301200EE0401E1F4908600F215FF051
-S31508009180FF30FFF7C1FF00201C49086007201C4973
-S315080091900860002002BD80B5FFF7A4FF01BD70B5C9
-S315080091A004000D0016000020FFF7A9FF3200290071
-S315080091B0FFF7BCFF0100200040B2FFF7A5FF70BD16
-S315080091C080B5FFF7D1FF02BD042805D10C48016818
-S315080091D051F00401016004E00948016831F0040116
-S315080091E001607047000000000CED00E00000FA0581
-S315080091F000E400E018ED00E014E000E018E000E00C
-S3150800920010E000E080B500F001F801BD704730B409
-S31508009210002513E050F8042BD30744BFA9F1010336
-S315080092209A18091F042942F8045BFAD213468C07D8
-S3150800923044BF15809B1CC90748BF1D7050F8041B06
-S315080092400029E7D130BC7047704730B40EE0026899
-S31508009250436802440830DC0744BFA9F10104E31857
-S3150800926052F8045B43F8045B091FF9D150F8041B54
-S315080092700029ECD130BC704738B50400002C01D168
-S315080092800120AEE094F82000002802D1200000F06A
-S3150800929015FA2068006830F0020021680860FFF7B8
-S315080092A0EFFA05002068406880070DD5FFF7E8FA51
-S315080092B0401B0B28F6D3606A50F400306062052024
-S315080092C084F8200001208CE02068006850F0010036
-S315080092D021680860FFF7D4FA050020684068C007CF
-S315080092E00DD4FFF7CDFA401B0B28F6D3606A50F46D
-S315080092F000306062052084F82000012071E0207E9D
-S31508009300012806D12068006850F0800021680860AE
-S3150800931005E02068006830F0800021680860607EFB
-S31508009320012806D12068006850F0400021680860CE
-S3150800933005E02068006830F0400021680860A07EDB
-S31508009340012806D12068006850F0200021680860CE
-S3150800935005E02068006830F0200021680860E07E9B
-S31508009360012806D12068006830F0100021680860DE
-S3150800937005E02068006850F0100021680860207F2A
-S31508009380012806D12068006850F0080021680860A6
-S3150800939005E02068006830F0080021680860607FF2
-S315080093A0012806D12068006850F00400216808608A
-S315080093B005E02068006830F0040021680860A168AC
-S315080093C0E068014320690143606901436068401E03
-S315080093D001432068C16100206062012084F82000F2
-S315080093E0002032BD30B4026890F820201300DBB2AA
-S315080093F0012B03D0D2B2022A40F07F80594AD2F814
-S31508009400000250F00100C2F80002D2F8000230F45F
-S315080094107C50C2F80002D2F800024B6A50EA0320D8
-S31508009420C2F8000201200B7D13F01F0310FA03F3A4
-S31508009430D2F81C029843C2F81C02C869002816D143
-S31508009440D2F80C029843C2F80C02486902EBC00035
-S31508009450CC684D68C5EA0444C0F84042486902EB46
-S31508009460C0008C680D68C5EA0444C0F84442C8695F
-S31508009470012816D1D2F80C021843C2F80C02486922
-S3150800948002EBC0000C684D68C5EA0444C0F84042C7
-S31508009490486902EBC0008C68CD68C5EA0444C0F888
-S315080094A044428869002805D1D2F804029843C2F8D4
-S315080094B0040204E0D2F804021843C2F80402086958
-S315080094C0002805D1D2F814029843C2F8140204E021
-S315080094D0D2F814021843C2F81402086A012804D103
-S315080094E0D2F81C020343C2F81C32D2F80002400824
-S315080094F04000C2F80002002004E0416A51F48021CD
-S315080095004162012030BC704738B5040094F8200049
-S31508009510012821D1022084F820002068006840082C
-S31508009520400021680860FFF7ABF90500206840682D
-S31508009530C0070DD5FFF7A4F9401B0B28F6D3606AC0
-S3150800954050F400306062052084F82000012008E00D
-S3150800955000206062002004E0606A50F40020606227
-S31508009560012032BD0064004030B490F82040250048
-S31508009570EDB2012D03D0E4B2022C40F09880002908
-S315080095800AD10468E46814F0030F10D1416A51F453
-S315080095900011416201208FE00468246914F0030F6A
-S315080095A005D1416A51F400114162012084E0046842
-S315080095B00D012C44D4F8B04114F004049460946866
-S315080095C0002C07D104680D012C44D4F8B041640D71
-S315080095D0146006E004680D012C44D4F8B041E40890
-S315080095E0546004680D012C44D4F8B041C4F3400417
-S315080095F0D46004680D012C44D4F8B44114F00F0467
-S31508009600146104680D012C44D4F8B441C4F307244A
-S31508009610946104680D012C44D4F8B441240C5461B7
-S3150800962002680C012244D2F8B8211A7002680C01AB
-S315080096302244D2F8B821120A5A7002680C01224450
-S31508009640D2F8B821120C9A7002680C012244D2F89A
-S31508009650B821120EDA7002680C012244D2F8BC2135
-S315080096601A7102680C012244D2F8BC21120A5A71F6
-S3150800967002680C012244D2F8BC21120C9A710268C5
-S315080096800C012244D2F8BC21120EDA71002906D147
-S315080096900168C96851F020010068C16005E00168E9
-S315080096A0096951F0200100680161002004E0416A5F
-S315080096B051F480214162012030BC70477047000098
-S315080096C0BFF34F8FB6490A6812F4E062B548024301
-S315080096D00A60BFF34F8F00BFFDE780B500F00DF8B5
-S315080096E000F0CDF801BD80B500F021F800F02AF9A8
-S315080096F001BD80B5FFF7E4FF01BD80B5AA48AB49B7
-S3150800970001604FF461414160002181600021C16020
-S31508009710002101610C214161002181610021C161A3
-S315080097200021016200214162FEF750FD01BD70B5BE
-S315080097309F4C2078002815D19E4D280000F037F858
-S31508009740012833D12878002830D0287841282DDA06
-S3150800975000F053F9984908600120207000209749C5
-S31508009760087023E0954D934E28783044401C00F04D
-S315080097701EF8012811D12878401C287028783178DD
-S31508009780884213D1002020707078FF280ED12878DF
-S3150800979002280BD1FFF7ADFF08E000F02EF9864945
-S315080097A009686431814201D20020207070BD80B5FD
-S315080097B00100002301227C48FEF745FDC0B20028BF
-S315080097C001D1012000E0002002BDF8B504000D001B
-S315080097D016001F00FFF718FB4FF47A71B0FBF1F182
-S315080097E0002200E0521C1000C0B2122845D2744B69
-S315080097F0200080B294465FFA8CFC13F81CC096468B
-S315080098005FFA8EFE03EB4E0E9EF801E01EEB0C0C83
-S315080098101CF1010C0CFB00F0B1FBF0FC00FB1C106A
-S315080098200028DFD1200080B294465FFA8CFC13F83A
-S315080098301CC096465FFA8EFE03EB4E0E9EF801E0BC
-S315080098401EEB0C0C1CF1010C0CFB00F0B1FBF0F04C
-S31508009850288028880028C5D0288840F2014C604511
-S31508009860C0DA1000C0B213F810003070D2B203EBA1
-S31508009870420040783870012000E00020F2BD30B583
-S315080098808BB00020ADF8020000208DF80100002002
-S315080098908DF8000040F267656B460DF101020DF187
-S315080098A002014FF4FA70FFF790FF464C46482060D5
-S315080098B000202076002060760020A0760120E07641
-S315080098C000202077002060770020A0600020E0605C
-S315080098D09DF80100401E000420619DF80000401E0E
-S315080098E000056061BDF8020060602000FFF7C4FC57
-S315080098F0002D02D46D05354805E025F00045ED003C
-S3150800990055F00405324800210691002107910121EE
-S3150800991008912900090C0191ADB202950100090CC4
-S31508009920039180B2049000200590012009900E2032
-S315080099300A9001A92000FFF755FD2000FFF7E4FD76
-S315080099400BB030BD30B589B040F2676400256B4670
-S3150800995002AA00211B48FFF707FE00281ED1002C8B
-S3150800996007D40298A0420DD1049800280AD10125EF
-S3150800997008E024F000440398A04203D10498042880
-S3150800998000D10125EDB2012D08D19DF80000FF2870
-S3150800999004D10698022801D1FFF7ABFE09B030BD05
-S315080099A00CED00E00400FA050C0000200048004019
-S315080099B0050100208C000020F8000020040100208A
-S315080099C078A00008D0000020006400400400E0FFF2
-S315080099D0FCFF1F0080B5FFF714FA4FF47A71B0FB4D
-S315080099E0F1F0FFF7EDFB0420FFF7EEFB0022002164
-S315080099F05FF0FF30FFF7D3FB01BD80B5FEF740FFF0
-S31508009A0002BD80B500F004F8FFF7FCFB01BD0000BD
-S31508009A1003480168034A127889180160704700BF35
-S31508009A200001002008000020F8B4002200220022CD
-S31508009A300022002337E00A2704E0DFF8F0219042ED
-S31508009A40F9D10927FFB213F00302D2B29200974068
-S31508009A503E431A00920845F82260DFF8D4512A6876
-S31508009A60A2434E68F60300D522432A60DFF8C451A4
-S31508009A702A68A2434E68B60300D522432A60DFF857
-S31508009A80B8512A68A2434E68F60200D522432A60D6
-S31508009A90DFF8A8512A68A2434E68B60201D51443D6
-S31508009AA022002A605B1C102B80F0B380012515FA72
-S31508009AB003F20C6814409442F4D14A68022A02D090
-S31508009AC04A68122A17D11A00D20800EB8202166ACF
-S31508009AD00F2713F00702D2B292009740BE430F69D0
-S31508009AE013F00702D2B2920097403E431A00D208FA
-S31508009AF000EB82021662076803261A00D2B25200E9
-S31508009B0016FA02F2974391F804C01CF0030C1A00E7
-S31508009B10D2B252001CFA02FC5CEA070707604A68E0
-S31508009B20012A08D04A68022A05D04A68112A02D0B2
-S31508009B304A68122A19D187681A00D2B2520016FA50
-S31508009B4002F29743D1F80CC01A00D2B252001CFA9E
-S31508009B5002FC5CEA0707876042689D40AA434D6895
-S31508009B60C5F300159D402A434260C5681A00D2B263
-S31508009B7052009640B5438E681A00D2B252009640FB
-S31508009B803543C5604A68D2008CD52D4A156855F408
-S31508009B9080451560126812F480420092009A294D99
-S31508009BA01A00920855F822600F2713F00302D2B262
-S31508009BB092009740BE43244A904201D1002741E7CC
-S31508009BC0224A904201D101273CE7214A904201D11D
-S31508009BD0022737E71F4A904201D1032732E71E4A78
-S31508009BE0904201D104272DE71C4A904201D105274E
-S31508009BF028E71B4A904201D1062723E7194A9042D3
-S31508009C0001D107271EE7184A90427FF416AF0827A6
-S31508009C1018E7F1BC7047D2B2002A02D089B2816136
-S31508009C2002E089B2090481617047000000240240FD
-S31508009C30003C0140043C0140083C01400C3C01400A
-S31508009C40443802400838014000000240000402403F
-S31508009C5000080240000C02400010024000140240B6
-S31508009C6000180240001C02400020024080B500F0A7
-S31508009C7007F8FFF732FD00F010F9FFF734FDFAE7B1
-S31508009C8080B500F009F800F02DF900F009F8FFF7A3
-S31508009C90A1FE00F0FBF801BD7448754908607047DD
-S31508009CA080B592B03022002106A800F026F91422C9
-S31508009CB0002101A800F021F96E48016851F0805191
-S31508009CC00160006810F08050009000986A480168AA
-S31508009CD051F440410160006810F44040009000983B
-S31508009CE0012006905FF4A020079002200C905FF4F4
-S31508009CF080000D9008200E904FF4D8700F90022027
-S31508009D0010900220119006A8FEF7C0FD002800D08A
-S31508009D10FEE700F0FDF8002800D0FEE70F200190CE
-S31508009D2002200290002003904FF4A05004904FF4B4
-S31508009D3080500590072101A8FEF784FF002800D06F
-S31508009D40FEE713B000BD38B586B04A48016851F041
-S31508009D5080510160016811F08051059105994749C4
-S31508009D600A6852F480420A60096811F48041059134
-S31508009D70059943490A6852F002020A600A6812F015
-S31508009D8002020592059A0A6852F008020A600968F2
-S31508009D9011F0080105910599016851F480210160C7
-S31508009DA0016811F4802105910599016851F0007147
-S31508009DB00160006810F00070059005980320FFF711
-S31508009DC0EAF9002200217FF00B00FFF7E8F90022EC
-S31508009DD000217FF00A00FFF7E2F9002200217FF058
-S31508009DE00900FFF7DCF9002200217FF00400FFF7E5
-S31508009DF0D6F9002200217FF00300FFF7D0F90022F0
-S31508009E0000217FF00100FFF7CAF9002200215FF068
-S31508009E10FF30FFF7C4F98020009001200190002050
-S31508009E20029000200390174C69462000FFF7FCFDBE
-S31508009E304FF44075009502200190002002900320FF
-S31508009E4003900720049069460F48FFF7EDFD00953B
-S31508009E50022001900020029003200390092004901C
-S31508009E6069462000FFF7E0FD07B030BD0080000816
-S31508009E7008ED00E0403802400070004044380240D7
-S31508009E803038024000040240000C024080B500222F
-S31508009E9080211148FFF7BFFE01BD38B5FFF7ADFDBC
-S31508009EA004000E4D2868201AB0F5FA7F13D30C4922
-S31508009EB00878002807D10120087001228021064869
-S31508009EC0FFF7A9FE06E0002008700022802102485C
-S31508009ED0FFF7A1FE2C6031BD00040240FC00002003
-S31508009EE00601002080B50320FFF755F90020FEF78C
-S31508009EF0BBFFFFF728FF002002BD10B50446104639
-S31508009F000A460146204600F03FF8204610BD0000EC
-S31508009F107CB500201B48016851F08051016000683B
-S31508009F2010F0805000900098154E306850F480303C
-S31508009F303060FEF7A5FC0500104C2068C00308D465
-S31508009F40FEF79EFC401B40F2E9318842F4D3032019
-S31508009F5013E0306850F400303060FEF791FC0500DD
-S31508009F602068800308D4FEF78BFC401B40F2E931D9
-S31508009F708842F5D3032000E0002076BD0470004037
-S31508009F80007000404038024062F30F2262F31F421D
-S31508009F90401810F0030308D0C91A1FD3DB0748BFBF
-S31508009FA000F8012D28BF20F8022D130030B41446FE
-S31508009FB01546103928BF20E93C00FAD8490728BFBA
-S31508009FC020E90C0048BF40F8042D890028BF20F876
-S31508009FD0022D48BF00F8012D30BC7047C91818BFBC
-S31508009FE000F8012DCB0728BF00F8012D70470000A7
-S31508009FF00F48016851F4700101600E49086850F075
-S3150800A0000100086000200C4A10600A680B480240EC
-S3150800A0100A600B480B4A1060086830F48020086014
-S3150800A0200020094908605FF0006008490860704729
-S3150800A03088ED00E00038024008380240FFFFF6FECF
-S3150800A04010300024043802400C38024008ED00E0C5
-S3150800A05010B5074979441831064C7C44163404E097
-S3150800A0600A68081D114488470146A142F8D110BD67
-S3150800A07050000000700000000502060206030703F0
-S3150800A0800803090309040A040B040C040C050D054E
-S3150800A0900E050F050F061006100710084EF6885114
-S3150800A0A0CEF20001086840F470000860BFF34F8FD5
-S3150800A0B0BFF36F8F4FF00070E1EE100A7047000093
-S3150800A0C04FF1FFFFFC0000000C000020000000001C
-S3150800A0D07BF1FFFF0C000000880000000000002054
-S3150800A0E00000000000F00DF8002801D0FFF7B0FFCF
-S3150800A0F0AFF300800020AFF30080FFF7B7FD00F054
-S3150800A10002F80120704700F001B8000007463846FB
-S3150800A11000F002F8FBE7000080B5AFF30080024AC2
-S3150800A12011001820ABBEFBE7260002000248854650
-S3150800A130024880470248004708050020F19F0008AA
-S3150800A14055A10008000000000000000001020304F9
-S3150800A15006070809AFF30080FFF7A0FFFFF7C2FF65
-S3150800A160100000000024F4000100000000000000B8
-S3150800A17001020304FFF7FEBFFFF7FEBFFFF7FEBFAE
-S3150800A180FFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBFF5
-S3150800A190FFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBFE5
-S3150800A1A0FFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBFD5
-S3150800A1B0FFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBFC5
+S31508008D4001D0012089E02078800719D520784007CE
+S31508008D5005D5DFF8B001016851F4E05101602078CB
+S31508008D60000705D5DFF89C01016851F460410160F0
+S31508008D70DFF890110A6832F0F002A06802430A6030
+S31508008D802078C00733D56068012806D1DFF870015E
+S31508008D900068800310D401205FE06068022805D1CE
+S31508008DA057480068800107D4012056E054480068F7
+S31508008DB0800701D4012050E0524F3968890889009C
+S31508008DC0606801433960FFF79BFD8046386810F0FC
+S31508008DD00C006168B0EB810F09D0FFF791FDB0EB8D
+S31508008DE0080041F289318842F0D3032035E0306823
+S31508008DF010F00F0085420BD23068000900012843A5
+S31508008E003060306810F00F00A84201D0012024E03D
+S31508008E102078400706D53B490A6832F4E052E068F4
+S31508008E2002430A602078000707D53648016831F4FE
+S31508008E306041226951EAC201016000F010F83B491D
+S31508008E40304A1268C2F30312895CC8403149086087
+S31508008E503148006800F070F80020BDE8F08110B5D0
+S31508008E6000200020002000202648006810F00C0092
+S31508008E70002804D0042804D0082804D025E0244873
+S31508008E8024E02B4822E0204C226812F03F0220689A
+S31508008E90400209D52068C0F388102549A1FB0001C6
+S31508008EA0002300F06FF808E02068C0F3881018491E
+S31508008EB0A1FB0001002300F065F82168C1F3014118
+S31508008EC0491C4900B0FBF1F000E0114810BD1148FB
+S31508008ED00068704780B5FFF7FAFF1649094A126815
+S31508008EE0C2F38222895CC84002BD80B5FFF7EFFF56
+S31508008EF01049044A1268C2F34232895CC84002BD6E
+S31508008F0000380240083802400438024074380240EB
+S31508008F100024F4000400002000000020403802402D
+S31508008F200070004070380240003C02408CA10008E6
+S31508008F3000127A00B4A1000810B504004FF47A7044
+S31508008F400D490978B0FBF1F00C490968B1FBF0F05E
+S31508008F5000F09EF9002801D001200CE0102C09D25F
+S31508008F60002221005FF0FF3000F081F90448046018
+S31508008F70002000E0012010BD0800002004000020A9
+S31508008F8000000020BBBBE1B1B2F5803F80F07E80D7
+S31508008F90022A1ED98C46B1FBF2F102FB11C31B044F
+S31508008FA043EA1043B3FBF2FC02FB1C3380B240EAEF
+S31508008FB00343B3FBF2F002FB103240EA0C400023F5
+S31508008FC07047022A05D98446B0FBF2F002FB10C2AC
+S31508008FD070474AB105D100F0010249085FEA30003E
+S31508008FE0704700220023704700F090B90B0002007A
+S31508008FF0002100207047904271EB030CF6D3B3F5BD
+S31508009000803F2FD2F0B5B3FA83F7B1FA81F4A7F10E
+S315080090100F0E3D1B5340CEF1200602FA0EF2F34125
+S315080090205340B5F10F0746D80F3C2C444140C4F1D4
+S315080090302006A040F1414140B1FBF3F603FB1611AF
+S31508009040A2FB0645001BA94102D2761E801859418B
+S3150800905080EA010221FA0EF362FA0EF200215A4062
+S315080090603046F0BD30B4B1FBF3FC03FB1C11A2FB88
+S315080090700C45001BA94103D2ACF1010C80185941DB
+S3150800908030BC02460B46604600217047B2F1807F2D
+S3150800909065D3F0B5B2FA82F7B1FA81F4C7F10F06D3
+S315080090A03D1B22FA06F307F1110EF24120355A400C
+S315080090B0B5F10F07B8D94140C4F12006A040F141E7
+S315080090C04140B1FBF3FC03FB1C11A2FB0C45001B42
+S315080090D0A94103D2BCF1010C801859410F2F12D3B4
+S315080090E00F3FC90341EA5041B1FBF3F603FB1611E2
+S315080090F0A2FB0645D4EBC030A94102D2761E8018E1
+S31508009100594146EACC3C07B34140C7F12006B8406E
+S31508009110F1414140B1FBF3F603FB1611A2FB0645EC
+S31508009120001BA94102D2761E8018594180EA010225
+S3150800913021FA0EF3C7F1200462FA0EF20CFA07F0D0
+S315080091405A402CFA04F13043F0BD80EA010221FAB4
+S315080091500EF3002162FA0EF260465A40F0BD8C46C4
+S31508009160B1FBF2F102FB11C31B0243EA1063B3FB26
+S31508009170F2FC02FB1C331B024CEA002043EA106394
+S31508009180B3FBF2FC02FB1C331B024CEA002043EA49
+S315080091901063B3FBF2FC02FB1C331B024CEA0020F3
+S315080091A043EA1063B3FBF2FC02FB1C324CEA0020D4
+S315080091B00023704710F007003F4B1A684FF6FF016F
+S315080091C00A403E4951EA00210A431A6070473A4864
+S315080091D00068C0F302207047020052B2002A04D485
+S315080091E00901374A40B2115407E00901354A40B22D
+S315080091F010F00F00104400F8041C704710B410F06B
+S315080092000700D0F10703052B01D3042301E0D0F1B1
+S315080092100703041D072C01D2002000E0C01E01240C
+S3150800922014FA03F35B1E1940814014FA00F0401E3D
+S315080092301040084310BC704780B5411EB1F1807FCD
+S3150800924001D301200EE0401E1F4908600F215FF080
+S31508009250FF30FFF7C1FF00201C49086007201C49A2
+S315080092600860002002BD80B5FFF7A4FF01BD70B5F8
+S3150800927004000D0016000020FFF7A9FF32002900A0
+S31508009280FFF7BCFF0100200040B2FFF7A5FF70BD45
+S3150800929080B5FFF7D1FF02BD042805D10C48016847
+S315080092A051F00401016004E00948016831F0040145
+S315080092B001607047000000000CED00E00000FA05B0
+S315080092C000E400E018ED00E014E000E018E000E03B
+S315080092D010E000E080B500F001F801BD704730B439
+S315080092E00EE00268436802440830DC0744BFA9F16F
+S315080092F00104E31852F8045B43F8045B091FF9D12B
+S3150800930050F8041B0029ECD130BC704770470000A8
+S3150800931038B50400002C01D10120AEE094F82000F5
+S31508009320002802D1200000F015FA2068006830F005
+S31508009330020021680860FFF7E3FA05002068406824
+S3150800934080070DD5FFF7DCFA401B0B28F6D3606AB9
+S3150800935050F400306062052084F8200001208CE07B
+S315080093602068006850F0010021680860FFF7C8FA15
+S31508009370050020684068C0070DD4FFF7C1FA401BF6
+S315080093800B28F6D3606A50F400306062052084F832
+S315080093902000012071E0207E012806D1206800689F
+S315080093A050F080002168086005E02068006830F009
+S315080093B0800021680860607E012806D12068006860
+S315080093C050F040002168086005E02068006830F029
+S315080093D0400021680860A07E012806D12068006840
+S315080093E050F020002168086005E02068006830F029
+S315080093F0200021680860E07E012806D12068006800
+S3150800940030F010002168086005E02068006850F018
+S31508009410100021680860207F012806D120680068AE
+S3150800942050F008002168086005E02068006830F000
+S31508009430080021680860607F012806D12068006856
+S3150800944050F004002168086005E02068006830F0E4
+S31508009450040021680860A168E068014320690143A7
+S31508009460606901436068401E01432068C1610020AD
+S315080094706062012084F82000002032BD30B4026802
+S3150800948090F820201300DBB2012B03D0D2B2022AB7
+S3150800949040F07F80594AD2F8000250F00100C2F825
+S315080094A00002D2F8000230F47C50C2F80002D2F86A
+S315080094B000024B6A50EA0320C2F8000201200B7D25
+S315080094C013F01F0310FA03F3D2F81C029843C2F8EC
+S315080094D01C02C869002816D1D2F80C029843C2F8B3
+S315080094E00C02486902EBC000CC684D68C5EA044422
+S315080094F0C0F84042486902EBC0008C680D68C5EAAE
+S315080095000444C0F84442C869012816D1D2F80C02AE
+S315080095101843C2F80C02486902EBC0000C684D6893
+S31508009520C5EA0444C0F84042486902EBC0008C68AA
+S31508009530CD68C5EA0444C0F844428869002805D1C4
+S31508009540D2F804029843C2F8040204E0D2F80402EE
+S315080095501843C2F804020869002805D1D2F8140293
+S315080095609843C2F8140204E0D2F814021843C2F869
+S315080095701402086A012804D1D2F81C020343C2F86F
+S315080095801C32D2F8000240084000C2F8000200204F
+S3150800959004E0416A51F480214162012030BC7047E1
+S315080095A038B5040094F82000012821D1022084F857
+S315080095B02000206800684008400021680860FFF71E
+S315080095C09FF9050020684068C0070DD5FFF798F990
+S315080095D0401B0B28F6D3606A50F400306062052001
+S315080095E084F82000012008E000206062002004E0E2
+S315080095F0606A50F400206062012032BD00640040B9
+S3150800960030B490F820402500EDB2012D03D0E4B225
+S31508009610022C40F0988000290AD10468E46814F006
+S31508009620030F10D1416A51F40011416201208FE005
+S315080096300468246914F0030F05D1416A51F4001136
+S315080096404162012084E004680D012C44D4F8B0413D
+S3150800965014F0040494609468002C07D104680D0182
+S315080096602C44D4F8B041640D146006E004680D017A
+S315080096702C44D4F8B041E408546004680D012C4425
+S31508009680D4F8B04114F00204D46004680D012C44E7
+S31508009690D4F8B44114F00F04146104680D012C4485
+S315080096A0D4F8B441C4F30724946104680D012C442A
+S315080096B0D4F8B441240C546102680C012244D2F84F
+S315080096C0B8211A7002680C012244D2F8B821120A8D
+S315080096D05A7002680C012244D2F8B821120C9A700A
+S315080096E002680C012244D2F8B821120EDA70026818
+S315080096F00C012244D2F8BC211A7102680C012244DA
+S31508009700D2F8BC21120A5A7102680C012244D2F816
+S31508009710BC21120C9A7102680C012244D2F8BC21B1
+S31508009720120EDA71002906D10168C96851F02001C4
+S315080097300068C16005E00168096951F02001006808
+S315080097400161002004E0416A51F480214162012050
+S3150800975030BC704770470000BFF34F8FB6490A68A0
+S3150800976012F4E062B54802430A60BFF34F8F00BFA8
+S31508009770FDE780B500F00DF800F0CDF801BD80B525
+S3150800978000F021F800F02AF901BD80B5FFF7E4FFE3
+S3150800979001BD80B5AA48AB4901604FF461414160FB
+S315080097A0002181600021C160002101610C21416115
+S315080097B0002181610021C16100210162002141620D
+S315080097C0FEF704FD01BD70B59F4C2078002815D121
+S315080097D09E4D280000F037F8012833D12878002854
+S315080097E030D0287841282DDA00F053F998490860D6
+S315080097F00120207000209749087023E0954D934E6C
+S3150800980028783044401C00F01EF8012811D1287829
+S31508009810401C287028783178884213D1002020709F
+S315080098207078FF280ED1287802280BD1FFF7ADFFF4
+S3150800983008E000F02EF9864909686431814201D2B0
+S315080098400020207070BD80B50100002301227C48ED
+S31508009850FEF7F9FCC0B2002801D1012000E0002083
+S3150800986002BDF8B504000D0016001F00FFF732FB15
+S315080098704FF47A71B0FBF1F1002200E0521C10009F
+S31508009880C0B2122845D2744B200080B294465FFAC3
+S315080098908CFC13F81CC096465FFA8EFE03EB4E0E40
+S315080098A09EF801E01EEB0C0C1CF1010C0CFB00F001
+S315080098B0B1FBF0FC00FB1C100028DFD1200080B2B1
+S315080098C094465FFA8CFC13F81CC096465FFA8EFE27
+S315080098D003EB4E0E9EF801E01EEB0C0C1CF1010C7E
+S315080098E00CFB00F0B1FBF0F0288028880028C5D0D2
+S315080098F0288840F2014C6045C0DA1000C0B213F85F
+S3150800990010003070D2B203EB420040783870012064
+S3150800991000E00020F2BD30B58BB00020ADF80200A3
+S3150800992000208DF8010000208DF8000040F26765E0
+S315080099306B460DF101020DF102014FF4FA70FFF7C3
+S3150800994090FF464C4648206000202076002060762E
+S315080099500020A0760120E07600202077002060779E
+S315080099600020A0600020E0609DF80100401E000471
+S3150800997020619DF80000401E00056061BDF80200E8
+S3150800998060602000FFF7C4FC002D02D46D05354841
+S3150800999005E025F00045ED0055F0040532480021A4
+S315080099A0069100210791012108912900090C0191CE
+S315080099B0ADB202950100090C039180B20490002013
+S315080099C00590012009900E200A9001A92000FFF7B2
+S315080099D055FD2000FFF7E4FD0BB030BD30B589B06A
+S315080099E040F2676400256B4602AA00211B48FFF770
+S315080099F007FE00281ED1002C07D40298A0420DD1DC
+S31508009A00049800280AD1012508E024F000440398A8
+S31508009A10A04203D10498042800D10125EDB2012DF6
+S31508009A2008D19DF80000FF2804D10698022801D124
+S31508009A30FFF7ABFE09B030BD0CED00E00400FA05F7
+S31508009A400C00002000480040050100208C00002082
+S31508009A50F800002004010020A4A00008D00000207F
+S31508009A60006400400400E0FFFCFF1F0080B5FFF71C
+S31508009A702EFA4FF47A71B0FBF1F0FFF709FC0420D7
+S31508009A80FFF70AFC002200215FF0FF30FFF7EFFB2B
+S31508009A9001BD80B5FEF734FF02BD80B500F004F8BD
+S31508009AA0FFF718FC01BD000003480168034A127855
+S31508009AB089180160704700BF0001002008000020D7
+S31508009AC0F8B40022002200220022002337E00A27E9
+S31508009AD004E0DFF8E4219042F9D10927FFB213F038
+S31508009AE00302D2B2920097403E431A00920845F804
+S31508009AF02260DFF8C8512A68A2434E68F60300D5EB
+S31508009B0022432A60DFF8B8512A68A2434E68B60392
+S31508009B1000D522432A60DFF8AC512A68A2434E6872
+S31508009B20F60200D522432A60DFF89C512A68A24330
+S31508009B304E68B60201D5144322002A605B1C102B1E
+S31508009B4080F0AD80012515FA03F20C6814409442A2
+S31508009B50F4D14A68012A08D04A68022A05D04A6818
+S31508009B60112A02D04A68122A16D1866803271A00D3
+S31508009B70D2B252009740BE43CF681A00D2B2520002
+S31508009B8097403E43866042689D40AA434D68C5F3A8
+S31508009B9000159D402A434260C66803251A00D2B2C2
+S31508009BA0520015FA02F296438F681A00D2B2520092
+S31508009BB097403E43C6604A68022A02D04A68122A7B
+S31508009BC017D11A00D20800EB8202166A0F2713F083
+S31508009BD00702D2B292009740BE430F6913F00702FC
+S31508009BE0D2B2920097403E431A00D20800EB820296
+S31508009BF0166206681A00D2B252009540AE430D7935
+S31508009C0015F003051A00D2B2520095402E4306609D
+S31508009C104A68D20092D52D4A156855F480451560D4
+S31508009C20126812F480420092009A294D1A0092088E
+S31508009C3055F822600F2713F00302D2B2920097401C
+S31508009C40BE43244A904201D1002747E7224A904260
+S31508009C5001D1012742E7214A904201D102273DE777
+S31508009C601F4A904201D1032738E71E4A904201D184
+S31508009C70042733E71C4A904201D105272EE71B4AE1
+S31508009C80904201D1062729E7194A904201D10727B0
+S31508009C9024E7184A90427FF41CAF08271EE7F1BC58
+S31508009CA07047D2B2002A02D089B2816102E089B235
+S31508009CB0090481617047000000240240003C01400D
+S31508009CC0043C0140083C01400C3C01404438024039
+S31508009CD00838014000000240000402400008024023
+S31508009CE0000C024000100240001402400018024016
+S31508009CF0001C02400020024080B500F007F8FFF77C
+S31508009D0038FD00F010F9FFF73AFDFAE780B500F0E4
+S31508009D1009F800F02DF900F009F8FFF7A7FE00F0A2
+S31508009D20FBF801BD744875490860704780B592B064
+S31508009D303022002106A800F026F91422002101A8E5
+S31508009D4000F021F96E48016851F080510160006801
+S31508009D5010F08050009000986A48016851F440411C
+S31508009D600160006810F440400090009801200690B9
+S31508009D705FF4A020079002200C905FF480000D90FD
+S31508009D8008200E904FF4D8700F90022010900220F1
+S31508009D90119006A8FEF7BAFD002800D0FEE700F0ED
+S31508009DA0FDF8002800D0FEE70F200190022002905F
+S31508009DB0002003904FF4A05004904FF48050059073
+S31508009DC0072101A8FEF7A3FF002800D0FEE713B07D
+S31508009DD000BD38B586B04A48016851F08051016027
+S31508009DE0016811F080510591059947490A6852F4AE
+S31508009DF080420A60096811F4804105910599434932
+S31508009E000A6852F002020A600A6812F00202059213
+S31508009E10059A0A6852F008020A60096811F00801F2
+S31508009E2005910599016851F480210160016811F4D2
+S31508009E30802105910599016851F00071016000685B
+S31508009E4010F00070059005980320FFF70CFA002221
+S31508009E5000217FF00B00FFF70AFA002200217FF0AD
+S31508009E600A00FFF704FA002200217FF00900FFF735
+S31508009E70FEF9002200217FF00400FFF7F8F900221E
+S31508009E8000217FF00300FFF7F2F9002200217FF09E
+S31508009E900100FFF7ECF9002200215FF0FF30FFF721
+S31508009EA0E6F9802000900120019000200290002011
+S31508009EB00390174C69462000FFF702FE4FF44075E1
+S31508009EC000950220019000200290032003900720AD
+S31508009ED0049069460F48FFF7F3FD009502200190AC
+S31508009EE00020029003200390092004906946200070
+S31508009EF0FFF7E6FD07B030BD0080000808ED00E07A
+S31508009F004038024000700040443802403038024071
+S31508009F1000040240000C024080B50022802111484E
+S31508009F20FFF7BFFE01BD38B5FFF7B3FD04000E4DC0
+S31508009F302868201AB0F5FA7F13D30C490878002848
+S31508009F4007D101200870012280210648FFF7A9FEE3
+S31508009F5006E000200870002280210248FFF7A1FED3
+S31508009F602C6031BD00040240FC00002006010020E0
+S31508009F7080B50320FFF777F90020FEF7DDFFFFF72E
+S31508009F8028FF002002BD10B5044610460A460146C1
+S31508009F90204600F03FF8204610BD00007CB50020A2
+S31508009FA01B48016851F080510160006810F080502C
+S31508009FB000900098154E306850F480303060FEF7F7
+S31508009FC09FFC0500104C2068C00308D4FEF798FCD7
+S31508009FD0401B40F2E9318842F4D3032013E030688D
+S31508009FE050F400303060FEF78BFC050020688003D3
+S31508009FF008D4FEF785FC401B40F2E9318842F5D3C8
+S3150800A000032000E0002076BD047000400070004088
+S3150800A0104038024062F30F2262F31F42401810F0E4
+S3150800A020030308D0C91A1FD3DB0748BF00F8012D60
+S3150800A03028BF20F8022D130030B4144615461039EF
+S3150800A04028BF20E93C00FAD8490728BF20E90C00B8
+S3150800A05048BF40F8042D890028BF20F8022D48BFC4
+S3150800A06000F8012D30BC7047C91818BF00F8012D3B
+S3150800A070CB0728BF00F8012D7047000010B5074927
+S3150800A08079441831064C7C44163404E00A68081DE5
+S3150800A090114488470146A142F8D110BD500000007E
+S3150800A0A070000000050206020603070308030903F9
+S3150800A0B009040A040B040C040C050D050E050F050E
+S3150800A0C00F061006100710084EF68851CEF200014A
+S3150800A0D0086840F470000860BFF34F8FBFF36F8FB6
+S3150800A0E04FF00070E1EE100A70470000DBE7FFFF53
+S3150800A0F0FC0000000C00002000000000E3F1FFFF58
+S3150800A1000C000000A4000000000000200000000071
+S3150800A11000F00DF8002801D0FFF7B0FFAFF300807C
+S3150800A1200020AFF30080FFF7E7FD00F002F80120FA
+S3150800A130704700F001B800000746384600F002F8FC
+S3150800A140FBE7000080B5AFF30080024A1100182033
+S3150800A150ABBEFBE7260002000448016851F4700113
+S3150800A16001605FF0006002490860704788ED00E012
+S3150800A17008ED00E002488546024880470248004745
+S3150800A1800805002059A100089DA10008000000004C
+S3150800A190000000000102030406070809AFF3008067
+S3150800A1A0FFF792FFFFF7B4FF100000000024F40049
+S3150800A1B0010000000000000001020304FFF7FEBFD3
S3150800A1C0FFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBFB5
S3150800A1D0FFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBFA5
S3150800A1E0FFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBF95
@@ -560,5 +560,9 @@ S3150800A2D0FFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBFA4
S3150800A2E0FFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBF94
S3150800A2F0FFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBF84
S3150800A300FFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBF73
-S30D0800A310FFF7FEBFFFF7FEBFD1
-S7050800A155FC
+S3150800A310FFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBF63
+S3150800A320FFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBF53
+S3150800A330FFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBF43
+S3150800A340FFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBF33
+S3150800A350FFF7FEBFFFF7FEBFFFF7FEBFFFF7FEBF23
+S7050800A19DB4
diff --git a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_IAR/Prog/ide/stm32f746.dep b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_IAR/Prog/ide/stm32f746.dep
index f50d1a10..96f36079 100644
--- a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_IAR/Prog/ide/stm32f746.dep
+++ b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_IAR/Prog/ide/stm32f746.dep
@@ -5,539 +5,493 @@
stm32f746
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_pwr_ex.h
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_cortex.c
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_i2c.c
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_gpio.h
+ $PROJ_DIR$\..\lib\CMSIS\Device\ST\STM32F7xx\Include\stm32f746xx.h
$PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_can.c
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_pwr.c
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_gpio.c
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_cortex.h
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_dma_ex.c
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_flash.c
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_can.h
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_rcc.c
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_rcc.h
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_pwr.h
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_rcc_ex.c
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_exti.c
$PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_flash.h
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_dma.h
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_pwr.c
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_i2c.h
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_pwr.h
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_pwr_ex.c
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_can.h
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_flash_ex.c
+ $PROJ_DIR$\..\lib\CMSIS\Device\ST\STM32F7xx\Include\stm32f7xx.h
$PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Inc\Legacy\stm32_hal_legacy.h
$PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_def.h
$PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_gpio_ex.h
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal.c
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal.h
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_exti.h
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_pwr_ex.c
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_dma.h
$PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_dma.c
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_i2c.h
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_i2c_ex.c
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_gpio.c
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal.h
$PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_dma_ex.h
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_flash_ex.c
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_gpio.h
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_cortex.c
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_flash.c
+ $PROJ_DIR$\..\lib\CMSIS\Device\ST\STM32F7xx\Include\system_stm32f7xx.h
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal.c
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_dma_ex.c
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_exti.h
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_i2c.c
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_i2c_ex.c
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_cortex.h
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_exti.c
$PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_flash_ex.h
$PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_i2c_ex.h
- $PROJ_DIR$\..\lib\CMSIS\Include\cmsis_compiler.h
- $PROJ_DIR$\..\lib\CMSIS\Include\cmsis_iccarm.h
$PROJ_DIR$\..\lib\CMSIS\Include\cmsis_version.h
- $PROJ_DIR$\..\lib\CMSIS\Device\ST\STM32F7xx\Include\stm32f746xx.h
$PROJ_DIR$\..\lib\CMSIS\Include\core_cm7.h
- $PROJ_DIR$\..\lib\CMSIS\Device\ST\STM32F7xx\Include\stm32f7xx.h
- $PROJ_DIR$\..\lib\CMSIS\Device\ST\STM32F7xx\Include\system_stm32f7xx.h
+ $PROJ_DIR$\..\lib\CMSIS\Include\cmsis_iccarm.h
+ $PROJ_DIR$\..\lib\CMSIS\Include\cmsis_compiler.h
+ $PROJ_DIR$\..\obj\timer.__cstat.et
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_dma_ex.__cstat.et
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_uart.__cstat.et
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_mdios.__cstat.et
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_smartcard.__cstat.et
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_qspi.__cstat.et
+ $PROJ_DIR$\..\obj\boot.__cstat.et
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_timebase_rtc_wakeup_template.__cstat.et
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_pwr.__cstat.et
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_ltdc.__cstat.et
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_rtc_ex.__cstat.et
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_spdifrx.__cstat.et
+ $PROJ_DIR$\..\obj\led.__cstat.et
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_jpeg.__cstat.et
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_flash.__cstat.et
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_adc.c
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_rtc.__cstat.et
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_spi.__cstat.et
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_sram.__cstat.et
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_nand.__cstat.et
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_dfsdm.__cstat.et
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_pcd.__cstat.et
+ $PROJ_DIR$\..\obj\stm32f7xx_ll_spi.__cstat.et
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_ll_usart.c
+ $PROJ_DIR$\..\..\Boot\blt_conf.h
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_iwdg.__cstat.et
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_adc_ex.c
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_rcc.__cstat.et
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_adc_ex.o
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_sai_ex.__cstat.et
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_rng.__cstat.et
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_nor.__cstat.et
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_qspi.pbi
+ $PROJ_DIR$\..\obj\stm32f7xx_ll_crc.o
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_dac_ex.__cstat.et
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_crc.__cstat.et
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_mmc.pbi
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_nand.pbi
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_dac.__cstat.et
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_ltdc_ex.pbi
+ $PROJ_DIR$\..\obj\stm32f7xx_ll_dma.o
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_eth.__cstat.et
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_cortex.o
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_timebase_tim_template.c
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_can.o
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_pcd_ex.pbi
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_adc.o
+ $PROJ_DIR$\..\obj\stm32f7xx_ll_pwr.pbi
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_flash_ex.__cstat.et
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_dma.__cstat.et
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_crc_ex.__cstat.et
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_nor.pbi
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_cryp_ex.__cstat.et
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_timebase_tim_template.o
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_dac_ex.o
+ $PROJ_DIR$\..\obj\stm32f7xx_ll_gpio.pbi
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_hcd.__cstat.et
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_dcmi.__cstat.et
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_i2c_ex.__cstat.et
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_pcd.pbi
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_irda.pbi
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_rng.pbi
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_hash.__cstat.et
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_sdram.__cstat.et
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_nor.c
+ $PROJ_DIR$\..\obj\stm32f7xx_ll_rng.pbi
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_dcmi.o
+ $PROJ_DIR$\..\obj\stm32f7xx_ll_rcc.pbi
+ $PROJ_DIR$\..\obj\stm32f7xx_ll_lptim.pbi
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_ltdc_ex.__cstat.et
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_irda.__cstat.et
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_sai.__cstat.et
+ $PROJ_DIR$\..\obj\stm32f7xx_ll_tim.pbi
+ $PROJ_DIR$\..\obj\stm32f7xx_ll_rcc.__cstat.et
+ $PROJ_DIR$\..\obj\main.__cstat.et
+ $PROJ_DIR$\..\obj\stm32f7xx_ll_sdmmc.pbi
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_usart.__cstat.et
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_pwr.xcl
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_ll_pwr.c
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_lptim.__cstat.et
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_timebase_rtc_alarm_template.__cstat.et
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_ll_spi.c
+ $PROJ_DIR$\..\obj\stm32f7xx_ll_spi.pbi
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_msp_template.__cstat.et
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_dcmi_ex.o
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_ltdc_ex.c
+ $PROJ_DIR$\..\obj\stm32f7xx_it.__cstat.et
+ $PROJ_DIR$\..\obj\stm32f7xx_ll_crc.__cstat.et
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_pwr_ex.__cstat.et
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_dma_ex.o
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_msp.__cstat.et
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_sd.__cstat.et
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_smartcard_ex.__cstat.et
+ $PROJ_DIR$\..\obj\system_stm32f7xx.__cstat.et
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_smbus.__cstat.et
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_dfsdm.o
+ $PROJ_DIR$\..\boot.c
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_rcc.c
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_uart.c
+ $PROJ_DIR$\..\main.c
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_uart.h
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_pwr_ex.h
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_rcc_ex.c
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_uart_ex.c
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_tim.c
+ $PROJ_DIR$\..\lib\stm32f7xx_hal_conf.h
+ $PROJ_DIR$\..\lib\system_stm32f7xx.c
+ $PROJ_DIR$\..\startup_stm32f746xx.s
+ $PROJ_DIR$\..\timer.c
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_tim_ex.c
+ $PROJ_DIR$\..\boot.h
+ $PROJ_DIR$\..\timer.h
+ $PROJ_DIR$\..\led.c
$PROJ_DIR$\..\obj\stm32f7xx_hal_rcc_ex.__cstat.et
$PROJ_DIR$\..\obj\stm32f7xx_hal_mmc.__cstat.et
$PROJ_DIR$\..\obj\stm32f7xx_hal_i2s.__cstat.et
$PROJ_DIR$\..\obj\stm32f7xx_ll_i2c.__cstat.et
$PROJ_DIR$\..\obj\stm32f7xx_hal_dma2d.o
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_uart_ex.h
+ $PROJ_DIR$\..\header.h
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_rcc.h
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_rcc_ex.h
+ $PROJ_DIR$\..\led.h
$PROJ_DIR$\..\obj\stm32f7xx_hal_dma.o
- $PROJ_DIR$\..\obj\stm32f7xx_hal_dfsdm.o
- $PROJ_DIR$\..\obj\stm32f7xx_hal_dcmi_ex.o
- $PROJ_DIR$\..\obj\stm32f7xx_ll_sdmmc.pbi
- $PROJ_DIR$\..\obj\stm32f7xx_ll_crc.__cstat.et
- $PROJ_DIR$\..\obj\stm32f7xx_ll_spi.pbi
- $PROJ_DIR$\..\obj\stm32f7xx_hal_msp.__cstat.et
- $PROJ_DIR$\..\obj\stm32f7xx_ll_rcc.__cstat.et
- $PROJ_DIR$\..\obj\stm32f7xx_hal_pwr_ex.__cstat.et
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_ltdc_ex.c
- $PROJ_DIR$\..\obj\system_stm32f7xx.__cstat.et
- $PROJ_DIR$\..\obj\stm32f7xx_ll_rcc.pbi
- $PROJ_DIR$\..\obj\stm32f7xx_it.__cstat.et
- $PROJ_DIR$\..\obj\stm32f7xx_hal_usart.__cstat.et
- $PROJ_DIR$\..\obj\stm32f7xx_hal_sdram.__cstat.et
- $PROJ_DIR$\..\obj\stm32f7xx_hal_dma_ex.o
- $PROJ_DIR$\..\obj\stm32f7xx_hal_sd.__cstat.et
- $PROJ_DIR$\..\obj\stm32f7xx_hal_smartcard_ex.__cstat.et
- $PROJ_DIR$\..\obj\stm32f7xx_hal_smbus.__cstat.et
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_nor.c
- $PROJ_DIR$\..\obj\stm32f7xx_ll_tim.pbi
- $PROJ_DIR$\..\obj\stm32f7xx_hal_dcmi.o
- $PROJ_DIR$\..\obj\stm32f7xx_ll_rng.pbi
- $PROJ_DIR$\..\obj\stm32f7xx_hal_sai.__cstat.et
- $PROJ_DIR$\..\obj\main.__cstat.et
- $PROJ_DIR$\..\obj\stm32f7xx_ll_lptim.pbi
- $PROJ_DIR$\..\obj\stm32f7xx_hal_ltdc_ex.__cstat.et
- $PROJ_DIR$\..\obj\stm32f7xx_hal_pwr.xcl
- $PROJ_DIR$\..\obj\stm32f7xx_hal_irda.__cstat.et
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_ll_pwr.c
- $PROJ_DIR$\..\obj\stm32f7xx_hal_lptim.__cstat.et
- $PROJ_DIR$\..\obj\stm32f7xx_hal_timebase_rtc_alarm_template.__cstat.et
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_ll_spi.c
- $PROJ_DIR$\..\obj\stm32f7xx_hal_msp_template.__cstat.et
- $PROJ_DIR$\..\obj\stm32f7xx_hal_rng.__cstat.et
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_ll_usart.c
- $PROJ_DIR$\..\obj\stm32f7xx_hal_iwdg.__cstat.et
- $PROJ_DIR$\..\obj\boot.__cstat.et
- $PROJ_DIR$\..\obj\stm32f7xx_hal_mdios.__cstat.et
- $PROJ_DIR$\..\..\Boot\blt_conf.h
- $PROJ_DIR$\..\obj\stm32f7xx_hal_qspi.__cstat.et
- $PROJ_DIR$\..\obj\stm32f7xx_hal_smartcard.__cstat.et
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_adc_ex.c
- $PROJ_DIR$\..\obj\stm32f7xx_hal_rtc_ex.__cstat.et
- $PROJ_DIR$\..\obj\stm32f7xx_hal_rtc.__cstat.et
- $PROJ_DIR$\..\obj\stm32f7xx_hal_spi.__cstat.et
- $PROJ_DIR$\..\obj\stm32f7xx_hal_pcd.__cstat.et
- $PROJ_DIR$\..\obj\stm32f7xx_hal_nand.__cstat.et
- $PROJ_DIR$\..\obj\stm32f7xx_ll_spi.__cstat.et
- $PROJ_DIR$\..\obj\stm32f7xx_hal_rcc.__cstat.et
- $PROJ_DIR$\..\obj\stm32f7xx_hal_spdifrx.__cstat.et
- $PROJ_DIR$\..\obj\stm32f7xx_hal_ltdc.__cstat.et
- $PROJ_DIR$\..\obj\stm32f7xx_hal_pwr.__cstat.et
- $PROJ_DIR$\..\obj\led.__cstat.et
- $PROJ_DIR$\..\obj\stm32f7xx_hal_jpeg.__cstat.et
- $PROJ_DIR$\..\obj\stm32f7xx_hal_adc_ex.o
- $PROJ_DIR$\..\obj\stm32f7xx_hal_sai_ex.__cstat.et
- $PROJ_DIR$\..\obj\stm32f7xx_hal_sram.__cstat.et
- $PROJ_DIR$\..\obj\stm32f7xx_hal_nor.__cstat.et
- $PROJ_DIR$\..\obj\stm32f7xx_hal_flash.__cstat.et
- $PROJ_DIR$\..\obj\stm32f7xx_hal_timebase_rtc_wakeup_template.__cstat.et
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_adc.c
- $PROJ_DIR$\..\obj\stm32f7xx_hal_dfsdm.__cstat.et
- $PROJ_DIR$\..\obj\timer.__cstat.et
- $PROJ_DIR$\..\obj\stm32f7xx_hal_dma_ex.__cstat.et
- $PROJ_DIR$\..\obj\stm32f7xx_hal_uart.__cstat.et
- $PROJ_DIR$\..\obj\stm32f7xx_ll_crc.o
- $PROJ_DIR$\..\obj\stm32f7xx_hal_dma.__cstat.et
- $PROJ_DIR$\..\obj\stm32f7xx_hal_crc_ex.__cstat.et
- $PROJ_DIR$\..\obj\stm32f7xx_hal_flash_ex.__cstat.et
- $PROJ_DIR$\..\obj\stm32f7xx_hal_dac_ex.__cstat.et
- $PROJ_DIR$\..\obj\stm32f7xx_hal_ltdc_ex.pbi
- $PROJ_DIR$\..\obj\stm32f7xx_hal_irda.pbi
- $PROJ_DIR$\..\obj\stm32f7xx_hal_eth.__cstat.et
- $PROJ_DIR$\..\obj\stm32f7xx_hal_i2c_ex.__cstat.et
- $PROJ_DIR$\..\obj\stm32f7xx_hal_pcd.pbi
- $PROJ_DIR$\..\obj\stm32f7xx_hal_cryp_ex.__cstat.et
- $PROJ_DIR$\..\obj\stm32f7xx_hal_nor.pbi
- $PROJ_DIR$\..\obj\stm32f7xx_hal_mmc.pbi
- $PROJ_DIR$\..\obj\stm32f7xx_hal_timebase_tim_template.o
- $PROJ_DIR$\..\obj\stm32f7xx_hal_nand.pbi
- $PROJ_DIR$\..\obj\stm32f7xx_hal_pcd_ex.pbi
- $PROJ_DIR$\..\obj\stm32f7xx_hal_hcd.__cstat.et
- $PROJ_DIR$\..\obj\stm32f7xx_hal_dcmi.__cstat.et
- $PROJ_DIR$\..\obj\stm32f7xx_hal_qspi.pbi
- $PROJ_DIR$\..\obj\stm32f7xx_hal_crc.__cstat.et
- $PROJ_DIR$\..\obj\stm32f7xx_hal_rng.pbi
- $PROJ_DIR$\..\obj\stm32f7xx_hal_dac.__cstat.et
- $PROJ_DIR$\..\obj\stm32f7xx_hal_hash.__cstat.et
- $PROJ_DIR$\..\obj\stm32f7xx_ll_dma.o
- $PROJ_DIR$\..\obj\stm32f7xx_hal_cortex.o
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_timebase_tim_template.c
- $PROJ_DIR$\..\obj\stm32f7xx_hal_can.o
- $PROJ_DIR$\..\obj\stm32f7xx_hal_dac_ex.o
- $PROJ_DIR$\..\obj\stm32f7xx_ll_pwr.pbi
- $PROJ_DIR$\..\obj\stm32f7xx_hal_adc.o
- $PROJ_DIR$\..\obj\stm32f7xx_ll_gpio.pbi
- $PROJ_DIR$\..\obj\stm32f7xx_hal_wwdg.__cstat.et
- $PROJ_DIR$\..\obj\stm32f7xx_ll_utils.__cstat.et
- $PROJ_DIR$\..\obj\stm32f7xx_hal_dac.o
- $PROJ_DIR$\..\obj\stm32f7xx_hal_crc_ex.o
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_wwdg.pbi
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_dcmi_ex.pbi
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_smartcard.pbi
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_sram.pbi
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_sdram.pbi
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_rtc_ex.pbi
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_smartcard_ex.pbi
+ $PROJ_DIR$\..\obj\stm32f7xx_ll_crc.pbi
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_usart.pbi
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_eth.pbi
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_wwdg.o
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_dma2d.__cstat.et
+ $PROJ_DIR$\..\obj\stm32f7xx_ll_sdmmc.o
+ $PROJ_DIR$\..\obj\stm32f7xx_ll_adc.pbi
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_sd.pbi
+ $TOOLKIT_DIR$\inc\c\intrinsics.h
+ $TOOLKIT_DIR$\inc\c\DLib_Defaults.h
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_timebase_tim_template.pbi
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_spi.pbi
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_gpio.__cstat.et
+ $PROJ_DIR$\..\obj\stm32f7xx_ll_dma2d.pbi
+ $PROJ_DIR$\..\obj\stm32f7xx_ll_dac.pbi
+ $PROJ_DIR$\..\obj\stm32f7xx_ll_fmc.pbi
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_i2c.__cstat.et
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_rtc.pbi
+ $PROJ_DIR$\..\obj\stm32f7xx_ll_exti.pbi
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_spdifrx.pbi
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_i2s.pbi
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_eth.c
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_msp.o
+ $PROJ_DIR$\..\obj\stm32f7xx_ll_dma.pbi
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_sai.pbi
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_tim_ex.__cstat.et
$PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_msp_template.c
- $PROJ_DIR$\..\obj\stm32f7xx_hal_cryp.__cstat.et
- $PROJ_DIR$\..\obj\stm32f7xx_hal_dcmi_ex.__cstat.et
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_timebase_rtc_alarm_template.pbi
$PROJ_DIR$\..\obj\stm32f7xx_ll_dma2d.__cstat.et
- $PROJ_DIR$\..\obj\stm32f7xx_hal_cryp.o
$PROJ_DIR$\..\obj\stm32f7xx_hal_hash_ex.__cstat.et
$PROJ_DIR$\..\obj\stm32f7xx_hal_crc.o
- $PROJ_DIR$\..\obj\stm32f7xx_hal_tim_ex.__cstat.et
$PROJ_DIR$\..\obj\stm32f7xx_ll_adc.__cstat.et
- $PROJ_DIR$\..\obj\stm32f7xx_hal.o
- $PROJ_DIR$\..\obj\stm32f7xx_hal_cryp_ex.o
- $PROJ_DIR$\..\obj\stm32f7xx_hal_tim.__cstat.et
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_timebase_rtc_wakeup_template.c
- $TOOLKIT_DIR$\inc\c\DLib_Config_Full.h
- $PROJ_DIR$\..\obj\stm32f7xx_hal_timebase_tim_template.__cstat.et
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_cryp.o
+ $PROJ_DIR$\..\obj\stm32f7xx_ll_utils.__cstat.et
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_dac.o
$PROJ_DIR$\..\obj\stm32f7xx_ll_i2c.pbi
$PROJ_DIR$\..\obj\stm32f7xx_hal_dsi.__cstat.et
$PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_timebase_rtc_alarm_template.c
- $PROJ_DIR$\..\obj\stm32f7xx_hal_rtc.o
+ $TOOLKIT_DIR$\inc\c\DLib_Config_Full.h
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_timebase_tim_template.__cstat.et
$PROJ_DIR$\..\obj\stm32f7xx_hal_cec.o
$PROJ_DIR$\..\obj\stm32f7xx_hal_cryp.pbi
- $PROJ_DIR$\..\obj\stm32f7xx_hal_timebase_rtc_alarm_template.pbi
$PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_dsi.c
- $PROJ_DIR$\..\obj\stm32f7xx_hal_sai_ex.pbi
- $TOOLKIT_DIR$\inc\c\ycheck.h
- $PROJ_DIR$\..\obj\stm32f7xx_hal_hcd.pbi
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_tim.__cstat.et
$PROJ_DIR$\..\obj\stm32f7xx_hal_dcmi.pbi
- $PROJ_DIR$\..\obj\stm32f7xx_ll_fmc.pbi
- $PROJ_DIR$\..\obj\stm32f7xx_ll_dma.pbi
- $PROJ_DIR$\..\obj\stm32f7xx_hal_wwdg.pbi
- $PROJ_DIR$\..\obj\stm32f7xx_hal_sd.pbi
- $PROJ_DIR$\..\obj\stm32f7xx_ll_exti.pbi
- $TOOLKIT_DIR$\inc\c\DLib_Defaults.h
- $PROJ_DIR$\..\obj\stm32f7xx_hal_rtc.pbi
- $PROJ_DIR$\..\obj\stm32f7xx_hal_i2s.pbi
- $PROJ_DIR$\..\obj\stm32f7xx_hal_spi.pbi
- $PROJ_DIR$\..\obj\stm32f7xx_hal_dcmi_ex.pbi
- $PROJ_DIR$\..\obj\stm32f7xx_hal_sdram.pbi
- $PROJ_DIR$\..\obj\stm32f7xx_hal_spdifrx.pbi
- $PROJ_DIR$\..\obj\stm32f7xx_hal_sram.pbi
- $PROJ_DIR$\..\obj\stm32f7xx_hal_smartcard.pbi
- $PROJ_DIR$\..\obj\stm32f7xx_hal_smartcard_ex.pbi
- $PROJ_DIR$\..\obj\stm32f7xx_hal_wwdg.o
- $PROJ_DIR$\..\obj\stm32f7xx_hal_gpio.__cstat.et
- $PROJ_DIR$\..\obj\stm32f7xx_hal_i2c.__cstat.et
- $PROJ_DIR$\..\obj\stm32f7xx_hal_dma2d.__cstat.et
- $PROJ_DIR$\..\obj\stm32f7xx_ll_crc.pbi
- $PROJ_DIR$\..\obj\stm32f7xx_hal_sai.pbi
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_eth.c
- $PROJ_DIR$\..\obj\stm32f7xx_hal_usart.pbi
- $PROJ_DIR$\..\obj\stm32f7xx_hal_msp.o
- $PROJ_DIR$\..\obj\stm32f7xx_hal_rtc_ex.pbi
- $PROJ_DIR$\..\obj\stm32f7xx_ll_adc.pbi
- $PROJ_DIR$\..\obj\stm32f7xx_hal_eth.pbi
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_tim_ex.c
- $PROJ_DIR$\..\obj\stm32f7xx_ll_sdmmc.o
- $TOOLKIT_DIR$\inc\c\intrinsics.h
- $PROJ_DIR$\..\obj\stm32f7xx_hal_timebase_tim_template.pbi
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_uart.c
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_uart.h
- $PROJ_DIR$\..\lib\stm32f7xx_hal_conf.h
- $PROJ_DIR$\..\lib\system_stm32f7xx.c
- $PROJ_DIR$\..\header.h
- $PROJ_DIR$\..\led.h
- $PROJ_DIR$\..\main.c
- $PROJ_DIR$\..\timer.c
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_uart_ex.h
- $PROJ_DIR$\..\boot.h
- $PROJ_DIR$\..\led.c
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Inc\stm32f7xx_hal_rcc_ex.h
- $PROJ_DIR$\..\obj\stm32f7xx_ll_dma2d.pbi
- $PROJ_DIR$\..\obj\stm32f7xx_ll_dac.pbi
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_uart_ex.c
- $PROJ_DIR$\..\boot.c
- $PROJ_DIR$\..\startup_stm32f746xx.s
- $PROJ_DIR$\..\obj\stm32f7xx_hal_smbus.pbi
- $PROJ_DIR$\..\obj\stm32f7xx_hal_timebase_rtc_wakeup_template.pbi
- $PROJ_DIR$\..\obj\stm32f7xx_hal_hash_ex.pbi
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_tim.c
- $PROJ_DIR$\..\obj\stm32f7xx_hal_dfsdm.pbi
- $PROJ_DIR$\..\timer.h
- $PROJ_DIR$\..\obj\stm32f7xx_hal_pwr_ex.xcl
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_sd.c
- $PROJ_DIR$\..\obj\stm32f7xx_hal_dma_ex.xcl
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_qspi.c
- $PROJ_DIR$\..\obj\stm32f7xx_hal.xcl
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_hcd.c
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_ll_dma2d.c
- $PROJ_DIR$\..\obj\stm32f7xx_hal_flash.xcl
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_mmc.c
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_ll_i2c.c
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_ll_rng.c
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_smartcard_ex.c
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_rtc_ex.c
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_hash.c
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_i2s.c
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_smbus.c
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_sai.c
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_jpeg.c
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_cryp.c
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_sai_ex.c
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_sdram.c
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_spdifrx.c
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_spi.c
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Inc\stm32f7xx_ll_rcc.h
- $PROJ_DIR$\..\obj\stm32f7xx_hal_cortex.xcl
- $PROJ_DIR$\..\obj\stm32f7xx_hal_can.xcl
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_dcmi.c
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_ll_crc.c
- $PROJ_DIR$\..\obj\stm32f7xx_hal_gpio.xcl
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_ll_exti.c
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_ll_dma.c
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_ll_rcc.c
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_cryp_ex.c
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_pcd_ex.c
+ $PROJ_DIR$\..\obj\stm32f7xx_hal.o
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_crc_ex.o
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_sai_ex.pbi
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_dcmi_ex.__cstat.et
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_hcd.pbi
+ $TOOLKIT_DIR$\inc\c\ycheck.h
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_cryp.__cstat.et
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_cryp_ex.o
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_timebase_rtc_wakeup_template.c
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_rtc.o
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_wwdg.__cstat.et
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_iwdg.c
$PROJ_DIR$\..\obj\stm32f7xx_hal_i2c.xcl
- $PROJ_DIR$\..\obj\stm32f7xx_hal_dsi.o
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_crc.c
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_crc_ex.c
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_flash_ex.xcl
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_ltdc.c
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_ll_crc.c
+ $PROJ_DIR$\..\obj\led.o
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_rng.c
+ $PROJ_DIR$\..\obj\stm32f7xx_ll_rtc.pbi
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_dac.c
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_lptim.c
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_dac_ex.c
$PROJ_DIR$\..\obj\stm32f7xx_ll_usart.__cstat.et
$PROJ_DIR$\..\obj\stm32f7xx_hal_i2c_ex.xcl
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_iwdg.c
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_ltdc.c
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_rng.c
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_crc.c
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_lptim.c
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_crc_ex.c
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_irda.c
- $PROJ_DIR$\..\obj\stm32f7xx_ll_rtc.pbi
- $PROJ_DIR$\..\obj\stm32f7xx_hal_tim.o
- $PROJ_DIR$\..\obj\stm32f7xx_hal_flash_ex.xcl
- $PROJ_DIR$\..\obj\led.o
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_dma2d.c
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_cec.c
$PROJ_DIR$\..\obj\stm32f7xx_hal_rcc.xcl
- $PROJ_DIR$\..\obj\stm32f7xx_hal_msp.pbi
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_dac.c
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_dac_ex.c
$PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_pcd.c
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_ll_dma.c
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_cryp_ex.c
$PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_dcmi_ex.c
$PROJ_DIR$\..\obj\stm32f7xx_hal_dma.xcl
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_irda.c
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_dma2d.c
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_cec.c
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_ll_exti.c
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_msp.pbi
$PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_nand.c
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_mdios.c
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_hash_ex.c
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_dfsdm.c
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_rtc.c
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Inc\stm32f7xx_ll_pwr.h
- $PROJ_DIR$\..\lib\CMSIS\Include\core_cmInstr.h
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_ll_utils.c
- $PROJ_DIR$\..\obj\stm32f7xx_hal_lptim.o
- $TOOLKIT_DIR$\inc\c\xencoding_limits.h
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_ll_lptim.c
- $TOOLKIT_DIR$\inc\c\DLib_Product.h
- $TOOLKIT_DIR$\inc\c\yvals.h
- $PROJ_DIR$\..\obj\stm32f7xx_hal_tim_ex.xcl
- $PROJ_DIR$\..\obj\stm32f7xx_hal_sram.o
- $PROJ_DIR$\..\obj\stm32f7xx_hal_spi.o
- $PROJ_DIR$\..\obj\stm32f7xx_hal_irda.o
- $PROJ_DIR$\..\obj\boot.xcl
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_ll_rtc.c
- $PROJ_DIR$\..\obj\timer.o
- $PROJ_DIR$\..\obj\stm32f7xx_hal_iwdg.o
- $PROJ_DIR$\..\obj\stm32f7xx_hal_cortex.__cstat.et
- $PROJ_DIR$\..\obj\stm32f7xx_hal_jpeg.o
- $PROJ_DIR$\..\lib\CMSIS\Include\core_cmFunc.h
- $PROJ_DIR$\..\obj\stm32f7xx_ll_usart.pbi
- $PROJ_DIR$\..\obj\led.xcl
- $PROJ_DIR$\..\obj\stm32f7xx_ll_usb.pbi
- $PROJ_DIR$\..\obj\stm32f7xx_it.pbi
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_ll_gpio.c
- $PROJ_DIR$\..\bin\demoprog_stm32f746.srec
- $TOOLKIT_DIR$\inc\c\iccarm_builtin.h
- $PROJ_DIR$\..\obj\stm32f7xx_hal.__cstat.et
- $PROJ_DIR$\..\lib\CMSIS\Include\core_cmSimd.h
- $PROJ_DIR$\..\stm32f7xx_it.h
- $PROJ_DIR$\..\obj\stm32f7xx_hal_i2s.o
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_ll_fmc.c
- $PROJ_DIR$\..\obj\stm32f7xx_hal_uart.xcl
- $PROJ_DIR$\..\obj\stm32f7xx_hal_smbus.o
- $PROJ_DIR$\..\obj\stm32f7xx_ll_rcc.o
- $PROJ_DIR$\..\obj\stm32f7xx_ll_utils.pbi
- $PROJ_DIR$\..\obj\timer.xcl
- $PROJ_DIR$\..\main.h
- $PROJ_DIR$\..\obj\stm32f7xx_hal_cec.__cstat.et
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_wwdg.c
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_ll_tim.c
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_ll_usb.c
- $PROJ_DIR$\..\stm32f7xx_it.c
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_gpio.xcl
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_ll_rcc.c
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_dsi.o
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_tim.o
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_pcd_ex.c
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_qspi.c
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_cryp.c
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_sdram.c
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_ll_dma2d.c
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_sd.c
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_cortex.xcl
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_mmc.c
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_dma_ex.xcl
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_dcmi.c
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_flash.xcl
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_timebase_rtc_wakeup_template.pbi
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_spi.c
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_smbus.pbi
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_hcd.c
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_hash_ex.pbi
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_ll_rng.c
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_smartcard_ex.c
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_smbus.c
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_jpeg.c
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_sai_ex.c
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_i2s.c
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_rtc_ex.c
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_sai.c
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_ll_i2c.c
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_spdifrx.c
+ $PROJ_DIR$\..\obj\stm32f7xx_hal.xcl
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_hash.c
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_dfsdm.pbi
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_pwr_ex.xcl
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Inc\stm32f7xx_ll_rcc.h
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_can.xcl
$PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_smartcard.c
- $PROJ_DIR$\..\obj\stm32f7xx_hal_rcc_ex.xcl
$PROJ_DIR$\..\obj\boot.o
- $PROJ_DIR$\..\obj\stm32f7xx_ll_tim.o
- $PROJ_DIR$\..\obj\system_stm32f7xx.xcl
- $PROJ_DIR$\..\obj\stm32f746.pbd
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Inc\stm32f7xx_ll_system.h
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_uart.xcl
+ $PROJ_DIR$\..\main.h
+ $PROJ_DIR$\..\lib\CMSIS\Include\core_cmSimd.h
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_i2s.o
+ $PROJ_DIR$\..\stm32f7xx_it.h
+ $PROJ_DIR$\..\obj\stm32f7xx_ll_rcc.o
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_wwdg.c
+ $PROJ_DIR$\..\obj\timer.xcl
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_rcc_ex.xcl
$PROJ_DIR$\..\obj\stm32f7xx_hal_tim.xcl
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_ll_sdmmc.c
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_ll_adc.c
+ $PROJ_DIR$\..\obj\stm32f7xx_ll_utils.pbi
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_ll_tim.c
$PROJ_DIR$\..\obj\stm32f7xx_ll_rtc.__cstat.et
+ $PROJ_DIR$\..\obj\system_stm32f7xx.xcl
$PROJ_DIR$\..\stm32f7xx_hal_msp.c
$PROJ_DIR$\..\obj\stm32f7xx_hal_smartcard_ex.o
$PROJ_DIR$\..\obj\stm32f7xx_hal_i2c.o
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_ll_adc.c
$PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_usart.c
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_ll_usb.c
$PROJ_DIR$\..\obj\stm32f7xx_ll_exti.__cstat.et
$PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_sram.c
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Inc\stm32f7xx_ll_utils.h
- $PROJ_DIR$\..\obj\main.xcl
- $PROJ_DIR$\..\obj\stm32f7xx_ll_rng.o
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_ll_dac.c
- $PROJ_DIR$\..\obj\stm32f7xx_hal_lptim.pbi
- $TOOLKIT_DIR$\inc\c\stddef.h
- $TOOLKIT_DIR$\lib\rt7M_tl.a
- $PROJ_DIR$\..\obj\stm32f7xx_hal_rtc_ex.o
- $PROJ_DIR$\..\stm32f746xx_flash.icf
- $PROJ_DIR$\..\obj\stm32f7xx_hal_nor.o
- $PROJ_DIR$\..\obj\stm32f7xx_ll_fmc.__cstat.et
- $PROJ_DIR$\..\obj\stm32f7xx_hal_timebase_rtc_alarm_template.o
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_ll_fmc.c
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_cec.__cstat.et
+ $PROJ_DIR$\..\stm32f7xx_it.c
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_smbus.o
+ $PROJ_DIR$\..\obj\stm32f7xx_ll_tim.o
+ $PROJ_DIR$\..\obj\stm32f746.pbd
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Inc\stm32f7xx_ll_system.h
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_ll_sdmmc.c
+ $PROJ_DIR$\..\obj\stm32f7xx_ll_usb.pbi
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_ll_gpio.c
+ $PROJ_DIR$\..\obj\stm32f7xx_ll_usart.pbi
+ $TOOLKIT_DIR$\inc\c\DLib_Product.h
+ $TOOLKIT_DIR$\inc\c\iccarm_builtin.h
+ $PROJ_DIR$\..\obj\stm32f7xx_hal.__cstat.et
+ $PROJ_DIR$\..\lib\CMSIS\Include\core_cmInstr.h
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_irda.o
+ $PROJ_DIR$\..\bin\demoprog_stm32f746.srec
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_dfsdm.c
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_lptim.o
+ $TOOLKIT_DIR$\inc\c\yvals.h
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_mdios.c
+ $PROJ_DIR$\..\obj\timer.o
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_ll_utils.c
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_cortex.__cstat.et
+ $PROJ_DIR$\..\obj\led.xcl
+ $PROJ_DIR$\..\obj\stm32f7xx_it.pbi
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_jpeg.o
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_spi.o
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_iwdg.o
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_tim_ex.xcl
+ $PROJ_DIR$\..\lib\CMSIS\Include\core_cmFunc.h
+ $PROJ_DIR$\..\obj\boot.xcl
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_sram.o
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_rtc.c
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Inc\stm32f7xx_ll_pwr.h
+ $TOOLKIT_DIR$\inc\c\xencoding_limits.h
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_ll_lptim.c
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_hash_ex.c
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_ll_rtc.c
+ $PROJ_DIR$\..\obj\stm32f7xx_ll_pwr.__cstat.et
+ $PROJ_DIR$\..\obj\system_stm32f7xx.o
+ $PROJ_DIR$\..\obj\stm32f7xx_ll_spi.o
+ $PROJ_DIR$\..\obj\stm32f7xx_ll_dac.__cstat.et
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_i2c_ex.o
+ $PROJ_DIR$\..\obj\stm32f7xx_ll_usb.__cstat.et
+ $PROJ_DIR$\..\obj\stm32f7xx_ll_gpio.__cstat.et
+ $TOOLKIT_DIR$\lib\dl7M_tln.a
+ $PROJ_DIR$\..\obj\stm32f7xx_ll_dma.__cstat.et
+ $TOOLKIT_DIR$\inc\c\ysizet.h
+ $PROJ_DIR$\..\obj\stm32f7xx_ll_rtc.o
+ $PROJ_DIR$\..\obj\stm32f7xx_ll_sdmmc.__cstat.et
+ $PROJ_DIR$\..\obj\demoprog_stm32f746.map
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_hcd.o
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_gpio.o
+ $PROJ_DIR$\..\obj\stm32f7xx_ll_tim.__cstat.et
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_sdram.o
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_mmc.o
+ $PROJ_DIR$\..\obj\stm32f7xx_ll_exti.o
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_hash_ex.o
+ $PROJ_DIR$\..\obj\stm32f7xx_ll_lptim.__cstat.et
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_flash.o
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_eth.o
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_smartcard.o
+ $PROJ_DIR$\..\bin\demoprog_stm32f746.out
+ $PROJ_DIR$\..\obj\stm32f7xx_ll_lptim.o
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_hash.o
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_spdifrx.o
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_exti.xcl
+ $PROJ_DIR$\..\obj\stm32f7xx_ll_rng.__cstat.et
+ $PROJ_DIR$\..\obj\stm32f7xx_ll_gpio.o
+ $PROJ_DIR$\..\obj\stm32f7xx_ll_utils.o
$PROJ_DIR$\..\obj\stm32f7xx_hal_iwdg.pbi
+ $PROJ_DIR$\..\obj\stm32f7xx_ll_rng.o
$PROJ_DIR$\..\lib\CMSIS\Include\mpu_armv7.h
$PROJ_DIR$\..\obj\stm32f7xx_hal_pcd_ex.__cstat.et
- $PROJ_DIR$\..\obj\stm32f7xx_hal_uart_ex.o
- $PROJ_DIR$\..\obj\stm32f7xx_hal_exti.__cstat.et
- $PROJ_DIR$\..\obj\stm32f7xx_hal_flash_ex.o
$PROJ_DIR$\..\obj\stm32f7xx_hal_usart.o
- $PROJ_DIR$\..\obj\stm32f7xx_hal_sd.o
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Inc\stm32f7xx_ll_utils.h
+ $TOOLKIT_DIR$\inc\c\stddef.h
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_lptim.pbi
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_rtc_ex.o
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_nor.o
$PROJ_DIR$\..\obj\stm32f7xx_ll_adc.o
+ $PROJ_DIR$\..\stm32f746xx_flash.icf
$PROJ_DIR$\..\obj\stm32f7xx_hal_msp_template.o
- $PROJ_DIR$\..\obj\stm32f7xx_hal_tim_ex.o
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_flash_ex.o
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_timebase_rtc_alarm_template.o
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_sd.o
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_exti.__cstat.et
+ $PROJ_DIR$\..\obj\main.xcl
$PROJ_DIR$\..\obj\stm32f7xx_ll_i2c.o
$PROJ_DIR$\..\obj\stm32f7xx_hal_exti.o
$PROJ_DIR$\..\obj\stm32f7xx_hal_mdios.pbi
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_uart_ex.o
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_tim_ex.o
$PROJ_DIR$\..\obj\stm32f7xx_hal_sai.o
$PROJ_DIR$\..\obj\stm32f7xx_ll_pwr.o
$PROJ_DIR$\..\obj\stm32f7xx_hal_crc_ex.pbi
$PROJ_DIR$\..\obj\stm32f7xx_hal_ltdc.pbi
$PROJ_DIR$\..\obj\stm32f7xx_hal_uart_ex.__cstat.et
- $PROJ_DIR$\..\obj\stm32f7xx_hal_sdram.o
- $PROJ_DIR$\..\obj\stm32f7xx_hal_hash.o
- $PROJ_DIR$\..\obj\demoprog_stm32f746.map
- $PROJ_DIR$\..\obj\stm32f7xx_hal_mmc.o
- $PROJ_DIR$\..\obj\stm32f7xx_ll_exti.o
- $PROJ_DIR$\..\obj\stm32f7xx_ll_lptim.o
- $PROJ_DIR$\..\obj\stm32f7xx_hal_hash_ex.o
- $PROJ_DIR$\..\obj\stm32f7xx_ll_sdmmc.__cstat.et
- $PROJ_DIR$\..\obj\stm32f7xx_ll_lptim.__cstat.et
- $TOOLKIT_DIR$\inc\c\ysizet.h
- $PROJ_DIR$\..\obj\stm32f7xx_hal_exti.xcl
- $PROJ_DIR$\..\obj\stm32f7xx_ll_usb.__cstat.et
- $PROJ_DIR$\..\obj\stm32f7xx_hal_flash.o
- $PROJ_DIR$\..\obj\system_stm32f7xx.o
- $PROJ_DIR$\..\obj\stm32f7xx_hal_eth.o
- $PROJ_DIR$\..\obj\stm32f7xx_hal_hcd.o
- $PROJ_DIR$\..\obj\stm32f7xx_ll_spi.o
- $PROJ_DIR$\..\obj\stm32f7xx_hal_spdifrx.o
- $PROJ_DIR$\..\obj\stm32f7xx_hal_smartcard.o
- $PROJ_DIR$\..\obj\stm32f7xx_ll_rng.__cstat.et
- $PROJ_DIR$\..\bin\demoprog_stm32f746.out
- $PROJ_DIR$\..\obj\stm32f7xx_ll_rtc.o
- $PROJ_DIR$\..\obj\stm32f7xx_hal_gpio.o
- $PROJ_DIR$\..\obj\stm32f7xx_ll_tim.__cstat.et
- $PROJ_DIR$\..\obj\stm32f7xx_ll_gpio.o
- $PROJ_DIR$\..\obj\stm32f7xx_ll_utils.o
- $TOOLKIT_DIR$\lib\dl7M_tln.a
- $PROJ_DIR$\..\obj\stm32f7xx_ll_pwr.__cstat.et
- $PROJ_DIR$\..\obj\stm32f7xx_ll_dac.__cstat.et
- $PROJ_DIR$\..\obj\stm32f7xx_ll_dma.__cstat.et
- $PROJ_DIR$\..\obj\stm32f7xx_hal_i2c_ex.o
- $PROJ_DIR$\..\obj\stm32f7xx_ll_gpio.__cstat.et
- $PROJ_DIR$\..\obj\stm32f7xx_hal_uart_ex.xcl
- $TOOLKIT_DIR$\inc\c\stdio.h
- $PROJ_DIR$\..\obj\stm32f7xx_ll_usart.o
- $PROJ_DIR$\..\obj\stm32f7xx_ll_usb.o
- $PROJ_DIR$\..\obj\stm32f7xx_hal_nand.o
- $PROJ_DIR$\..\obj\stm32f7xx_hal_pcd_ex.o
- $PROJ_DIR$\..\obj\stm32f7xx_ll_dac.o
- $PROJ_DIR$\..\obj\main.o
- $TOOLKIT_DIR$\inc\c\ystdio.h
- $PROJ_DIR$\..\obj\stm32f7xx_hal_dac.pbi
- $TOOLKIT_DIR$\lib\shb_l.a
- $PROJ_DIR$\..\obj\stm32f7xx_hal_uart.o
- $PROJ_DIR$\..\obj\stm32f7xx_hal_timebase_rtc_wakeup_template.o
+ $TOOLKIT_DIR$\lib\rt7M_tl.a
+ $PROJ_DIR$\..\obj\stm32f7xx_ll_fmc.__cstat.et
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_ll_dac.c
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_pwr.o
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_pwr_ex.o
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_adc.__cstat.et
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_dma2d.pbi
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_pcd.o
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_adc_ex.__cstat.et
+ $TOOLKIT_DIR$\inc\c\stdint.h
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_rcc_ex.o
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_crc.pbi
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_jpeg.pbi
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_dac_ex.pbi
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_hash.pbi
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_can.__cstat.et
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_rng.o
+ $TOOLKIT_DIR$\lib\m7M_tls.a
$PROJ_DIR$\..\obj\stm32f7xx_hal_cryp_ex.pbi
- $PROJ_DIR$\..\obj\stm32f7xx_hal_msp_template.pbi
- $PROJ_DIR$\..\obj\stm32f7xx_hal_adc.pbi
$PROJ_DIR$\..\obj\stm32f7xx_ll_dma2d.o
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_qspi.o
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_pcd_ex.o
+ $PROJ_DIR$\..\obj\main.o
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_uart.o
$PROJ_DIR$\..\obj\stm32f7xx_hal_dsi.pbi
$TOOLKIT_DIR$\inc\c\cmsis_iar.h
$PROJ_DIR$\..\obj\stm32f7xx_hal_sai_ex.o
- $PROJ_DIR$\..\obj\stm32f7xx_hal_qspi.o
- $PROJ_DIR$\..\obj\stm32f7xx_hal_mdios.o
- $TOOLKIT_DIR$\inc\c\DLib_Threads.h
$PROJ_DIR$\..\obj\stm32f7xx_hal_ltdc.o
- $PROJ_DIR$\..\obj\stm32f7xx_hal_rcc.o
- $PROJ_DIR$\..\obj\stm32f7xx_ll_fmc.o
- $PROJ_DIR$\..\obj\startup_stm32f746xx.o
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_msp_template.pbi
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_adc.pbi
$PROJ_DIR$\..\obj\stm32f7xx_it.o
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_uart_ex.xcl
$PROJ_DIR$\..\obj\stm32f7xx_hal_cec.pbi
+ $PROJ_DIR$\..\obj\stm32f7xx_ll_dac.o
+ $TOOLKIT_DIR$\inc\c\ystdio.h
+ $PROJ_DIR$\..\obj\stm32f7xx_ll_usart.o
+ $TOOLKIT_DIR$\inc\c\DLib_Threads.h
+ $PROJ_DIR$\..\obj\startup_stm32f746xx.o
+ $PROJ_DIR$\..\obj\stm32f7xx_ll_usb.o
+ $TOOLKIT_DIR$\inc\c\stdio.h
$PROJ_DIR$\..\obj\stm32f7xx_hal_ltdc_ex.o
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_rcc.o
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_mdios.o
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_nand.o
+ $PROJ_DIR$\..\obj\stm32f7xx_ll_fmc.o
$PROJ_DIR$\..\obj\stm32f7xx_hal_adc_ex.pbi
- $PROJ_DIR$\..\obj\stm32f7xx_hal_adc.__cstat.et
- $PROJ_DIR$\..\obj\stm32f7xx_hal_dma2d.pbi
- $PROJ_DIR$\..\obj\stm32f7xx_hal_crc.pbi
- $PROJ_DIR$\..\obj\stm32f7xx_hal_jpeg.pbi
- $PROJ_DIR$\..\obj\stm32f7xx_hal_rng.o
- $PROJ_DIR$\..\obj\stm32f7xx_hal_dac_ex.pbi
- $PROJ_DIR$\..\obj\stm32f7xx_hal_hash.pbi
- $PROJ_DIR$\..\obj\stm32f7xx_hal_pcd.o
- $PROJ_DIR$\..\obj\stm32f7xx_hal_can.__cstat.et
- $PROJ_DIR$\..\obj\stm32f7xx_hal_adc_ex.__cstat.et
- $PROJ_DIR$\..\obj\stm32f7xx_hal_pwr.o
- $PROJ_DIR$\..\obj\stm32f7xx_hal_rcc_ex.o
- $TOOLKIT_DIR$\inc\c\stdint.h
- $TOOLKIT_DIR$\lib\m7M_tls.a
- $PROJ_DIR$\..\obj\stm32f7xx_hal_pwr_ex.o
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_timebase_rtc_wakeup_template.o
+ $TOOLKIT_DIR$\lib\shb_l.a
+ $PROJ_DIR$\..\obj\stm32f7xx_hal_dac.pbi
[ROOT_NODE]
ILINK
- 399 381
+ 372 360
-
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_cortex.c
-
-
- ICCARM
- 134
-
-
- BICOMP
- 250
-
-
- __cstat
- 305
-
-
-
-
- ICCARM
- 21 205 12 18 37 35 36 454 169 296 177 158 295 34 32 33 314 361 38 17 353 388 214 22 3 19 24 28 7 10 16 30 26 31 13 0 204 211
-
-
-
-
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_i2c.c
-
-
- ICCARM
- 344
-
-
- BICOMP
- 260
-
-
- __cstat
- 189
-
-
-
-
- ICCARM
- 21 205 12 18 37 35 36 454 169 296 177 158 295 34 32 33 314 361 38 17 353 388 214 22 3 19 24 28 7 10 16 30 26 31 13 0 204 211
-
-
-
$PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_can.c
ICCARM
- 136
-
-
- BICOMP
- 251
+ 79
__cstat
- 450
+ 423
+
+
+ BICOMP
+ 284
ICCARM
- 21 205 12 18 37 35 36 454 169 296 177 158 295 34 32 33 314 361 38 17 353 388 214 22 3 19 24 28 7 10 16 30 26 31 13 0 204 211
+ 16 140 155 12 10 0 32 417 216 328 175 204 320 31 34 33 321 382 21 11 386 357 156 24 18 13 3 17 27 8 2 29 5 30 6 136 135 153
@@ -546,182 +500,21 @@
ICCARM
- 452
-
-
- BICOMP
- 71
+ 411
__cstat
- 96
+ 43
+
+
+ BICOMP
+ 112
ICCARM
- 21 205 12 18 37 35 36 454 169 296 177 158 295 34 32 33 314 361 38 17 353 388 214 22 3 19 24 28 7 10 16 30 26 31 13 0 204 211
-
-
-
-
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_gpio.c
-
-
- ICCARM
- 401
-
-
- BICOMP
- 254
-
-
- __cstat
- 188
-
-
-
-
- ICCARM
- 21 205 12 18 37 35 36 454 169 296 177 158 295 34 32 33 314 361 38 17 353 388 214 22 3 19 24 28 7 10 16 30 26 31 13 0 204 211
-
-
-
-
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_dma_ex.c
-
-
- ICCARM
- 59
-
-
- BICOMP
- 228
-
-
- __cstat
- 108
-
-
-
-
- ICCARM
- 21 205 12 18 37 35 36 454 169 296 177 158 295 34 32 33 314 361 38 17 353 388 214 22 3 19 24 28 7 10 16 30 26 31 13 0 204 211
-
-
-
-
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_flash.c
-
-
- ICCARM
- 391
-
-
- BICOMP
- 233
-
-
- __cstat
- 103
-
-
-
-
- ICCARM
- 21 205 12 18 37 35 36 454 169 296 177 158 295 34 32 33 314 361 38 17 353 388 214 22 3 19 24 28 7 10 16 30 26 31 13 0 204 211
-
-
-
-
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_rcc.c
-
-
- ICCARM
- 435
-
-
- BICOMP
- 277
-
-
- __cstat
- 93
-
-
-
-
- ICCARM
- 21 205 12 18 37 35 36 454 169 296 177 158 295 34 32 33 314 361 38 17 353 388 214 22 3 19 24 28 7 10 16 30 26 31 13 0 204 211
-
-
-
-
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_rcc_ex.c
-
-
- ICCARM
- 453
-
-
- BICOMP
- 332
-
-
- __cstat
- 39
-
-
-
-
- ICCARM
- 21 205 12 18 37 35 36 454 169 296 177 158 295 34 32 33 314 361 38 17 353 388 214 22 3 19 24 28 7 10 16 30 26 31 13 0 204 211
-
-
-
-
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_exti.c
-
-
- ICCARM
- 372
-
-
- BICOMP
- 389
-
-
- __cstat
- 364
-
-
-
-
- ICCARM
- 21 205 12 18 37 35 36 454 169 296 177 158 295 34 32 33 314 361 38 17 353 388 214 22 3 19 24 28 7 10 16 30 26 31 13 0 204 211
-
-
-
-
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal.c
-
-
- ICCARM
- 154
-
-
- BICOMP
- 230
-
-
- __cstat
- 315
-
-
-
-
- ICCARM
- 21 205 12 18 37 35 36 454 169 296 177 158 295 34 32 33 314 361 38 17 353 388 214 22 3 19 24 28 7 10 16 30 26 31 13 0 204 211
+ 16 140 155 12 10 0 32 417 216 328 175 204 320 31 34 33 321 382 21 11 386 357 156 24 18 13 3 17 27 8 2 29 5 30 6 136 135 153
@@ -730,67 +523,21 @@
ICCARM
- 456
-
-
- BICOMP
- 226
+ 412
__cstat
- 52
+ 123
+
+
+ BICOMP
+ 282
ICCARM
- 21 205 12 18 37 35 36 454 169 296 177 158 295 34 32 33 314 361 38 17 353 388 214 22 3 19 24 28 7 10 16 30 26 31 13 0 204 211
-
-
-
-
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_dma.c
-
-
- ICCARM
- 44
-
-
- BICOMP
- 283
-
-
- __cstat
- 111
-
-
-
-
- ICCARM
- 21 205 12 18 37 35 36 454 169 296 177 158 295 34 32 33 314 361 38 17 353 388 214 22 3 19 24 28 7 10 16 30 26 31 13 0 204 211
-
-
-
-
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_i2c_ex.c
-
-
- ICCARM
- 409
-
-
- BICOMP
- 263
-
-
- __cstat
- 118
-
-
-
-
- ICCARM
- 21 205 12 18 37 35 36 454 169 296 177 158 295 34 32 33 314 361 38 17 353 388 214 22 3 19 24 28 7 10 16 30 26 31 13 0 204 211
+ 16 140 155 12 10 0 32 417 216 328 175 204 320 31 34 33 321 382 21 11 386 357 156 24 18 13 3 17 27 8 2 29 5 30 6 136 135 153
@@ -799,141 +546,228 @@
ICCARM
- 365
-
-
- BICOMP
- 273
+ 393
__cstat
- 113
+ 83
+
+
+ BICOMP
+ 226
ICCARM
- 21 205 12 18 37 35 36 454 169 296 177 158 295 34 32 33 314 361 38 17 353 388 214 22 3 19 24 28 7 10 16 30 26 31 13 0 204 211
+ 16 140 155 12 10 0 32 417 216 328 175 204 320 31 34 33 321 382 21 11 386 357 156 24 18 13 3 17 27 8 2 29 5 30 6 136 135 153
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_ltdc_ex.c
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_dma.c
ICCARM
- 440
-
-
- BICOMP
- 115
+ 158
__cstat
- 70
+ 84
+
+
+ BICOMP
+ 242
ICCARM
- 21 205 325 12 18 37 35 36 454 169 296 177 158 295 293 433 290 429 201 307 316 38 17 412 388 419 214 3 19 24 28 7 16 30 26 31 13 0
+ 16 140 155 12 10 0 32 417 216 328 175 204 320 31 34 33 321 382 21 11 386 357 156 24 18 13 3 17 27 8 2 29 5 30 6 136 135 153
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_nor.c
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_gpio.c
ICCARM
- 357
-
-
- BICOMP
- 121
+ 362
__cstat
- 102
+ 178
+
+
+ BICOMP
+ 249
ICCARM
- 21 205 325 12 18 37 35 36 454 169 296 177 158 295 293 433 290 429 201 307 316 38 17 412 388 419 214 3 19 24 28 7 16 30 26 31 13 0
+ 16 140 155 12 10 0 32 417 216 328 175 204 320 31 34 33 321 382 21 11 386 357 156 24 18 13 3 17 27 8 2 29 5 30 6 136 135 153
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_ll_pwr.c
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_cortex.c
ICCARM
- 375
-
-
- BICOMP
- 138
+ 77
__cstat
- 406
-
-
-
-
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_ll_spi.c
-
-
- ICCARM
- 395
+ 332
BICOMP
+ 259
+
+
+
+
+ ICCARM
+ 16 140 155 12 10 0 32 417 216 328 175 204 320 31 34 33 321 382 21 11 386 357 156 24 18 13 3 17 27 8 2 29 5 30 6 136 135 153
+
+
+
+
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_flash.c
+
+
+ ICCARM
+ 369
+
+
+ __cstat
49
-
- __cstat
- 92
-
-
-
-
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_ll_usart.c
-
-
- ICCARM
- 413
-
BICOMP
- 308
-
-
- __cstat
- 262
-
-
-
-
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_adc_ex.c
-
-
- ICCARM
- 99
-
-
- BICOMP
- 441
-
-
- __cstat
- 451
+ 263
ICCARM
- 21 205 325 12 18 37 35 36 454 169 296 177 158 295 293 433 290 429 201 307 316 38 17 412 388 419 214 3 19 24 28 7 16 30 26 31 13 0
+ 16 140 155 12 10 0 32 417 216 328 175 204 320 31 34 33 321 382 21 11 386 357 156 24 18 13 3 17 27 8 2 29 5 30 6 136 135 153
+
+
+
+
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal.c
+
+
+ ICCARM
+ 211
+
+
+ __cstat
+ 322
+
+
+ BICOMP
+ 279
+
+
+
+
+ ICCARM
+ 16 140 155 12 10 0 32 417 216 328 175 204 320 31 34 33 321 382 21 11 386 357 156 24 18 13 3 17 27 8 2 29 5 30 6 136 135 153
+
+
+
+
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_dma_ex.c
+
+
+ ICCARM
+ 124
+
+
+ __cstat
+ 36
+
+
+ BICOMP
+ 261
+
+
+
+
+ ICCARM
+ 16 140 155 12 10 0 32 417 216 328 175 204 320 31 34 33 321 382 21 11 386 357 156 24 18 13 3 17 27 8 2 29 5 30 6 136 135 153
+
+
+
+
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_i2c.c
+
+
+ ICCARM
+ 303
+
+
+ __cstat
+ 182
+
+
+ BICOMP
+ 223
+
+
+
+
+ ICCARM
+ 16 140 155 12 10 0 32 417 216 328 175 204 320 31 34 33 321 382 21 11 386 357 156 24 18 13 3 17 27 8 2 29 5 30 6 136 135 153
+
+
+
+
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_i2c_ex.c
+
+
+ ICCARM
+ 352
+
+
+ __cstat
+ 93
+
+
+ BICOMP
+ 236
+
+
+
+
+ ICCARM
+ 16 140 155 12 10 0 32 417 216 328 175 204 320 31 34 33 321 382 21 11 386 357 156 24 18 13 3 17 27 8 2 29 5 30 6 136 135 153
+
+
+
+
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_exti.c
+
+
+ ICCARM
+ 399
+
+
+ __cstat
+ 396
+
+
+ BICOMP
+ 376
+
+
+
+
+ ICCARM
+ 16 140 155 12 10 0 32 417 216 328 175 204 320 31 34 33 321 382 21 11 386 357 156 24 18 13 3 17 27 8 2 29 5 30 6 136 135 153
@@ -942,21 +776,61 @@
ICCARM
- 139
-
-
- BICOMP
- 426
+ 81
__cstat
- 442
+ 413
+
+
+ BICOMP
+ 437
ICCARM
- 21 205 325 12 18 37 35 36 454 169 296 177 158 295 293 433 290 429 201 307 316 38 17 412 388 419 214 3 19 24 28 7 16 30 26 31 13 0
+ 16 140 288 155 12 10 0 32 417 216 328 175 204 320 344 444 323 433 174 339 289 21 11 447 357 442 156 18 13 3 17 27 2 29 5 30 6 136
+
+
+
+
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_ll_usart.c
+
+
+ ICCARM
+ 443
+
+
+ __cstat
+ 235
+
+
+ BICOMP
+ 319
+
+
+
+
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_adc_ex.c
+
+
+ ICCARM
+ 63
+
+
+ __cstat
+ 416
+
+
+ BICOMP
+ 453
+
+
+
+
+ ICCARM
+ 16 140 288 155 12 10 0 32 417 216 328 175 204 320 344 444 323 433 174 339 289 21 11 447 357 442 156 18 13 3 17 27 2 29 5 30 6 136
@@ -965,297 +839,101 @@
ICCARM
- 123
-
-
- BICOMP
- 202
+ 88
__cstat
- 159
+ 205
+
+
+ BICOMP
+ 176
ICCARM
- 21 205 325 12 18 37 35 36 454 169 296 177 158 295 293 433 290 429 201 307 316 38 17 412 388 419 214 3 19 24 28 7 16 30 26 31 13 0
+ 16 140 288 155 12 10 0 32 417 216 328 175 204 320 344 444 323 433 174 339 289 21 11 447 357 442 156 18 13 3 17 27 2 29 5 30 6 136
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_msp_template.c
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_nor.c
ICCARM
- 369
-
-
- BICOMP
- 425
+ 389
__cstat
- 77
+ 66
+
+
+ BICOMP
+ 86
ICCARM
- 21 205 325 12 18 37 35 36 454 169 296 177 158 295 293 433 290 429 201 307 316 38 17 412 388 419 214 3 19 24 28 7 16 30 26 31 13 0
+ 16 140 288 155 12 10 0 32 417 216 328 175 204 320 344 444 323 433 174 339 289 21 11 447 357 442 156 18 13 3 17 27 2 29 5 30 6 136
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_timebase_rtc_wakeup_template.c
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_ll_pwr.c
ICCARM
- 423
+ 404
+
+
+ __cstat
+ 348
BICOMP
- 221
+ 82
+
+
+
+
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_ll_spi.c
+
+
+ ICCARM
+ 350
+
+
+ __cstat
+ 57
+
+
+ BICOMP
+ 117
+
+
+
+
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_ltdc_ex.c
+
+
+ ICCARM
+ 448
__cstat
104
-
-
-
- ICCARM
- 21 205 325 12 18 37 35 36 454 169 296 177 158 295 293 433 290 429 201 307 316 38 17 412 388 419 214 3 19 24 28 7 16 30 26 31 13 0
-
-
-
-
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_timebase_rtc_alarm_template.c
-
-
- ICCARM
- 359
-
BICOMP
- 166
-
-
- __cstat
- 75
+ 74
ICCARM
- 21 205 325 12 18 37 35 36 454 169 296 177 158 295 293 433 290 429 201 307 316 38 17 412 388 419 214 3 19 24 28 7 16 30 26 31 13 0
-
-
-
-
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_dsi.c
-
-
- ICCARM
- 261
-
-
- BICOMP
- 428
-
-
- __cstat
- 161
-
-
-
-
- ICCARM
- 21 205 325 12 18 37 35 36 454 169 296 177 158 295 293 433 290 429 201 307 316 38 17 412 388 419 214 3 19 24 28 7 16 30 26 31 13 0
-
-
-
-
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_eth.c
-
-
- ICCARM
- 393
-
-
- BICOMP
- 198
-
-
- __cstat
- 117
-
-
-
-
- ICCARM
- 21 205 325 12 18 37 35 36 454 169 296 177 158 295 293 433 290 429 201 307 316 38 17 412 388 419 214 3 19 24 28 7 16 30 26 31 13 0
-
-
-
-
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_tim_ex.c
-
-
- ICCARM
- 370
-
-
- BICOMP
- 297
-
-
- __cstat
- 152
-
-
-
-
- ICCARM
- 21 205 12 18 37 35 36 454 169 296 177 158 295 34 32 33 314 361 38 17 353 388 214 22 3 19 24 28 7 10 16 30 26 31 13 0 204 211
-
-
-
-
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_uart.c
-
-
- ICCARM
- 422
-
-
- BICOMP
- 320
-
-
- __cstat
- 109
-
-
-
-
- ICCARM
- 21 205 12 18 37 35 36 454 169 296 177 158 295 34 32 33 314 361 38 17 353 388 214 22 3 19 24 28 7 10 16 30 26 31 13 0 204 211
-
-
-
-
- $PROJ_DIR$\..\lib\system_stm32f7xx.c
-
-
- ICCARM
- 392
-
-
- BICOMP
- 335
-
-
- __cstat
- 54
-
-
-
-
- ICCARM
- 37 35 36 454 169 296 177 158 295 34 32 33 314 361 38 21 205 12 18 17 353 388 214 22 3 19 24 28 7 10 16 30 26 31 13 0 204 211
-
-
-
-
- $PROJ_DIR$\..\main.c
-
-
- ICCARM
- 418
-
-
- BICOMP
- 349
-
-
- __cstat
- 68
-
-
-
-
- ICCARM
- 207 83 37 35 36 454 169 296 177 158 295 34 32 33 314 361 38 21 205 12 18 17 353 388 214 22 3 19 24 28 7 10 16 30 26 31 13 0 204 211 212 208 225
-
-
-
-
- $PROJ_DIR$\..\timer.c
-
-
- ICCARM
- 303
-
-
- BICOMP
- 324
-
-
- __cstat
- 107
-
-
-
-
- ICCARM
- 207 83 37 35 36 454 169 296 177 158 295 34 32 33 314 361 38 21 205 12 18 17 353 388 214 22 3 19 24 28 7 10 16 30 26 31 13 0 204 211 212 208 225
-
-
-
-
- $PROJ_DIR$\..\led.c
-
-
- ICCARM
- 274
-
-
- BICOMP
- 309
-
-
- __cstat
- 97
-
-
-
-
- ICCARM
- 207 83 37 35 36 454 169 296 177 158 295 34 32 33 314 361 38 21 205 12 18 17 353 388 214 22 3 19 24 28 7 10 16 30 26 31 13 0 204 211 212 208 225
-
-
-
-
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_uart_ex.c
-
-
- ICCARM
- 363
-
-
- BICOMP
- 411
-
-
- __cstat
- 378
-
-
-
-
- ICCARM
- 21 205 12 18 37 35 36 454 169 296 177 158 295 34 32 33 314 361 38 17 353 388 214 22 3 19 24 28 7 10 16 30 26 31 13 0 204 211
+ 16 140 288 155 12 10 0 32 417 216 328 175 204 320 344 444 323 433 174 339 289 21 11 447 357 442 156 18 13 3 17 27 2 29 5 30 6 136
@@ -1264,21 +942,182 @@
ICCARM
- 333
-
-
- BICOMP
- 301
+ 286
__cstat
- 81
+ 41
+
+
+ BICOMP
+ 340
ICCARM
- 207 83 37 35 36 454 169 296 177 158 295 34 32 33 314 361 38 21 205 12 18 17 353 388 214 22 3 19 24 28 7 10 16 30 26 31 13 0 204 211 212 208 225
+ 154 59 10 0 32 417 216 328 175 204 320 31 34 33 321 382 21 16 140 155 12 11 386 357 156 24 18 13 3 17 27 8 2 29 5 30 6 136 135 153 145 157 146
+
+
+
+
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_rcc.c
+
+
+ ICCARM
+ 449
+
+
+ __cstat
+ 62
+
+
+ BICOMP
+ 237
+
+
+
+
+ ICCARM
+ 16 140 155 12 10 0 32 417 216 328 175 204 320 31 34 33 321 382 21 11 386 357 156 24 18 13 3 17 27 8 2 29 5 30 6 136 135 153
+
+
+
+
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_uart.c
+
+
+ ICCARM
+ 431
+
+
+ __cstat
+ 37
+
+
+ BICOMP
+ 287
+
+
+
+
+ ICCARM
+ 16 140 155 12 10 0 32 417 216 328 175 204 320 31 34 33 321 382 21 11 386 357 156 24 18 13 3 17 27 8 2 29 5 30 6 136 135 153
+
+
+
+
+ $PROJ_DIR$\..\main.c
+
+
+ ICCARM
+ 430
+
+
+ __cstat
+ 109
+
+
+ BICOMP
+ 397
+
+
+
+
+ ICCARM
+ 154 59 10 0 32 417 216 328 175 204 320 31 34 33 321 382 21 16 140 155 12 11 386 357 156 24 18 13 3 17 27 8 2 29 5 30 6 136 135 153 145 157 146
+
+
+
+
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_rcc_ex.c
+
+
+ ICCARM
+ 418
+
+
+ __cstat
+ 148
+
+
+ BICOMP
+ 295
+
+
+
+
+ ICCARM
+ 16 140 155 12 10 0 32 417 216 328 175 204 320 31 34 33 321 382 21 11 386 357 156 24 18 13 3 17 27 8 2 29 5 30 6 136 135 153
+
+
+
+
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_uart_ex.c
+
+
+ ICCARM
+ 401
+
+
+ __cstat
+ 407
+
+
+ BICOMP
+ 439
+
+
+
+
+ ICCARM
+ 16 140 155 12 10 0 32 417 216 328 175 204 320 31 34 33 321 382 21 11 386 357 156 24 18 13 3 17 27 8 2 29 5 30 6 136 135 153
+
+
+
+
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_tim.c
+
+
+ ICCARM
+ 252
+
+
+ __cstat
+ 209
+
+
+ BICOMP
+ 296
+
+
+
+
+ ICCARM
+ 16 140 155 12 10 0 32 417 216 328 175 204 320 31 34 33 321 382 21 11 386 357 156 24 18 13 3 17 27 8 2 29 5 30 6 136 135 153
+
+
+
+
+ $PROJ_DIR$\..\lib\system_stm32f7xx.c
+
+
+ ICCARM
+ 349
+
+
+ __cstat
+ 128
+
+
+ BICOMP
+ 300
+
+
+
+
+ ICCARM
+ 10 0 32 417 216 328 175 204 320 31 34 33 321 382 21 16 140 155 12 11 386 357 156 24 18 13 3 17 27 8 2 29 5 30 6 136 135 153
@@ -1287,53 +1126,627 @@
AARM
- 437
+ 445
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_tim.c
+ $PROJ_DIR$\..\timer.c
ICCARM
- 272
+ 330
+
+
+ __cstat
+ 35
+
+
+ BICOMP
+ 294
+
+
+
+
+ ICCARM
+ 154 59 10 0 32 417 216 328 175 204 320 31 34 33 321 382 21 16 140 155 12 11 386 357 156 24 18 13 3 17 27 8 2 29 5 30 6 136 135 153 145 157 146
+
+
+
+
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_tim_ex.c
+
+
+ ICCARM
+ 402
+
+
+ __cstat
+ 191
BICOMP
338
+
+
+
+ ICCARM
+ 16 140 155 12 10 0 32 417 216 328 175 204 320 31 34 33 321 382 21 11 386 357 156 24 18 13 3 17 27 8 2 29 5 30 6 136 135 153
+
+
+
+
+ $PROJ_DIR$\..\led.c
+
+
+ ICCARM
+ 229
+
__cstat
- 156
+ 47
+
+
+ BICOMP
+ 333
ICCARM
- 21 205 12 18 37 35 36 454 169 296 177 158 295 34 32 33 314 361 38 17 353 388 214 22 3 19 24 28 7 10 16 30 26 31 13 0 204 211
+ 154 59 10 0 32 417 216 328 175 204 320 31 34 33 321 382 21 16 140 155 12 11 386 357 156 24 18 13 3 17 27 8 2 29 5 30 6 136 135 153 145 157 146
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_sd.c
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_eth.c
ICCARM
- 367
+ 370
+
+
+ __cstat
+ 76
BICOMP
- 175
+ 168
+
+
+
+
+ ICCARM
+ 16 140 288 155 12 10 0 32 417 216 328 175 204 320 344 444 323 433 174 339 289 21 11 447 357 442 156 18 13 3 17 27 2 29 5 30 6 136
+
+
+
+
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_msp_template.c
+
+
+ ICCARM
+ 392
+
+
+ __cstat
+ 118
+
+
+ BICOMP
+ 436
+
+
+
+
+ ICCARM
+ 16 140 288 155 12 10 0 32 417 216 328 175 204 320 344 444 323 433 174 339 289 21 11 447 357 442 156 18 13 3 17 27 2 29 5 30 6 136
+
+
+
+
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_timebase_rtc_alarm_template.c
+
+
+ ICCARM
+ 394
+
+
+ __cstat
+ 115
+
+
+ BICOMP
+ 193
+
+
+
+
+ ICCARM
+ 16 140 288 155 12 10 0 32 417 216 328 175 204 320 344 444 323 433 174 339 289 21 11 447 357 442 156 18 13 3 17 27 2 29 5 30 6 136
+
+
+
+
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_dsi.c
+
+
+ ICCARM
+ 251
+
+
+ __cstat
+ 202
+
+
+ BICOMP
+ 432
+
+
+
+
+ ICCARM
+ 16 140 288 155 12 10 0 32 417 216 328 175 204 320 344 444 323 433 174 339 289 21 11 447 357 442 156 18 13 3 17 27 2 29 5 30 6 136
+
+
+
+
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_timebase_rtc_wakeup_template.c
+
+
+ ICCARM
+ 454
+
+
+ __cstat
+ 42
+
+
+ BICOMP
+ 264
+
+
+
+
+ ICCARM
+ 16 140 288 155 12 10 0 32 417 216 328 175 204 320 344 444 323 433 174 339 289 21 11 447 357 442 156 18 13 3 17 27 2 29 5 30 6 136
+
+
+
+
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_iwdg.c
+
+
+ ICCARM
+ 337
__cstat
60
+
+ BICOMP
+ 380
+
ICCARM
- 21 205 325 12 18 37 35 36 454 169 296 177 158 295 293 433 290 429 201 307 316 38 17 412 388 419 214 3 19 24 28 7 16 30 26 31 13 0
+ 16 140 288 155 12 10 0 32 417 216 328 175 204 320 344 444 323 433 174 339 289 21 11 447 357 442 156 18 13 3 17 27 2 29 5 30 6 136
+
+
+
+
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_crc.c
+
+
+ ICCARM
+ 196
+
+
+ __cstat
+ 70
+
+
+ BICOMP
+ 419
+
+
+
+
+ ICCARM
+ 16 140 288 155 12 10 0 32 417 216 328 175 204 320 344 444 323 433 174 339 289 21 11 447 357 442 156 18 13 3 17 27 2 29 5 30 6 136
+
+
+
+
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_crc_ex.c
+
+
+ ICCARM
+ 212
+
+
+ __cstat
+ 85
+
+
+ BICOMP
+ 405
+
+
+
+
+ ICCARM
+ 16 140 288 155 12 10 0 32 417 216 328 175 204 320 344 444 323 433 174 339 289 21 11 447 357 442 156 18 13 3 17 27 2 29 5 30 6 136
+
+
+
+
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_ltdc.c
+
+
+ ICCARM
+ 435
+
+
+ __cstat
+ 44
+
+
+ BICOMP
+ 406
+
+
+
+
+ ICCARM
+ 16 140 288 155 12 10 0 32 417 216 328 175 204 320 344 444 323 433 174 339 289 21 11 447 357 442 156 18 13 3 17 27 2 29 5 30 6 136
+
+
+
+
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_ll_crc.c
+
+
+ ICCARM
+ 68
+
+
+ __cstat
+ 122
+
+
+ BICOMP
+ 166
+
+
+
+
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_rng.c
+
+
+ ICCARM
+ 424
+
+
+ __cstat
+ 65
+
+
+ BICOMP
+ 96
+
+
+
+
+ ICCARM
+ 16 140 288 155 12 10 0 32 417 216 328 175 204 320 344 444 323 433 174 339 289 21 11 447 357 442 156 18 13 3 17 27 2 29 5 30 6 136
+
+
+
+
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_dac.c
+
+
+ ICCARM
+ 200
+
+
+ __cstat
+ 73
+
+
+ BICOMP
+ 456
+
+
+
+
+ ICCARM
+ 16 140 288 155 12 10 0 32 417 216 328 175 204 320 344 444 323 433 174 339 289 21 11 447 357 442 156 18 13 3 17 27 2 29 5 30 6 136
+
+
+
+
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_lptim.c
+
+
+ ICCARM
+ 327
+
+
+ __cstat
+ 114
+
+
+ BICOMP
+ 387
+
+
+
+
+ ICCARM
+ 16 140 288 155 12 10 0 32 417 216 328 175 204 320 344 444 323 433 174 339 289 21 11 447 357 442 156 18 13 3 17 27 2 29 5 30 6 136
+
+
+
+
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_dac_ex.c
+
+
+ ICCARM
+ 89
+
+
+ __cstat
+ 69
+
+
+ BICOMP
+ 421
+
+
+
+
+ ICCARM
+ 16 140 288 155 12 10 0 32 417 216 328 175 204 320 344 444 323 433 174 339 289 21 11 447 357 442 156 18 13 3 17 27 2 29 5 30 6 136
+
+
+
+
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_pcd.c
+
+
+ ICCARM
+ 415
+
+
+ __cstat
+ 56
+
+
+ BICOMP
+ 94
+
+
+
+
+ ICCARM
+ 16 140 288 155 12 10 0 32 417 216 328 175 204 320 344 444 323 433 174 339 289 21 11 447 357 442 156 18 13 3 17 27 2 29 5 30 6 136
+
+
+
+
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_ll_dma.c
+
+
+ ICCARM
+ 75
+
+
+ __cstat
+ 356
+
+
+ BICOMP
+ 189
+
+
+
+
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_cryp_ex.c
+
+
+ ICCARM
+ 218
+
+
+ __cstat
+ 87
+
+
+ BICOMP
+ 426
+
+
+
+
+ ICCARM
+ 16 140 288 155 12 10 0 32 417 216 328 175 204 320 344 444 323 433 174 339 289 21 11 447 357 442 156 18 13 3 17 27 2 29 5 30 6 136
+
+
+
+
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_dcmi_ex.c
+
+
+ ICCARM
+ 119
+
+
+ __cstat
+ 214
+
+
+ BICOMP
+ 160
+
+
+
+
+ ICCARM
+ 16 140 288 155 12 10 0 32 417 216 328 175 204 320 344 444 323 433 174 339 289 21 11 447 357 442 156 18 13 3 17 27 2 29 5 30 6 136
+
+
+
+
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_irda.c
+
+
+ ICCARM
+ 324
+
+
+ __cstat
+ 105
+
+
+ BICOMP
+ 95
+
+
+
+
+ ICCARM
+ 16 140 288 155 12 10 0 32 417 216 328 175 204 320 344 444 323 433 174 339 289 21 11 447 357 442 156 18 13 3 17 27 2 29 5 30 6 136
+
+
+
+
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_dma2d.c
+
+
+ ICCARM
+ 152
+
+
+ __cstat
+ 170
+
+
+ BICOMP
+ 414
+
+
+
+
+ ICCARM
+ 16 140 288 155 12 10 0 32 417 216 328 175 204 320 344 444 323 433 174 339 289 21 11 447 357 442 156 18 13 3 17 27 2 29 5 30 6 136
+
+
+
+
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_cec.c
+
+
+ ICCARM
+ 206
+
+
+ __cstat
+ 310
+
+
+ BICOMP
+ 440
+
+
+
+
+ ICCARM
+ 16 140 288 155 12 10 0 32 417 216 328 175 204 320 344 444 323 433 174 339 289 21 11 447 357 442 156 18 13 3 17 27 2 29 5 30 6 136
+
+
+
+
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_ll_exti.c
+
+
+ ICCARM
+ 366
+
+
+ __cstat
+ 307
+
+
+ BICOMP
+ 184
+
+
+
+
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_nand.c
+
+
+ ICCARM
+ 451
+
+
+ __cstat
+ 54
+
+
+ BICOMP
+ 72
+
+
+
+
+ ICCARM
+ 16 140 288 155 12 10 0 32 417 216 328 175 204 320 344 444 323 433 174 339 289 21 11 447 357 442 156 18 13 3 17 27 2 29 5 30 6 136
+
+
+
+
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_ll_rcc.c
+
+
+ ICCARM
+ 292
+
+
+ __cstat
+ 108
+
+
+ BICOMP
+ 102
+
+
+
+
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_pcd_ex.c
+
+
+ ICCARM
+ 429
+
+
+ __cstat
+ 383
+
+
+ BICOMP
+ 80
+
+
+
+
+ ICCARM
+ 16 140 288 155 12 10 0 32 417 216 328 175 204 320 344 444 323 433 174 339 289 21 11 447 357 442 156 18 13 3 17 27 2 29 5 30 6 136
@@ -1342,44 +1755,67 @@
ICCARM
- 431
-
-
- BICOMP
- 128
+ 428
__cstat
- 84
+ 40
+
+
+ BICOMP
+ 67
ICCARM
- 21 205 325 12 18 37 35 36 454 169 296 177 158 295 293 433 290 429 201 307 316 38 17 412 388 419 214 3 19 24 28 7 16 30 26 31 13 0
+ 16 140 288 155 12 10 0 32 417 216 328 175 204 320 344 444 323 433 174 339 289 21 11 447 357 442 156 18 13 3 17 27 2 29 5 30 6 136
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_hcd.c
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_cryp.c
ICCARM
- 394
-
-
- BICOMP
- 170
+ 198
__cstat
- 126
+ 217
+
+
+ BICOMP
+ 207
ICCARM
- 21 205 325 12 18 37 35 36 454 169 296 177 158 295 293 433 290 429 201 307 316 38 17 412 388 419 214 3 19 24 28 7 16 30 26 31 13 0
+ 16 140 288 155 12 10 0 32 417 216 328 175 204 320 344 444 323 433 174 339 289 21 11 447 357 442 156 18 13 3 17 27 2 29 5 30 6 136
+
+
+
+
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_sdram.c
+
+
+ ICCARM
+ 364
+
+
+ __cstat
+ 98
+
+
+ BICOMP
+ 163
+
+
+
+
+ ICCARM
+ 16 140 288 155 12 10 0 32 417 216 328 175 204 320 344 444 323 433 174 339 289 21 11 447 357 442 156 18 13 3 17 27 2 29 5 30 6 136
@@ -1390,346 +1826,59 @@
ICCARM
427
+
+ __cstat
+ 194
+
BICOMP
- 215
+ 179
+
+
+
+
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_sd.c
+
+
+ ICCARM
+ 395
__cstat
- 148
+ 126
+
+
+ BICOMP
+ 173
+
+
+ ICCARM
+ 16 140 288 155 12 10 0 32 417 216 328 175 204 320 344 444 323 433 174 339 289 21 11 447 357 442 156 18 13 3 17 27 2 29 5 30 6 136
+
+
$PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_mmc.c
ICCARM
- 382
-
-
- BICOMP
- 122
+ 365
__cstat
- 40
-
-
-
-
- ICCARM
- 21 205 325 12 18 37 35 36 454 169 296 177 158 295 293 433 290 429 201 307 316 38 17 412 388 419 214 3 19 24 28 7 16 30 26 31 13 0
-
-
-
-
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_ll_i2c.c
-
-
- ICCARM
- 371
-
-
- BICOMP
- 160
-
-
- __cstat
- 42
-
-
-
-
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_ll_rng.c
-
-
- ICCARM
- 350
-
-
- BICOMP
- 66
-
-
- __cstat
- 398
-
-
-
-
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_smartcard_ex.c
-
-
- ICCARM
- 343
-
-
- BICOMP
- 186
-
-
- __cstat
- 61
-
-
-
-
- ICCARM
- 21 205 325 12 18 37 35 36 454 169 296 177 158 295 293 433 290 429 201 307 316 38 17 412 388 419 214 3 19 24 28 7 16 30 26 31 13 0
-
-
-
-
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_rtc_ex.c
-
-
- ICCARM
- 355
-
-
- BICOMP
- 196
-
-
- __cstat
- 87
-
-
-
-
- ICCARM
- 21 205 325 12 18 37 35 36 454 169 296 177 158 295 293 433 290 429 201 307 316 38 17 412 388 419 214 3 19 24 28 7 16 30 26 31 13 0
-
-
-
-
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_hash.c
-
-
- ICCARM
- 380
-
-
- BICOMP
- 448
-
-
- __cstat
- 132
-
-
-
-
- ICCARM
- 21 205 325 12 18 37 35 36 454 169 296 177 158 295 293 433 290 429 201 307 316 38 17 412 388 419 214 3 19 24 28 7 16 30 26 31 13 0
-
-
-
-
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_i2s.c
-
-
- ICCARM
- 318
-
-
- BICOMP
- 179
-
-
- __cstat
- 41
-
-
-
-
- ICCARM
- 21 205 325 12 18 37 35 36 454 169 296 177 158 295 293 433 290 429 201 307 316 38 17 412 388 419 214 3 19 24 28 7 16 30 26 31 13 0
-
-
-
-
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_smbus.c
-
-
- ICCARM
- 321
-
-
- BICOMP
- 220
-
-
- __cstat
- 62
-
-
-
-
- ICCARM
- 21 205 325 12 18 37 35 36 454 169 296 177 158 295 293 433 290 429 201 307 316 38 17 412 388 419 214 3 19 24 28 7 16 30 26 31 13 0
-
-
-
-
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_sai.c
-
-
- ICCARM
- 374
-
-
- BICOMP
- 192
-
-
- __cstat
- 67
-
-
-
-
- ICCARM
- 21 205 325 12 18 37 35 36 454 169 296 177 158 295 293 433 290 429 201 307 316 38 17 412 388 419 214 3 19 24 28 7 16 30 26 31 13 0
-
-
-
-
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_jpeg.c
-
-
- ICCARM
- 306
-
-
- BICOMP
- 445
-
-
- __cstat
- 98
-
-
-
-
- ICCARM
- 21 205 325 12 18 37 35 36 454 169 296 177 158 295 293 433 290 429 201 307 316 38 17 412 388 419 214 3 19 24 28 7 16 30 26 31 13 0
-
-
-
-
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_cryp.c
-
-
- ICCARM
149
BICOMP
- 165
-
-
- __cstat
- 146
+ 71
ICCARM
- 21 205 325 12 18 37 35 36 454 169 296 177 158 295 293 433 290 429 201 307 316 38 17 412 388 419 214 3 19 24 28 7 16 30 26 31 13 0
-
-
-
-
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_sai_ex.c
-
-
- ICCARM
- 430
-
-
- BICOMP
- 168
-
-
- __cstat
- 100
-
-
-
-
- ICCARM
- 21 205 325 12 18 37 35 36 454 169 296 177 158 295 293 433 290 429 201 307 316 38 17 412 388 419 214 3 19 24 28 7 16 30 26 31 13 0
-
-
-
-
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_sdram.c
-
-
- ICCARM
- 379
-
-
- BICOMP
- 182
-
-
- __cstat
- 58
-
-
-
-
- ICCARM
- 21 205 325 12 18 37 35 36 454 169 296 177 158 295 293 433 290 429 201 307 316 38 17 412 388 419 214 3 19 24 28 7 16 30 26 31 13 0
-
-
-
-
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_spdifrx.c
-
-
- ICCARM
- 396
-
-
- BICOMP
- 183
-
-
- __cstat
- 94
-
-
-
-
- ICCARM
- 21 205 325 12 18 37 35 36 454 169 296 177 158 295 293 433 290 429 201 307 316 38 17 412 388 419 214 3 19 24 28 7 16 30 26 31 13 0
-
-
-
-
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_spi.c
-
-
- ICCARM
- 299
-
-
- BICOMP
- 180
-
-
- __cstat
- 89
-
-
-
-
- ICCARM
- 21 205 325 12 18 37 35 36 454 169 296 177 158 295 293 433 290 429 201 307 316 38 17 412 388 419 214 3 19 24 28 7 16 30 26 31 13 0
+ 16 140 288 155 12 10 0 32 417 216 328 175 204 320 344 444 323 433 174 339 289 21 11 447 357 442 156 18 13 3 17 27 2 29 5 30 6 136
@@ -1738,646 +1887,331 @@
ICCARM
- 65
+ 101
+
+
+ __cstat
+ 92
BICOMP
- 171
+ 210
+
+
+
+
+ ICCARM
+ 16 140 288 155 12 10 0 32 417 216 328 175 204 320 344 444 323 433 174 339 289 21 11 447 357 442 156 18 13 3 17 27 2 29 5 30 6 136
+
+
+
+
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_spi.c
+
+
+ ICCARM
+ 336
+
+
+ __cstat
+ 52
+
+
+ BICOMP
+ 177
+
+
+
+
+ ICCARM
+ 16 140 288 155 12 10 0 32 417 216 328 175 204 320 344 444 323 433 174 339 289 21 11 447 357 442 156 18 13 3 17 27 2 29 5 30 6 136
+
+
+
+
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_hcd.c
+
+
+ ICCARM
+ 361
+
+
+ __cstat
+ 91
+
+
+ BICOMP
+ 215
+
+
+
+
+ ICCARM
+ 16 140 288 155 12 10 0 32 417 216 328 175 204 320 344 444 323 433 174 339 289 21 11 447 357 442 156 18 13 3 17 27 2 29 5 30 6 136
+
+
+
+
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_ll_rng.c
+
+
+ ICCARM
+ 381
+
+
+ __cstat
+ 377
+
+
+ BICOMP
+ 100
+
+
+
+
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_smartcard_ex.c
+
+
+ ICCARM
+ 302
__cstat
127
+
+ BICOMP
+ 165
+
ICCARM
- 21 205 325 12 18 37 35 36 454 169 296 177 158 295 293 433 290 429 201 307 316 38 17 412 388 419 214 3 19 24 28 7 16 30 26 31 13 0
+ 16 140 288 155 12 10 0 32 417 216 328 175 204 320 344 444 323 433 174 339 289 21 11 447 357 442 156 18 13 3 17 27 2 29 5 30 6 136
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_ll_crc.c
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_smbus.c
ICCARM
- 110
+ 312
+
+
+ __cstat
+ 129
BICOMP
- 191
+ 266
+
+
+
+
+ ICCARM
+ 16 140 288 155 12 10 0 32 417 216 328 175 204 320 344 444 323 433 174 339 289 21 11 447 357 442 156 18 13 3 17 27 2 29 5 30 6 136
+
+
+
+
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_jpeg.c
+
+
+ ICCARM
+ 335
__cstat
48
-
-
-
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_ll_exti.c
-
-
- ICCARM
- 383
-
BICOMP
- 176
-
-
- __cstat
- 346
-
-
-
-
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_ll_dma.c
-
-
- ICCARM
- 133
-
-
- BICOMP
- 173
-
-
- __cstat
- 408
-
-
-
-
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_ll_rcc.c
-
-
- ICCARM
- 322
-
-
- BICOMP
- 55
-
-
- __cstat
- 51
-
-
-
-
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_cryp_ex.c
-
-
- ICCARM
- 155
-
-
- BICOMP
- 424
-
-
- __cstat
- 120
+ 420
ICCARM
- 21 205 325 12 18 37 35 36 454 169 296 177 158 295 293 433 290 429 201 307 316 38 17 412 388 419 214 3 19 24 28 7 16 30 26 31 13 0
+ 16 140 288 155 12 10 0 32 417 216 328 175 204 320 344 444 323 433 174 339 289 21 11 447 357 442 156 18 13 3 17 27 2 29 5 30 6 136
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_pcd_ex.c
-
-
- ICCARM
- 416
-
-
- BICOMP
- 125
-
-
- __cstat
- 362
-
-
-
-
- ICCARM
- 21 205 325 12 18 37 35 36 454 169 296 177 158 295 293 433 290 429 201 307 316 38 17 412 388 419 214 3 19 24 28 7 16 30 26 31 13 0
-
-
-
-
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_iwdg.c
-
-
- ICCARM
- 304
-
-
- BICOMP
- 360
-
-
- __cstat
- 80
-
-
-
-
- ICCARM
- 21 205 325 12 18 37 35 36 454 169 296 177 158 295 293 433 290 429 201 307 316 38 17 412 388 419 214 3 19 24 28 7 16 30 26 31 13 0
-
-
-
-
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_ltdc.c
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_sai_ex.c
ICCARM
434
- BICOMP
- 377
+ __cstat
+ 64
- __cstat
- 95
+ BICOMP
+ 213
ICCARM
- 21 205 325 12 18 37 35 36 454 169 296 177 158 295 293 433 290 429 201 307 316 38 17 412 388 419 214 3 19 24 28 7 16 30 26 31 13 0
+ 16 140 288 155 12 10 0 32 417 216 328 175 204 320 344 444 323 433 174 339 289 21 11 447 357 442 156 18 13 3 17 27 2 29 5 30 6 136
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_rng.c
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_i2s.c
ICCARM
- 446
-
-
- BICOMP
- 130
-
-
- __cstat
- 78
-
-
-
-
- ICCARM
- 21 205 325 12 18 37 35 36 454 169 296 177 158 295 293 433 290 429 201 307 316 38 17 412 388 419 214 3 19 24 28 7 16 30 26 31 13 0
-
-
-
-
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_crc.c
-
-
- ICCARM
- 151
-
-
- BICOMP
- 444
-
-
- __cstat
- 129
-
-
-
-
- ICCARM
- 21 205 325 12 18 37 35 36 454 169 296 177 158 295 293 433 290 429 201 307 316 38 17 412 388 419 214 3 19 24 28 7 16 30 26 31 13 0
-
-
-
-
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_lptim.c
-
-
- ICCARM
- 292
-
-
- BICOMP
- 352
-
-
- __cstat
- 74
-
-
-
-
- ICCARM
- 21 205 325 12 18 37 35 36 454 169 296 177 158 295 293 433 290 429 201 307 316 38 17 412 388 419 214 3 19 24 28 7 16 30 26 31 13 0
-
-
-
-
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_crc_ex.c
-
-
- ICCARM
- 144
-
-
- BICOMP
- 376
-
-
- __cstat
- 112
-
-
-
-
- ICCARM
- 21 205 325 12 18 37 35 36 454 169 296 177 158 295 293 433 290 429 201 307 316 38 17 412 388 419 214 3 19 24 28 7 16 30 26 31 13 0
-
-
-
-
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_irda.c
-
-
- ICCARM
- 300
-
-
- BICOMP
- 116
-
-
- __cstat
- 72
-
-
-
-
- ICCARM
- 21 205 325 12 18 37 35 36 454 169 296 177 158 295 293 433 290 429 201 307 316 38 17 412 388 419 214 3 19 24 28 7 16 30 26 31 13 0
-
-
-
-
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_dma2d.c
-
-
- ICCARM
- 43
-
-
- BICOMP
- 443
-
-
- __cstat
- 190
-
-
-
-
- ICCARM
- 21 205 325 12 18 37 35 36 454 169 296 177 158 295 293 433 290 429 201 307 316 38 17 412 388 419 214 3 19 24 28 7 16 30 26 31 13 0
-
-
-
-
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_cec.c
-
-
- ICCARM
- 164
-
-
- BICOMP
- 439
-
-
- __cstat
- 326
-
-
-
-
- ICCARM
- 21 205 325 12 18 37 35 36 454 169 296 177 158 295 293 433 290 429 201 307 316 38 17 412 388 419 214 3 19 24 28 7 16 30 26 31 13 0
-
-
-
-
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_dac.c
-
-
- ICCARM
- 143
-
-
- BICOMP
- 420
-
-
- __cstat
- 131
-
-
-
-
- ICCARM
- 21 205 325 12 18 37 35 36 454 169 296 177 158 295 293 433 290 429 201 307 316 38 17 412 388 419 214 3 19 24 28 7 16 30 26 31 13 0
-
-
-
-
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_dac_ex.c
-
-
- ICCARM
- 137
-
-
- BICOMP
- 447
-
-
- __cstat
- 114
-
-
-
-
- ICCARM
- 21 205 325 12 18 37 35 36 454 169 296 177 158 295 293 433 290 429 201 307 316 38 17 412 388 419 214 3 19 24 28 7 16 30 26 31 13 0
-
-
-
-
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_pcd.c
-
-
- ICCARM
- 449
-
-
- BICOMP
- 119
-
-
- __cstat
- 90
-
-
-
-
- ICCARM
- 21 205 325 12 18 37 35 36 454 169 296 177 158 295 293 433 290 429 201 307 316 38 17 412 388 419 214 3 19 24 28 7 16 30 26 31 13 0
-
-
-
-
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_dcmi_ex.c
-
-
- ICCARM
- 46
-
-
- BICOMP
- 181
-
-
- __cstat
- 147
-
-
-
-
- ICCARM
- 21 205 325 12 18 37 35 36 454 169 296 177 158 295 293 433 290 429 201 307 316 38 17 412 388 419 214 3 19 24 28 7 16 30 26 31 13 0
-
-
-
-
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_nand.c
-
-
- ICCARM
- 415
-
-
- BICOMP
- 124
-
-
- __cstat
- 91
-
-
-
-
- ICCARM
- 21 205 325 12 18 37 35 36 454 169 296 177 158 295 293 433 290 429 201 307 316 38 17 412 388 419 214 3 19 24 28 7 16 30 26 31 13 0
-
-
-
-
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_mdios.c
-
-
- ICCARM
- 432
-
-
- BICOMP
- 373
-
-
- __cstat
- 82
-
-
-
-
- ICCARM
- 21 205 325 12 18 37 35 36 454 169 296 177 158 295 293 433 290 429 201 307 316 38 17 412 388 419 214 3 19 24 28 7 16 30 26 31 13 0
-
-
-
-
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_hash_ex.c
-
-
- ICCARM
- 385
-
-
- BICOMP
- 222
+ 290
__cstat
150
+
+ BICOMP
+ 186
+
ICCARM
- 21 205 325 12 18 37 35 36 454 169 296 177 158 295 293 433 290 429 201 307 316 38 17 412 388 419 214 3 19 24 28 7 16 30 26 31 13 0
+ 16 140 288 155 12 10 0 32 417 216 328 175 204 320 344 444 323 433 174 339 289 21 11 447 357 442 156 18 13 3 17 27 2 29 5 30 6 136
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_dfsdm.c
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_rtc_ex.c
ICCARM
+ 388
+
+
+ __cstat
45
BICOMP
- 224
-
-
- __cstat
- 106
+ 164
ICCARM
- 21 205 325 12 18 37 35 36 454 169 296 177 158 295 293 433 290 429 201 307 316 38 17 412 388 419 214 3 19 24 28 7 16 30 26 31 13 0
+ 16 140 288 155 12 10 0 32 417 216 328 175 204 320 344 444 323 433 174 339 289 21 11 447 357 442 156 18 13 3 17 27 2 29 5 30 6 136
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_rtc.c
-
-
- ICCARM
- 163
-
-
- BICOMP
- 178
-
-
- __cstat
- 88
-
-
-
-
- ICCARM
- 21 205 325 12 18 37 35 36 454 169 296 177 158 295 293 433 290 429 201 307 316 38 17 412 388 419 214 3 19 24 28 7 16 30 26 31 13 0
-
-
-
-
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_ll_utils.c
-
-
- ICCARM
- 404
-
-
- BICOMP
- 323
-
-
- __cstat
- 142
-
-
-
-
- ICCARM
- 348 37 35 36 454 169 296 177 158 295 293 433 290 429 201 307 316 38 21 205 325 12 18 17 412 388 419 214 3 19 24 28 7 16 30 26 31 13 0 249 337 289
-
-
-
-
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_ll_lptim.c
-
-
- ICCARM
- 384
-
-
- BICOMP
- 69
-
-
- __cstat
- 387
-
-
-
-
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_ll_rtc.c
-
-
- ICCARM
- 400
-
-
- BICOMP
- 271
-
-
- __cstat
- 341
-
-
-
-
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_ll_gpio.c
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_sai.c
ICCARM
403
-
- BICOMP
- 140
-
__cstat
- 410
-
-
-
-
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_ll_fmc.c
-
-
- ICCARM
- 436
+ 106
BICOMP
- 172
-
-
- __cstat
- 358
+ 190
ICCARM
- 21 205 325 12 18 37 35 36 454 169 296 177 158 295 293 433 290 429 201 307 316 38 17 412 388 419 214 3 19 24 28 7 16 30 26 31 13 0
+ 16 140 288 155 12 10 0 32 417 216 328 175 204 320 344 444 323 433 174 339 289 21 11 447 357 442 156 18 13 3 17 27 2 29 5 30 6 136
+
+
+
+
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_ll_i2c.c
+
+
+ ICCARM
+ 398
+
+
+ __cstat
+ 151
+
+
+ BICOMP
+ 201
+
+
+
+
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_spdifrx.c
+
+
+ ICCARM
+ 375
+
+
+ __cstat
+ 46
+
+
+ BICOMP
+ 185
+
+
+
+
+ ICCARM
+ 16 140 288 155 12 10 0 32 417 216 328 175 204 320 344 444 323 433 174 339 289 21 11 447 357 442 156 18 13 3 17 27 2 29 5 30 6 136
+
+
+
+
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_hash.c
+
+
+ ICCARM
+ 374
+
+
+ __cstat
+ 97
+
+
+ BICOMP
+ 422
+
+
+
+
+ ICCARM
+ 16 140 288 155 12 10 0 32 417 216 328 175 204 320 344 444 323 433 174 339 289 21 11 447 357 442 156 18 13 3 17 27 2 29 5 30 6 136
+
+
+
+
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_smartcard.c
+
+
+ ICCARM
+ 371
+
+
+ __cstat
+ 39
+
+
+ BICOMP
+ 161
+
+
+
+
+ ICCARM
+ 16 140 288 155 12 10 0 32 417 216 328 175 204 320 344 444 323 433 174 339 289 21 11 447 357 442 156 18 13 3 17 27 2 29 5 30 6 136
@@ -2386,21 +2220,21 @@
ICCARM
- 187
-
-
- BICOMP
- 174
+ 169
__cstat
- 141
+ 221
+
+
+ BICOMP
+ 159
ICCARM
- 21 205 325 12 18 37 35 36 454 169 296 177 158 295 293 433 290 429 201 307 316 38 17 412 388 419 214 3 19 24 28 7 16 30 26 31 13 0
+ 16 140 288 155 12 10 0 32 417 216 328 175 204 320 344 444 323 433 174 339 289 21 11 447 357 442 156 18 13 3 17 27 2 29 5 30 6 136
@@ -2409,38 +2243,151 @@
ICCARM
- 334
-
-
- BICOMP
- 64
+ 313
__cstat
- 402
+ 363
+
+
+ BICOMP
+ 107
+
+ $PROJ_DIR$\..\stm32f7xx_hal_msp.c
+
+
+ ICCARM
+ 188
+
+
+ __cstat
+ 125
+
+
+ BICOMP
+ 247
+
+
+
+
+ ICCARM
+ 16 140 288 155 12 10 0 32 417 216 328 175 204 320 344 444 323 433 174 339 289 21 11 447 357 442 156 18 13 3 17 27 2 29 5 30 6 136
+
+
+ BICOMP
+ 5 328 12 18 216 27 344 140 288 155 3 2 6 11 0 21 289 17 30 156 10 447 16 32 417 323 175 444 174 433 442 29 339 204 320 357 13 136
+
+
+
+
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_ll_adc.c
+
+
+ ICCARM
+ 390
+
+
+ __cstat
+ 197
+
+
+ BICOMP
+ 172
+
+
+
+
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_usart.c
+
+
+ ICCARM
+ 384
+
+
+ __cstat
+ 111
+
+
+ BICOMP
+ 167
+
+
+
+
+ ICCARM
+ 16 140 288 155 12 10 0 32 417 216 328 175 204 320 344 444 323 433 174 339 289 21 11 447 357 442 156 18 13 3 17 27 2 29 5 30 6 136
+
+
+
$PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_ll_usb.c
ICCARM
- 414
-
-
- BICOMP
- 310
+ 446
__cstat
- 390
+ 353
+
+
+ BICOMP
+ 317
ICCARM
- 21 205 325 12 18 37 35 36 454 169 296 177 158 295 293 433 290 429 201 307 316 38 17 412 388 419 214 3 19 24 28 7 16 30 26 31 13 0
+ 16 140 288 155 12 10 0 32 417 216 328 175 204 320 344 444 323 433 174 339 289 21 11 447 357 442 156 18 13 3 17 27 2 29 5 30 6 136
+
+
+
+
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_sram.c
+
+
+ ICCARM
+ 341
+
+
+ __cstat
+ 53
+
+
+ BICOMP
+ 162
+
+
+
+
+ ICCARM
+ 16 140 288 155 12 10 0 32 417 216 328 175 204 320 344 444 323 433 174 339 289 21 11 447 357 442 156 18 13 3 17 27 2 29 5 30 6 136
+
+
+
+
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_ll_fmc.c
+
+
+ ICCARM
+ 452
+
+
+ __cstat
+ 409
+
+
+ BICOMP
+ 181
+
+
+
+
+ ICCARM
+ 16 140 288 155 12 10 0 32 417 216 328 175 204 320 344 444 323 433 174 339 289 21 11 447 357 442 156 18 13 3 17 27 2 29 5 30 6 136
@@ -2452,45 +2399,22 @@
438
- BICOMP
- 311
+ __cstat
+ 121
- __cstat
- 56
+ BICOMP
+ 334
ICCARM
- 21 205 325 12 18 37 35 36 454 169 296 177 158 295 293 433 290 429 201 307 316 38 17 412 388 419 214 3 19 24 28 7 16 30 26 31 13 0 317
+ 16 140 288 155 12 10 0 32 417 216 328 175 204 320 344 444 323 433 174 339 289 21 11 447 357 442 156 18 13 3 17 27 2 29 5 30 6 136 291
BICOMP
- 307 21 429 37 36 158 317 214 412 454 169 18 205 325 12 3 24 7 16 26 13 17 35 38 296 295 388 19 0 290 316 177 293 433 201 419 28 30 31
-
-
-
-
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_smartcard.c
-
-
- ICCARM
- 397
-
-
- BICOMP
- 185
-
-
- __cstat
- 85
-
-
-
-
- ICCARM
- 21 205 325 12 18 37 35 36 454 169 296 177 158 295 293 433 290 429 201 307 316 38 17 412 388 419 214 3 19 24 28 7 16 30 26 31 13 0
+ 339 16 433 10 32 204 291 156 447 417 216 12 140 288 155 18 3 27 2 5 6 11 0 21 328 320 357 13 136 323 289 175 344 444 174 442 17 29 30
@@ -2499,128 +2423,187 @@
ICCARM
- 200
-
-
- BICOMP
- 47
+ 171
__cstat
- 386
+ 359
+
+
+ BICOMP
+ 110
ICCARM
- 21 205 325 12 18 37 35 36 454 169 296 177 158 295 293 433 290 429 201 307 316 38 17 412 388 419 214 3 19 24 28 7 16 30 26 31 13 0
+ 16 140 288 155 12 10 0 32 417 216 328 175 204 320 344 444 323 433 174 339 289 21 11 447 357 442 156 18 13 3 17 27 2 29 5 30 6 136
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_ll_adc.c
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_ll_gpio.c
ICCARM
+ 378
+
+
+ __cstat
+ 354
+
+
+ BICOMP
+ 90
+
+
+
+
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_dfsdm.c
+
+
+ ICCARM
+ 130
+
+
+ __cstat
+ 55
+
+
+ BICOMP
+ 281
+
+
+
+
+ ICCARM
+ 16 140 288 155 12 10 0 32 417 216 328 175 204 320 344 444 323 433 174 339 289 21 11 447 357 442 156 18 13 3 17 27 2 29 5 30 6 136
+
+
+
+
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_mdios.c
+
+
+ ICCARM
+ 450
+
+
+ __cstat
+ 38
+
+
+ BICOMP
+ 400
+
+
+
+
+ ICCARM
+ 16 140 288 155 12 10 0 32 417 216 328 175 204 320 344 444 323 433 174 339 289 21 11 447 357 442 156 18 13 3 17 27 2 29 5 30 6 136
+
+
+
+
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_ll_utils.c
+
+
+ ICCARM
+ 379
+
+
+ __cstat
+ 199
+
+
+ BICOMP
+ 297
+
+
+
+
+ ICCARM
+ 385 10 0 32 417 216 328 175 204 320 344 444 323 433 174 339 289 21 16 140 288 155 12 11 447 357 442 156 18 13 3 17 27 2 29 5 30 6 136 283 315 343
+
+
+
+
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_rtc.c
+
+
+ ICCARM
+ 220
+
+
+ __cstat
+ 51
+
+
+ BICOMP
+ 183
+
+
+
+
+ ICCARM
+ 16 140 288 155 12 10 0 32 417 216 328 175 204 320 344 444 323 433 174 339 289 21 11 447 357 442 156 18 13 3 17 27 2 29 5 30 6 136
+
+
+
+
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_ll_lptim.c
+
+
+ ICCARM
+ 373
+
+
+ __cstat
368
BICOMP
- 197
-
-
- __cstat
- 153
+ 103
- $PROJ_DIR$\..\stm32f7xx_hal_msp.c
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_hash_ex.c
ICCARM
+ 367
+
+
+ __cstat
195
BICOMP
- 278
-
-
- __cstat
- 50
+ 268
ICCARM
- 21 205 325 12 18 37 35 36 454 169 296 177 158 295 293 433 290 429 201 307 316 38 17 412 388 419 214 3 19 24 28 7 16 30 26 31 13 0
-
-
- BICOMP
- 26 296 18 3 169 7 293 205 325 12 24 16 13 17 35 38 316 28 31 214 37 412 21 36 454 290 177 433 201 429 419 30 307 158 295 388 19 0
+ 16 140 288 155 12 10 0 32 417 216 328 175 204 320 344 444 323 433 174 339 289 21 11 447 357 442 156 18 13 3 17 27 2 29 5 30 6 136
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_usart.c
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_ll_rtc.c
ICCARM
- 366
-
-
- BICOMP
- 194
+ 358
__cstat
- 57
-
-
-
-
- ICCARM
- 21 205 325 12 18 37 35 36 454 169 296 177 158 295 293 433 290 429 201 307 316 38 17 412 388 419 214 3 19 24 28 7 16 30 26 31 13 0
-
-
-
-
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_sram.c
-
-
- ICCARM
- 298
+ 299
BICOMP
- 184
-
-
- __cstat
- 101
-
-
-
-
- ICCARM
- 21 205 325 12 18 37 35 36 454 169 296 177 158 295 293 433 290 429 201 307 316 38 17 412 388 419 214 3 19 24 28 7 16 30 26 31 13 0
-
-
-
-
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_ll_dac.c
-
-
- ICCARM
- 417
-
-
- BICOMP
- 216
-
-
- __cstat
- 407
+ 231
@@ -2629,30 +2612,47 @@
ILINK
- 381
+ 360
OBJCOPY
- 313
+ 325
ILINK
- 356 333 274 418 437 154 136 134 44 59 372 391 365 401 344 409 452 456 435 453 272 370 422 363 392 303 421 354 455 405
+ 391 286 229 430 445 211 79 77 158 124 399 369 393 362 303 352 411 412 449 418 252 402 431 401 349 330 455 408 425 355
+
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_ll_dac.c
+
+
+ ICCARM
+ 441
+
+
+ __cstat
+ 351
+
+
+ BICOMP
+ 180
+
+
+
$PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_timebase_tim_template.c
ICCARM
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_timebase_rtc_wakeup_template.c
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_timebase_rtc_alarm_template.c
ICCARM
- $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_timebase_rtc_alarm_template.c
+ $PROJ_DIR$\..\lib\STM32F7xx_HAL_Driver\Src\stm32f7xx_hal_timebase_rtc_wakeup_template.c
ICCARM
diff --git a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_IAR/Prog/lib/CMSIS/Device/ST/STM32F7xx/Include/stm32f746xx.h b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_IAR/Prog/lib/CMSIS/Device/ST/STM32F7xx/Include/stm32f746xx.h
index 5de6c6e1..2c47d3f0 100644
--- a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_IAR/Prog/lib/CMSIS/Device/ST/STM32F7xx/Include/stm32f746xx.h
+++ b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_IAR/Prog/lib/CMSIS/Device/ST/STM32F7xx/Include/stm32f746xx.h
@@ -12,29 +12,13 @@
******************************************************************************
* @attention
*
- * © COPYRIGHT(c) 2016 STMicroelectronics
+ * © Copyright (c) 2016 STMicroelectronics.
+ * All rights reserved.
*
- * Redistribution and use in source and binary forms, with or without modification,
- * are permitted provided that the following conditions are met:
- * 1. Redistributions of source code must retain the above copyright notice,
- * this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright notice,
- * this list of conditions and the following disclaimer in the documentation
- * and/or other materials provided with the distribution.
- * 3. Neither the name of STMicroelectronics nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
- * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
- * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ * This software component is licensed by ST under BSD 3-Clause license,
+ * the "License"; You may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at:
+ * opensource.org/licenses/BSD-3-Clause
*
******************************************************************************
*/
@@ -1433,28 +1417,32 @@ typedef struct
/* Analog to Digital Converter */
/* */
/******************************************************************************/
+#define VREFINT_CAL_ADDR_CMSIS ((uint16_t*) (0x1FF0F44A)) /*!© COPYRIGHT(c) 2016 STMicroelectronics
+ * © Copyright (c) 2016 STMicroelectronics.
+ * All rights reserved.
*
- * Redistribution and use in source and binary forms, with or without modification,
- * are permitted provided that the following conditions are met:
- * 1. Redistributions of source code must retain the above copyright notice,
- * this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright notice,
- * this list of conditions and the following disclaimer in the documentation
- * and/or other materials provided with the distribution.
- * 3. Neither the name of STMicroelectronics nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
- * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
- * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ * This software component is licensed by ST under BSD 3-Clause license,
+ * the "License"; You may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at:
+ * opensource.org/licenses/BSD-3-Clause
*
******************************************************************************
*/
@@ -72,10 +56,10 @@
/* Uncomment the line below according to the target STM32 device used in your
application
*/
-#if !defined (STM32F756xx) && !defined (STM32F746xx) && !defined (STM32F745xx) && !defined (STM32F767xx) && \
- !defined (STM32F769xx) && !defined (STM32F777xx) && !defined (STM32F779xx) && !defined (STM32F722xx) && \
- !defined (STM32F723xx) && !defined (STM32F732xx) && !defined (STM32F733xx) && !defined (STM32F730xx) && \
- !defined (STM32F750xx)
+#if !defined (STM32F756xx) && !defined (STM32F746xx) && !defined (STM32F745xx) && !defined (STM32F765xx) && \
+ !defined (STM32F767xx) && !defined (STM32F769xx) && !defined (STM32F777xx) && !defined (STM32F779xx) && \
+ !defined (STM32F722xx) && !defined (STM32F723xx) && !defined (STM32F732xx) && !defined (STM32F733xx) && \
+ !defined (STM32F730xx) && !defined (STM32F750xx)
/* #define STM32F756xx */ /*!< STM32F756VG, STM32F756ZG, STM32F756ZG, STM32F756IG, STM32F756BG,
STM32F756NG Devices */
@@ -113,11 +97,11 @@
#endif /* USE_HAL_DRIVER */
/**
- * @brief CMSIS Device version number V1.2.4
+ * @brief CMSIS Device version number V1.2.5
*/
#define __STM32F7_CMSIS_VERSION_MAIN (0x01) /*!< [31:24] main version */
#define __STM32F7_CMSIS_VERSION_SUB1 (0x02) /*!< [23:16] sub1 version */
-#define __STM32F7_CMSIS_VERSION_SUB2 (0x04) /*!< [15:8] sub2 version */
+#define __STM32F7_CMSIS_VERSION_SUB2 (0x05) /*!< [15:8] sub2 version */
#define __STM32F7_CMSIS_VERSION_RC (0x00) /*!< [7:0] release candidate */
#define __STM32F7_CMSIS_VERSION ((__STM32F7_CMSIS_VERSION_MAIN << 24)\
|(__STM32F7_CMSIS_VERSION_SUB1 << 16)\
diff --git a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_IAR/Prog/lib/STM32F7xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_IAR/Prog/lib/STM32F7xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h
index 13b68bc2..2d265fb6 100644
--- a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_IAR/Prog/lib/STM32F7xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h
+++ b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_IAR/Prog/lib/STM32F7xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h
@@ -7,7 +7,7 @@
******************************************************************************
* @attention
*
- * © Copyright (c) 2018 STMicroelectronics.
+ * © Copyright (c) 2019 STMicroelectronics.
* All rights reserved.
*
* This software component is licensed by ST under BSD 3-Clause license,
@@ -236,6 +236,16 @@
#define DAC_WAVEGENERATION_NOISE DAC_WAVE_NOISE
#define DAC_WAVEGENERATION_TRIANGLE DAC_WAVE_TRIANGLE
+#if defined(STM32G4) || defined(STM32H7)
+#define DAC_CHIPCONNECT_DISABLE DAC_CHIPCONNECT_EXTERNAL
+#define DAC_CHIPCONNECT_ENABLE DAC_CHIPCONNECT_INTERNAL
+#endif
+
+#if defined(STM32L1) || defined(STM32L4) || defined(STM32G0) || defined(STM32L5) || defined(STM32H7) || defined(STM32F4)
+#define HAL_DAC_MSP_INIT_CB_ID HAL_DAC_MSPINIT_CB_ID
+#define HAL_DAC_MSP_DEINIT_CB_ID HAL_DAC_MSPDEINIT_CB_ID
+#endif
+
/**
* @}
*/
@@ -296,8 +306,17 @@
#define HAL_DMAMUX_REQUEST_GEN_FALLING HAL_DMAMUX_REQ_GEN_FALLING
#define HAL_DMAMUX_REQUEST_GEN_RISING_FALLING HAL_DMAMUX_REQ_GEN_RISING_FALLING
+#if defined(STM32L4R5xx) || defined(STM32L4R9xx) || defined(STM32L4R9xx) || defined(STM32L4S5xx) || defined(STM32L4S7xx) || defined(STM32L4S9xx)
+#define DMA_REQUEST_DCMI_PSSI DMA_REQUEST_DCMI
+#endif
+
#endif /* STM32L4 */
+#if defined(STM32G0)
+#define DMA_REQUEST_DAC1_CHANNEL1 DMA_REQUEST_DAC1_CH1
+#define DMA_REQUEST_DAC1_CHANNEL2 DMA_REQUEST_DAC1_CH2
+#endif
+
#if defined(STM32H7)
#define DMA_REQUEST_DAC1 DMA_REQUEST_DAC1_CH1
@@ -355,6 +374,9 @@
#define DFSDM_FILTER_EXT_TRIG_LPTIM2 DFSDM_FILTER_EXT_TRIG_LPTIM2_OUT
#define DFSDM_FILTER_EXT_TRIG_LPTIM3 DFSDM_FILTER_EXT_TRIG_LPTIM3_OUT
+#define DAC_TRIGGER_LP1_OUT DAC_TRIGGER_LPTIM1_OUT
+#define DAC_TRIGGER_LP2_OUT DAC_TRIGGER_LPTIM2_OUT
+
#endif /* STM32H7 */
/**
@@ -450,7 +472,9 @@
#define FLASH_FLAG_SNECCE_BANK2RR FLASH_FLAG_SNECCERR_BANK2
#define FLASH_FLAG_DBECCE_BANK2RR FLASH_FLAG_DBECCERR_BANK2
#define FLASH_FLAG_STRBER_BANK2R FLASH_FLAG_STRBERR_BANK2
-#endif
+#define FLASH_FLAG_WDW FLASH_FLAG_WBNE
+#define OB_WRP_SECTOR_All OB_WRP_SECTOR_ALL
+#endif /* STM32H7 */
/**
* @}
@@ -486,6 +510,13 @@
#define HAL_SYSCFG_FASTMODEPLUS_I2C1 I2C_FASTMODEPLUS_I2C1
#define HAL_SYSCFG_FASTMODEPLUS_I2C2 I2C_FASTMODEPLUS_I2C2
#define HAL_SYSCFG_FASTMODEPLUS_I2C3 I2C_FASTMODEPLUS_I2C3
+#if defined(STM32G4)
+
+#define HAL_SYSCFG_EnableIOAnalogSwitchBooster HAL_SYSCFG_EnableIOSwitchBooster
+#define HAL_SYSCFG_DisableIOAnalogSwitchBooster HAL_SYSCFG_DisableIOSwitchBooster
+#define HAL_SYSCFG_EnableIOAnalogSwitchVDD HAL_SYSCFG_EnableIOSwitchVDD
+#define HAL_SYSCFG_DisableIOAnalogSwitchVDD HAL_SYSCFG_DisableIOSwitchVDD
+#endif /* STM32G4 */
/**
* @}
*/
@@ -494,7 +525,7 @@
/** @defgroup LL_FMC_Aliased_Defines LL FMC Aliased Defines maintained for compatibility purpose
* @{
*/
-#if defined(STM32L4) || defined(STM32F7) || defined(STM32H7)
+#if defined(STM32L4) || defined(STM32F7) || defined(STM32H7) || defined(STM32G4)
#define FMC_NAND_PCC_WAIT_FEATURE_DISABLE FMC_NAND_WAIT_FEATURE_DISABLE
#define FMC_NAND_PCC_WAIT_FEATURE_ENABLE FMC_NAND_WAIT_FEATURE_ENABLE
#define FMC_NAND_PCC_MEM_BUS_WIDTH_8 FMC_NAND_MEM_BUS_WIDTH_8
@@ -547,18 +578,25 @@
#define GPIO_AF9_SDIO2 GPIO_AF9_SDMMC2
#define GPIO_AF10_SDIO2 GPIO_AF10_SDMMC2
#define GPIO_AF11_SDIO2 GPIO_AF11_SDMMC2
-#endif
+
+#if defined (STM32H743xx) || defined (STM32H753xx) || defined (STM32H750xx) || defined (STM32H742xx) || \
+ defined (STM32H745xx) || defined (STM32H755xx) || defined (STM32H747xx) || defined (STM32H757xx)
+#define GPIO_AF10_OTG2_HS GPIO_AF10_OTG2_FS
+#define GPIO_AF10_OTG1_FS GPIO_AF10_OTG1_HS
+#define GPIO_AF12_OTG2_FS GPIO_AF12_OTG1_FS
+#endif /*STM32H743xx || STM32H753xx || STM32H750xx || STM32H742xx || STM32H745xx || STM32H755xx || STM32H747xx || STM32H757xx */
+#endif /* STM32H7 */
#define GPIO_AF0_LPTIM GPIO_AF0_LPTIM1
#define GPIO_AF1_LPTIM GPIO_AF1_LPTIM1
#define GPIO_AF2_LPTIM GPIO_AF2_LPTIM1
-#if defined(STM32L0) || defined(STM32L4) || defined(STM32F4) || defined(STM32F2) || defined(STM32F7) || defined(STM32H7)
+#if defined(STM32L0) || defined(STM32L4) || defined(STM32F4) || defined(STM32F2) || defined(STM32F7) || defined(STM32G4) || defined(STM32H7)
#define GPIO_SPEED_LOW GPIO_SPEED_FREQ_LOW
#define GPIO_SPEED_MEDIUM GPIO_SPEED_FREQ_MEDIUM
#define GPIO_SPEED_FAST GPIO_SPEED_FREQ_HIGH
#define GPIO_SPEED_HIGH GPIO_SPEED_FREQ_VERY_HIGH
-#endif /* STM32L0 || STM32L4 || STM32F4 || STM32F2 || STM32F7 || STM32H7*/
+#endif /* STM32L0 || STM32L4 || STM32F4 || STM32F2 || STM32F7 || STM32G4 || STM32H7*/
#if defined(STM32L1)
#define GPIO_SPEED_VERY_LOW GPIO_SPEED_FREQ_LOW
@@ -599,6 +637,185 @@
#define __HAL_HRTIM_GetClockPrescaler __HAL_HRTIM_GETCLOCKPRESCALER
#define __HAL_HRTIM_SetCompare __HAL_HRTIM_SETCOMPARE
#define __HAL_HRTIM_GetCompare __HAL_HRTIM_GETCOMPARE
+
+#if defined(STM32G4)
+#define HAL_HRTIM_ExternalEventCounterConfig HAL_HRTIM_ExtEventCounterConfig
+#define HAL_HRTIM_ExternalEventCounterEnable HAL_HRTIM_ExtEventCounterEnable
+#define HAL_HRTIM_ExternalEventCounterDisable HAL_HRTIM_ExtEventCounterDisable
+#define HAL_HRTIM_ExternalEventCounterReset HAL_HRTIM_ExtEventCounterReset
+#endif /* STM32G4 */
+
+#if defined(STM32H7)
+#define HRTIM_OUTPUTSET_TIMAEV1_TIMBCMP1 HRTIM_OUTPUTSET_TIMEV_1
+#define HRTIM_OUTPUTSET_TIMAEV2_TIMBCMP2 HRTIM_OUTPUTSET_TIMEV_2
+#define HRTIM_OUTPUTSET_TIMAEV3_TIMCCMP2 HRTIM_OUTPUTSET_TIMEV_3
+#define HRTIM_OUTPUTSET_TIMAEV4_TIMCCMP3 HRTIM_OUTPUTSET_TIMEV_4
+#define HRTIM_OUTPUTSET_TIMAEV5_TIMDCMP1 HRTIM_OUTPUTSET_TIMEV_5
+#define HRTIM_OUTPUTSET_TIMAEV6_TIMDCMP2 HRTIM_OUTPUTSET_TIMEV_6
+#define HRTIM_OUTPUTSET_TIMAEV7_TIMECMP3 HRTIM_OUTPUTSET_TIMEV_7
+#define HRTIM_OUTPUTSET_TIMAEV8_TIMECMP4 HRTIM_OUTPUTSET_TIMEV_8
+#define HRTIM_OUTPUTSET_TIMAEV9_TIMFCMP4 HRTIM_OUTPUTSET_TIMEV_9
+#define HRTIM_OUTPUTSET_TIMBEV1_TIMACMP1 HRTIM_OUTPUTSET_TIMEV_1
+#define HRTIM_OUTPUTSET_TIMBEV2_TIMACMP2 HRTIM_OUTPUTSET_TIMEV_2
+#define HRTIM_OUTPUTSET_TIMBEV3_TIMCCMP3 HRTIM_OUTPUTSET_TIMEV_3
+#define HRTIM_OUTPUTSET_TIMBEV4_TIMCCMP4 HRTIM_OUTPUTSET_TIMEV_4
+#define HRTIM_OUTPUTSET_TIMBEV5_TIMDCMP3 HRTIM_OUTPUTSET_TIMEV_5
+#define HRTIM_OUTPUTSET_TIMBEV6_TIMDCMP4 HRTIM_OUTPUTSET_TIMEV_6
+#define HRTIM_OUTPUTSET_TIMBEV7_TIMECMP1 HRTIM_OUTPUTSET_TIMEV_7
+#define HRTIM_OUTPUTSET_TIMBEV8_TIMECMP2 HRTIM_OUTPUTSET_TIMEV_8
+#define HRTIM_OUTPUTSET_TIMBEV9_TIMFCMP3 HRTIM_OUTPUTSET_TIMEV_9
+#define HRTIM_OUTPUTSET_TIMCEV1_TIMACMP1 HRTIM_OUTPUTSET_TIMEV_1
+#define HRTIM_OUTPUTSET_TIMCEV2_TIMACMP2 HRTIM_OUTPUTSET_TIMEV_2
+#define HRTIM_OUTPUTSET_TIMCEV3_TIMBCMP2 HRTIM_OUTPUTSET_TIMEV_3
+#define HRTIM_OUTPUTSET_TIMCEV4_TIMBCMP3 HRTIM_OUTPUTSET_TIMEV_4
+#define HRTIM_OUTPUTSET_TIMCEV5_TIMDCMP2 HRTIM_OUTPUTSET_TIMEV_5
+#define HRTIM_OUTPUTSET_TIMCEV6_TIMDCMP4 HRTIM_OUTPUTSET_TIMEV_6
+#define HRTIM_OUTPUTSET_TIMCEV7_TIMECMP3 HRTIM_OUTPUTSET_TIMEV_7
+#define HRTIM_OUTPUTSET_TIMCEV8_TIMECMP4 HRTIM_OUTPUTSET_TIMEV_8
+#define HRTIM_OUTPUTSET_TIMCEV9_TIMFCMP2 HRTIM_OUTPUTSET_TIMEV_9
+#define HRTIM_OUTPUTSET_TIMDEV1_TIMACMP1 HRTIM_OUTPUTSET_TIMEV_1
+#define HRTIM_OUTPUTSET_TIMDEV2_TIMACMP4 HRTIM_OUTPUTSET_TIMEV_2
+#define HRTIM_OUTPUTSET_TIMDEV3_TIMBCMP2 HRTIM_OUTPUTSET_TIMEV_3
+#define HRTIM_OUTPUTSET_TIMDEV4_TIMBCMP4 HRTIM_OUTPUTSET_TIMEV_4
+#define HRTIM_OUTPUTSET_TIMDEV5_TIMCCMP4 HRTIM_OUTPUTSET_TIMEV_5
+#define HRTIM_OUTPUTSET_TIMDEV6_TIMECMP1 HRTIM_OUTPUTSET_TIMEV_6
+#define HRTIM_OUTPUTSET_TIMDEV7_TIMECMP4 HRTIM_OUTPUTSET_TIMEV_7
+#define HRTIM_OUTPUTSET_TIMDEV8_TIMFCMP1 HRTIM_OUTPUTSET_TIMEV_8
+#define HRTIM_OUTPUTSET_TIMDEV9_TIMFCMP3 HRTIM_OUTPUTSET_TIMEV_9
+#define HRTIM_OUTPUTSET_TIMEEV1_TIMACMP4 HRTIM_OUTPUTSET_TIMEV_1
+#define HRTIM_OUTPUTSET_TIMEEV2_TIMBCMP3 HRTIM_OUTPUTSET_TIMEV_2
+#define HRTIM_OUTPUTSET_TIMEEV3_TIMBCMP4 HRTIM_OUTPUTSET_TIMEV_3
+#define HRTIM_OUTPUTSET_TIMEEV4_TIMCCMP1 HRTIM_OUTPUTSET_TIMEV_4
+#define HRTIM_OUTPUTSET_TIMEEV5_TIMDCMP2 HRTIM_OUTPUTSET_TIMEV_5
+#define HRTIM_OUTPUTSET_TIMEEV6_TIMDCMP1 HRTIM_OUTPUTSET_TIMEV_6
+#define HRTIM_OUTPUTSET_TIMEEV7_TIMDCMP2 HRTIM_OUTPUTSET_TIMEV_7
+#define HRTIM_OUTPUTSET_TIMEEV8_TIMFCMP3 HRTIM_OUTPUTSET_TIMEV_8
+#define HRTIM_OUTPUTSET_TIMEEV9_TIMFCMP4 HRTIM_OUTPUTSET_TIMEV_9
+#define HRTIM_OUTPUTSET_TIMFEV1_TIMACMP3 HRTIM_OUTPUTSET_TIMEV_1
+#define HRTIM_OUTPUTSET_TIMFEV2_TIMBCMP1 HRTIM_OUTPUTSET_TIMEV_2
+#define HRTIM_OUTPUTSET_TIMFEV3_TIMBCMP4 HRTIM_OUTPUTSET_TIMEV_3
+#define HRTIM_OUTPUTSET_TIMFEV4_TIMCCMP1 HRTIM_OUTPUTSET_TIMEV_4
+#define HRTIM_OUTPUTSET_TIMFEV5_TIMCCMP4 HRTIM_OUTPUTSET_TIMEV_5
+#define HRTIM_OUTPUTSET_TIMFEV6_TIMDCMP3 HRTIM_OUTPUTSET_TIMEV_6
+#define HRTIM_OUTPUTSET_TIMFEV7_TIMDCMP4 HRTIM_OUTPUTSET_TIMEV_7
+#define HRTIM_OUTPUTSET_TIMFEV8_TIMECMP2 HRTIM_OUTPUTSET_TIMEV_8
+#define HRTIM_OUTPUTSET_TIMFEV9_TIMECMP3 HRTIM_OUTPUTSET_TIMEV_9
+
+#define HRTIM_OUTPUTRESET_TIMAEV1_TIMBCMP1 HRTIM_OUTPUTSET_TIMEV_1
+#define HRTIM_OUTPUTRESET_TIMAEV2_TIMBCMP2 HRTIM_OUTPUTSET_TIMEV_2
+#define HRTIM_OUTPUTRESET_TIMAEV3_TIMCCMP2 HRTIM_OUTPUTSET_TIMEV_3
+#define HRTIM_OUTPUTRESET_TIMAEV4_TIMCCMP3 HRTIM_OUTPUTSET_TIMEV_4
+#define HRTIM_OUTPUTRESET_TIMAEV5_TIMDCMP1 HRTIM_OUTPUTSET_TIMEV_5
+#define HRTIM_OUTPUTRESET_TIMAEV6_TIMDCMP2 HRTIM_OUTPUTSET_TIMEV_6
+#define HRTIM_OUTPUTRESET_TIMAEV7_TIMECMP3 HRTIM_OUTPUTSET_TIMEV_7
+#define HRTIM_OUTPUTRESET_TIMAEV8_TIMECMP4 HRTIM_OUTPUTSET_TIMEV_8
+#define HRTIM_OUTPUTRESET_TIMAEV9_TIMFCMP4 HRTIM_OUTPUTSET_TIMEV_9
+#define HRTIM_OUTPUTRESET_TIMBEV1_TIMACMP1 HRTIM_OUTPUTSET_TIMEV_1
+#define HRTIM_OUTPUTRESET_TIMBEV2_TIMACMP2 HRTIM_OUTPUTSET_TIMEV_2
+#define HRTIM_OUTPUTRESET_TIMBEV3_TIMCCMP3 HRTIM_OUTPUTSET_TIMEV_3
+#define HRTIM_OUTPUTRESET_TIMBEV4_TIMCCMP4 HRTIM_OUTPUTSET_TIMEV_4
+#define HRTIM_OUTPUTRESET_TIMBEV5_TIMDCMP3 HRTIM_OUTPUTSET_TIMEV_5
+#define HRTIM_OUTPUTRESET_TIMBEV6_TIMDCMP4 HRTIM_OUTPUTSET_TIMEV_6
+#define HRTIM_OUTPUTRESET_TIMBEV7_TIMECMP1 HRTIM_OUTPUTSET_TIMEV_7
+#define HRTIM_OUTPUTRESET_TIMBEV8_TIMECMP2 HRTIM_OUTPUTSET_TIMEV_8
+#define HRTIM_OUTPUTRESET_TIMBEV9_TIMFCMP3 HRTIM_OUTPUTSET_TIMEV_9
+#define HRTIM_OUTPUTRESET_TIMCEV1_TIMACMP1 HRTIM_OUTPUTSET_TIMEV_1
+#define HRTIM_OUTPUTRESET_TIMCEV2_TIMACMP2 HRTIM_OUTPUTSET_TIMEV_2
+#define HRTIM_OUTPUTRESET_TIMCEV3_TIMBCMP2 HRTIM_OUTPUTSET_TIMEV_3
+#define HRTIM_OUTPUTRESET_TIMCEV4_TIMBCMP3 HRTIM_OUTPUTSET_TIMEV_4
+#define HRTIM_OUTPUTRESET_TIMCEV5_TIMDCMP2 HRTIM_OUTPUTSET_TIMEV_5
+#define HRTIM_OUTPUTRESET_TIMCEV6_TIMDCMP4 HRTIM_OUTPUTSET_TIMEV_6
+#define HRTIM_OUTPUTRESET_TIMCEV7_TIMECMP3 HRTIM_OUTPUTSET_TIMEV_7
+#define HRTIM_OUTPUTRESET_TIMCEV8_TIMECMP4 HRTIM_OUTPUTSET_TIMEV_8
+#define HRTIM_OUTPUTRESET_TIMCEV9_TIMFCMP2 HRTIM_OUTPUTSET_TIMEV_9
+#define HRTIM_OUTPUTRESET_TIMDEV1_TIMACMP1 HRTIM_OUTPUTSET_TIMEV_1
+#define HRTIM_OUTPUTRESET_TIMDEV2_TIMACMP4 HRTIM_OUTPUTSET_TIMEV_2
+#define HRTIM_OUTPUTRESET_TIMDEV3_TIMBCMP2 HRTIM_OUTPUTSET_TIMEV_3
+#define HRTIM_OUTPUTRESET_TIMDEV4_TIMBCMP4 HRTIM_OUTPUTSET_TIMEV_4
+#define HRTIM_OUTPUTRESET_TIMDEV5_TIMCCMP4 HRTIM_OUTPUTSET_TIMEV_5
+#define HRTIM_OUTPUTRESET_TIMDEV6_TIMECMP1 HRTIM_OUTPUTSET_TIMEV_6
+#define HRTIM_OUTPUTRESET_TIMDEV7_TIMECMP4 HRTIM_OUTPUTSET_TIMEV_7
+#define HRTIM_OUTPUTRESET_TIMDEV8_TIMFCMP1 HRTIM_OUTPUTSET_TIMEV_8
+#define HRTIM_OUTPUTRESET_TIMDEV9_TIMFCMP3 HRTIM_OUTPUTSET_TIMEV_9
+#define HRTIM_OUTPUTRESET_TIMEEV1_TIMACMP4 HRTIM_OUTPUTSET_TIMEV_1
+#define HRTIM_OUTPUTRESET_TIMEEV2_TIMBCMP3 HRTIM_OUTPUTSET_TIMEV_2
+#define HRTIM_OUTPUTRESET_TIMEEV3_TIMBCMP4 HRTIM_OUTPUTSET_TIMEV_3
+#define HRTIM_OUTPUTRESET_TIMEEV4_TIMCCMP1 HRTIM_OUTPUTSET_TIMEV_4
+#define HRTIM_OUTPUTRESET_TIMEEV5_TIMDCMP2 HRTIM_OUTPUTSET_TIMEV_5
+#define HRTIM_OUTPUTRESET_TIMEEV6_TIMDCMP1 HRTIM_OUTPUTSET_TIMEV_6
+#define HRTIM_OUTPUTRESET_TIMEEV7_TIMDCMP2 HRTIM_OUTPUTSET_TIMEV_7
+#define HRTIM_OUTPUTRESET_TIMEEV8_TIMFCMP3 HRTIM_OUTPUTSET_TIMEV_8
+#define HRTIM_OUTPUTRESET_TIMEEV9_TIMFCMP4 HRTIM_OUTPUTSET_TIMEV_9
+#define HRTIM_OUTPUTRESET_TIMFEV1_TIMACMP3 HRTIM_OUTPUTSET_TIMEV_1
+#define HRTIM_OUTPUTRESET_TIMFEV2_TIMBCMP1 HRTIM_OUTPUTSET_TIMEV_2
+#define HRTIM_OUTPUTRESET_TIMFEV3_TIMBCMP4 HRTIM_OUTPUTSET_TIMEV_3
+#define HRTIM_OUTPUTRESET_TIMFEV4_TIMCCMP1 HRTIM_OUTPUTSET_TIMEV_4
+#define HRTIM_OUTPUTRESET_TIMFEV5_TIMCCMP4 HRTIM_OUTPUTSET_TIMEV_5
+#define HRTIM_OUTPUTRESET_TIMFEV6_TIMDCMP3 HRTIM_OUTPUTSET_TIMEV_6
+#define HRTIM_OUTPUTRESET_TIMFEV7_TIMDCMP4 HRTIM_OUTPUTSET_TIMEV_7
+#define HRTIM_OUTPUTRESET_TIMFEV8_TIMECMP2 HRTIM_OUTPUTSET_TIMEV_8
+#define HRTIM_OUTPUTRESET_TIMFEV9_TIMECMP3 HRTIM_OUTPUTSET_TIMEV_9
+#endif /* STM32H7 */
+
+#if defined(STM32F3)
+/** @brief Constants defining available sources associated to external events.
+ */
+#define HRTIM_EVENTSRC_1 (0x00000000U)
+#define HRTIM_EVENTSRC_2 (HRTIM_EECR1_EE1SRC_0)
+#define HRTIM_EVENTSRC_3 (HRTIM_EECR1_EE1SRC_1)
+#define HRTIM_EVENTSRC_4 (HRTIM_EECR1_EE1SRC_1 | HRTIM_EECR1_EE1SRC_0)
+
+/** @brief Constants defining the events that can be selected to configure the
+ * set/reset crossbar of a timer output
+ */
+#define HRTIM_OUTPUTSET_TIMEV_1 (HRTIM_SET1R_TIMEVNT1)
+#define HRTIM_OUTPUTSET_TIMEV_2 (HRTIM_SET1R_TIMEVNT2)
+#define HRTIM_OUTPUTSET_TIMEV_3 (HRTIM_SET1R_TIMEVNT3)
+#define HRTIM_OUTPUTSET_TIMEV_4 (HRTIM_SET1R_TIMEVNT4)
+#define HRTIM_OUTPUTSET_TIMEV_5 (HRTIM_SET1R_TIMEVNT5)
+#define HRTIM_OUTPUTSET_TIMEV_6 (HRTIM_SET1R_TIMEVNT6)
+#define HRTIM_OUTPUTSET_TIMEV_7 (HRTIM_SET1R_TIMEVNT7)
+#define HRTIM_OUTPUTSET_TIMEV_8 (HRTIM_SET1R_TIMEVNT8)
+#define HRTIM_OUTPUTSET_TIMEV_9 (HRTIM_SET1R_TIMEVNT9)
+
+#define HRTIM_OUTPUTRESET_TIMEV_1 (HRTIM_RST1R_TIMEVNT1)
+#define HRTIM_OUTPUTRESET_TIMEV_2 (HRTIM_RST1R_TIMEVNT2)
+#define HRTIM_OUTPUTRESET_TIMEV_3 (HRTIM_RST1R_TIMEVNT3)
+#define HRTIM_OUTPUTRESET_TIMEV_4 (HRTIM_RST1R_TIMEVNT4)
+#define HRTIM_OUTPUTRESET_TIMEV_5 (HRTIM_RST1R_TIMEVNT5)
+#define HRTIM_OUTPUTRESET_TIMEV_6 (HRTIM_RST1R_TIMEVNT6)
+#define HRTIM_OUTPUTRESET_TIMEV_7 (HRTIM_RST1R_TIMEVNT7)
+#define HRTIM_OUTPUTRESET_TIMEV_8 (HRTIM_RST1R_TIMEVNT8)
+#define HRTIM_OUTPUTRESET_TIMEV_9 (HRTIM_RST1R_TIMEVNT9)
+
+/** @brief Constants defining the event filtering applied to external events
+ * by a timer
+ */
+#define HRTIM_TIMEVENTFILTER_NONE (0x00000000U)
+#define HRTIM_TIMEVENTFILTER_BLANKINGCMP1 (HRTIM_EEFR1_EE1FLTR_0)
+#define HRTIM_TIMEVENTFILTER_BLANKINGCMP2 (HRTIM_EEFR1_EE1FLTR_1)
+#define HRTIM_TIMEVENTFILTER_BLANKINGCMP3 (HRTIM_EEFR1_EE1FLTR_1 | HRTIM_EEFR1_EE1FLTR_0)
+#define HRTIM_TIMEVENTFILTER_BLANKINGCMP4 (HRTIM_EEFR1_EE1FLTR_2)
+#define HRTIM_TIMEVENTFILTER_BLANKINGFLTR1 (HRTIM_EEFR1_EE1FLTR_2 | HRTIM_EEFR1_EE1FLTR_0)
+#define HRTIM_TIMEVENTFILTER_BLANKINGFLTR2 (HRTIM_EEFR1_EE1FLTR_2 | HRTIM_EEFR1_EE1FLTR_1)
+#define HRTIM_TIMEVENTFILTER_BLANKINGFLTR3 (HRTIM_EEFR1_EE1FLTR_2 | HRTIM_EEFR1_EE1FLTR_1 | HRTIM_EEFR1_EE1FLTR_0)
+#define HRTIM_TIMEVENTFILTER_BLANKINGFLTR4 (HRTIM_EEFR1_EE1FLTR_3)
+#define HRTIM_TIMEVENTFILTER_BLANKINGFLTR5 (HRTIM_EEFR1_EE1FLTR_3 | HRTIM_EEFR1_EE1FLTR_0)
+#define HRTIM_TIMEVENTFILTER_BLANKINGFLTR6 (HRTIM_EEFR1_EE1FLTR_3 | HRTIM_EEFR1_EE1FLTR_1)
+#define HRTIM_TIMEVENTFILTER_BLANKINGFLTR7 (HRTIM_EEFR1_EE1FLTR_3 | HRTIM_EEFR1_EE1FLTR_1 | HRTIM_EEFR1_EE1FLTR_0)
+#define HRTIM_TIMEVENTFILTER_BLANKINGFLTR8 (HRTIM_EEFR1_EE1FLTR_3 | HRTIM_EEFR1_EE1FLTR_2)
+#define HRTIM_TIMEVENTFILTER_WINDOWINGCMP2 (HRTIM_EEFR1_EE1FLTR_3 | HRTIM_EEFR1_EE1FLTR_2 | HRTIM_EEFR1_EE1FLTR_0)
+#define HRTIM_TIMEVENTFILTER_WINDOWINGCMP3 (HRTIM_EEFR1_EE1FLTR_3 | HRTIM_EEFR1_EE1FLTR_2 | HRTIM_EEFR1_EE1FLTR_1)
+#define HRTIM_TIMEVENTFILTER_WINDOWINGTIM (HRTIM_EEFR1_EE1FLTR_3 | HRTIM_EEFR1_EE1FLTR_2 | HRTIM_EEFR1_EE1FLTR_1 | HRTIM_EEFR1_EE1FLTR_0)
+
+/** @brief Constants defining the DLL calibration periods (in micro seconds)
+ */
+#define HRTIM_CALIBRATIONRATE_7300 0x00000000U
+#define HRTIM_CALIBRATIONRATE_910 (HRTIM_DLLCR_CALRTE_0)
+#define HRTIM_CALIBRATIONRATE_114 (HRTIM_DLLCR_CALRTE_1)
+#define HRTIM_CALIBRATIONRATE_14 (HRTIM_DLLCR_CALRTE_1 | HRTIM_DLLCR_CALRTE_0)
+
+#endif /* STM32F3 */
/**
* @}
*/
@@ -738,6 +955,12 @@
#define OPAMP_PGACONNECT_VM0 OPAMP_PGA_CONNECT_INVERTINGINPUT_IO0
#define OPAMP_PGACONNECT_VM1 OPAMP_PGA_CONNECT_INVERTINGINPUT_IO1
+#if defined(STM32L1) || defined(STM32L4) || defined(STM32L5) || defined(STM32H7)
+#define HAL_OPAMP_MSP_INIT_CB_ID HAL_OPAMP_MSPINIT_CB_ID
+#define HAL_OPAMP_MSP_DEINIT_CB_ID HAL_OPAMP_MSPDEINIT_CB_ID
+#endif
+
+
/**
* @}
*/
@@ -753,7 +976,6 @@
#define I2S_FLAG_TXE I2S_FLAG_TXP
#define I2S_FLAG_RXNE I2S_FLAG_RXP
- #define I2S_FLAG_FRE I2S_FLAG_TIFRE
#endif
#if defined(STM32F7)
@@ -824,6 +1046,16 @@
#define RTC_TAMPERPIN_PA0 RTC_TAMPERPIN_POS1
#define RTC_TAMPERPIN_PI8 RTC_TAMPERPIN_POS1
+#if defined(STM32H7)
+#define RTC_TAMPCR_TAMPXE RTC_TAMPER_X
+#define RTC_TAMPCR_TAMPXIE RTC_TAMPER_X_INTERRUPT
+
+#define RTC_TAMPER1_INTERRUPT RTC_IT_TAMP1
+#define RTC_TAMPER2_INTERRUPT RTC_IT_TAMP2
+#define RTC_TAMPER3_INTERRUPT RTC_IT_TAMP3
+#define RTC_ALL_TAMPER_INTERRUPT RTC_IT_TAMPALL
+#endif /* STM32H7 */
+
/**
* @}
*/
@@ -971,6 +1203,24 @@
#define IS_TIM_HALL_INTERFACE_INSTANCE IS_TIM_HALL_SENSOR_INTERFACE_INSTANCE
#endif
+#if defined(STM32H7)
+#define TIM_TIM1_ETR_COMP1_OUT TIM_TIM1_ETR_COMP1
+#define TIM_TIM1_ETR_COMP2_OUT TIM_TIM1_ETR_COMP2
+#define TIM_TIM8_ETR_COMP1_OUT TIM_TIM8_ETR_COMP1
+#define TIM_TIM8_ETR_COMP2_OUT TIM_TIM8_ETR_COMP2
+#define TIM_TIM2_ETR_COMP1_OUT TIM_TIM2_ETR_COMP1
+#define TIM_TIM2_ETR_COMP2_OUT TIM_TIM2_ETR_COMP2
+#define TIM_TIM3_ETR_COMP1_OUT TIM_TIM3_ETR_COMP1
+#define TIM_TIM1_TI1_COMP1_OUT TIM_TIM1_TI1_COMP1
+#define TIM_TIM8_TI1_COMP2_OUT TIM_TIM8_TI1_COMP2
+#define TIM_TIM2_TI4_COMP1_OUT TIM_TIM2_TI4_COMP1
+#define TIM_TIM2_TI4_COMP2_OUT TIM_TIM2_TI4_COMP2
+#define TIM_TIM2_TI4_COMP1COMP2_OUT TIM_TIM2_TI4_COMP1_COMP2
+#define TIM_TIM3_TI1_COMP1_OUT TIM_TIM3_TI1_COMP1
+#define TIM_TIM3_TI1_COMP2_OUT TIM_TIM3_TI1_COMP2
+#define TIM_TIM3_TI1_COMP1COMP2_OUT TIM_TIM3_TI1_COMP1_COMP2
+#endif
+
/**
* @}
*/
@@ -1199,6 +1449,30 @@
#define HASH_HMACKeyType_ShortKey HASH_HMAC_KEYTYPE_SHORTKEY
#define HASH_HMACKeyType_LongKey HASH_HMAC_KEYTYPE_LONGKEY
+
+#if defined(STM32L4) || defined(STM32F4) || defined(STM32F7) || defined(STM32H7)
+
+#define HAL_HASH_MD5_Accumulate HAL_HASH_MD5_Accmlt
+#define HAL_HASH_MD5_Accumulate_End HAL_HASH_MD5_Accmlt_End
+#define HAL_HASH_MD5_Accumulate_IT HAL_HASH_MD5_Accmlt_IT
+#define HAL_HASH_MD5_Accumulate_End_IT HAL_HASH_MD5_Accmlt_End_IT
+
+#define HAL_HASH_SHA1_Accumulate HAL_HASH_SHA1_Accmlt
+#define HAL_HASH_SHA1_Accumulate_End HAL_HASH_SHA1_Accmlt_End
+#define HAL_HASH_SHA1_Accumulate_IT HAL_HASH_SHA1_Accmlt_IT
+#define HAL_HASH_SHA1_Accumulate_End_IT HAL_HASH_SHA1_Accmlt_End_IT
+
+#define HAL_HASHEx_SHA224_Accumulate HAL_HASHEx_SHA224_Accmlt
+#define HAL_HASHEx_SHA224_Accumulate_End HAL_HASHEx_SHA224_Accmlt_End
+#define HAL_HASHEx_SHA224_Accumulate_IT HAL_HASHEx_SHA224_Accmlt_IT
+#define HAL_HASHEx_SHA224_Accumulate_End_IT HAL_HASHEx_SHA224_Accmlt_End_IT
+
+#define HAL_HASHEx_SHA256_Accumulate HAL_HASHEx_SHA256_Accmlt
+#define HAL_HASHEx_SHA256_Accumulate_End HAL_HASHEx_SHA256_Accmlt_End
+#define HAL_HASHEx_SHA256_Accumulate_IT HAL_HASHEx_SHA256_Accmlt_IT
+#define HAL_HASHEx_SHA256_Accumulate_End_IT HAL_HASHEx_SHA256_Accmlt_End_IT
+
+#endif /* STM32L4 || STM32F4 || STM32F7 || STM32H7 */
/**
* @}
*/
@@ -1221,6 +1495,13 @@
#endif
#define HAL_ADC_EnableBuffer_Cmd(cmd) (((cmd)==ENABLE) ? HAL_ADCEx_EnableVREFINT() : HAL_ADCEx_DisableVREFINT())
#define HAL_ADC_EnableBufferSensor_Cmd(cmd) (((cmd)==ENABLE) ? HAL_ADCEx_EnableVREFINTTempSensor() : HAL_ADCEx_DisableVREFINTTempSensor())
+#if defined(STM32H7A3xx) || defined(STM32H7B3xx) || defined(STM32H7B0xx) || defined(STM32H7A3xxQ) || defined(STM32H7B3xxQ) || defined(STM32H7B0xxQ)
+#define HAL_EnableSRDomainDBGStopMode HAL_EnableDomain3DBGStopMode
+#define HAL_DisableSRDomainDBGStopMode HAL_DisableDomain3DBGStopMode
+#define HAL_EnableSRDomainDBGStandbyMode HAL_EnableDomain3DBGStandbyMode
+#define HAL_DisableSRDomainDBGStandbyMode HAL_DisableDomain3DBGStandbyMode
+#endif /* STM32H7A3xx || STM32H7B3xx || STM32H7B0xx || STM32H7A3xxQ || STM32H7B3xxQ || STM32H7B0xxQ */
+
/**
* @}
*/
@@ -1250,16 +1531,18 @@
#define HAL_I2CFastModePlusConfig(SYSCFG_I2CFastModePlus, cmd) (((cmd)==ENABLE)? HAL_I2CEx_EnableFastModePlus(SYSCFG_I2CFastModePlus): HAL_I2CEx_DisableFastModePlus(SYSCFG_I2CFastModePlus))
-#if defined(STM32H7) || defined(STM32WB) || defined(STM32G0) || defined(STM32F4) || defined(STM32F7)
+#if defined(STM32H7) || defined(STM32WB) || defined(STM32G0) || defined(STM32F0) || defined(STM32F1) || defined(STM32F2) || defined(STM32F3) || defined(STM32F4) || defined(STM32F7) || defined(STM32L0) || defined(STM32L4) || defined(STM32L5) || defined(STM32G4)
#define HAL_I2C_Master_Sequential_Transmit_IT HAL_I2C_Master_Seq_Transmit_IT
#define HAL_I2C_Master_Sequential_Receive_IT HAL_I2C_Master_Seq_Receive_IT
#define HAL_I2C_Slave_Sequential_Transmit_IT HAL_I2C_Slave_Seq_Transmit_IT
#define HAL_I2C_Slave_Sequential_Receive_IT HAL_I2C_Slave_Seq_Receive_IT
+#endif /* STM32H7 || STM32WB || STM32G0 || STM32F0 || STM32F1 || STM32F2 || STM32F3 || STM32F4 || STM32F7 || STM32L0 || STM32L4 || STM32L5 || STM32G4 */
+#if defined(STM32H7) || defined(STM32WB) || defined(STM32G0) || defined(STM32F4) || defined(STM32F7) || defined(STM32L0) || defined(STM32L4) || defined(STM32L5) || defined(STM32G4)
#define HAL_I2C_Master_Sequential_Transmit_DMA HAL_I2C_Master_Seq_Transmit_DMA
#define HAL_I2C_Master_Sequential_Receive_DMA HAL_I2C_Master_Seq_Receive_DMA
#define HAL_I2C_Slave_Sequential_Transmit_DMA HAL_I2C_Slave_Seq_Transmit_DMA
#define HAL_I2C_Slave_Sequential_Receive_DMA HAL_I2C_Slave_Seq_Receive_DMA
-#endif /* STM32H7 || STM32WB || STM32G0 || STM32F4 || STM32F7 */
+#endif /* STM32H7 || STM32WB || STM32G0 || STM32F4 || STM32F7 || STM32L0 || STM32L4 || STM32L5 || STM32G4 */
#if defined(STM32F4)
#define HAL_FMPI2C_Master_Sequential_Transmit_IT HAL_FMPI2C_Master_Seq_Transmit_IT
@@ -1278,6 +1561,13 @@
/** @defgroup HAL_PWR_Aliased HAL PWR Aliased maintained for legacy purpose
* @{
*/
+
+#if defined(STM32G0)
+#define HAL_PWR_ConfigPVD HAL_PWREx_ConfigPVD
+#define HAL_PWR_EnablePVD HAL_PWREx_EnablePVD
+#define HAL_PWR_DisablePVD HAL_PWREx_DisablePVD
+#define HAL_PWR_PVD_IRQHandler HAL_PWREx_PVD_IRQHandler
+#endif
#define HAL_PWR_PVDConfig HAL_PWR_ConfigPVD
#define HAL_PWR_DisableBkUpReg HAL_PWREx_DisableBkUpReg
#define HAL_PWR_DisableFlashPowerDown HAL_PWREx_DisableFlashPowerDown
@@ -1350,14 +1640,14 @@
#define HAL_TIM_DMAError TIM_DMAError
#define HAL_TIM_DMACaptureCplt TIM_DMACaptureCplt
#define HAL_TIMEx_DMACommutationCplt TIMEx_DMACommutationCplt
-#if defined(STM32H7) || defined(STM32G0) || defined(STM32F7) || defined(STM32F4) || defined(STM32L0)
+#if defined(STM32H7) || defined(STM32G0) || defined(STM32F0) || defined(STM32F1) || defined(STM32F2) || defined(STM32F3) || defined(STM32F4) || defined(STM32F7) || defined(STM32L0) || defined(STM32L4)
#define HAL_TIM_SlaveConfigSynchronization HAL_TIM_SlaveConfigSynchro
#define HAL_TIM_SlaveConfigSynchronization_IT HAL_TIM_SlaveConfigSynchro_IT
#define HAL_TIMEx_CommutationCallback HAL_TIMEx_CommutCallback
#define HAL_TIMEx_ConfigCommutationEvent HAL_TIMEx_ConfigCommutEvent
#define HAL_TIMEx_ConfigCommutationEvent_IT HAL_TIMEx_ConfigCommutEvent_IT
#define HAL_TIMEx_ConfigCommutationEvent_DMA HAL_TIMEx_ConfigCommutEvent_DMA
-#endif /* STM32H7 || STM32G0 || STM32F7 || STM32F4 || STM32L0 */
+#endif /* STM32H7 || STM32G0 || STM32F0 || STM32F1 || STM32F2 || STM32F3 || STM32F4 || STM32F7 || STM32L0 */
/**
* @}
*/
@@ -2476,12 +2766,28 @@
#define __USB_OTG_FS_CLK_DISABLE __HAL_RCC_USB_OTG_FS_CLK_DISABLE
#define __USB_OTG_FS_CLK_ENABLE __HAL_RCC_USB_OTG_FS_CLK_ENABLE
#define __USB_RELEASE_RESET __HAL_RCC_USB_RELEASE_RESET
+
+#if defined(STM32H7)
+#define __HAL_RCC_WWDG_CLK_DISABLE __HAL_RCC_WWDG1_CLK_DISABLE
+#define __HAL_RCC_WWDG_CLK_ENABLE __HAL_RCC_WWDG1_CLK_ENABLE
+#define __HAL_RCC_WWDG_CLK_SLEEP_DISABLE __HAL_RCC_WWDG1_CLK_SLEEP_DISABLE
+#define __HAL_RCC_WWDG_CLK_SLEEP_ENABLE __HAL_RCC_WWDG1_CLK_SLEEP_ENABLE
+
+#define __HAL_RCC_WWDG_FORCE_RESET ((void)0U) /* Not available on the STM32H7*/
+#define __HAL_RCC_WWDG_RELEASE_RESET ((void)0U) /* Not available on the STM32H7*/
+
+
+#define __HAL_RCC_WWDG_IS_CLK_ENABLED __HAL_RCC_WWDG1_IS_CLK_ENABLED
+#define __HAL_RCC_WWDG_IS_CLK_DISABLED __HAL_RCC_WWDG1_IS_CLK_DISABLED
+#endif
+
#define __WWDG_CLK_DISABLE __HAL_RCC_WWDG_CLK_DISABLE
#define __WWDG_CLK_ENABLE __HAL_RCC_WWDG_CLK_ENABLE
#define __WWDG_CLK_SLEEP_DISABLE __HAL_RCC_WWDG_CLK_SLEEP_DISABLE
#define __WWDG_CLK_SLEEP_ENABLE __HAL_RCC_WWDG_CLK_SLEEP_ENABLE
#define __WWDG_FORCE_RESET __HAL_RCC_WWDG_FORCE_RESET
#define __WWDG_RELEASE_RESET __HAL_RCC_WWDG_RELEASE_RESET
+
#define __TIM21_CLK_ENABLE __HAL_RCC_TIM21_CLK_ENABLE
#define __TIM21_CLK_DISABLE __HAL_RCC_TIM21_CLK_DISABLE
#define __TIM21_FORCE_RESET __HAL_RCC_TIM21_FORCE_RESET
@@ -2814,6 +3120,15 @@
#define __WWDG_IS_CLK_ENABLED __HAL_RCC_WWDG_IS_CLK_ENABLED
#define __WWDG_IS_CLK_DISABLED __HAL_RCC_WWDG_IS_CLK_DISABLED
+#if defined(STM32L1)
+#define __HAL_RCC_CRYP_CLK_DISABLE __HAL_RCC_AES_CLK_DISABLE
+#define __HAL_RCC_CRYP_CLK_ENABLE __HAL_RCC_AES_CLK_ENABLE
+#define __HAL_RCC_CRYP_CLK_SLEEP_DISABLE __HAL_RCC_AES_CLK_SLEEP_DISABLE
+#define __HAL_RCC_CRYP_CLK_SLEEP_ENABLE __HAL_RCC_AES_CLK_SLEEP_ENABLE
+#define __HAL_RCC_CRYP_FORCE_RESET __HAL_RCC_AES_FORCE_RESET
+#define __HAL_RCC_CRYP_RELEASE_RESET __HAL_RCC_AES_RELEASE_RESET
+#endif /* STM32L1 */
+
#if defined(STM32F4)
#define __HAL_RCC_SDMMC1_FORCE_RESET __HAL_RCC_SDIO_FORCE_RESET
#define __HAL_RCC_SDMMC1_RELEASE_RESET __HAL_RCC_SDIO_RELEASE_RESET
@@ -2930,7 +3245,7 @@
#if defined(STM32L4)
#define RCC_RTCCLKSOURCE_NO_CLK RCC_RTCCLKSOURCE_NONE
-#elif defined(STM32WB) || defined(STM32G0)
+#elif defined(STM32WB) || defined(STM32G0) || defined(STM32G4) || defined(STM32L5)
#else
#define RCC_RTCCLKSOURCE_NONE RCC_RTCCLKSOURCE_NO_CLK
#endif
@@ -3058,7 +3373,7 @@
/** @defgroup HAL_RTC_Aliased_Macros HAL RTC Aliased Macros maintained for legacy purpose
* @{
*/
-#if defined (STM32G0) || defined (STM32L412xx) || defined (STM32L422xx) || defined (STM32L4P5xx) || defined (STM32L4Q5xx)
+#if defined (STM32G0) || defined (STM32L5) || defined (STM32L412xx) || defined (STM32L422xx) || defined (STM32L4P5xx) || defined (STM32L4Q5xx) || defined (STM32G4)
#else
#define __HAL_RTC_CLEAR_FLAG __HAL_RTC_EXTI_CLEAR_FLAG
#endif
@@ -3174,14 +3489,14 @@
#define SDIO_IRQHandler SDMMC1_IRQHandler
#endif
-#if defined(STM32F7) || defined(STM32F4) || defined(STM32F2)
+#if defined(STM32F7) || defined(STM32F4) || defined(STM32F2) || defined(STM32L4) || defined(STM32H7)
#define HAL_SD_CardCIDTypedef HAL_SD_CardCIDTypeDef
#define HAL_SD_CardCSDTypedef HAL_SD_CardCSDTypeDef
#define HAL_SD_CardStatusTypedef HAL_SD_CardStatusTypeDef
#define HAL_SD_CardStateTypedef HAL_SD_CardStateTypeDef
#endif
-#if defined(STM32H7)
+#if defined(STM32H7) || defined(STM32L5)
#define HAL_MMCEx_Read_DMADoubleBuffer0CpltCallback HAL_MMCEx_Read_DMADoubleBuf0CpltCallback
#define HAL_MMCEx_Read_DMADoubleBuffer1CpltCallback HAL_MMCEx_Read_DMADoubleBuf1CpltCallback
#define HAL_MMCEx_Write_DMADoubleBuffer0CpltCallback HAL_MMCEx_Write_DMADoubleBuf0CpltCallback
@@ -3421,18 +3736,28 @@
/** @defgroup HAL_HRTIM_Aliased_Functions HAL HRTIM Aliased Functions maintained for legacy purpose
* @{
*/
-#if defined (STM32H7) || defined (STM32F3)
-#define HAL_HRTIM_WaveformCounterStart_IT HAL_HRTIM_WaveformCountStart_IT
-#define HAL_HRTIM_WaveformCounterStart_DMA HAL_HRTIM_WaveformCountStart_DMA
-#define HAL_HRTIM_WaveformCounterStart HAL_HRTIM_WaveformCountStart
-#define HAL_HRTIM_WaveformCounterStop_IT HAL_HRTIM_WaveformCountStop_IT
-#define HAL_HRTIM_WaveformCounterStop_DMA HAL_HRTIM_WaveformCountStop_DMA
-#define HAL_HRTIM_WaveformCounterStop HAL_HRTIM_WaveformCountStop
+#if defined (STM32H7) || defined (STM32G4) || defined (STM32F3)
+#define HAL_HRTIM_WaveformCounterStart_IT HAL_HRTIM_WaveformCountStart_IT
+#define HAL_HRTIM_WaveformCounterStart_DMA HAL_HRTIM_WaveformCountStart_DMA
+#define HAL_HRTIM_WaveformCounterStart HAL_HRTIM_WaveformCountStart
+#define HAL_HRTIM_WaveformCounterStop_IT HAL_HRTIM_WaveformCountStop_IT
+#define HAL_HRTIM_WaveformCounterStop_DMA HAL_HRTIM_WaveformCountStop_DMA
+#define HAL_HRTIM_WaveformCounterStop HAL_HRTIM_WaveformCountStop
#endif
/**
* @}
*/
+/** @defgroup HAL_QSPI_Aliased_Macros HAL QSPI Aliased Macros maintained for legacy purpose
+ * @{
+ */
+#if defined (STM32L4) || defined (STM32F4) || defined (STM32F7)
+#define HAL_QPSI_TIMEOUT_DEFAULT_VALUE HAL_QSPI_TIMEOUT_DEFAULT_VALUE
+#endif /* STM32L4 || STM32F4 || STM32F7 */
+/**
+ * @}
+ */
+
/** @defgroup HAL_PPP_Aliased_Macros HAL PPP Aliased Macros maintained for legacy purpose
* @{
*/
diff --git a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_IAR/Prog/lib/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_exti.h b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_IAR/Prog/lib/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_exti.h
index bf82a38e..c9f137c1 100644
--- a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_IAR/Prog/lib/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_exti.h
+++ b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_IAR/Prog/lib/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_exti.h
@@ -18,8 +18,8 @@
*/
/* Define to prevent recursive inclusion -------------------------------------*/
-#ifndef __STM32F7xx_HAL_EXTI_H
-#define __STM32F7xx_HAL_EXTI_H
+#ifndef STM32F7xx_HAL_EXTI_H
+#define STM32F7xx_HAL_EXTI_H
#ifdef __cplusplus
extern "C" {
@@ -38,14 +38,13 @@ extern "C" {
*/
/* Exported types ------------------------------------------------------------*/
+
/** @defgroup EXTI_Exported_Types EXTI Exported Types
* @{
*/
typedef enum
{
- HAL_EXTI_COMMON_CB_ID = 0x00U,
- HAL_EXTI_RISING_CB_ID = 0x01U,
- HAL_EXTI_FALLING_CB_ID = 0x02U,
+ HAL_EXTI_COMMON_CB_ID = 0x00U
} EXTI_CallbackIDTypeDef;
/**
@@ -68,6 +67,9 @@ typedef struct
This parameter can be a combination of @ref EXTI_Mode */
uint32_t Trigger; /*!< The Exti Trigger to be configured. This parameter
can be a value of @ref EXTI_Trigger */
+ uint32_t GPIOSel; /*!< The Exti GPIO multiplexer selection to be configured.
+ This parameter is only possible for line 0 to 15. It
+ can be a value of @ref EXTI_GPIOSel */
} EXTI_ConfigTypeDef;
/**
@@ -82,48 +84,36 @@ typedef struct
/** @defgroup EXTI_Line EXTI Line
* @{
*/
-#define EXTI_LINE_0 EXTI_IMR_IM0 /*!< External interrupt line 0 */
-#define EXTI_LINE_1 EXTI_IMR_IM1 /*!< External interrupt line 1 */
-#define EXTI_LINE_2 EXTI_IMR_IM2 /*!< External interrupt line 2 */
-#define EXTI_LINE_3 EXTI_IMR_IM3 /*!< External interrupt line 3 */
-#define EXTI_LINE_4 EXTI_IMR_IM4 /*!< External interrupt line 4 */
-#define EXTI_LINE_5 EXTI_IMR_IM5 /*!< External interrupt line 5 */
-#define EXTI_LINE_6 EXTI_IMR_IM6 /*!< External interrupt line 6 */
-#define EXTI_LINE_7 EXTI_IMR_IM7 /*!< External interrupt line 7 */
-#define EXTI_LINE_8 EXTI_IMR_IM8 /*!< External interrupt line 8 */
-#define EXTI_LINE_9 EXTI_IMR_IM9 /*!< External interrupt line 9 */
-#define EXTI_LINE_10 EXTI_IMR_IM10 /*!< External interrupt line 10 */
-#define EXTI_LINE_11 EXTI_IMR_IM11 /*!< External interrupt line 11 */
-#define EXTI_LINE_12 EXTI_IMR_IM12 /*!< External interrupt line 12 */
-#define EXTI_LINE_13 EXTI_IMR_IM13 /*!< External interrupt line 13 */
-#define EXTI_LINE_14 EXTI_IMR_IM14 /*!< External interrupt line 14 */
-#define EXTI_LINE_15 EXTI_IMR_IM15 /*!< External interrupt line 15 */
-#if defined(EXTI_IMR_IM16)
-#define EXTI_LINE_16 EXTI_IMR_IM16 /*!< External interrupt line 16 Connected to the PVD Output */
-#endif /* EXTI_IMR_IM16 */
-#if defined(EXTI_IMR_IM17)
-#define EXTI_LINE_17 EXTI_IMR_IM17 /*!< External interrupt line 17 Connected to the RTC Alarm event */
-#endif /* EXTI_IMR_IM17 */
-#if defined(EXTI_IMR_IM18)
-#define EXTI_LINE_18 EXTI_IMR_IM18 /*!< External interrupt line 18 Connected to the USB OTG FS Wakeup from suspend event */
-#endif /* EXTI_IMR_IM18 */
-#if defined(EXTI_IMR_IM19)
-#define EXTI_LINE_19 EXTI_IMR_IM19 /*!< External interrupt line 19 Connected to the Ethernet Wakeup event */
-#endif /* EXTI_IMR_IM19 */
-#if defined(EXTI_IMR_IM20)
-#define EXTI_LINE_20 EXTI_IMR_IM20 /*!< External interrupt line 20 Connected to the USB OTG HS (configured in FS) Wakeup event */
-#endif /* EXTI_IMR_IM20 */
-#if defined(EXTI_IMR_IM21)
-#define EXTI_LINE_21 EXTI_IMR_IM21 /*!< External interrupt line 21 Connected to the RTC Tamper and Time Stamp events */
-#endif /* EXTI_IMR_IM21 */
-#if defined(EXTI_IMR_IM22)
-#define EXTI_LINE_22 EXTI_IMR_IM22 /*!< External interrupt line 22 Connected to the RTC Wakeup event */
-#endif /* EXTI_IMR_IM22 */
-#if defined(EXTI_IMR_IM23)
-#define EXTI_LINE_23 EXTI_IMR_IM23 /*!< External interrupt line 23 Connected to the LPTIM Wakeup event */
-#endif /* EXTI_IMR_IM23 */
+#define EXTI_LINE_0 (EXTI_GPIO | 0x00u) /*!< External interrupt line 0 */
+#define EXTI_LINE_1 (EXTI_GPIO | 0x01u) /*!< External interrupt line 1 */
+#define EXTI_LINE_2 (EXTI_GPIO | 0x02u) /*!< External interrupt line 2 */
+#define EXTI_LINE_3 (EXTI_GPIO | 0x03u) /*!< External interrupt line 3 */
+#define EXTI_LINE_4 (EXTI_GPIO | 0x04u) /*!< External interrupt line 4 */
+#define EXTI_LINE_5 (EXTI_GPIO | 0x05u) /*!< External interrupt line 5 */
+#define EXTI_LINE_6 (EXTI_GPIO | 0x06u) /*!< External interrupt line 6 */
+#define EXTI_LINE_7 (EXTI_GPIO | 0x07u) /*!< External interrupt line 7 */
+#define EXTI_LINE_8 (EXTI_GPIO | 0x08u) /*!< External interrupt line 8 */
+#define EXTI_LINE_9 (EXTI_GPIO | 0x09u) /*!< External interrupt line 9 */
+#define EXTI_LINE_10 (EXTI_GPIO | 0x0Au) /*!< External interrupt line 10 */
+#define EXTI_LINE_11 (EXTI_GPIO | 0x0Bu) /*!< External interrupt line 11 */
+#define EXTI_LINE_12 (EXTI_GPIO | 0x0Cu) /*!< External interrupt line 12 */
+#define EXTI_LINE_13 (EXTI_GPIO | 0x0Du) /*!< External interrupt line 13 */
+#define EXTI_LINE_14 (EXTI_GPIO | 0x0Eu) /*!< External interrupt line 14 */
+#define EXTI_LINE_15 (EXTI_GPIO | 0x0Fu) /*!< External interrupt line 15 */
+#define EXTI_LINE_16 (EXTI_CONFIG | 0x10u) /*!< External interrupt line 16 Connected to the PVD Output */
+#define EXTI_LINE_17 (EXTI_CONFIG | 0x11u) /*!< External interrupt line 17 Connected to the RTC Alarm event */
+#define EXTI_LINE_18 (EXTI_CONFIG | 0x12u) /*!< External interrupt line 18 Connected to the USB OTG FS Wakeup from suspend event */
+#if defined(ETH)
+#define EXTI_LINE_19 (EXTI_CONFIG | 0x13u) /*!< External interrupt line 19 Connected to the Ethernet Wakeup event */
+#else
+#define EXTI_LINE_19 (EXTI_RESERVED | 0x13u) /*!< No interrupt supported in this line */
+#endif /* ETH */
+#define EXTI_LINE_20 (EXTI_CONFIG | 0x14u) /*!< External interrupt line 20 Connected to the USB OTG HS (configured in FS) Wakeup event */
+#define EXTI_LINE_21 (EXTI_CONFIG | 0x15u) /*!< External interrupt line 21 Connected to the RTC Tamper and Time Stamp events */
+#define EXTI_LINE_22 (EXTI_CONFIG | 0x16u) /*!< External interrupt line 22 Connected to the RTC Wakeup event */
+#define EXTI_LINE_23 (EXTI_CONFIG | 0x17u) /*!< External interrupt line 23 Connected to the LPTIM Wakeup event */
#if defined(EXTI_IMR_IM24)
-#define EXTI_LINE_24 EXTI_IMR_IM24 /*!< External interrupt line 24 Connected to the MDIO Slave global Interrupt Wakeup event */
+#define EXTI_LINE_24 (EXTI_CONFIG | 0x18u) /*!< External interrupt line 24 Connected to the MDIO Slave global Interrupt Wakeup event */
#endif /* EXTI_IMR_IM24 */
/**
* @}
@@ -142,6 +132,7 @@ typedef struct
/** @defgroup EXTI_Trigger EXTI Trigger
* @{
*/
+
#define EXTI_TRIGGER_NONE 0x00000000u
#define EXTI_TRIGGER_RISING 0x00000001u
#define EXTI_TRIGGER_FALLING 0x00000002u
@@ -150,6 +141,24 @@ typedef struct
* @}
*/
+/** @defgroup EXTI_GPIOSel EXTI GPIOSel
+ * @brief
+ * @{
+ */
+#define EXTI_GPIOA 0x00000000u
+#define EXTI_GPIOB 0x00000001u
+#define EXTI_GPIOC 0x00000002u
+#define EXTI_GPIOD 0x00000003u
+#define EXTI_GPIOE 0x00000004u
+#define EXTI_GPIOF 0x00000005u
+#define EXTI_GPIOG 0x00000006u
+#define EXTI_GPIOH 0x00000007u
+#define EXTI_GPIOI 0x00000008u
+#define EXTI_GPIOJ 0x00000009u
+#if defined (GPIOK)
+#define EXTI_GPIOK 0x0000000Au
+#endif /* GPIOK */
+
/**
* @}
*/
@@ -167,6 +176,20 @@ typedef struct
/** @defgroup EXTI_Private_Constants EXTI Private Constants
* @{
*/
+/**
+ * @brief EXTI Line property definition
+ */
+#define EXTI_PROPERTY_SHIFT 24u
+#define EXTI_CONFIG (0x02uL << EXTI_PROPERTY_SHIFT)
+#define EXTI_GPIO ((0x04uL << EXTI_PROPERTY_SHIFT) | EXTI_CONFIG)
+#define EXTI_RESERVED (0x08uL << EXTI_PROPERTY_SHIFT)
+#define EXTI_PROPERTY_MASK (EXTI_CONFIG | EXTI_GPIO)
+
+/**
+ * @brief EXTI bit usage
+ */
+#define EXTI_PIN_MASK 0x0000001Fu
+
/**
* @brief EXTI Mask for interrupt & event mode
*/
@@ -175,12 +198,17 @@ typedef struct
/**
* @brief EXTI Mask for trigger possibilities
*/
-#define EXTI_TRIGGER_MASK (EXTI_TRIGGER_RISING | EXTI_TRIGGER_FALLING | EXTI_TRIGGER_RISING_FALLING)
+#define EXTI_TRIGGER_MASK (EXTI_TRIGGER_RISING | EXTI_TRIGGER_FALLING)
/**
* @brief EXTI Line number
*/
+#if defined(EXTI_IMR_IM24)
#define EXTI_LINE_NB 25u
+#else
+#define EXTI_LINE_NB 24u
+#endif /* EXTI_IMR_IM24 */
+
/**
* @}
@@ -190,16 +218,47 @@ typedef struct
/** @defgroup EXTI_Private_Macros EXTI Private Macros
* @{
*/
-#define IS_EXTI_LINE(__LINE__) ((((__LINE__) & ~EXTI_IMR_IM) == 0x00U) && (__LINE__))
+#define IS_EXTI_LINE(__LINE__) ((((__LINE__) & ~(EXTI_PROPERTY_MASK | EXTI_PIN_MASK)) == 0x00u) && \
+ ((((__LINE__) & EXTI_PROPERTY_MASK) == EXTI_CONFIG) || \
+ (((__LINE__) & EXTI_PROPERTY_MASK) == EXTI_GPIO)) && \
+ (((__LINE__) & EXTI_PIN_MASK) < EXTI_LINE_NB))
-#define IS_EXTI_MODE(__LINE__) ((((__LINE__) & ~EXTI_MODE_MASK) == 0x00U))
+#define IS_EXTI_MODE(__LINE__) ((((__LINE__) & EXTI_MODE_MASK) != 0x00u) && \
+ (((__LINE__) & ~EXTI_MODE_MASK) == 0x00u))
-#define IS_EXTI_TRIGGER(__LINE__) (((__LINE__) & ~EXTI_TRIGGER_MASK) == 0x00U)
+#define IS_EXTI_TRIGGER(__LINE__) (((__LINE__) & ~EXTI_TRIGGER_MASK) == 0x00u)
#define IS_EXTI_PENDING_EDGE(__LINE__) (((__LINE__) == EXTI_TRIGGER_FALLING) || \
((__LINE__) == EXTI_TRIGGER_RISING) || \
((__LINE__) == EXTI_TRIGGER_RISING_FALLING))
+#define IS_EXTI_CONFIG_LINE(__LINE__) (((__LINE__) & EXTI_CONFIG) != 0x00u)
+
+#if defined (GPIOK)
+#define IS_EXTI_GPIO_PORT(__PORT__) (((__PORT__) == EXTI_GPIOA) || \
+ ((__PORT__) == EXTI_GPIOB) || \
+ ((__PORT__) == EXTI_GPIOC) || \
+ ((__PORT__) == EXTI_GPIOD) || \
+ ((__PORT__) == EXTI_GPIOE) || \
+ ((__PORT__) == EXTI_GPIOF) || \
+ ((__PORT__) == EXTI_GPIOG) || \
+ ((__PORT__) == EXTI_GPIOH) || \
+ ((__PORT__) == EXTI_GPIOI) || \
+ ((__PORT__) == EXTI_GPIOJ) || \
+ ((__PORT__) == EXTI_GPIOK))
+#else
+#define IS_EXTI_GPIO_PORT(__PORT__) (((__PORT__) == EXTI_GPIOA) || \
+ ((__PORT__) == EXTI_GPIOB) || \
+ ((__PORT__) == EXTI_GPIOC) || \
+ ((__PORT__) == EXTI_GPIOD) || \
+ ((__PORT__) == EXTI_GPIOE) || \
+ ((__PORT__) == EXTI_GPIOF) || \
+ ((__PORT__) == EXTI_GPIOG) || \
+ ((__PORT__) == EXTI_GPIOH) || \
+ ((__PORT__) == EXTI_GPIOI) || \
+ ((__PORT__) == EXTI_GPIOJ))
+#endif /* GPIOK */
+
#define IS_EXTI_GPIO_PIN(__PIN__) ((__PIN__) < 16U)
/**
* @}
@@ -255,6 +314,6 @@ void HAL_EXTI_GenerateSWI(EXTI_HandleTypeDef *hexti);
}
#endif
-#endif /* __STM32F7xx_HAL_EXTI_H */
+#endif /* STM32F7xx_HAL_EXTI_H */
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff --git a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_IAR/Prog/lib/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_gpio.h b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_IAR/Prog/lib/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_gpio.h
index 3d9de6e2..08e0acb2 100644
--- a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_IAR/Prog/lib/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_gpio.h
+++ b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_IAR/Prog/lib/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_gpio.h
@@ -262,7 +262,7 @@ void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin);
* @{
*/
#define IS_GPIO_PIN_ACTION(ACTION) (((ACTION) == GPIO_PIN_RESET) || ((ACTION) == GPIO_PIN_SET))
-#define IS_GPIO_PIN(__PIN__) ((((__PIN__) & GPIO_PIN_MASK) != (uint32_t)0x00))
+#define IS_GPIO_PIN(__PIN__) ((((uint32_t)(__PIN__) & GPIO_PIN_MASK) != 0x00U))
#define IS_GPIO_MODE(MODE) (((MODE) == GPIO_MODE_INPUT) ||\
((MODE) == GPIO_MODE_OUTPUT_PP) ||\
((MODE) == GPIO_MODE_OUTPUT_OD) ||\
diff --git a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_IAR/Prog/lib/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_i2c_ex.h b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_IAR/Prog/lib/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_i2c_ex.h
index d5d75314..83037894 100644
--- a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_IAR/Prog/lib/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_i2c_ex.h
+++ b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_IAR/Prog/lib/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_i2c_ex.h
@@ -167,6 +167,9 @@ void HAL_I2CEx_DisableFastModePlus(uint32_t ConfigFastModePlus);
(((__CONFIG__) & I2C_FASTMODEPLUS_PB9) == I2C_FASTMODEPLUS_PB9) || \
(((__CONFIG__) & I2C_FASTMODEPLUS_I2C1) == I2C_FASTMODEPLUS_I2C1))
#endif /* SYSCFG_PMC_I2C1_FMP && SYSCFG_PMC_I2C2_FMP && SYSCFG_PMC_I2C3_FMP && SYSCFG_PMC_I2C4_FMP */
+
+
+
/**
* @}
*/
diff --git a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_IAR/Prog/lib/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_tim.h b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_IAR/Prog/lib/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_tim.h
index 6a29ae50..ab067a59 100644
--- a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_IAR/Prog/lib/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_tim.h
+++ b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_IAR/Prog/lib/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_tim.h
@@ -167,7 +167,7 @@ typedef struct
This parameter can be a value of @ref TIM_Encoder_Mode */
uint32_t IC1Polarity; /*!< Specifies the active edge of the input signal.
- This parameter can be a value of @ref TIM_Input_Capture_Polarity */
+ This parameter can be a value of @ref TIM_Encoder_Input_Polarity */
uint32_t IC1Selection; /*!< Specifies the input.
This parameter can be a value of @ref TIM_Input_Capture_Selection */
@@ -179,7 +179,7 @@ typedef struct
This parameter can be a number between Min_Data = 0x0 and Max_Data = 0xF */
uint32_t IC2Polarity; /*!< Specifies the active edge of the input signal.
- This parameter can be a value of @ref TIM_Input_Capture_Polarity */
+ This parameter can be a value of @ref TIM_Encoder_Input_Polarity */
uint32_t IC2Selection; /*!< Specifies the input.
This parameter can be a value of @ref TIM_Input_Capture_Selection */
@@ -235,7 +235,12 @@ typedef struct
uint32_t MasterOutputTrigger2; /*!< Trigger output2 (TRGO2) selection
This parameter can be a value of @ref TIM_Master_Mode_Selection_2 */
uint32_t MasterSlaveMode; /*!< Master/slave mode selection
- This parameter can be a value of @ref TIM_Master_Slave_Mode */
+ This parameter can be a value of @ref TIM_Master_Slave_Mode
+ @note When the Master/slave mode is enabled, the effect of
+ an event on the trigger input (TRGI) is delayed to allow a
+ perfect synchronization between the current timer and its
+ slaves (through TRGO). It is not mandatory in case of timer
+ synchronization mode. */
} TIM_MasterConfigTypeDef;
/**
@@ -518,6 +523,15 @@ typedef void (*pTIM_CallbackTypeDef)(TIM_HandleTypeDef *htim); /*!< pointer to
* @}
*/
+/** @defgroup TIM_Update_Interrupt_Flag_Remap TIM Update Interrupt Flag Remap
+ * @{
+ */
+#define TIM_UIFREMAP_DISABLE 0x00000000U /*!< Update interrupt flag remap disabled */
+#define TIM_UIFREMAP_ENABLE TIM_CR1_UIFREMAP /*!< Update interrupt flag remap enabled */
+/**
+ * @}
+ */
+
/** @defgroup TIM_ClockDivision TIM Clock Division
* @{
*/
@@ -611,6 +625,15 @@ typedef void (*pTIM_CallbackTypeDef)(TIM_HandleTypeDef *htim); /*!< pointer to
* @}
*/
+/** @defgroup TIM_Encoder_Input_Polarity TIM Encoder Input Polarity
+ * @{
+ */
+#define TIM_ENCODERINPUTPOLARITY_RISING TIM_INPUTCHANNELPOLARITY_RISING /*!< Encoder input with rising edge polarity */
+#define TIM_ENCODERINPUTPOLARITY_FALLING TIM_INPUTCHANNELPOLARITY_FALLING /*!< Encoder input with falling edge polarity */
+/**
+ * @}
+ */
+
/** @defgroup TIM_Input_Capture_Selection TIM Input Capture Selection
* @{
*/
@@ -1119,15 +1142,15 @@ typedef void (*pTIM_CallbackTypeDef)(TIM_HandleTypeDef *htim); /*!< pointer to
* @retval None
*/
#define __HAL_TIM_DISABLE(__HANDLE__) \
- do { \
- if (((__HANDLE__)->Instance->CCER & TIM_CCER_CCxE_MASK) == 0UL) \
- { \
- if(((__HANDLE__)->Instance->CCER & TIM_CCER_CCxNE_MASK) == 0UL) \
- { \
- (__HANDLE__)->Instance->CR1 &= ~(TIM_CR1_CEN); \
- } \
- } \
- } while(0)
+ do { \
+ if (((__HANDLE__)->Instance->CCER & TIM_CCER_CCxE_MASK) == 0UL) \
+ { \
+ if(((__HANDLE__)->Instance->CCER & TIM_CCER_CCxNE_MASK) == 0UL) \
+ { \
+ (__HANDLE__)->Instance->CR1 &= ~(TIM_CR1_CEN); \
+ } \
+ } \
+ } while(0)
/**
* @brief Disable the TIM main Output.
@@ -1136,15 +1159,15 @@ typedef void (*pTIM_CallbackTypeDef)(TIM_HandleTypeDef *htim); /*!< pointer to
* @note The Main Output Enable of a timer instance is disabled only if all the CCx and CCxN channels have been disabled
*/
#define __HAL_TIM_MOE_DISABLE(__HANDLE__) \
- do { \
- if (((__HANDLE__)->Instance->CCER & TIM_CCER_CCxE_MASK) == 0UL) \
- { \
- if(((__HANDLE__)->Instance->CCER & TIM_CCER_CCxNE_MASK) == 0UL) \
- { \
- (__HANDLE__)->Instance->BDTR &= ~(TIM_BDTR_MOE); \
- } \
- } \
- } while(0)
+ do { \
+ if (((__HANDLE__)->Instance->CCER & TIM_CCER_CCxE_MASK) == 0UL) \
+ { \
+ if(((__HANDLE__)->Instance->CCER & TIM_CCER_CCxNE_MASK) == 0UL) \
+ { \
+ (__HANDLE__)->Instance->BDTR &= ~(TIM_BDTR_MOE); \
+ } \
+ } \
+ } while(0)
/**
* @brief Disable the TIM main Output.
@@ -1279,7 +1302,8 @@ typedef void (*pTIM_CallbackTypeDef)(TIM_HandleTypeDef *htim); /*!< pointer to
* @arg TIM_IT_BREAK: Break interrupt
* @retval The state of TIM_IT (SET or RESET).
*/
-#define __HAL_TIM_GET_IT_SOURCE(__HANDLE__, __INTERRUPT__) ((((__HANDLE__)->Instance->DIER & (__INTERRUPT__)) == (__INTERRUPT__)) ? SET : RESET)
+#define __HAL_TIM_GET_IT_SOURCE(__HANDLE__, __INTERRUPT__) ((((__HANDLE__)->Instance->DIER & (__INTERRUPT__)) \
+ == (__INTERRUPT__)) ? SET : RESET)
/** @brief Clear the TIM interrupt pending bits.
* @param __HANDLE__ TIM handle
@@ -1297,6 +1321,31 @@ typedef void (*pTIM_CallbackTypeDef)(TIM_HandleTypeDef *htim); /*!< pointer to
*/
#define __HAL_TIM_CLEAR_IT(__HANDLE__, __INTERRUPT__) ((__HANDLE__)->Instance->SR = ~(__INTERRUPT__))
+/**
+ * @brief Force a continuous copy of the update interrupt flag (UIF) into the timer counter register (bit 31).
+ * @note This allows both the counter value and a potential roll-over condition signalled by the UIFCPY flag to be read in an atomic way.
+ * @param __HANDLE__ TIM handle.
+ * @retval None
+mode.
+ */
+#define __HAL_TIM_UIFREMAP_ENABLE(__HANDLE__) (((__HANDLE__)->Instance->CR1 |= TIM_CR1_UIFREMAP))
+
+/**
+ * @brief Disable update interrupt flag (UIF) remapping.
+ * @param __HANDLE__ TIM handle.
+ * @retval None
+mode.
+ */
+#define __HAL_TIM_UIFREMAP_DISABLE(__HANDLE__) (((__HANDLE__)->Instance->CR1 &= ~TIM_CR1_UIFREMAP))
+
+/**
+ * @brief Get update interrupt flag (UIF) copy status.
+ * @param __COUNTER__ Counter value.
+ * @retval The state of UIFCPY (TRUE or FALSE).
+mode.
+ */
+#define __HAL_TIM_GET_UIFCPY(__COUNTER__) (((__COUNTER__) & (TIM_CNT_UIFCPY)) == (TIM_CNT_UIFCPY))
+
/**
* @brief Indicates whether or not the TIM Counter is used as downcounter.
* @param __HANDLE__ TIM handle.
@@ -1316,6 +1365,8 @@ mode.
/**
* @brief Set the TIM Counter Register value on runtime.
+ * Note Please check if the bit 31 of CNT register is used as UIF copy or not, this may affect the counter range in case of 32 bits counter TIM instance.
+ * Bit 31 of CNT can be enabled/disabled using __HAL_TIM_UIFREMAP_ENABLE()/__HAL_TIM_UIFREMAP_DISABLE() macros.
* @param __HANDLE__ TIM handle.
* @param __COUNTER__ specifies the Counter register new value.
* @retval None
@@ -1327,8 +1378,7 @@ mode.
* @param __HANDLE__ TIM handle.
* @retval 16-bit or 32-bit value of the timer counter register (TIMx_CNT)
*/
-#define __HAL_TIM_GET_COUNTER(__HANDLE__) \
- ((__HANDLE__)->Instance->CNT)
+#define __HAL_TIM_GET_COUNTER(__HANDLE__) ((__HANDLE__)->Instance->CNT)
/**
* @brief Set the TIM Autoreload Register value on runtime without calling another time any Init function.
@@ -1337,18 +1387,17 @@ mode.
* @retval None
*/
#define __HAL_TIM_SET_AUTORELOAD(__HANDLE__, __AUTORELOAD__) \
- do{ \
- (__HANDLE__)->Instance->ARR = (__AUTORELOAD__); \
- (__HANDLE__)->Init.Period = (__AUTORELOAD__); \
- } while(0)
+ do{ \
+ (__HANDLE__)->Instance->ARR = (__AUTORELOAD__); \
+ (__HANDLE__)->Init.Period = (__AUTORELOAD__); \
+ } while(0)
/**
* @brief Get the TIM Autoreload Register value on runtime.
* @param __HANDLE__ TIM handle.
* @retval 16-bit or 32-bit value of the timer auto-reload register(TIMx_ARR)
*/
-#define __HAL_TIM_GET_AUTORELOAD(__HANDLE__) \
- ((__HANDLE__)->Instance->ARR)
+#define __HAL_TIM_GET_AUTORELOAD(__HANDLE__) ((__HANDLE__)->Instance->ARR)
/**
* @brief Set the TIM Clock Division value on runtime without calling another time any Init function.
@@ -1361,11 +1410,11 @@ mode.
* @retval None
*/
#define __HAL_TIM_SET_CLOCKDIVISION(__HANDLE__, __CKD__) \
- do{ \
- (__HANDLE__)->Instance->CR1 &= (~TIM_CR1_CKD); \
- (__HANDLE__)->Instance->CR1 |= (__CKD__); \
- (__HANDLE__)->Init.ClockDivision = (__CKD__); \
- } while(0)
+ do{ \
+ (__HANDLE__)->Instance->CR1 &= (~TIM_CR1_CKD); \
+ (__HANDLE__)->Instance->CR1 |= (__CKD__); \
+ (__HANDLE__)->Init.ClockDivision = (__CKD__); \
+ } while(0)
/**
* @brief Get the TIM Clock Division value on runtime.
@@ -1375,8 +1424,7 @@ mode.
* @arg TIM_CLOCKDIVISION_DIV2: tDTS=2*tCK_INT
* @arg TIM_CLOCKDIVISION_DIV4: tDTS=4*tCK_INT
*/
-#define __HAL_TIM_GET_CLOCKDIVISION(__HANDLE__) \
- ((__HANDLE__)->Instance->CR1 & TIM_CR1_CKD)
+#define __HAL_TIM_GET_CLOCKDIVISION(__HANDLE__) ((__HANDLE__)->Instance->CR1 & TIM_CR1_CKD)
/**
* @brief Set the TIM Input Capture prescaler on runtime without calling another time HAL_TIM_IC_ConfigChannel() function.
@@ -1396,10 +1444,10 @@ mode.
* @retval None
*/
#define __HAL_TIM_SET_ICPRESCALER(__HANDLE__, __CHANNEL__, __ICPSC__) \
- do{ \
- TIM_RESET_ICPRESCALERVALUE((__HANDLE__), (__CHANNEL__)); \
- TIM_SET_ICPRESCALERVALUE((__HANDLE__), (__CHANNEL__), (__ICPSC__)); \
- } while(0)
+ do{ \
+ TIM_RESET_ICPRESCALERVALUE((__HANDLE__), (__CHANNEL__)); \
+ TIM_SET_ICPRESCALERVALUE((__HANDLE__), (__CHANNEL__), (__ICPSC__)); \
+ } while(0)
/**
* @brief Get the TIM Input Capture prescaler on runtime.
@@ -1437,12 +1485,12 @@ mode.
* @retval None
*/
#define __HAL_TIM_SET_COMPARE(__HANDLE__, __CHANNEL__, __COMPARE__) \
-(((__CHANNEL__) == TIM_CHANNEL_1) ? ((__HANDLE__)->Instance->CCR1 = (__COMPARE__)) :\
- ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCR2 = (__COMPARE__)) :\
- ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCR3 = (__COMPARE__)) :\
- ((__CHANNEL__) == TIM_CHANNEL_4) ? ((__HANDLE__)->Instance->CCR4 = (__COMPARE__)) :\
- ((__CHANNEL__) == TIM_CHANNEL_5) ? ((__HANDLE__)->Instance->CCR5 = (__COMPARE__)) :\
- ((__HANDLE__)->Instance->CCR6 = (__COMPARE__)))
+ (((__CHANNEL__) == TIM_CHANNEL_1) ? ((__HANDLE__)->Instance->CCR1 = (__COMPARE__)) :\
+ ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCR2 = (__COMPARE__)) :\
+ ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCR3 = (__COMPARE__)) :\
+ ((__CHANNEL__) == TIM_CHANNEL_4) ? ((__HANDLE__)->Instance->CCR4 = (__COMPARE__)) :\
+ ((__CHANNEL__) == TIM_CHANNEL_5) ? ((__HANDLE__)->Instance->CCR5 = (__COMPARE__)) :\
+ ((__HANDLE__)->Instance->CCR6 = (__COMPARE__)))
/**
* @brief Get the TIM Capture Compare Register value on runtime.
@@ -1458,12 +1506,12 @@ mode.
* @retval 16-bit or 32-bit value of the capture/compare register (TIMx_CCRy)
*/
#define __HAL_TIM_GET_COMPARE(__HANDLE__, __CHANNEL__) \
-(((__CHANNEL__) == TIM_CHANNEL_1) ? ((__HANDLE__)->Instance->CCR1) :\
- ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCR2) :\
- ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCR3) :\
- ((__CHANNEL__) == TIM_CHANNEL_4) ? ((__HANDLE__)->Instance->CCR4) :\
- ((__CHANNEL__) == TIM_CHANNEL_5) ? ((__HANDLE__)->Instance->CCR5) :\
- ((__HANDLE__)->Instance->CCR6))
+ (((__CHANNEL__) == TIM_CHANNEL_1) ? ((__HANDLE__)->Instance->CCR1) :\
+ ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCR2) :\
+ ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCR3) :\
+ ((__CHANNEL__) == TIM_CHANNEL_4) ? ((__HANDLE__)->Instance->CCR4) :\
+ ((__CHANNEL__) == TIM_CHANNEL_5) ? ((__HANDLE__)->Instance->CCR5) :\
+ ((__HANDLE__)->Instance->CCR6))
/**
* @brief Set the TIM Output compare preload.
@@ -1479,12 +1527,12 @@ mode.
* @retval None
*/
#define __HAL_TIM_ENABLE_OCxPRELOAD(__HANDLE__, __CHANNEL__) \
- (((__CHANNEL__) == TIM_CHANNEL_1) ? ((__HANDLE__)->Instance->CCMR1 |= TIM_CCMR1_OC1PE) :\
- ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCMR1 |= TIM_CCMR1_OC2PE) :\
- ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCMR2 |= TIM_CCMR2_OC3PE) :\
- ((__CHANNEL__) == TIM_CHANNEL_4) ? ((__HANDLE__)->Instance->CCMR2 |= TIM_CCMR2_OC4PE) :\
- ((__CHANNEL__) == TIM_CHANNEL_5) ? ((__HANDLE__)->Instance->CCMR3 |= TIM_CCMR3_OC5PE) :\
- ((__HANDLE__)->Instance->CCMR3 |= TIM_CCMR3_OC6PE))
+ (((__CHANNEL__) == TIM_CHANNEL_1) ? ((__HANDLE__)->Instance->CCMR1 |= TIM_CCMR1_OC1PE) :\
+ ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCMR1 |= TIM_CCMR1_OC2PE) :\
+ ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCMR2 |= TIM_CCMR2_OC3PE) :\
+ ((__CHANNEL__) == TIM_CHANNEL_4) ? ((__HANDLE__)->Instance->CCMR2 |= TIM_CCMR2_OC4PE) :\
+ ((__CHANNEL__) == TIM_CHANNEL_5) ? ((__HANDLE__)->Instance->CCMR3 |= TIM_CCMR3_OC5PE) :\
+ ((__HANDLE__)->Instance->CCMR3 |= TIM_CCMR3_OC6PE))
/**
* @brief Reset the TIM Output compare preload.
@@ -1500,12 +1548,62 @@ mode.
* @retval None
*/
#define __HAL_TIM_DISABLE_OCxPRELOAD(__HANDLE__, __CHANNEL__) \
- (((__CHANNEL__) == TIM_CHANNEL_1) ? ((__HANDLE__)->Instance->CCMR1 &= (uint16_t)~TIM_CCMR1_OC1PE) :\
- ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCMR1 &= (uint16_t)~TIM_CCMR1_OC2PE) :\
- ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCMR2 &= (uint16_t)~TIM_CCMR2_OC3PE) :\
- ((__CHANNEL__) == TIM_CHANNEL_4) ? ((__HANDLE__)->Instance->CCMR2 &= (uint16_t)~TIM_CCMR2_OC4PE) :\
- ((__CHANNEL__) == TIM_CHANNEL_5) ? ((__HANDLE__)->Instance->CCMR3 &= (uint16_t)~TIM_CCMR3_OC5PE) :\
- ((__HANDLE__)->Instance->CCMR3 &= (uint16_t)~TIM_CCMR3_OC6PE))
+ (((__CHANNEL__) == TIM_CHANNEL_1) ? ((__HANDLE__)->Instance->CCMR1 &= ~TIM_CCMR1_OC1PE) :\
+ ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCMR1 &= ~TIM_CCMR1_OC2PE) :\
+ ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCMR2 &= ~TIM_CCMR2_OC3PE) :\
+ ((__CHANNEL__) == TIM_CHANNEL_4) ? ((__HANDLE__)->Instance->CCMR2 &= ~TIM_CCMR2_OC4PE) :\
+ ((__CHANNEL__) == TIM_CHANNEL_5) ? ((__HANDLE__)->Instance->CCMR3 &= ~TIM_CCMR3_OC5PE) :\
+ ((__HANDLE__)->Instance->CCMR3 &= ~TIM_CCMR3_OC6PE))
+
+/**
+ * @brief Enable fast mode for a given channel.
+ * @param __HANDLE__ TIM handle.
+ * @param __CHANNEL__ TIM Channels to be configured.
+ * This parameter can be one of the following values:
+ * @arg TIM_CHANNEL_1: TIM Channel 1 selected
+ * @arg TIM_CHANNEL_2: TIM Channel 2 selected
+ * @arg TIM_CHANNEL_3: TIM Channel 3 selected
+ * @arg TIM_CHANNEL_4: TIM Channel 4 selected
+ * @arg TIM_CHANNEL_5: TIM Channel 5 selected
+ * @arg TIM_CHANNEL_6: TIM Channel 6 selected
+ * @note When fast mode is enabled an active edge on the trigger input acts
+ * like a compare match on CCx output. Delay to sample the trigger
+ * input and to activate CCx output is reduced to 3 clock cycles.
+ * @note Fast mode acts only if the channel is configured in PWM1 or PWM2 mode.
+ * @retval None
+ */
+#define __HAL_TIM_ENABLE_OCxFAST(__HANDLE__, __CHANNEL__) \
+ (((__CHANNEL__) == TIM_CHANNEL_1) ? ((__HANDLE__)->Instance->CCMR1 |= TIM_CCMR1_OC1FE) :\
+ ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCMR1 |= TIM_CCMR1_OC2FE) :\
+ ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCMR2 |= TIM_CCMR2_OC3FE) :\
+ ((__CHANNEL__) == TIM_CHANNEL_4) ? ((__HANDLE__)->Instance->CCMR2 |= TIM_CCMR2_OC4FE) :\
+ ((__CHANNEL__) == TIM_CHANNEL_5) ? ((__HANDLE__)->Instance->CCMR3 |= TIM_CCMR3_OC5FE) :\
+ ((__HANDLE__)->Instance->CCMR3 |= TIM_CCMR3_OC6FE))
+
+/**
+ * @brief Disable fast mode for a given channel.
+ * @param __HANDLE__ TIM handle.
+ * @param __CHANNEL__ TIM Channels to be configured.
+ * This parameter can be one of the following values:
+ * @arg TIM_CHANNEL_1: TIM Channel 1 selected
+ * @arg TIM_CHANNEL_2: TIM Channel 2 selected
+ * @arg TIM_CHANNEL_3: TIM Channel 3 selected
+ * @arg TIM_CHANNEL_4: TIM Channel 4 selected
+ * @arg TIM_CHANNEL_5: TIM Channel 5 selected
+ * @arg TIM_CHANNEL_6: TIM Channel 6 selected
+ * @note When fast mode is disabled CCx output behaves normally depending
+ * on counter and CCRx values even when the trigger is ON. The minimum
+ * delay to activate CCx output when an active edge occurs on the
+ * trigger input is 5 clock cycles.
+ * @retval None
+ */
+#define __HAL_TIM_DISABLE_OCxFAST(__HANDLE__, __CHANNEL__) \
+ (((__CHANNEL__) == TIM_CHANNEL_1) ? ((__HANDLE__)->Instance->CCMR1 &= ~TIM_CCMR1_OC1FE) :\
+ ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCMR1 &= ~TIM_CCMR1_OC2FE) :\
+ ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCMR2 &= ~TIM_CCMR2_OC3FE) :\
+ ((__CHANNEL__) == TIM_CHANNEL_4) ? ((__HANDLE__)->Instance->CCMR2 &= ~TIM_CCMR2_OC4FE) :\
+ ((__CHANNEL__) == TIM_CHANNEL_5) ? ((__HANDLE__)->Instance->CCMR3 &= ~TIM_CCMR3_OC5FE) :\
+ ((__HANDLE__)->Instance->CCMR3 &= ~TIM_CCMR3_OC6FE))
/**
* @brief Set the Update Request Source (URS) bit of the TIMx_CR1 register.
@@ -1515,8 +1613,7 @@ mode.
* enabled)
* @retval None
*/
-#define __HAL_TIM_URS_ENABLE(__HANDLE__) \
- ((__HANDLE__)->Instance->CR1|= TIM_CR1_URS)
+#define __HAL_TIM_URS_ENABLE(__HANDLE__) ((__HANDLE__)->Instance->CR1|= TIM_CR1_URS)
/**
* @brief Reset the Update Request Source (URS) bit of the TIMx_CR1 register.
@@ -1529,8 +1626,7 @@ mode.
* _ Update generation through the slave mode controller
* @retval None
*/
-#define __HAL_TIM_URS_DISABLE(__HANDLE__) \
- ((__HANDLE__)->Instance->CR1&=~TIM_CR1_URS)
+#define __HAL_TIM_URS_DISABLE(__HANDLE__) ((__HANDLE__)->Instance->CR1&=~TIM_CR1_URS)
/**
* @brief Set the TIM Capture x input polarity on runtime.
@@ -1548,10 +1644,10 @@ mode.
* @retval None
*/
#define __HAL_TIM_SET_CAPTUREPOLARITY(__HANDLE__, __CHANNEL__, __POLARITY__) \
- do{ \
- TIM_RESET_CAPTUREPOLARITY((__HANDLE__), (__CHANNEL__)); \
- TIM_SET_CAPTUREPOLARITY((__HANDLE__), (__CHANNEL__), (__POLARITY__)); \
- }while(0)
+ do{ \
+ TIM_RESET_CAPTUREPOLARITY((__HANDLE__), (__CHANNEL__)); \
+ TIM_SET_CAPTUREPOLARITY((__HANDLE__), (__CHANNEL__), (__POLARITY__)); \
+ }while(0)
/**
* @}
@@ -1579,29 +1675,29 @@ mode.
((__MODE__) == TIM_CLEARINPUTSOURCE_ETR))
#if defined(TIM_AF1_BKINE)&&defined(TIM_AF2_BKINE)
-#define IS_TIM_DMA_BASE(__BASE__) (((__BASE__) == TIM_DMABASE_CR1) || \
- ((__BASE__) == TIM_DMABASE_CR2) || \
- ((__BASE__) == TIM_DMABASE_SMCR) || \
- ((__BASE__) == TIM_DMABASE_DIER) || \
- ((__BASE__) == TIM_DMABASE_SR) || \
- ((__BASE__) == TIM_DMABASE_EGR) || \
- ((__BASE__) == TIM_DMABASE_CCMR1) || \
- ((__BASE__) == TIM_DMABASE_CCMR2) || \
- ((__BASE__) == TIM_DMABASE_CCER) || \
- ((__BASE__) == TIM_DMABASE_CNT) || \
- ((__BASE__) == TIM_DMABASE_PSC) || \
- ((__BASE__) == TIM_DMABASE_ARR) || \
- ((__BASE__) == TIM_DMABASE_RCR) || \
- ((__BASE__) == TIM_DMABASE_CCR1) || \
- ((__BASE__) == TIM_DMABASE_CCR2) || \
- ((__BASE__) == TIM_DMABASE_CCR3) || \
- ((__BASE__) == TIM_DMABASE_CCR4) || \
- ((__BASE__) == TIM_DMABASE_BDTR) || \
- ((__BASE__) == TIM_DMABASE_OR) || \
- ((__BASE__) == TIM_DMABASE_CCMR3) || \
- ((__BASE__) == TIM_DMABASE_CCR5) || \
- ((__BASE__) == TIM_DMABASE_CCR6) || \
- ((__BASE__) == TIM_DMABASE_AF1) || \
+#define IS_TIM_DMA_BASE(__BASE__) (((__BASE__) == TIM_DMABASE_CR1) || \
+ ((__BASE__) == TIM_DMABASE_CR2) || \
+ ((__BASE__) == TIM_DMABASE_SMCR) || \
+ ((__BASE__) == TIM_DMABASE_DIER) || \
+ ((__BASE__) == TIM_DMABASE_SR) || \
+ ((__BASE__) == TIM_DMABASE_EGR) || \
+ ((__BASE__) == TIM_DMABASE_CCMR1) || \
+ ((__BASE__) == TIM_DMABASE_CCMR2) || \
+ ((__BASE__) == TIM_DMABASE_CCER) || \
+ ((__BASE__) == TIM_DMABASE_CNT) || \
+ ((__BASE__) == TIM_DMABASE_PSC) || \
+ ((__BASE__) == TIM_DMABASE_ARR) || \
+ ((__BASE__) == TIM_DMABASE_RCR) || \
+ ((__BASE__) == TIM_DMABASE_CCR1) || \
+ ((__BASE__) == TIM_DMABASE_CCR2) || \
+ ((__BASE__) == TIM_DMABASE_CCR3) || \
+ ((__BASE__) == TIM_DMABASE_CCR4) || \
+ ((__BASE__) == TIM_DMABASE_BDTR) || \
+ ((__BASE__) == TIM_DMABASE_OR) || \
+ ((__BASE__) == TIM_DMABASE_CCMR3) || \
+ ((__BASE__) == TIM_DMABASE_CCR5) || \
+ ((__BASE__) == TIM_DMABASE_CCR6) || \
+ ((__BASE__) == TIM_DMABASE_AF1) || \
((__BASE__) == TIM_DMABASE_AF2))
#else
#define IS_TIM_DMA_BASE(__BASE__) (((__BASE__) == TIM_DMABASE_CR1) || \
@@ -1636,6 +1732,9 @@ mode.
((__MODE__) == TIM_COUNTERMODE_CENTERALIGNED2) || \
((__MODE__) == TIM_COUNTERMODE_CENTERALIGNED3))
+#define IS_TIM_UIFREMAP_MODE(__MODE__) (((__MODE__) == TIM_UIFREMAP_DISABLE) || \
+ ((__MODE__) == TIM_UIFREMAP_ENALE))
+
#define IS_TIM_CLOCKDIVISION_DIV(__DIV__) (((__DIV__) == TIM_CLOCKDIVISION_DIV1) || \
((__DIV__) == TIM_CLOCKDIVISION_DIV2) || \
((__DIV__) == TIM_CLOCKDIVISION_DIV4))
@@ -1658,6 +1757,9 @@ mode.
#define IS_TIM_OCNIDLE_STATE(__STATE__) (((__STATE__) == TIM_OCNIDLESTATE_SET) || \
((__STATE__) == TIM_OCNIDLESTATE_RESET))
+#define IS_TIM_ENCODERINPUT_POLARITY(__POLARITY__) (((__POLARITY__) == TIM_ENCODERINPUTPOLARITY_RISING) || \
+ ((__POLARITY__) == TIM_ENCODERINPUTPOLARITY_FALLING))
+
#define IS_TIM_IC_POLARITY(__POLARITY__) (((__POLARITY__) == TIM_ICPOLARITY_RISING) || \
((__POLARITY__) == TIM_ICPOLARITY_FALLING) || \
((__POLARITY__) == TIM_ICPOLARITY_BOTHEDGE))
@@ -1876,28 +1978,28 @@ mode.
((__TRIGGER__) == TIM_SLAVEMODE_COMBINED_RESETTRIGGER))
#define TIM_SET_ICPRESCALERVALUE(__HANDLE__, __CHANNEL__, __ICPSC__) \
-(((__CHANNEL__) == TIM_CHANNEL_1) ? ((__HANDLE__)->Instance->CCMR1 |= (__ICPSC__)) :\
- ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCMR1 |= ((__ICPSC__) << 8U)) :\
- ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCMR2 |= (__ICPSC__)) :\
- ((__HANDLE__)->Instance->CCMR2 |= ((__ICPSC__) << 8U)))
+ (((__CHANNEL__) == TIM_CHANNEL_1) ? ((__HANDLE__)->Instance->CCMR1 |= (__ICPSC__)) :\
+ ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCMR1 |= ((__ICPSC__) << 8U)) :\
+ ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCMR2 |= (__ICPSC__)) :\
+ ((__HANDLE__)->Instance->CCMR2 |= ((__ICPSC__) << 8U)))
#define TIM_RESET_ICPRESCALERVALUE(__HANDLE__, __CHANNEL__) \
-(((__CHANNEL__) == TIM_CHANNEL_1) ? ((__HANDLE__)->Instance->CCMR1 &= (uint16_t)~TIM_CCMR1_IC1PSC) :\
- ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCMR1 &= (uint16_t)~TIM_CCMR1_IC2PSC) :\
- ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCMR2 &= (uint16_t)~TIM_CCMR2_IC3PSC) :\
- ((__HANDLE__)->Instance->CCMR2 &= (uint16_t)~TIM_CCMR2_IC4PSC))
+ (((__CHANNEL__) == TIM_CHANNEL_1) ? ((__HANDLE__)->Instance->CCMR1 &= ~TIM_CCMR1_IC1PSC) :\
+ ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCMR1 &= ~TIM_CCMR1_IC2PSC) :\
+ ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCMR2 &= ~TIM_CCMR2_IC3PSC) :\
+ ((__HANDLE__)->Instance->CCMR2 &= ~TIM_CCMR2_IC4PSC))
#define TIM_SET_CAPTUREPOLARITY(__HANDLE__, __CHANNEL__, __POLARITY__) \
-(((__CHANNEL__) == TIM_CHANNEL_1) ? ((__HANDLE__)->Instance->CCER |= (__POLARITY__)) :\
- ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCER |= ((__POLARITY__) << 4U)) :\
- ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCER |= ((__POLARITY__) << 8U)) :\
- ((__HANDLE__)->Instance->CCER |= (((__POLARITY__) << 12U))))
+ (((__CHANNEL__) == TIM_CHANNEL_1) ? ((__HANDLE__)->Instance->CCER |= (__POLARITY__)) :\
+ ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCER |= ((__POLARITY__) << 4U)) :\
+ ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCER |= ((__POLARITY__) << 8U)) :\
+ ((__HANDLE__)->Instance->CCER |= (((__POLARITY__) << 12U))))
#define TIM_RESET_CAPTUREPOLARITY(__HANDLE__, __CHANNEL__) \
-(((__CHANNEL__) == TIM_CHANNEL_1) ? ((__HANDLE__)->Instance->CCER &= (uint16_t)~(TIM_CCER_CC1P | TIM_CCER_CC1NP)) :\
- ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCER &= (uint16_t)~(TIM_CCER_CC2P | TIM_CCER_CC2NP)) :\
- ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCER &= (uint16_t)~(TIM_CCER_CC3P | TIM_CCER_CC3NP)) :\
- ((__HANDLE__)->Instance->CCER &= (uint16_t)~(TIM_CCER_CC4P | TIM_CCER_CC4NP)))
+ (((__CHANNEL__) == TIM_CHANNEL_1) ? ((__HANDLE__)->Instance->CCER &= ~(TIM_CCER_CC1P | TIM_CCER_CC1NP)) :\
+ ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCER &= ~(TIM_CCER_CC2P | TIM_CCER_CC2NP)) :\
+ ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCER &= ~(TIM_CCER_CC3P | TIM_CCER_CC3NP)) :\
+ ((__HANDLE__)->Instance->CCER &= ~(TIM_CCER_CC4P | TIM_CCER_CC4NP)))
/**
* @}
@@ -2035,7 +2137,8 @@ HAL_StatusTypeDef HAL_TIM_Encoder_Stop(TIM_HandleTypeDef *htim, uint32_t Channel
HAL_StatusTypeDef HAL_TIM_Encoder_Start_IT(TIM_HandleTypeDef *htim, uint32_t Channel);
HAL_StatusTypeDef HAL_TIM_Encoder_Stop_IT(TIM_HandleTypeDef *htim, uint32_t Channel);
/* Non-Blocking mode: DMA */
-HAL_StatusTypeDef HAL_TIM_Encoder_Start_DMA(TIM_HandleTypeDef *htim, uint32_t Channel, uint32_t *pData1, uint32_t *pData2, uint16_t Length);
+HAL_StatusTypeDef HAL_TIM_Encoder_Start_DMA(TIM_HandleTypeDef *htim, uint32_t Channel, uint32_t *pData1,
+ uint32_t *pData2, uint16_t Length);
HAL_StatusTypeDef HAL_TIM_Encoder_Stop_DMA(TIM_HandleTypeDef *htim, uint32_t Channel);
/**
* @}
@@ -2059,17 +2162,19 @@ void HAL_TIM_IRQHandler(TIM_HandleTypeDef *htim);
HAL_StatusTypeDef HAL_TIM_OC_ConfigChannel(TIM_HandleTypeDef *htim, TIM_OC_InitTypeDef *sConfig, uint32_t Channel);
HAL_StatusTypeDef HAL_TIM_PWM_ConfigChannel(TIM_HandleTypeDef *htim, TIM_OC_InitTypeDef *sConfig, uint32_t Channel);
HAL_StatusTypeDef HAL_TIM_IC_ConfigChannel(TIM_HandleTypeDef *htim, TIM_IC_InitTypeDef *sConfig, uint32_t Channel);
-HAL_StatusTypeDef HAL_TIM_OnePulse_ConfigChannel(TIM_HandleTypeDef *htim, TIM_OnePulse_InitTypeDef *sConfig, uint32_t OutputChannel, uint32_t InputChannel);
-HAL_StatusTypeDef HAL_TIM_ConfigOCrefClear(TIM_HandleTypeDef *htim, TIM_ClearInputConfigTypeDef *sClearInputConfig, uint32_t Channel);
+HAL_StatusTypeDef HAL_TIM_OnePulse_ConfigChannel(TIM_HandleTypeDef *htim, TIM_OnePulse_InitTypeDef *sConfig,
+ uint32_t OutputChannel, uint32_t InputChannel);
+HAL_StatusTypeDef HAL_TIM_ConfigOCrefClear(TIM_HandleTypeDef *htim, TIM_ClearInputConfigTypeDef *sClearInputConfig,
+ uint32_t Channel);
HAL_StatusTypeDef HAL_TIM_ConfigClockSource(TIM_HandleTypeDef *htim, TIM_ClockConfigTypeDef *sClockSourceConfig);
HAL_StatusTypeDef HAL_TIM_ConfigTI1Input(TIM_HandleTypeDef *htim, uint32_t TI1_Selection);
HAL_StatusTypeDef HAL_TIM_SlaveConfigSynchro(TIM_HandleTypeDef *htim, TIM_SlaveConfigTypeDef *sSlaveConfig);
HAL_StatusTypeDef HAL_TIM_SlaveConfigSynchro_IT(TIM_HandleTypeDef *htim, TIM_SlaveConfigTypeDef *sSlaveConfig);
-HAL_StatusTypeDef HAL_TIM_DMABurst_WriteStart(TIM_HandleTypeDef *htim, uint32_t BurstBaseAddress, uint32_t BurstRequestSrc, \
- uint32_t *BurstBuffer, uint32_t BurstLength);
+HAL_StatusTypeDef HAL_TIM_DMABurst_WriteStart(TIM_HandleTypeDef *htim, uint32_t BurstBaseAddress,
+ uint32_t BurstRequestSrc, uint32_t *BurstBuffer, uint32_t BurstLength);
HAL_StatusTypeDef HAL_TIM_DMABurst_WriteStop(TIM_HandleTypeDef *htim, uint32_t BurstRequestSrc);
-HAL_StatusTypeDef HAL_TIM_DMABurst_ReadStart(TIM_HandleTypeDef *htim, uint32_t BurstBaseAddress, uint32_t BurstRequestSrc, \
- uint32_t *BurstBuffer, uint32_t BurstLength);
+HAL_StatusTypeDef HAL_TIM_DMABurst_ReadStart(TIM_HandleTypeDef *htim, uint32_t BurstBaseAddress,
+ uint32_t BurstRequestSrc, uint32_t *BurstBuffer, uint32_t BurstLength);
HAL_StatusTypeDef HAL_TIM_DMABurst_ReadStop(TIM_HandleTypeDef *htim, uint32_t BurstRequestSrc);
HAL_StatusTypeDef HAL_TIM_GenerateEvent(TIM_HandleTypeDef *htim, uint32_t EventSource);
uint32_t HAL_TIM_ReadCapturedValue(TIM_HandleTypeDef *htim, uint32_t Channel);
@@ -2095,7 +2200,8 @@ void HAL_TIM_ErrorCallback(TIM_HandleTypeDef *htim);
/* Callbacks Register/UnRegister functions ***********************************/
#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)
-HAL_StatusTypeDef HAL_TIM_RegisterCallback(TIM_HandleTypeDef *htim, HAL_TIM_CallbackIDTypeDef CallbackID, pTIM_CallbackTypeDef pCallback);
+HAL_StatusTypeDef HAL_TIM_RegisterCallback(TIM_HandleTypeDef *htim, HAL_TIM_CallbackIDTypeDef CallbackID,
+ pTIM_CallbackTypeDef pCallback);
HAL_StatusTypeDef HAL_TIM_UnRegisterCallback(TIM_HandleTypeDef *htim, HAL_TIM_CallbackIDTypeDef CallbackID);
#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */
@@ -2125,8 +2231,8 @@ HAL_TIM_StateTypeDef HAL_TIM_Encoder_GetState(TIM_HandleTypeDef *htim);
/* Private functions----------------------------------------------------------*/
/** @defgroup TIM_Private_Functions TIM Private Functions
-* @{
-*/
+ * @{
+ */
void TIM_Base_SetConfig(TIM_TypeDef *TIMx, TIM_Base_InitTypeDef *Structure);
void TIM_TI1_SetConfig(TIM_TypeDef *TIMx, uint32_t TIM_ICPolarity, uint32_t TIM_ICSelection, uint32_t TIM_ICFilter);
void TIM_OC2_SetConfig(TIM_TypeDef *TIMx, TIM_OC_InitTypeDef *OC_Config);
@@ -2145,8 +2251,8 @@ void TIM_ResetCallback(TIM_HandleTypeDef *htim);
#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */
/**
-* @}
-*/
+ * @}
+ */
/* End of private functions --------------------------------------------------*/
/**
diff --git a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_IAR/Prog/lib/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_tim_ex.h b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_IAR/Prog/lib/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_tim_ex.h
index 598f5c6e..b8d3472e 100644
--- a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_IAR/Prog/lib/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_tim_ex.h
+++ b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_IAR/Prog/lib/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_tim_ex.h
@@ -201,9 +201,9 @@ TIMEx_BreakInputConfigTypeDef;
*/
/** @addtogroup TIMEx_Exported_Functions_Group1 Extended Timer Hall Sensor functions
- * @brief Timer Hall Sensor functions
- * @{
- */
+ * @brief Timer Hall Sensor functions
+ * @{
+ */
/* Timer Hall Sensor functions **********************************************/
HAL_StatusTypeDef HAL_TIMEx_HallSensor_Init(TIM_HandleTypeDef *htim, TIM_HallSensor_InitTypeDef *sConfig);
HAL_StatusTypeDef HAL_TIMEx_HallSensor_DeInit(TIM_HandleTypeDef *htim);
@@ -225,9 +225,9 @@ HAL_StatusTypeDef HAL_TIMEx_HallSensor_Stop_DMA(TIM_HandleTypeDef *htim);
*/
/** @addtogroup TIMEx_Exported_Functions_Group2 Extended Timer Complementary Output Compare functions
- * @brief Timer Complementary Output Compare functions
- * @{
- */
+ * @brief Timer Complementary Output Compare functions
+ * @{
+ */
/* Timer Complementary Output Compare functions *****************************/
/* Blocking mode: Polling */
HAL_StatusTypeDef HAL_TIMEx_OCN_Start(TIM_HandleTypeDef *htim, uint32_t Channel);
@@ -245,9 +245,9 @@ HAL_StatusTypeDef HAL_TIMEx_OCN_Stop_DMA(TIM_HandleTypeDef *htim, uint32_t Chann
*/
/** @addtogroup TIMEx_Exported_Functions_Group3 Extended Timer Complementary PWM functions
- * @brief Timer Complementary PWM functions
- * @{
- */
+ * @brief Timer Complementary PWM functions
+ * @{
+ */
/* Timer Complementary PWM functions ****************************************/
/* Blocking mode: Polling */
HAL_StatusTypeDef HAL_TIMEx_PWMN_Start(TIM_HandleTypeDef *htim, uint32_t Channel);
@@ -264,9 +264,9 @@ HAL_StatusTypeDef HAL_TIMEx_PWMN_Stop_DMA(TIM_HandleTypeDef *htim, uint32_t Chan
*/
/** @addtogroup TIMEx_Exported_Functions_Group4 Extended Timer Complementary One Pulse functions
- * @brief Timer Complementary One Pulse functions
- * @{
- */
+ * @brief Timer Complementary One Pulse functions
+ * @{
+ */
/* Timer Complementary One Pulse functions **********************************/
/* Blocking mode: Polling */
HAL_StatusTypeDef HAL_TIMEx_OnePulseN_Start(TIM_HandleTypeDef *htim, uint32_t OutputChannel);
@@ -280,17 +280,23 @@ HAL_StatusTypeDef HAL_TIMEx_OnePulseN_Stop_IT(TIM_HandleTypeDef *htim, uint32_t
*/
/** @addtogroup TIMEx_Exported_Functions_Group5 Extended Peripheral Control functions
- * @brief Peripheral Control functions
- * @{
- */
+ * @brief Peripheral Control functions
+ * @{
+ */
/* Extended Control functions ************************************************/
-HAL_StatusTypeDef HAL_TIMEx_ConfigCommutEvent(TIM_HandleTypeDef *htim, uint32_t InputTrigger, uint32_t CommutationSource);
-HAL_StatusTypeDef HAL_TIMEx_ConfigCommutEvent_IT(TIM_HandleTypeDef *htim, uint32_t InputTrigger, uint32_t CommutationSource);
-HAL_StatusTypeDef HAL_TIMEx_ConfigCommutEvent_DMA(TIM_HandleTypeDef *htim, uint32_t InputTrigger, uint32_t CommutationSource);
-HAL_StatusTypeDef HAL_TIMEx_MasterConfigSynchronization(TIM_HandleTypeDef *htim, TIM_MasterConfigTypeDef *sMasterConfig);
-HAL_StatusTypeDef HAL_TIMEx_ConfigBreakDeadTime(TIM_HandleTypeDef *htim, TIM_BreakDeadTimeConfigTypeDef *sBreakDeadTimeConfig);
+HAL_StatusTypeDef HAL_TIMEx_ConfigCommutEvent(TIM_HandleTypeDef *htim, uint32_t InputTrigger,
+ uint32_t CommutationSource);
+HAL_StatusTypeDef HAL_TIMEx_ConfigCommutEvent_IT(TIM_HandleTypeDef *htim, uint32_t InputTrigger,
+ uint32_t CommutationSource);
+HAL_StatusTypeDef HAL_TIMEx_ConfigCommutEvent_DMA(TIM_HandleTypeDef *htim, uint32_t InputTrigger,
+ uint32_t CommutationSource);
+HAL_StatusTypeDef HAL_TIMEx_MasterConfigSynchronization(TIM_HandleTypeDef *htim,
+ TIM_MasterConfigTypeDef *sMasterConfig);
+HAL_StatusTypeDef HAL_TIMEx_ConfigBreakDeadTime(TIM_HandleTypeDef *htim,
+ TIM_BreakDeadTimeConfigTypeDef *sBreakDeadTimeConfig);
#if defined(TIM_BREAK_INPUT_SUPPORT)
-HAL_StatusTypeDef HAL_TIMEx_ConfigBreakInput(TIM_HandleTypeDef *htim, uint32_t BreakInput, TIMEx_BreakInputConfigTypeDef *sBreakInputConfig);
+HAL_StatusTypeDef HAL_TIMEx_ConfigBreakInput(TIM_HandleTypeDef *htim, uint32_t BreakInput,
+ TIMEx_BreakInputConfigTypeDef *sBreakInputConfig);
#endif /* TIM_BREAK_INPUT_SUPPORT */
HAL_StatusTypeDef HAL_TIMEx_GroupChannel5(TIM_HandleTypeDef *htim, uint32_t Channels);
HAL_StatusTypeDef HAL_TIMEx_RemapConfig(TIM_HandleTypeDef *htim, uint32_t Remap);
@@ -327,7 +333,7 @@ HAL_TIM_StateTypeDef HAL_TIMEx_HallSensor_GetState(TIM_HandleTypeDef *htim);
/* End of exported functions -------------------------------------------------*/
/* Private functions----------------------------------------------------------*/
-/** @defgroup TIMEx_Private_Functions TIM Extended Private Functions
+/** @addtogroup TIMEx_Private_Functions TIMEx Private Functions
* @{
*/
void TIMEx_DMACommutationCplt(DMA_HandleTypeDef *hdma);
diff --git a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_IAR/Prog/lib/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_uart.h b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_IAR/Prog/lib/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_uart.h
index 4209206e..473ff95e 100644
--- a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_IAR/Prog/lib/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_uart.h
+++ b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_IAR/Prog/lib/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_uart.h
@@ -125,8 +125,6 @@ typedef struct
This parameter can be a value of @ref UART_MSB_First. */
} UART_AdvFeatureInitTypeDef;
-
-
/**
* @brief HAL UART State definition
* @note HAL UART State value is a combination of 2 different substates: gState and RxState (see @ref UART_State_Definition).
@@ -206,10 +204,9 @@ typedef struct __UART_HandleTypeDef
uint16_t Mask; /*!< UART Rx RDR register mask */
+ void (*RxISR)(struct __UART_HandleTypeDef *huart); /*!< Function pointer on Rx IRQ handler */
- void (*RxISR)(struct __UART_HandleTypeDef *huart); /*!< Function pointer on Rx IRQ handler */
-
- void (*TxISR)(struct __UART_HandleTypeDef *huart); /*!< Function pointer on Tx IRQ handler */
+ void (*TxISR)(struct __UART_HandleTypeDef *huart); /*!< Function pointer on Tx IRQ handler */
DMA_HandleTypeDef *hdmatx; /*!< UART Tx DMA Handle parameters */
@@ -313,8 +310,10 @@ typedef void (*pUART_CallbackTypeDef)(UART_HandleTypeDef *huart); /*!< pointer
#define HAL_UART_ERROR_FE ((uint32_t)0x00000004U) /*!< Frame error */
#define HAL_UART_ERROR_ORE ((uint32_t)0x00000008U) /*!< Overrun error */
#define HAL_UART_ERROR_DMA ((uint32_t)0x00000010U) /*!< DMA transfer error */
+#define HAL_UART_ERROR_RTO ((uint32_t)0x00000020U) /*!< Receiver Timeout error */
+
#if (USE_HAL_UART_REGISTER_CALLBACKS == 1)
-#define HAL_UART_ERROR_INVALID_CALLBACK ((uint32_t)0x00000020U) /*!< Invalid Callback error */
+#define HAL_UART_ERROR_INVALID_CALLBACK ((uint32_t)0x00000040U) /*!< Invalid Callback error */
#endif /* USE_HAL_UART_REGISTER_CALLBACKS */
/**
* @}
@@ -400,11 +399,11 @@ typedef void (*pUART_CallbackTypeDef)(UART_HandleTypeDef *huart); /*!< pointer
* @}
*/
-/** @defgroup UART_Receiver_TimeOut UART Receiver TimeOut
+/** @defgroup UART_Receiver_Timeout UART Receiver Timeout
* @{
*/
-#define UART_RECEIVER_TIMEOUT_DISABLE 0x00000000U /*!< UART receiver timeout disable */
-#define UART_RECEIVER_TIMEOUT_ENABLE USART_CR2_RTOEN /*!< UART receiver timeout enable */
+#define UART_RECEIVER_TIMEOUT_DISABLE 0x00000000U /*!< UART Receiver Timeout disable */
+#define UART_RECEIVER_TIMEOUT_ENABLE USART_CR2_RTOEN /*!< UART Receiver Timeout enable */
/**
* @}
*/
@@ -562,6 +561,17 @@ typedef void (*pUART_CallbackTypeDef)(UART_HandleTypeDef *huart); /*!< pointer
/**
* @}
*/
+#if defined(USART_CR1_UESM)
+
+/** @defgroup UART_Stop_Mode_Enable UART Advanced Feature Stop Mode Enable
+ * @{
+ */
+#define UART_ADVFEATURE_STOPMODE_DISABLE 0x00000000U /*!< UART stop mode disable */
+#define UART_ADVFEATURE_STOPMODE_ENABLE USART_CR1_UESM /*!< UART stop mode enable */
+/**
+ * @}
+ */
+#endif /* USART_CR1_UESM */
/** @defgroup UART_Mute_Mode UART Advanced Feature Mute Mode Enable
* @{
@@ -579,6 +589,18 @@ typedef void (*pUART_CallbackTypeDef)(UART_HandleTypeDef *huart); /*!< pointer
/**
* @}
*/
+#if defined(USART_CR1_UESM)
+
+/** @defgroup UART_WakeUp_from_Stop_Selection UART WakeUp From Stop Selection
+ * @{
+ */
+#define UART_WAKEUP_ON_ADDRESS 0x00000000U /*!< UART wake-up on address */
+#define UART_WAKEUP_ON_STARTBIT USART_CR3_WUS_1 /*!< UART wake-up on start bit */
+#define UART_WAKEUP_ON_READDATA_NONEMPTY USART_CR3_WUS /*!< UART wake-up on receive data register not empty or RXFIFO is not empty */
+/**
+ * @}
+ */
+#endif /* USART_CR1_UESM */
/** @defgroup UART_DriverEnable_Polarity UART DriverEnable Polarity
* @{
@@ -626,13 +648,20 @@ typedef void (*pUART_CallbackTypeDef)(UART_HandleTypeDef *huart); /*!< pointer
* - 0xXXXX : Flag mask in the ISR register
* @{
*/
+#if defined(USART_ISR_REACK)
+#define UART_FLAG_REACK USART_ISR_REACK /*!< UART receive enable acknowledge flag */
+#endif /* USART_ISR_REACK */
#define UART_FLAG_TEACK USART_ISR_TEACK /*!< UART transmit enable acknowledge flag */
+#if defined(USART_CR1_UESM)
+#define UART_FLAG_WUF USART_ISR_WUF /*!< UART wake-up from stop mode flag */
+#endif /* USART_CR1_UESM */
#define UART_FLAG_RWU USART_ISR_RWU /*!< UART receiver wake-up from mute mode flag */
#define UART_FLAG_SBKF USART_ISR_SBKF /*!< UART send break flag */
#define UART_FLAG_CMF USART_ISR_CMF /*!< UART character match flag */
#define UART_FLAG_BUSY USART_ISR_BUSY /*!< UART busy flag */
#define UART_FLAG_ABRF USART_ISR_ABRF /*!< UART auto Baud rate flag */
#define UART_FLAG_ABRE USART_ISR_ABRE /*!< UART auto Baud rate error */
+#define UART_FLAG_RTOF USART_ISR_RTOF /*!< UART receiver timeout flag */
#define UART_FLAG_CTS USART_ISR_CTS /*!< UART clear to send flag */
#define UART_FLAG_CTSIF USART_ISR_CTSIF /*!< UART clear to send interrupt flag */
#define UART_FLAG_LBDF USART_ISR_LBDF /*!< UART LIN break detection flag */
@@ -674,6 +703,10 @@ typedef void (*pUART_CallbackTypeDef)(UART_HandleTypeDef *huart); /*!< pointer
#define UART_IT_LBD 0x0846U /*!< UART LIN break detection interruption */
#define UART_IT_CTS 0x096AU /*!< UART CTS interruption */
#define UART_IT_CM 0x112EU /*!< UART character match interruption */
+#if defined(USART_CR1_UESM)
+#define UART_IT_WUF 0x1476U /*!< UART wake-up from stop mode interruption */
+#endif /* USART_CR1_UESM */
+#define UART_IT_RTO 0x0B3AU /*!< UART receiver timeout interruption */
#define UART_IT_ERR 0x0060U /*!< UART error interruption */
@@ -689,13 +722,17 @@ typedef void (*pUART_CallbackTypeDef)(UART_HandleTypeDef *huart); /*!< pointer
*/
#define UART_CLEAR_PEF USART_ICR_PECF /*!< Parity Error Clear Flag */
#define UART_CLEAR_FEF USART_ICR_FECF /*!< Framing Error Clear Flag */
-#define UART_CLEAR_NEF USART_ICR_NCF /*!< Noise Error detected Clear Flag */
+#define UART_CLEAR_NEF USART_ICR_NCF /*!< Noise Error detected Clear Flag */
#define UART_CLEAR_OREF USART_ICR_ORECF /*!< Overrun Error Clear Flag */
#define UART_CLEAR_IDLEF USART_ICR_IDLECF /*!< IDLE line detected Clear Flag */
#define UART_CLEAR_TCF USART_ICR_TCCF /*!< Transmission Complete Clear Flag */
#define UART_CLEAR_LBDF USART_ICR_LBDCF /*!< LIN Break Detection Clear Flag */
#define UART_CLEAR_CTSF USART_ICR_CTSCF /*!< CTS Interrupt Clear Flag */
#define UART_CLEAR_CMF USART_ICR_CMCF /*!< Character Match Clear Flag */
+#if defined(USART_CR1_UESM)
+#define UART_CLEAR_WUF USART_ICR_WUCF /*!< Wake Up from stop mode Clear Flag */
+#endif /* USART_CR1_UESM */
+#define UART_CLEAR_RTOF USART_ICR_RTOCF /*!< UART receiver timeout clear flag */
/**
* @}
*/
@@ -734,9 +771,9 @@ typedef void (*pUART_CallbackTypeDef)(UART_HandleTypeDef *huart); /*!< pointer
*/
#define __HAL_UART_FLUSH_DRREGISTER(__HANDLE__) \
do{ \
- SET_BIT((__HANDLE__)->Instance->RQR, UART_RXDATA_FLUSH_REQUEST); \
- SET_BIT((__HANDLE__)->Instance->RQR, UART_TXDATA_FLUSH_REQUEST); \
- } while(0U)
+ SET_BIT((__HANDLE__)->Instance->RQR, UART_RXDATA_FLUSH_REQUEST); \
+ SET_BIT((__HANDLE__)->Instance->RQR, UART_TXDATA_FLUSH_REQUEST); \
+ } while(0U)
/** @brief Clear the specified UART pending flag.
* @param __HANDLE__ specifies the UART Handle.
@@ -748,9 +785,13 @@ typedef void (*pUART_CallbackTypeDef)(UART_HandleTypeDef *huart); /*!< pointer
* @arg @ref UART_CLEAR_OREF Overrun Error Clear Flag
* @arg @ref UART_CLEAR_IDLEF IDLE line detected Clear Flag
* @arg @ref UART_CLEAR_TCF Transmission Complete Clear Flag
+ * @arg @ref UART_CLEAR_RTOF Receiver Timeout clear flag
* @arg @ref UART_CLEAR_LBDF LIN Break Detection Clear Flag
* @arg @ref UART_CLEAR_CTSF CTS Interrupt Clear Flag
* @arg @ref UART_CLEAR_CMF Character Match Clear Flag
+#if defined(USART_CR1_UESM)
+ * @arg @ref UART_CLEAR_WUF Wake Up from stop mode Clear Flag
+#endif
* @retval None
*/
#define __HAL_UART_CLEAR_FLAG(__HANDLE__, __FLAG__) ((__HANDLE__)->Instance->ICR = (__FLAG__))
@@ -790,7 +831,13 @@ typedef void (*pUART_CallbackTypeDef)(UART_HandleTypeDef *huart); /*!< pointer
* @param __HANDLE__ specifies the UART Handle.
* @param __FLAG__ specifies the flag to check.
* This parameter can be one of the following values:
+#if defined(USART_ISR_REACK)
+ * @arg @ref UART_FLAG_REACK Receive enable acknowledge flag
+#endif
* @arg @ref UART_FLAG_TEACK Transmit enable acknowledge flag
+ #if defined(USART_CR1_UESM)
+ * @arg @ref UART_FLAG_WUF Wake up from stop mode flag
+ #endif
* @arg @ref UART_FLAG_RWU Receiver wake up flag (if the UART in mute mode)
* @arg @ref UART_FLAG_SBKF Send Break flag
* @arg @ref UART_FLAG_CMF Character match flag
@@ -802,6 +849,7 @@ typedef void (*pUART_CallbackTypeDef)(UART_HandleTypeDef *huart); /*!< pointer
* @arg @ref UART_FLAG_TXE Transmit data register empty flag
* @arg @ref UART_FLAG_TC Transmission Complete flag
* @arg @ref UART_FLAG_RXNE Receive data register not empty flag
+ * @arg @ref UART_FLAG_RTOF Receiver Timeout flag
* @arg @ref UART_FLAG_IDLE Idle Line detection flag
* @arg @ref UART_FLAG_ORE Overrun Error flag
* @arg @ref UART_FLAG_NE Noise Error flag
@@ -815,12 +863,16 @@ typedef void (*pUART_CallbackTypeDef)(UART_HandleTypeDef *huart); /*!< pointer
* @param __HANDLE__ specifies the UART Handle.
* @param __INTERRUPT__ specifies the UART interrupt source to enable.
* This parameter can be one of the following values:
+#if defined(USART_CR1_UESM)
+ * @arg @ref UART_IT_WUF Wakeup from stop mode interrupt
+#endif
* @arg @ref UART_IT_CM Character match interrupt
* @arg @ref UART_IT_CTS CTS change interrupt
* @arg @ref UART_IT_LBD LIN Break detection interrupt
* @arg @ref UART_IT_TXE Transmit Data Register empty interrupt
* @arg @ref UART_IT_TC Transmission complete interrupt
* @arg @ref UART_IT_RXNE Receive Data register not empty interrupt
+ * @arg @ref UART_IT_RTO Receive Timeout interrupt
* @arg @ref UART_IT_IDLE Idle line detection interrupt
* @arg @ref UART_IT_PE Parity Error interrupt
* @arg @ref UART_IT_ERR Error interrupt (frame error, noise error, overrun error)
@@ -835,12 +887,16 @@ typedef void (*pUART_CallbackTypeDef)(UART_HandleTypeDef *huart); /*!< pointer
* @param __HANDLE__ specifies the UART Handle.
* @param __INTERRUPT__ specifies the UART interrupt source to disable.
* This parameter can be one of the following values:
+#if defined(USART_CR1_UESM)
+ * @arg @ref UART_IT_WUF Wakeup from stop mode interrupt
+#endif
* @arg @ref UART_IT_CM Character match interrupt
* @arg @ref UART_IT_CTS CTS change interrupt
* @arg @ref UART_IT_LBD LIN Break detection interrupt
* @arg @ref UART_IT_TXE Transmit Data Register empty interrupt
* @arg @ref UART_IT_TC Transmission complete interrupt
* @arg @ref UART_IT_RXNE Receive Data register not empty interrupt
+ * @arg @ref UART_IT_RTO Receive Timeout interrupt
* @arg @ref UART_IT_IDLE Idle line detection interrupt
* @arg @ref UART_IT_PE Parity Error interrupt
* @arg @ref UART_IT_ERR Error interrupt (Frame error, noise error, overrun error)
@@ -854,37 +910,46 @@ typedef void (*pUART_CallbackTypeDef)(UART_HandleTypeDef *huart); /*!< pointer
* @param __HANDLE__ specifies the UART Handle.
* @param __INTERRUPT__ specifies the UART interrupt to check.
* This parameter can be one of the following values:
+#if defined(USART_CR1_UESM)
+ * @arg @ref UART_IT_WUF Wakeup from stop mode interrupt
+#endif
* @arg @ref UART_IT_CM Character match interrupt
* @arg @ref UART_IT_CTS CTS change interrupt
* @arg @ref UART_IT_LBD LIN Break detection interrupt
* @arg @ref UART_IT_TXE Transmit Data Register empty interrupt
* @arg @ref UART_IT_TC Transmission complete interrupt
* @arg @ref UART_IT_RXNE Receive Data register not empty interrupt
+ * @arg @ref UART_IT_RTO Receive Timeout interrupt
* @arg @ref UART_IT_IDLE Idle line detection interrupt
* @arg @ref UART_IT_PE Parity Error interrupt
* @arg @ref UART_IT_ERR Error interrupt (Frame error, noise error, overrun error)
* @retval The new state of __INTERRUPT__ (SET or RESET).
*/
-#define __HAL_UART_GET_IT(__HANDLE__, __INTERRUPT__) ((((__HANDLE__)->Instance->ISR & (1U << ((__INTERRUPT__)>> 8U))) != RESET) ? SET : RESET)
+#define __HAL_UART_GET_IT(__HANDLE__, __INTERRUPT__) ((((__HANDLE__)->Instance->ISR\
+ & (1U << ((__INTERRUPT__)>> 8U))) != RESET) ? SET : RESET)
/** @brief Check whether the specified UART interrupt source is enabled or not.
* @param __HANDLE__ specifies the UART Handle.
* @param __INTERRUPT__ specifies the UART interrupt source to check.
* This parameter can be one of the following values:
+#if defined(USART_CR1_UESM)
+ * @arg @ref UART_IT_WUF Wakeup from stop mode interrupt
+#endif
* @arg @ref UART_IT_CM Character match interrupt
* @arg @ref UART_IT_CTS CTS change interrupt
* @arg @ref UART_IT_LBD LIN Break detection interrupt
* @arg @ref UART_IT_TXE Transmit Data Register empty interrupt
* @arg @ref UART_IT_TC Transmission complete interrupt
* @arg @ref UART_IT_RXNE Receive Data register not empty interrupt
+ * @arg @ref UART_IT_RTO Receive Timeout interrupt
* @arg @ref UART_IT_IDLE Idle line detection interrupt
* @arg @ref UART_IT_PE Parity Error interrupt
* @arg @ref UART_IT_ERR Error interrupt (Frame error, noise error, overrun error)
* @retval The new state of __INTERRUPT__ (SET or RESET).
*/
#define __HAL_UART_GET_IT_SOURCE(__HANDLE__, __INTERRUPT__) ((((((((uint8_t)(__INTERRUPT__)) >> 5U) == 1U) ? (__HANDLE__)->Instance->CR1 : \
- (((((uint8_t)(__INTERRUPT__)) >> 5U) == 2U) ? (__HANDLE__)->Instance->CR2 : \
- (__HANDLE__)->Instance->CR3)) & (1U << (((uint16_t)(__INTERRUPT__)) & UART_IT_MASK))) != RESET) ? SET : RESET)
+ (((((uint8_t)(__INTERRUPT__)) >> 5U) == 2U) ? (__HANDLE__)->Instance->CR2 : \
+ (__HANDLE__)->Instance->CR3)) & (1U << (((uint16_t)(__INTERRUPT__)) & UART_IT_MASK))) != RESET) ? SET : RESET)
/** @brief Clear the specified UART ISR flag, in setting the proper ICR register flag.
* @param __HANDLE__ specifies the UART Handle.
@@ -896,10 +961,14 @@ typedef void (*pUART_CallbackTypeDef)(UART_HandleTypeDef *huart); /*!< pointer
* @arg @ref UART_CLEAR_NEF Noise detected Clear Flag
* @arg @ref UART_CLEAR_OREF Overrun Error Clear Flag
* @arg @ref UART_CLEAR_IDLEF IDLE line detected Clear Flag
+ * @arg @ref UART_CLEAR_RTOF Receiver timeout clear flag
* @arg @ref UART_CLEAR_TCF Transmission Complete Clear Flag
* @arg @ref UART_CLEAR_LBDF LIN Break Detection Clear Flag
* @arg @ref UART_CLEAR_CTSF CTS Interrupt Clear Flag
* @arg @ref UART_CLEAR_CMF Character Match Clear Flag
+ #if defined(USART_CR1_UESM)
+ * @arg @ref UART_CLEAR_WUF Wake Up from stop mode Clear Flag
+#endif
* @retval None
*/
#define __HAL_UART_CLEAR_IT(__HANDLE__, __IT_CLEAR__) ((__HANDLE__)->Instance->ICR = (uint32_t)(__IT_CLEAR__))
@@ -1083,10 +1152,10 @@ typedef void (*pUART_CallbackTypeDef)(UART_HandleTypeDef *huart); /*!< pointer
* @retval SET (__CONTROL__ is valid) or RESET (__CONTROL__ is invalid)
*/
#define IS_UART_HARDWARE_FLOW_CONTROL(__CONTROL__)\
- (((__CONTROL__) == UART_HWCONTROL_NONE) || \
- ((__CONTROL__) == UART_HWCONTROL_RTS) || \
- ((__CONTROL__) == UART_HWCONTROL_CTS) || \
- ((__CONTROL__) == UART_HWCONTROL_RTS_CTS))
+ (((__CONTROL__) == UART_HWCONTROL_NONE) || \
+ ((__CONTROL__) == UART_HWCONTROL_RTS) || \
+ ((__CONTROL__) == UART_HWCONTROL_CTS) || \
+ ((__CONTROL__) == UART_HWCONTROL_RTS_CTS))
/**
* @brief Ensure that UART communication mode is valid.
@@ -1134,8 +1203,15 @@ typedef void (*pUART_CallbackTypeDef)(UART_HandleTypeDef *huart); /*!< pointer
* @param __TIMEOUT__ UART receiver timeout setting.
* @retval SET (__TIMEOUT__ is valid) or RESET (__TIMEOUT__ is invalid)
*/
-#define IS_UART_RECEIVER_TIMEOUT(__TIMEOUT__) (((__TIMEOUT__) == UART_RECEIVER_TIMEOUT_DISABLE) || \
- ((__TIMEOUT__) == UART_RECEIVER_TIMEOUT_ENABLE))
+#define IS_UART_RECEIVER_TIMEOUT(__TIMEOUT__) (((__TIMEOUT__) == UART_RECEIVER_TIMEOUT_DISABLE) || \
+ ((__TIMEOUT__) == UART_RECEIVER_TIMEOUT_ENABLE))
+
+/** @brief Check the receiver timeout value.
+ * @note The maximum UART receiver timeout value is 0xFFFFFF.
+ * @param __TIMEOUTVALUE__ receiver timeout value.
+ * @retval Test result (TRUE or FALSE)
+ */
+#define IS_UART_RECEIVER_TIMEOUT_VALUE(__TIMEOUTVALUE__) ((__TIMEOUTVALUE__) <= 0xFFFFFFU)
/**
* @brief Ensure that UART LIN state is valid.
@@ -1275,6 +1351,16 @@ typedef void (*pUART_CallbackTypeDef)(UART_HandleTypeDef *huart); /*!< pointer
#define IS_UART_ADVFEATURE_MSBFIRST(__MSBFIRST__) (((__MSBFIRST__) == UART_ADVFEATURE_MSBFIRST_DISABLE) || \
((__MSBFIRST__) == UART_ADVFEATURE_MSBFIRST_ENABLE))
+#if defined(USART_CR1_UESM)
+/**
+ * @brief Ensure that UART stop mode state is valid.
+ * @param __STOPMODE__ UART stop mode state.
+ * @retval SET (__STOPMODE__ is valid) or RESET (__STOPMODE__ is invalid)
+ */
+#define IS_UART_ADVFEATURE_STOPMODE(__STOPMODE__) (((__STOPMODE__) == UART_ADVFEATURE_STOPMODE_DISABLE) || \
+ ((__STOPMODE__) == UART_ADVFEATURE_STOPMODE_ENABLE))
+
+#endif /* USART_CR1_UESM */
/**
* @brief Ensure that UART mute mode state is valid.
* @param __MUTE__ UART mute mode state.
@@ -1282,6 +1368,17 @@ typedef void (*pUART_CallbackTypeDef)(UART_HandleTypeDef *huart); /*!< pointer
*/
#define IS_UART_MUTE_MODE(__MUTE__) (((__MUTE__) == UART_ADVFEATURE_MUTEMODE_DISABLE) || \
((__MUTE__) == UART_ADVFEATURE_MUTEMODE_ENABLE))
+#if defined(USART_CR1_UESM)
+
+/**
+ * @brief Ensure that UART wake-up selection is valid.
+ * @param __WAKE__ UART wake-up selection.
+ * @retval SET (__WAKE__ is valid) or RESET (__WAKE__ is invalid)
+ */
+#define IS_UART_WAKEUP_SELECTION(__WAKE__) (((__WAKE__) == UART_WAKEUP_ON_ADDRESS) || \
+ ((__WAKE__) == UART_WAKEUP_ON_STARTBIT) || \
+ ((__WAKE__) == UART_WAKEUP_ON_READDATA_NONEMPTY))
+#endif /* USART_CR1_UESM */
/**
* @brief Ensure that UART driver enable polarity is valid.
@@ -1320,7 +1417,8 @@ void HAL_UART_MspDeInit(UART_HandleTypeDef *huart);
/* Callbacks Register/UnRegister functions ***********************************/
#if (USE_HAL_UART_REGISTER_CALLBACKS == 1)
-HAL_StatusTypeDef HAL_UART_RegisterCallback(UART_HandleTypeDef *huart, HAL_UART_CallbackIDTypeDef CallbackID, pUART_CallbackTypeDef pCallback);
+HAL_StatusTypeDef HAL_UART_RegisterCallback(UART_HandleTypeDef *huart, HAL_UART_CallbackIDTypeDef CallbackID,
+ pUART_CallbackTypeDef pCallback);
HAL_StatusTypeDef HAL_UART_UnRegisterCallback(UART_HandleTypeDef *huart, HAL_UART_CallbackIDTypeDef CallbackID);
#endif /* USE_HAL_UART_REGISTER_CALLBACKS */
@@ -1369,6 +1467,10 @@ void HAL_UART_AbortReceiveCpltCallback(UART_HandleTypeDef *huart);
*/
/* Peripheral Control functions ************************************************/
+void HAL_UART_ReceiverTimeout_Config(UART_HandleTypeDef *huart, uint32_t TimeoutValue);
+HAL_StatusTypeDef HAL_UART_EnableReceiverTimeout(UART_HandleTypeDef *huart);
+HAL_StatusTypeDef HAL_UART_DisableReceiverTimeout(UART_HandleTypeDef *huart);
+
HAL_StatusTypeDef HAL_LIN_SendBreak(UART_HandleTypeDef *huart);
HAL_StatusTypeDef HAL_MultiProcessor_EnableMuteMode(UART_HandleTypeDef *huart);
HAL_StatusTypeDef HAL_MultiProcessor_DisableMuteMode(UART_HandleTypeDef *huart);
@@ -1405,7 +1507,8 @@ void UART_InitCallbacksToDefault(UART_HandleTypeDef *huart);
#endif /* USE_HAL_UART_REGISTER_CALLBACKS */
HAL_StatusTypeDef UART_SetConfig(UART_HandleTypeDef *huart);
HAL_StatusTypeDef UART_CheckIdleState(UART_HandleTypeDef *huart);
-HAL_StatusTypeDef UART_WaitOnFlagUntilTimeout(UART_HandleTypeDef *huart, uint32_t Flag, FlagStatus Status, uint32_t Tickstart, uint32_t Timeout);
+HAL_StatusTypeDef UART_WaitOnFlagUntilTimeout(UART_HandleTypeDef *huart, uint32_t Flag, FlagStatus Status,
+ uint32_t Tickstart, uint32_t Timeout);
void UART_AdvFeatureConfig(UART_HandleTypeDef *huart);
/**
diff --git a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_IAR/Prog/lib/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_uart_ex.h b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_IAR/Prog/lib/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_uart_ex.h
index a5907f57..866a490f 100644
--- a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_IAR/Prog/lib/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_uart_ex.h
+++ b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_IAR/Prog/lib/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_uart_ex.h
@@ -41,7 +41,24 @@ extern "C" {
* @{
*/
+#if defined(USART_CR1_UESM)
+/**
+ * @brief UART wake up from stop mode parameters
+ */
+typedef struct
+{
+ uint32_t WakeUpEvent; /*!< Specifies which event will activate the Wakeup from Stop mode flag (WUF).
+ This parameter can be a value of @ref UART_WakeUp_from_Stop_Selection.
+ If set to UART_WAKEUP_ON_ADDRESS, the two other fields below must
+ be filled up. */
+ uint16_t AddressLength; /*!< Specifies whether the address is 4 or 7-bit long.
+ This parameter can be a value of @ref UARTEx_WakeUp_Address_Length. */
+
+ uint8_t Address; /*!< UART/USART node address (7-bit long max). */
+} UART_WakeUpTypeDef;
+
+#endif /* USART_CR1_UESM */
/**
* @}
*/
@@ -54,9 +71,9 @@ extern "C" {
/** @defgroup UARTEx_Word_Length UARTEx Word Length
* @{
*/
-#define UART_WORDLENGTH_7B USART_CR1_M1 /*!< 7-bit long UART frame */
-#define UART_WORDLENGTH_8B 0x00000000U /*!< 8-bit long UART frame */
-#define UART_WORDLENGTH_9B USART_CR1_M0 /*!< 9-bit long UART frame */
+#define UART_WORDLENGTH_7B USART_CR1_M1 /*!< 7-bit long UART frame */
+#define UART_WORDLENGTH_8B 0x00000000U /*!< 8-bit long UART frame */
+#define UART_WORDLENGTH_9B USART_CR1_M0 /*!< 9-bit long UART frame */
/**
* @}
*/
@@ -64,13 +81,12 @@ extern "C" {
/** @defgroup UARTEx_WakeUp_Address_Length UARTEx WakeUp Address Length
* @{
*/
-#define UART_ADDRESS_DETECT_4B 0x00000000U /*!< 4-bit long wake-up address */
-#define UART_ADDRESS_DETECT_7B USART_CR2_ADDM7 /*!< 7-bit long wake-up address */
+#define UART_ADDRESS_DETECT_4B 0x00000000U /*!< 4-bit long wake-up address */
+#define UART_ADDRESS_DETECT_7B USART_CR2_ADDM7 /*!< 7-bit long wake-up address */
/**
* @}
*/
-
/**
* @}
*/
@@ -86,7 +102,8 @@ extern "C" {
*/
/* Initialization and de-initialization functions ****************************/
-HAL_StatusTypeDef HAL_RS485Ex_Init(UART_HandleTypeDef *huart, uint32_t Polarity, uint32_t AssertionTime, uint32_t DeassertionTime);
+HAL_StatusTypeDef HAL_RS485Ex_Init(UART_HandleTypeDef *huart, uint32_t Polarity, uint32_t AssertionTime,
+ uint32_t DeassertionTime);
/**
* @}
@@ -96,6 +113,10 @@ HAL_StatusTypeDef HAL_RS485Ex_Init(UART_HandleTypeDef *huart, uint32_t Polarity,
* @{
*/
+#if defined(USART_CR1_UESM)
+void HAL_UARTEx_WakeupCallback(UART_HandleTypeDef *huart);
+
+#endif /* USART_CR1_UESM */
/**
* @}
@@ -106,8 +127,20 @@ HAL_StatusTypeDef HAL_RS485Ex_Init(UART_HandleTypeDef *huart, uint32_t Polarity,
*/
/* Peripheral Control functions **********************************************/
+#if defined(USART_CR1_UESM)
+HAL_StatusTypeDef HAL_UARTEx_StopModeWakeUpSourceConfig(UART_HandleTypeDef *huart, UART_WakeUpTypeDef WakeUpSelection);
+HAL_StatusTypeDef HAL_UARTEx_EnableStopMode(UART_HandleTypeDef *huart);
+HAL_StatusTypeDef HAL_UARTEx_DisableStopMode(UART_HandleTypeDef *huart);
+
+#endif/* USART_CR1_UESM */
+#if defined(USART_CR3_UCESM)
+HAL_StatusTypeDef HAL_UARTEx_EnableClockStopMode(UART_HandleTypeDef *huart);
+HAL_StatusTypeDef HAL_UARTEx_DisableClockStopMode(UART_HandleTypeDef *huart);
+
+#endif /* USART_CR3_UCESM */
HAL_StatusTypeDef HAL_MultiProcessorEx_AddressLength_Set(UART_HandleTypeDef *huart, uint32_t AddressLength);
+
/**
* @}
*/
@@ -126,12 +159,12 @@ HAL_StatusTypeDef HAL_MultiProcessorEx_AddressLength_Set(UART_HandleTypeDef *hua
* @param __CLOCKSOURCE__ output variable.
* @retval UART clocking source, written in __CLOCKSOURCE__.
*/
-#define UART_GETCLOCKSOURCE(__HANDLE__,__CLOCKSOURCE__) \
+#define UART_GETCLOCKSOURCE(__HANDLE__,__CLOCKSOURCE__) \
do { \
if((__HANDLE__)->Instance == USART1) \
{ \
- switch(__HAL_RCC_GET_USART1_SOURCE()) \
- { \
+ switch(__HAL_RCC_GET_USART1_SOURCE()) \
+ { \
case RCC_USART1CLKSOURCE_PCLK2: \
(__CLOCKSOURCE__) = UART_CLOCKSOURCE_PCLK2; \
break; \
@@ -147,12 +180,12 @@ HAL_StatusTypeDef HAL_MultiProcessorEx_AddressLength_Set(UART_HandleTypeDef *hua
default: \
(__CLOCKSOURCE__) = UART_CLOCKSOURCE_UNDEFINED; \
break; \
- } \
+ } \
} \
else if((__HANDLE__)->Instance == USART2) \
{ \
- switch(__HAL_RCC_GET_USART2_SOURCE()) \
- { \
+ switch(__HAL_RCC_GET_USART2_SOURCE()) \
+ { \
case RCC_USART2CLKSOURCE_PCLK1: \
(__CLOCKSOURCE__) = UART_CLOCKSOURCE_PCLK1; \
break; \
@@ -168,12 +201,12 @@ HAL_StatusTypeDef HAL_MultiProcessorEx_AddressLength_Set(UART_HandleTypeDef *hua
default: \
(__CLOCKSOURCE__) = UART_CLOCKSOURCE_UNDEFINED; \
break; \
- } \
+ } \
} \
else if((__HANDLE__)->Instance == USART3) \
{ \
- switch(__HAL_RCC_GET_USART3_SOURCE()) \
- { \
+ switch(__HAL_RCC_GET_USART3_SOURCE()) \
+ { \
case RCC_USART3CLKSOURCE_PCLK1: \
(__CLOCKSOURCE__) = UART_CLOCKSOURCE_PCLK1; \
break; \
@@ -189,12 +222,12 @@ HAL_StatusTypeDef HAL_MultiProcessorEx_AddressLength_Set(UART_HandleTypeDef *hua
default: \
(__CLOCKSOURCE__) = UART_CLOCKSOURCE_UNDEFINED; \
break; \
- } \
+ } \
} \
else if((__HANDLE__)->Instance == UART4) \
{ \
- switch(__HAL_RCC_GET_UART4_SOURCE()) \
- { \
+ switch(__HAL_RCC_GET_UART4_SOURCE()) \
+ { \
case RCC_UART4CLKSOURCE_PCLK1: \
(__CLOCKSOURCE__) = UART_CLOCKSOURCE_PCLK1; \
break; \
@@ -210,12 +243,12 @@ HAL_StatusTypeDef HAL_MultiProcessorEx_AddressLength_Set(UART_HandleTypeDef *hua
default: \
(__CLOCKSOURCE__) = UART_CLOCKSOURCE_UNDEFINED; \
break; \
- } \
+ } \
} \
else if ((__HANDLE__)->Instance == UART5) \
{ \
- switch(__HAL_RCC_GET_UART5_SOURCE()) \
- { \
+ switch(__HAL_RCC_GET_UART5_SOURCE()) \
+ { \
case RCC_UART5CLKSOURCE_PCLK1: \
(__CLOCKSOURCE__) = UART_CLOCKSOURCE_PCLK1; \
break; \
@@ -231,12 +264,12 @@ HAL_StatusTypeDef HAL_MultiProcessorEx_AddressLength_Set(UART_HandleTypeDef *hua
default: \
(__CLOCKSOURCE__) = UART_CLOCKSOURCE_UNDEFINED; \
break; \
- } \
+ } \
} \
else if((__HANDLE__)->Instance == USART6) \
{ \
- switch(__HAL_RCC_GET_USART6_SOURCE()) \
- { \
+ switch(__HAL_RCC_GET_USART6_SOURCE()) \
+ { \
case RCC_USART6CLKSOURCE_PCLK2: \
(__CLOCKSOURCE__) = UART_CLOCKSOURCE_PCLK2; \
break; \
@@ -252,12 +285,12 @@ HAL_StatusTypeDef HAL_MultiProcessorEx_AddressLength_Set(UART_HandleTypeDef *hua
default: \
(__CLOCKSOURCE__) = UART_CLOCKSOURCE_UNDEFINED; \
break; \
- } \
+ } \
} \
else if ((__HANDLE__)->Instance == UART7) \
{ \
- switch(__HAL_RCC_GET_UART7_SOURCE()) \
- { \
+ switch(__HAL_RCC_GET_UART7_SOURCE()) \
+ { \
case RCC_UART7CLKSOURCE_PCLK1: \
(__CLOCKSOURCE__) = UART_CLOCKSOURCE_PCLK1; \
break; \
@@ -273,12 +306,12 @@ HAL_StatusTypeDef HAL_MultiProcessorEx_AddressLength_Set(UART_HandleTypeDef *hua
default: \
(__CLOCKSOURCE__) = UART_CLOCKSOURCE_UNDEFINED; \
break; \
- } \
+ } \
} \
else if ((__HANDLE__)->Instance == UART8) \
{ \
- switch(__HAL_RCC_GET_UART8_SOURCE()) \
- { \
+ switch(__HAL_RCC_GET_UART8_SOURCE()) \
+ { \
case RCC_UART8CLKSOURCE_PCLK1: \
(__CLOCKSOURCE__) = UART_CLOCKSOURCE_PCLK1; \
break; \
@@ -294,7 +327,7 @@ HAL_StatusTypeDef HAL_MultiProcessorEx_AddressLength_Set(UART_HandleTypeDef *hua
default: \
(__CLOCKSOURCE__) = UART_CLOCKSOURCE_UNDEFINED; \
break; \
- } \
+ } \
} \
else \
{ \
@@ -313,44 +346,44 @@ HAL_StatusTypeDef HAL_MultiProcessorEx_AddressLength_Set(UART_HandleTypeDef *hua
*/
#define UART_MASK_COMPUTATION(__HANDLE__) \
do { \
- if ((__HANDLE__)->Init.WordLength == UART_WORDLENGTH_9B) \
- { \
- if ((__HANDLE__)->Init.Parity == UART_PARITY_NONE) \
- { \
+ if ((__HANDLE__)->Init.WordLength == UART_WORDLENGTH_9B) \
+ { \
+ if ((__HANDLE__)->Init.Parity == UART_PARITY_NONE) \
+ { \
(__HANDLE__)->Mask = 0x01FFU ; \
- } \
- else \
- { \
+ } \
+ else \
+ { \
(__HANDLE__)->Mask = 0x00FFU ; \
- } \
- } \
- else if ((__HANDLE__)->Init.WordLength == UART_WORDLENGTH_8B) \
- { \
- if ((__HANDLE__)->Init.Parity == UART_PARITY_NONE) \
- { \
+ } \
+ } \
+ else if ((__HANDLE__)->Init.WordLength == UART_WORDLENGTH_8B) \
+ { \
+ if ((__HANDLE__)->Init.Parity == UART_PARITY_NONE) \
+ { \
(__HANDLE__)->Mask = 0x00FFU ; \
- } \
- else \
- { \
+ } \
+ else \
+ { \
(__HANDLE__)->Mask = 0x007FU ; \
- } \
- } \
- else if ((__HANDLE__)->Init.WordLength == UART_WORDLENGTH_7B) \
- { \
- if ((__HANDLE__)->Init.Parity == UART_PARITY_NONE) \
- { \
+ } \
+ } \
+ else if ((__HANDLE__)->Init.WordLength == UART_WORDLENGTH_7B) \
+ { \
+ if ((__HANDLE__)->Init.Parity == UART_PARITY_NONE) \
+ { \
(__HANDLE__)->Mask = 0x007FU ; \
- } \
- else \
- { \
+ } \
+ else \
+ { \
(__HANDLE__)->Mask = 0x003FU ; \
- } \
- } \
- else \
- { \
- (__HANDLE__)->Mask = 0x0000U; \
- } \
-} while(0U)
+ } \
+ } \
+ else \
+ { \
+ (__HANDLE__)->Mask = 0x0000U; \
+ } \
+ } while(0U)
/**
* @brief Ensure that UART frame length is valid.
@@ -369,7 +402,6 @@ HAL_StatusTypeDef HAL_MultiProcessorEx_AddressLength_Set(UART_HandleTypeDef *hua
#define IS_UART_ADDRESSLENGTH_DETECT(__ADDRESS__) (((__ADDRESS__) == UART_ADDRESS_DETECT_4B) || \
((__ADDRESS__) == UART_ADDRESS_DETECT_7B))
-
/**
* @}
*/
diff --git a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_IAR/Prog/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal.c b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_IAR/Prog/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal.c
index 81a39d76..48bbd535 100644
--- a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_IAR/Prog/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal.c
+++ b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_IAR/Prog/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal.c
@@ -50,11 +50,11 @@
* @{
*/
/**
- * @brief STM32F7xx HAL Driver version number V1.2.7
+ * @brief STM32F7xx HAL Driver version number V1.2.8
*/
#define __STM32F7xx_HAL_VERSION_MAIN (0x01) /*!< [31:24] main version */
#define __STM32F7xx_HAL_VERSION_SUB1 (0x02) /*!< [23:16] sub1 version */
-#define __STM32F7xx_HAL_VERSION_SUB2 (0x07) /*!< [15:8] sub2 version */
+#define __STM32F7xx_HAL_VERSION_SUB2 (0x08) /*!< [15:8] sub2 version */
#define __STM32F7xx_HAL_VERSION_RC (0x00) /*!< [7:0] release candidate */
#define __STM32F7xx_HAL_VERSION ((__STM32F7xx_HAL_VERSION_MAIN << 24)\
|(__STM32F7xx_HAL_VERSION_SUB1 << 16)\
@@ -319,14 +319,26 @@ uint32_t HAL_GetTickPrio(void)
HAL_StatusTypeDef HAL_SetTickFreq(HAL_TickFreqTypeDef Freq)
{
HAL_StatusTypeDef status = HAL_OK;
+ HAL_TickFreqTypeDef prevTickFreq;
+
assert_param(IS_TICKFREQ(Freq));
if (uwTickFreq != Freq)
{
+ /* Back up uwTickFreq frequency */
+ prevTickFreq = uwTickFreq;
+
+ /* Update uwTickFreq global variable used by HAL_InitTick() */
uwTickFreq = Freq;
/* Apply the new tick Freq */
status = HAL_InitTick(uwTickPrio);
+
+ if (status != HAL_OK)
+ {
+ /* Restore previous tick frequency */
+ uwTickFreq = prevTickFreq;
+ }
}
return status;
diff --git a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_IAR/Prog/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_can.c b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_IAR/Prog/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_can.c
index 6978c4da..a381dfc4 100644
--- a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_IAR/Prog/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_can.c
+++ b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_IAR/Prog/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_can.c
@@ -1556,7 +1556,7 @@ HAL_StatusTypeDef HAL_CAN_GetRxMessage(CAN_HandleTypeDef *hcan, uint32_t RxFifo,
{
pHeader->ExtId = ((CAN_RI0R_EXID | CAN_RI0R_STID) & hcan->Instance->sFIFOMailBox[RxFifo].RIR) >> CAN_RI0R_EXID_Pos;
}
- pHeader->RTR = (CAN_RI0R_RTR & hcan->Instance->sFIFOMailBox[RxFifo].RIR) >> CAN_RI0R_RTR_Pos;
+ pHeader->RTR = (CAN_RI0R_RTR & hcan->Instance->sFIFOMailBox[RxFifo].RIR);
pHeader->DLC = (CAN_RDT0R_DLC & hcan->Instance->sFIFOMailBox[RxFifo].RDTR) >> CAN_RDT0R_DLC_Pos;
pHeader->FilterMatchIndex = (CAN_RDT0R_FMI & hcan->Instance->sFIFOMailBox[RxFifo].RDTR) >> CAN_RDT0R_FMI_Pos;
pHeader->Timestamp = (CAN_RDT0R_TIME & hcan->Instance->sFIFOMailBox[RxFifo].RDTR) >> CAN_RDT0R_TIME_Pos;
diff --git a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_IAR/Prog/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_exti.c b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_IAR/Prog/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_exti.c
index 07e53536..246f4562 100644
--- a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_IAR/Prog/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_exti.c
+++ b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_IAR/Prog/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_exti.c
@@ -85,7 +85,6 @@
/* Includes ------------------------------------------------------------------*/
#include "stm32f7xx_hal.h"
-#include "stm32f7xx_hal_exti.h"
/** @addtogroup STM32F7xx_HAL_Driver
* @{
@@ -105,7 +104,7 @@
#ifdef HAL_EXTI_MODULE_ENABLED
/* Private typedef -----------------------------------------------------------*/
-/* Private defines ------------------------------------------------------------*/
+/* Private defines -----------------------------------------------------------*/
/** @defgroup EXTI_Private_Constants EXTI Private Constants
* @{
*/
@@ -144,6 +143,8 @@
HAL_StatusTypeDef HAL_EXTI_SetConfigLine(EXTI_HandleTypeDef *hexti, EXTI_ConfigTypeDef *pExtiConfig)
{
uint32_t regval;
+ uint32_t linepos;
+ uint32_t maskline;
/* Check null pointer */
if ((hexti == NULL) || (pExtiConfig == NULL))
@@ -154,37 +155,77 @@ HAL_StatusTypeDef HAL_EXTI_SetConfigLine(EXTI_HandleTypeDef *hexti, EXTI_ConfigT
/* Check parameters */
assert_param(IS_EXTI_LINE(pExtiConfig->Line));
assert_param(IS_EXTI_MODE(pExtiConfig->Mode));
- assert_param(IS_EXTI_TRIGGER(pExtiConfig->Trigger));
-
+
/* Assign line number to handle */
hexti->Line = pExtiConfig->Line;
-
- /* Clear EXTI line configuration */
- EXTI->IMR &= ~pExtiConfig->Line;
- EXTI->EMR &= ~pExtiConfig->Line;
-
- /* Select the Mode for the selected external interrupts */
- regval = (uint32_t)EXTI_BASE;
- regval += pExtiConfig->Mode;
- *(__IO uint32_t *) regval |= pExtiConfig->Line;
-
- /* Clear Rising Falling edge configuration */
- EXTI->RTSR &= ~pExtiConfig->Line;
- EXTI->FTSR &= ~pExtiConfig->Line;
-
- /* Select the trigger for the selected external interrupts */
- if (pExtiConfig->Trigger == EXTI_TRIGGER_RISING_FALLING)
+
+ /* Compute line mask */
+ linepos = (pExtiConfig->Line & EXTI_PIN_MASK);
+ maskline = (1uL << linepos);
+
+ /* Configure triggers for configurable lines */
+ if ((pExtiConfig->Line & EXTI_CONFIG) != 0x00u)
{
- /* Rising Falling edge */
- EXTI->RTSR |= pExtiConfig->Line;
- EXTI->FTSR |= pExtiConfig->Line;
+ assert_param(IS_EXTI_TRIGGER(pExtiConfig->Trigger));
+
+ /* Configure rising trigger */
+ /* Mask or set line */
+ if ((pExtiConfig->Trigger & EXTI_TRIGGER_RISING) != 0x00u)
+ {
+ EXTI->RTSR |= maskline;
+ }
+ else
+ {
+ EXTI->RTSR &= ~maskline;
+ }
+
+ /* Configure falling trigger */
+ /* Mask or set line */
+ if ((pExtiConfig->Trigger & EXTI_TRIGGER_FALLING) != 0x00u)
+ {
+ EXTI->FTSR |= maskline;
+ }
+ else
+ {
+ EXTI->FTSR &= ~maskline;
+ }
+
+
+ /* Configure gpio port selection in case of gpio exti line */
+ if ((pExtiConfig->Line & EXTI_GPIO) == EXTI_GPIO)
+ {
+ assert_param(IS_EXTI_GPIO_PORT(pExtiConfig->GPIOSel));
+ assert_param(IS_EXTI_GPIO_PIN(linepos));
+
+ regval = SYSCFG->EXTICR[linepos >> 2u];
+ regval &= ~(SYSCFG_EXTICR1_EXTI0 << (SYSCFG_EXTICR1_EXTI1_Pos * (linepos & 0x03u)));
+ regval |= (pExtiConfig->GPIOSel << (SYSCFG_EXTICR1_EXTI1_Pos * (linepos & 0x03u)));
+ SYSCFG->EXTICR[linepos >> 2u] = regval;
+ }
+ }
+
+ /* Configure interrupt mode : read current mode */
+ /* Mask or set line */
+ if ((pExtiConfig->Mode & EXTI_MODE_INTERRUPT) != 0x00u)
+ {
+ EXTI->IMR |= maskline;
}
else
{
- regval = (uint32_t)EXTI_BASE;
- regval += pExtiConfig->Trigger;
- *(__IO uint32_t *) regval |= pExtiConfig->Line;
+ EXTI->IMR &= ~maskline;
}
+
+ /* Configure event mode : read current mode */
+ /* Mask or set line */
+ if ((pExtiConfig->Mode & EXTI_MODE_EVENT) != 0x00u)
+ {
+ EXTI->EMR |= maskline;
+ }
+ else
+ {
+ EXTI->EMR &= ~maskline;
+ }
+
return HAL_OK;
}
@@ -196,6 +237,10 @@ HAL_StatusTypeDef HAL_EXTI_SetConfigLine(EXTI_HandleTypeDef *hexti, EXTI_ConfigT
*/
HAL_StatusTypeDef HAL_EXTI_GetConfigLine(EXTI_HandleTypeDef *hexti, EXTI_ConfigTypeDef *pExtiConfig)
{
+ uint32_t regval;
+ uint32_t linepos;
+ uint32_t maskline;
+
/* Check null pointer */
if ((hexti == NULL) || (pExtiConfig == NULL))
{
@@ -208,41 +253,67 @@ HAL_StatusTypeDef HAL_EXTI_GetConfigLine(EXTI_HandleTypeDef *hexti, EXTI_ConfigT
/* Store handle line number to configuration structure */
pExtiConfig->Line = hexti->Line;
- /* Get EXTI mode to configiguration structure */
- if ((EXTI->IMR & hexti->Line) == hexti->Line)
+ /* Compute line mask */
+ linepos = (pExtiConfig->Line & EXTI_PIN_MASK);
+ maskline = (1uL << linepos);
+
+ /* 1] Get core mode : interrupt */
+
+ /* Check if selected line is enable */
+ if ((EXTI->IMR & maskline) != 0x00u)
{
pExtiConfig->Mode = EXTI_MODE_INTERRUPT;
}
- else if ((EXTI->EMR & hexti->Line) == hexti->Line)
- {
- pExtiConfig->Mode = EXTI_MODE_EVENT;
- }
else
{
- /* No MODE selected */
- pExtiConfig->Mode = 0x0Bu;
+ pExtiConfig->Mode = EXTI_MODE_NONE;
}
- /* Get EXTI Trigger to configiguration structure */
- if ((EXTI->RTSR & hexti->Line) == hexti->Line)
+ /* Get event mode */
+ /* Check if selected line is enable */
+ if ((EXTI->EMR & maskline) != 0x00u)
{
- if ((EXTI->FTSR & hexti->Line) == hexti->Line)
- {
- pExtiConfig->Trigger = EXTI_TRIGGER_RISING_FALLING;
- }
- else
+ pExtiConfig->Mode |= EXTI_MODE_EVENT;
+ }
+
+ /* 2] Get trigger for configurable lines : rising */
+ if ((pExtiConfig->Line & EXTI_CONFIG) != 0x00u)
+ {
+ /* Check if configuration of selected line is enable */
+ if ((EXTI->RTSR & maskline) != 0x00u)
{
pExtiConfig->Trigger = EXTI_TRIGGER_RISING;
}
- }
- else if ((EXTI->FTSR & hexti->Line) == hexti->Line)
- {
- pExtiConfig->Trigger = EXTI_TRIGGER_FALLING;
+ else
+ {
+ pExtiConfig->Trigger = EXTI_TRIGGER_NONE;
+ }
+
+ /* Get falling configuration */
+ /* Check if configuration of selected line is enable */
+ if ((EXTI->FTSR & maskline) != 0x00u)
+ {
+ pExtiConfig->Trigger |= EXTI_TRIGGER_FALLING;
+ }
+
+ /* Get Gpio port selection for gpio lines */
+ if ((pExtiConfig->Line & EXTI_GPIO) == EXTI_GPIO)
+ {
+ assert_param(IS_EXTI_GPIO_PIN(linepos));
+
+ regval = SYSCFG->EXTICR[linepos >> 2u];
+ pExtiConfig->GPIOSel = ((regval << (SYSCFG_EXTICR1_EXTI1_Pos * (3uL - (linepos & 0x03u)))) >> 24);
+ }
+ else
+ {
+ pExtiConfig->GPIOSel = 0x00u;
+ }
}
else
{
/* No Trigger selected */
- pExtiConfig->Trigger = 0x00u;
+ pExtiConfig->Trigger = EXTI_TRIGGER_NONE;
+ pExtiConfig->GPIOSel = 0x00u;
}
return HAL_OK;
@@ -255,6 +326,10 @@ HAL_StatusTypeDef HAL_EXTI_GetConfigLine(EXTI_HandleTypeDef *hexti, EXTI_ConfigT
*/
HAL_StatusTypeDef HAL_EXTI_ClearConfigLine(EXTI_HandleTypeDef *hexti)
{
+ uint32_t regval;
+ uint32_t linepos;
+ uint32_t maskline;
+
/* Check null pointer */
if (hexti == NULL)
{
@@ -264,15 +339,32 @@ HAL_StatusTypeDef HAL_EXTI_ClearConfigLine(EXTI_HandleTypeDef *hexti)
/* Check the parameter */
assert_param(IS_EXTI_LINE(hexti->Line));
+ /* compute line mask */
+ linepos = (hexti->Line & EXTI_PIN_MASK);
+ maskline = (1uL << linepos);
+
/* 1] Clear interrupt mode */
- EXTI->IMR = (EXTI->IMR & ~hexti->Line);
+ EXTI->IMR = (EXTI->IMR & ~maskline);
/* 2] Clear event mode */
- EXTI->EMR = (EXTI->EMR & ~hexti->Line);
+ EXTI->EMR = (EXTI->EMR & ~maskline);
- /* 3] Clear triggers */
- EXTI->RTSR = (EXTI->RTSR & ~hexti->Line);
- EXTI->FTSR = (EXTI->FTSR & ~hexti->Line);
+ /* 3] Clear triggers in case of configurable lines */
+ if ((hexti->Line & EXTI_CONFIG) != 0x00u)
+ {
+ EXTI->RTSR = (EXTI->RTSR & ~maskline);
+ EXTI->FTSR = (EXTI->FTSR & ~maskline);
+
+ /* Get Gpio port selection for gpio lines */
+ if ((hexti->Line & EXTI_GPIO) == EXTI_GPIO)
+ {
+ assert_param(IS_EXTI_GPIO_PIN(linepos));
+
+ regval = SYSCFG->EXTICR[linepos >> 2u];
+ regval &= ~(SYSCFG_EXTICR1_EXTI0 << (SYSCFG_EXTICR1_EXTI1_Pos * (linepos & 0x03u)));
+ SYSCFG->EXTICR[linepos >> 2u] = regval;
+ }
+ }
return HAL_OK;
}
@@ -352,17 +444,18 @@ HAL_StatusTypeDef HAL_EXTI_GetHandle(EXTI_HandleTypeDef *hexti, uint32_t ExtiLin
*/
void HAL_EXTI_IRQHandler(EXTI_HandleTypeDef *hexti)
{
- __IO uint32_t *regaddr;
uint32_t regval;
+ uint32_t maskline;
+
+ /* Compute line mask */
+ maskline = (1uL << (hexti->Line & EXTI_PIN_MASK));
/* Get pending bit */
- regaddr = (&EXTI->PR);
- regval = (*regaddr & hexti->Line);
-
+ regval = (EXTI->PR & maskline);
if (regval != 0x00u)
{
/* Clear pending bit */
- *regaddr = hexti->Line;
+ EXTI->PR = maskline;
/* Call callback */
if (hexti->PendingCallback != NULL)
@@ -383,19 +476,21 @@ void HAL_EXTI_IRQHandler(EXTI_HandleTypeDef *hexti)
*/
uint32_t HAL_EXTI_GetPending(EXTI_HandleTypeDef *hexti, uint32_t Edge)
{
- __IO uint32_t *regaddr;
uint32_t regval;
+ uint32_t linepos;
+ uint32_t maskline;
/* Check parameters */
assert_param(IS_EXTI_LINE(hexti->Line));
+ assert_param(IS_EXTI_CONFIG_LINE(hexti->Line));
assert_param(IS_EXTI_PENDING_EDGE(Edge));
- /* Get pending bit */
- regaddr = &EXTI->PR;
+ /* Compute line mask */
+ linepos = (hexti->Line & EXTI_PIN_MASK);
+ maskline = (1uL << linepos);
/* return 1 if bit is set else 0 */
- regval = ((*regaddr & hexti->Line) >> POSITION_VAL(hexti->Line));
-
+ regval = ((EXTI->PR & maskline) >> linepos);
return regval;
}
@@ -410,12 +505,18 @@ uint32_t HAL_EXTI_GetPending(EXTI_HandleTypeDef *hexti, uint32_t Edge)
*/
void HAL_EXTI_ClearPending(EXTI_HandleTypeDef *hexti, uint32_t Edge)
{
+ uint32_t maskline;
+
/* Check parameters */
assert_param(IS_EXTI_LINE(hexti->Line));
+ assert_param(IS_EXTI_CONFIG_LINE(hexti->Line));
assert_param(IS_EXTI_PENDING_EDGE(Edge));
-
+
+ /* Compute line mask */
+ maskline = (1uL << (hexti->Line & EXTI_PIN_MASK));
+
/* Clear Pending bit */
- EXTI->PR = hexti->Line;
+ EXTI->PR = maskline;
}
/**
@@ -425,10 +526,17 @@ void HAL_EXTI_ClearPending(EXTI_HandleTypeDef *hexti, uint32_t Edge)
*/
void HAL_EXTI_GenerateSWI(EXTI_HandleTypeDef *hexti)
{
+ uint32_t maskline;
+
/* Check parameters */
assert_param(IS_EXTI_LINE(hexti->Line));
+ assert_param(IS_EXTI_CONFIG_LINE(hexti->Line));
- EXTI->SWIER = hexti->Line;
+ /* Compute line mask */
+ maskline = (1uL << (hexti->Line & EXTI_PIN_MASK));
+
+ /* Generate Software interrupt */
+ EXTI->SWIER = maskline;
}
/**
diff --git a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_IAR/Prog/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_gpio.c b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_IAR/Prog/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_gpio.c
index ffc617dd..0afa1df1 100644
--- a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_IAR/Prog/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_gpio.c
+++ b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_IAR/Prog/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_gpio.c
@@ -190,25 +190,6 @@ void HAL_GPIO_Init(GPIO_TypeDef *GPIOx, GPIO_InitTypeDef *GPIO_Init)
if(iocurrent == ioposition)
{
/*--------------------- GPIO Mode Configuration ------------------------*/
- /* In case of Alternate function mode selection */
- if((GPIO_Init->Mode == GPIO_MODE_AF_PP) || (GPIO_Init->Mode == GPIO_MODE_AF_OD))
- {
- /* Check the Alternate function parameter */
- assert_param(IS_GPIO_AF(GPIO_Init->Alternate));
-
- /* Configure Alternate function mapped with the current IO */
- temp = GPIOx->AFR[position >> 3];
- temp &= ~((uint32_t)0xF << ((uint32_t)(position & (uint32_t)0x07) * 4)) ;
- temp |= ((uint32_t)(GPIO_Init->Alternate) << (((uint32_t)position & (uint32_t)0x07) * 4));
- GPIOx->AFR[position >> 3] = temp;
- }
-
- /* Configure IO Direction mode (Input, Output, Alternate or Analog) */
- temp = GPIOx->MODER;
- temp &= ~(GPIO_MODER_MODER0 << (position * 2));
- temp |= ((GPIO_Init->Mode & GPIO_MODE) << (position * 2));
- GPIOx->MODER = temp;
-
/* In case of Output or Alternate function mode selection */
if((GPIO_Init->Mode == GPIO_MODE_OUTPUT_PP) || (GPIO_Init->Mode == GPIO_MODE_AF_PP) ||
(GPIO_Init->Mode == GPIO_MODE_OUTPUT_OD) || (GPIO_Init->Mode == GPIO_MODE_AF_OD))
@@ -234,6 +215,25 @@ void HAL_GPIO_Init(GPIO_TypeDef *GPIOx, GPIO_InitTypeDef *GPIO_Init)
temp |= ((GPIO_Init->Pull) << (position * 2));
GPIOx->PUPDR = temp;
+ /* In case of Alternate function mode selection */
+ if((GPIO_Init->Mode == GPIO_MODE_AF_PP) || (GPIO_Init->Mode == GPIO_MODE_AF_OD))
+ {
+ /* Check the Alternate function parameter */
+ assert_param(IS_GPIO_AF(GPIO_Init->Alternate));
+
+ /* Configure Alternate function mapped with the current IO */
+ temp = GPIOx->AFR[position >> 3];
+ temp &= ~((uint32_t)0xF << ((uint32_t)(position & (uint32_t)0x07) * 4)) ;
+ temp |= ((uint32_t)(GPIO_Init->Alternate) << (((uint32_t)position & (uint32_t)0x07) * 4));
+ GPIOx->AFR[position >> 3] = temp;
+ }
+
+ /* Configure IO Direction mode (Input, Output, Alternate or Analog) */
+ temp = GPIOx->MODER;
+ temp &= ~(GPIO_MODER_MODER0 << (position * 2));
+ temp |= ((GPIO_Init->Mode & GPIO_MODE) << (position * 2));
+ GPIOx->MODER = temp;
+
/*--------------------- EXTI Mode Configuration ------------------------*/
/* Configure the External Interrupt or event for the current IO */
if((GPIO_Init->Mode & EXTI_MODE) == EXTI_MODE)
@@ -300,7 +300,7 @@ void HAL_GPIO_DeInit(GPIO_TypeDef *GPIOx, uint32_t GPIO_Pin)
/* Check the parameters */
assert_param(IS_GPIO_ALL_INSTANCE(GPIOx));
-
+
/* Configure the port pins */
for(position = 0; position < GPIO_NUMBER; position++)
{
@@ -316,10 +316,6 @@ void HAL_GPIO_DeInit(GPIO_TypeDef *GPIOx, uint32_t GPIO_Pin)
tmp &= (((uint32_t)0x0F) << (4 * (position & 0x03)));
if(tmp == ((uint32_t)(GPIO_GET_INDEX(GPIOx)) << (4 * (position & 0x03))))
{
- /* Configure the External Interrupt or event for the current IO */
- tmp = ((uint32_t)0x0F) << (4 * (position & 0x03));
- SYSCFG->EXTICR[position >> 2] &= ~tmp;
-
/* Clear EXTI line configuration */
EXTI->IMR &= ~((uint32_t)iocurrent);
EXTI->EMR &= ~((uint32_t)iocurrent);
@@ -327,6 +323,10 @@ void HAL_GPIO_DeInit(GPIO_TypeDef *GPIOx, uint32_t GPIO_Pin)
/* Clear Rising Falling edge configuration */
EXTI->RTSR &= ~((uint32_t)iocurrent);
EXTI->FTSR &= ~((uint32_t)iocurrent);
+
+ /* Configure the External Interrupt or event for the current IO */
+ tmp = ((uint32_t)0x0F) << (4 * (position & 0x03));
+ SYSCFG->EXTICR[position >> 2] &= ~tmp;
}
/*------------------------- GPIO Mode Configuration --------------------*/
/* Configure IO Direction in Input Floating Mode */
@@ -335,14 +335,14 @@ void HAL_GPIO_DeInit(GPIO_TypeDef *GPIOx, uint32_t GPIO_Pin)
/* Configure the default Alternate Function in current IO */
GPIOx->AFR[position >> 3] &= ~((uint32_t)0xF << ((uint32_t)(position & (uint32_t)0x07) * 4)) ;
- /* Configure the default value for IO Speed */
- GPIOx->OSPEEDR &= ~(GPIO_OSPEEDER_OSPEEDR0 << (position * 2));
+ /* Deactivate the Pull-up and Pull-down resistor for the current IO */
+ GPIOx->PUPDR &= ~(GPIO_PUPDR_PUPDR0 << (position * 2));
/* Configure the default value IO Output Type */
GPIOx->OTYPER &= ~(GPIO_OTYPER_OT_0 << position) ;
- /* Deactivate the Pull-up and Pull-down resistor for the current IO */
- GPIOx->PUPDR &= ~(GPIO_PUPDR_PUPDR0 << (position * 2));
+ /* Configure the default value for IO Speed */
+ GPIOx->OSPEEDR &= ~(GPIO_OSPEEDER_OSPEEDR0 << (position * 2));
}
}
}
@@ -431,13 +431,13 @@ void HAL_GPIO_TogglePin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
/* Check the parameters */
assert_param(IS_GPIO_PIN(GPIO_Pin));
- if ((GPIOx->ODR & GPIO_Pin) == GPIO_Pin)
+ if ((GPIOx->ODR & GPIO_Pin) != 0X00u)
{
GPIOx->BSRR = (uint32_t)GPIO_Pin << GPIO_NUMBER;
}
else
{
- GPIOx->BSRR = GPIO_Pin;
+ GPIOx->BSRR = (uint32_t)GPIO_Pin;
}
}
@@ -467,10 +467,11 @@ HAL_StatusTypeDef HAL_GPIO_LockPin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
GPIOx->LCKR = GPIO_Pin;
/* Set LCKx bit(s): LCKK='1' + LCK[15-0] */
GPIOx->LCKR = tmp;
- /* Read LCKK bit*/
+ /* Read LCKR register. This read is mandatory to complete key lock sequence */
tmp = GPIOx->LCKR;
- if((GPIOx->LCKR & GPIO_LCKR_LCKK) != RESET)
+ /* Read again in order to confirm lock is active */
+ if((GPIOx->LCKR & GPIO_LCKR_LCKK) != RESET)
{
return HAL_OK;
}
diff --git a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_IAR/Prog/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_i2c.c b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_IAR/Prog/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_i2c.c
index 775bff23..ef049ec4 100644
--- a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_IAR/Prog/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_i2c.c
+++ b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_IAR/Prog/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_i2c.c
@@ -223,12 +223,12 @@
*** Callback registration ***
=============================================
-
+ [..]
The compilation flag USE_HAL_I2C_REGISTER_CALLBACKS when set to 1
allows the user to configure dynamically the driver callbacks.
Use Functions @ref HAL_I2C_RegisterCallback() or @ref HAL_I2C_RegisterAddrCallback()
to register an interrupt callback.
-
+ [..]
Function @ref HAL_I2C_RegisterCallback() allows to register following callbacks:
(+) MasterTxCpltCallback : callback for Master transmission end of transfer.
(+) MasterRxCpltCallback : callback for Master reception end of transfer.
@@ -243,9 +243,9 @@
(+) MspDeInitCallback : callback for Msp DeInit.
This function takes as parameters the HAL peripheral handle, the Callback ID
and a pointer to the user callback function.
-
+ [..]
For specific callback AddrCallback use dedicated register callbacks : @ref HAL_I2C_RegisterAddrCallback().
-
+ [..]
Use function @ref HAL_I2C_UnRegisterCallback to reset a callback to the default
weak function.
@ref HAL_I2C_UnRegisterCallback takes as parameters the HAL peripheral handle,
@@ -262,9 +262,9 @@
(+) AbortCpltCallback : callback for abort completion process.
(+) MspInitCallback : callback for Msp Init.
(+) MspDeInitCallback : callback for Msp DeInit.
-
+ [..]
For callback AddrCallback use dedicated register callbacks : @ref HAL_I2C_UnRegisterAddrCallback().
-
+ [..]
By default, after the @ref HAL_I2C_Init() and when the state is @ref HAL_I2C_STATE_RESET
all callbacks are set to the corresponding weak functions:
examples @ref HAL_I2C_MasterTxCpltCallback(), @ref HAL_I2C_MasterRxCpltCallback().
@@ -273,7 +273,7 @@
these callbacks are null (not registered beforehand).
If MspInit or MspDeInit are not null, the @ref HAL_I2C_Init()/ @ref HAL_I2C_DeInit()
keep and use the user MspInit/MspDeInit callbacks (registered beforehand) whatever the state.
-
+ [..]
Callbacks can be registered/unregistered in @ref HAL_I2C_STATE_READY state only.
Exception done MspInit/MspDeInit functions that can be registered/unregistered
in @ref HAL_I2C_STATE_READY or @ref HAL_I2C_STATE_RESET state,
@@ -281,7 +281,7 @@
Then, the user first registers the MspInit/MspDeInit user callbacks
using @ref HAL_I2C_RegisterCallback() before calling @ref HAL_I2C_DeInit()
or @ref HAL_I2C_Init() function.
-
+ [..]
When the compilation flag USE_HAL_I2C_REGISTER_CALLBACKS is set to 0 or
not defined, the callback registration feature is not available and all callbacks
are set to the corresponding weak functions.
@@ -4737,6 +4737,13 @@ static HAL_StatusTypeDef I2C_Slave_ISR_IT(struct __I2C_HandleTypeDef *hi2c, uint
/* Process locked */
__HAL_LOCK(hi2c);
+ /* Check if STOPF is set */
+ if ((I2C_CHECK_FLAG(tmpITFlags, I2C_FLAG_STOPF) != RESET) && (I2C_CHECK_IT_SOURCE(ITSources, I2C_IT_STOPI) != RESET))
+ {
+ /* Call I2C Slave complete process */
+ I2C_ITSlaveCplt(hi2c, tmpITFlags);
+ }
+
if ((I2C_CHECK_FLAG(tmpITFlags, I2C_FLAG_AF) != RESET) && (I2C_CHECK_IT_SOURCE(ITSources, I2C_IT_NACKI) != RESET))
{
/* Check that I2C transfer finished */
@@ -4788,9 +4795,6 @@ static HAL_StatusTypeDef I2C_Slave_ISR_IT(struct __I2C_HandleTypeDef *hi2c, uint
{
if (hi2c->XferCount > 0U)
{
- /* Remove RXNE flag on temporary variable as read done */
- tmpITFlags &= ~I2C_FLAG_RXNE;
-
/* Read data from RXDR */
*hi2c->pBuffPtr = (uint8_t)hi2c->Instance->RXDR;
@@ -4844,13 +4848,6 @@ static HAL_StatusTypeDef I2C_Slave_ISR_IT(struct __I2C_HandleTypeDef *hi2c, uint
/* Nothing to do */
}
- /* Check if STOPF is set */
- if ((I2C_CHECK_FLAG(tmpITFlags, I2C_FLAG_STOPF) != RESET) && (I2C_CHECK_IT_SOURCE(ITSources, I2C_IT_STOPI) != RESET))
- {
- /* Call I2C Slave complete process */
- I2C_ITSlaveCplt(hi2c, tmpITFlags);
- }
-
/* Process Unlocked */
__HAL_UNLOCK(hi2c);
@@ -5008,6 +5005,13 @@ static HAL_StatusTypeDef I2C_Slave_ISR_DMA(struct __I2C_HandleTypeDef *hi2c, uin
/* Process locked */
__HAL_LOCK(hi2c);
+ /* Check if STOPF is set */
+ if ((I2C_CHECK_FLAG(ITFlags, I2C_FLAG_STOPF) != RESET) && (I2C_CHECK_IT_SOURCE(ITSources, I2C_IT_STOPI) != RESET))
+ {
+ /* Call I2C Slave complete process */
+ I2C_ITSlaveCplt(hi2c, ITFlags);
+ }
+
if ((I2C_CHECK_FLAG(ITFlags, I2C_FLAG_AF) != RESET) && (I2C_CHECK_IT_SOURCE(ITSources, I2C_IT_NACKI) != RESET))
{
/* Check that I2C transfer finished */
@@ -5092,11 +5096,6 @@ static HAL_StatusTypeDef I2C_Slave_ISR_DMA(struct __I2C_HandleTypeDef *hi2c, uin
{
I2C_ITAddrCplt(hi2c, ITFlags);
}
- else if ((I2C_CHECK_FLAG(ITFlags, I2C_FLAG_STOPF) != RESET) && (I2C_CHECK_IT_SOURCE(ITSources, I2C_IT_STOPI) != RESET))
- {
- /* Call I2C Slave complete process */
- I2C_ITSlaveCplt(hi2c, ITFlags);
- }
else
{
/* Nothing to do */
diff --git a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_IAR/Prog/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_rcc.c b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_IAR/Prog/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_rcc.c
index bf33cff4..d63a6f4e 100644
--- a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_IAR/Prog/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_rcc.c
+++ b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_IAR/Prog/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_rcc.c
@@ -317,7 +317,7 @@ HAL_StatusTypeDef HAL_RCC_DeInit(void)
SystemCoreClock = HSI_VALUE;
/* Adapt Systick interrupt period */
- if(HAL_InitTick(TICK_INT_PRIORITY) != HAL_OK)
+ if (HAL_InitTick(uwTickPrio) != HAL_OK)
{
return HAL_ERROR;
}
@@ -344,10 +344,11 @@ HAL_StatusTypeDef HAL_RCC_DeInit(void)
HAL_StatusTypeDef HAL_RCC_OscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct)
{
uint32_t tickstart;
+ uint32_t pll_config;
FlagStatus pwrclkchanged = RESET;
/* Check Null pointer */
- if(RCC_OscInitStruct == NULL)
+ if (RCC_OscInitStruct == NULL)
{
return HAL_ERROR;
}
@@ -356,15 +357,15 @@ HAL_StatusTypeDef HAL_RCC_OscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct)
assert_param(IS_RCC_OSCILLATORTYPE(RCC_OscInitStruct->OscillatorType));
/*------------------------------- HSE Configuration ------------------------*/
- if(((RCC_OscInitStruct->OscillatorType) & RCC_OSCILLATORTYPE_HSE) == RCC_OSCILLATORTYPE_HSE)
+ if (((RCC_OscInitStruct->OscillatorType) & RCC_OSCILLATORTYPE_HSE) == RCC_OSCILLATORTYPE_HSE)
{
/* Check the parameters */
assert_param(IS_RCC_HSE(RCC_OscInitStruct->HSEState));
/* When the HSE is used as system clock or clock source for PLL, It can not be disabled */
- if((__HAL_RCC_GET_SYSCLK_SOURCE() == RCC_SYSCLKSOURCE_STATUS_HSE)
- || ((__HAL_RCC_GET_SYSCLK_SOURCE() == RCC_SYSCLKSOURCE_STATUS_PLLCLK) && ((RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC) == RCC_PLLCFGR_PLLSRC_HSE)))
+ if ((__HAL_RCC_GET_SYSCLK_SOURCE() == RCC_SYSCLKSOURCE_STATUS_HSE)
+ || ((__HAL_RCC_GET_SYSCLK_SOURCE() == RCC_SYSCLKSOURCE_STATUS_PLLCLK) && ((RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC) == RCC_PLLCFGR_PLLSRC_HSE)))
{
- if((__HAL_RCC_GET_FLAG(RCC_FLAG_HSERDY) != RESET) && (RCC_OscInitStruct->HSEState == RCC_HSE_OFF))
+ if ((__HAL_RCC_GET_FLAG(RCC_FLAG_HSERDY) != RESET) && (RCC_OscInitStruct->HSEState == RCC_HSE_OFF))
{
return HAL_ERROR;
}
@@ -375,15 +376,15 @@ HAL_StatusTypeDef HAL_RCC_OscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct)
__HAL_RCC_HSE_CONFIG(RCC_OscInitStruct->HSEState);
/* Check the HSE State */
- if(RCC_OscInitStruct->HSEState != RCC_HSE_OFF)
+ if (RCC_OscInitStruct->HSEState != RCC_HSE_OFF)
{
/* Get Start Tick*/
tickstart = HAL_GetTick();
/* Wait till HSE is ready */
- while(__HAL_RCC_GET_FLAG(RCC_FLAG_HSERDY) == RESET)
+ while (__HAL_RCC_GET_FLAG(RCC_FLAG_HSERDY) == RESET)
{
- if((HAL_GetTick() - tickstart ) > HSE_TIMEOUT_VALUE)
+ if ((HAL_GetTick() - tickstart) > HSE_TIMEOUT_VALUE)
{
return HAL_TIMEOUT;
}
@@ -395,9 +396,9 @@ HAL_StatusTypeDef HAL_RCC_OscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct)
tickstart = HAL_GetTick();
/* Wait till HSE is bypassed or disabled */
- while(__HAL_RCC_GET_FLAG(RCC_FLAG_HSERDY) != RESET)
+ while (__HAL_RCC_GET_FLAG(RCC_FLAG_HSERDY) != RESET)
{
- if((HAL_GetTick() - tickstart ) > HSE_TIMEOUT_VALUE)
+ if ((HAL_GetTick() - tickstart) > HSE_TIMEOUT_VALUE)
{
return HAL_TIMEOUT;
}
@@ -406,18 +407,18 @@ HAL_StatusTypeDef HAL_RCC_OscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct)
}
}
/*----------------------------- HSI Configuration --------------------------*/
- if(((RCC_OscInitStruct->OscillatorType) & RCC_OSCILLATORTYPE_HSI) == RCC_OSCILLATORTYPE_HSI)
+ if (((RCC_OscInitStruct->OscillatorType) & RCC_OSCILLATORTYPE_HSI) == RCC_OSCILLATORTYPE_HSI)
{
/* Check the parameters */
assert_param(IS_RCC_HSI(RCC_OscInitStruct->HSIState));
assert_param(IS_RCC_CALIBRATION_VALUE(RCC_OscInitStruct->HSICalibrationValue));
/* Check if HSI is used as system clock or as PLL source when PLL is selected as system clock */
- if((__HAL_RCC_GET_SYSCLK_SOURCE() == RCC_SYSCLKSOURCE_STATUS_HSI)
- || ((__HAL_RCC_GET_SYSCLK_SOURCE() == RCC_SYSCLKSOURCE_STATUS_PLLCLK) && ((RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC) == RCC_PLLCFGR_PLLSRC_HSI)))
+ if ((__HAL_RCC_GET_SYSCLK_SOURCE() == RCC_SYSCLKSOURCE_STATUS_HSI)
+ || ((__HAL_RCC_GET_SYSCLK_SOURCE() == RCC_SYSCLKSOURCE_STATUS_PLLCLK) && ((RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC) == RCC_PLLCFGR_PLLSRC_HSI)))
{
/* When HSI is used as system clock it will not disabled */
- if((__HAL_RCC_GET_FLAG(RCC_FLAG_HSIRDY) != RESET) && (RCC_OscInitStruct->HSIState != RCC_HSI_ON))
+ if ((__HAL_RCC_GET_FLAG(RCC_FLAG_HSIRDY) != RESET) && (RCC_OscInitStruct->HSIState != RCC_HSI_ON))
{
return HAL_ERROR;
}
@@ -431,7 +432,7 @@ HAL_StatusTypeDef HAL_RCC_OscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct)
else
{
/* Check the HSI State */
- if((RCC_OscInitStruct->HSIState)!= RCC_HSI_OFF)
+ if ((RCC_OscInitStruct->HSIState) != RCC_HSI_OFF)
{
/* Enable the Internal High Speed oscillator (HSI). */
__HAL_RCC_HSI_ENABLE();
@@ -440,9 +441,9 @@ HAL_StatusTypeDef HAL_RCC_OscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct)
tickstart = HAL_GetTick();
/* Wait till HSI is ready */
- while(__HAL_RCC_GET_FLAG(RCC_FLAG_HSIRDY) == RESET)
+ while (__HAL_RCC_GET_FLAG(RCC_FLAG_HSIRDY) == RESET)
{
- if((HAL_GetTick() - tickstart ) > HSI_TIMEOUT_VALUE)
+ if ((HAL_GetTick() - tickstart) > HSI_TIMEOUT_VALUE)
{
return HAL_TIMEOUT;
}
@@ -460,9 +461,9 @@ HAL_StatusTypeDef HAL_RCC_OscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct)
tickstart = HAL_GetTick();
/* Wait till HSI is ready */
- while(__HAL_RCC_GET_FLAG(RCC_FLAG_HSIRDY) != RESET)
+ while (__HAL_RCC_GET_FLAG(RCC_FLAG_HSIRDY) != RESET)
{
- if((HAL_GetTick() - tickstart ) > HSI_TIMEOUT_VALUE)
+ if ((HAL_GetTick() - tickstart) > HSI_TIMEOUT_VALUE)
{
return HAL_TIMEOUT;
}
@@ -471,13 +472,13 @@ HAL_StatusTypeDef HAL_RCC_OscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct)
}
}
/*------------------------------ LSI Configuration -------------------------*/
- if(((RCC_OscInitStruct->OscillatorType) & RCC_OSCILLATORTYPE_LSI) == RCC_OSCILLATORTYPE_LSI)
+ if (((RCC_OscInitStruct->OscillatorType) & RCC_OSCILLATORTYPE_LSI) == RCC_OSCILLATORTYPE_LSI)
{
/* Check the parameters */
assert_param(IS_RCC_LSI(RCC_OscInitStruct->LSIState));
/* Check the LSI State */
- if((RCC_OscInitStruct->LSIState)!= RCC_LSI_OFF)
+ if ((RCC_OscInitStruct->LSIState) != RCC_LSI_OFF)
{
/* Enable the Internal Low Speed oscillator (LSI). */
__HAL_RCC_LSI_ENABLE();
@@ -486,9 +487,9 @@ HAL_StatusTypeDef HAL_RCC_OscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct)
tickstart = HAL_GetTick();
/* Wait till LSI is ready */
- while(__HAL_RCC_GET_FLAG(RCC_FLAG_LSIRDY) == RESET)
+ while (__HAL_RCC_GET_FLAG(RCC_FLAG_LSIRDY) == RESET)
{
- if((HAL_GetTick() - tickstart ) > LSI_TIMEOUT_VALUE)
+ if ((HAL_GetTick() - tickstart) > LSI_TIMEOUT_VALUE)
{
return HAL_TIMEOUT;
}
@@ -503,9 +504,9 @@ HAL_StatusTypeDef HAL_RCC_OscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct)
tickstart = HAL_GetTick();
/* Wait till LSI is ready */
- while(__HAL_RCC_GET_FLAG(RCC_FLAG_LSIRDY) != RESET)
+ while (__HAL_RCC_GET_FLAG(RCC_FLAG_LSIRDY) != RESET)
{
- if((HAL_GetTick() - tickstart ) > LSI_TIMEOUT_VALUE)
+ if ((HAL_GetTick() - tickstart) > LSI_TIMEOUT_VALUE)
{
return HAL_TIMEOUT;
}
@@ -513,21 +514,21 @@ HAL_StatusTypeDef HAL_RCC_OscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct)
}
}
/*------------------------------ LSE Configuration -------------------------*/
- if(((RCC_OscInitStruct->OscillatorType) & RCC_OSCILLATORTYPE_LSE) == RCC_OSCILLATORTYPE_LSE)
+ if (((RCC_OscInitStruct->OscillatorType) & RCC_OSCILLATORTYPE_LSE) == RCC_OSCILLATORTYPE_LSE)
{
/* Check the parameters */
assert_param(IS_RCC_LSE(RCC_OscInitStruct->LSEState));
/* Update LSE configuration in Backup Domain control register */
/* Requires to enable write access to Backup Domain of necessary */
- if(__HAL_RCC_PWR_IS_CLK_DISABLED())
+ if (__HAL_RCC_PWR_IS_CLK_DISABLED())
{
/* Enable Power Clock*/
__HAL_RCC_PWR_CLK_ENABLE();
pwrclkchanged = SET;
}
- if(HAL_IS_BIT_CLR(PWR->CR1, PWR_CR1_DBP))
+ if (HAL_IS_BIT_CLR(PWR->CR1, PWR_CR1_DBP))
{
/* Enable write access to Backup domain */
PWR->CR1 |= PWR_CR1_DBP;
@@ -535,9 +536,9 @@ HAL_StatusTypeDef HAL_RCC_OscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct)
/* Wait for Backup domain Write protection disable */
tickstart = HAL_GetTick();
- while(HAL_IS_BIT_CLR(PWR->CR1, PWR_CR1_DBP))
+ while (HAL_IS_BIT_CLR(PWR->CR1, PWR_CR1_DBP))
{
- if((HAL_GetTick() - tickstart ) > RCC_DBP_TIMEOUT_VALUE)
+ if ((HAL_GetTick() - tickstart) > RCC_DBP_TIMEOUT_VALUE)
{
return HAL_TIMEOUT;
}
@@ -547,15 +548,15 @@ HAL_StatusTypeDef HAL_RCC_OscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct)
/* Set the new LSE configuration -----------------------------------------*/
__HAL_RCC_LSE_CONFIG(RCC_OscInitStruct->LSEState);
/* Check the LSE State */
- if((RCC_OscInitStruct->LSEState) != RCC_LSE_OFF)
+ if ((RCC_OscInitStruct->LSEState) != RCC_LSE_OFF)
{
/* Get Start Tick*/
tickstart = HAL_GetTick();
/* Wait till LSE is ready */
- while(__HAL_RCC_GET_FLAG(RCC_FLAG_LSERDY) == RESET)
+ while (__HAL_RCC_GET_FLAG(RCC_FLAG_LSERDY) == RESET)
{
- if((HAL_GetTick() - tickstart ) > RCC_LSE_TIMEOUT_VALUE)
+ if ((HAL_GetTick() - tickstart) > RCC_LSE_TIMEOUT_VALUE)
{
return HAL_TIMEOUT;
}
@@ -567,9 +568,9 @@ HAL_StatusTypeDef HAL_RCC_OscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct)
tickstart = HAL_GetTick();
/* Wait till LSE is ready */
- while(__HAL_RCC_GET_FLAG(RCC_FLAG_LSERDY) != RESET)
+ while (__HAL_RCC_GET_FLAG(RCC_FLAG_LSERDY) != RESET)
{
- if((HAL_GetTick() - tickstart ) > RCC_LSE_TIMEOUT_VALUE)
+ if ((HAL_GetTick() - tickstart) > RCC_LSE_TIMEOUT_VALUE)
{
return HAL_TIMEOUT;
}
@@ -577,7 +578,7 @@ HAL_StatusTypeDef HAL_RCC_OscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct)
}
/* Restore clock configuration if changed */
- if(pwrclkchanged == SET)
+ if (pwrclkchanged == SET)
{
__HAL_RCC_PWR_CLK_DISABLE();
}
@@ -588,9 +589,9 @@ HAL_StatusTypeDef HAL_RCC_OscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct)
if ((RCC_OscInitStruct->PLL.PLLState) != RCC_PLL_NONE)
{
/* Check if the PLL is used as system clock or not */
- if(__HAL_RCC_GET_SYSCLK_SOURCE() != RCC_SYSCLKSOURCE_STATUS_PLLCLK)
+ if (__HAL_RCC_GET_SYSCLK_SOURCE() != RCC_SYSCLKSOURCE_STATUS_PLLCLK)
{
- if((RCC_OscInitStruct->PLL.PLLState) == RCC_PLL_ON)
+ if ((RCC_OscInitStruct->PLL.PLLState) == RCC_PLL_ON)
{
/* Check the parameters */
assert_param(IS_RCC_PLLSOURCE(RCC_OscInitStruct->PLL.PLLSource));
@@ -609,9 +610,9 @@ HAL_StatusTypeDef HAL_RCC_OscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct)
tickstart = HAL_GetTick();
/* Wait till PLL is ready */
- while(__HAL_RCC_GET_FLAG(RCC_FLAG_PLLRDY) != RESET)
+ while (__HAL_RCC_GET_FLAG(RCC_FLAG_PLLRDY) != RESET)
{
- if((HAL_GetTick() - tickstart ) > PLL_TIMEOUT_VALUE)
+ if ((HAL_GetTick() - tickstart) > PLL_TIMEOUT_VALUE)
{
return HAL_TIMEOUT;
}
@@ -640,9 +641,9 @@ HAL_StatusTypeDef HAL_RCC_OscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct)
tickstart = HAL_GetTick();
/* Wait till PLL is ready */
- while(__HAL_RCC_GET_FLAG(RCC_FLAG_PLLRDY) == RESET)
+ while (__HAL_RCC_GET_FLAG(RCC_FLAG_PLLRDY) == RESET)
{
- if((HAL_GetTick() - tickstart ) > PLL_TIMEOUT_VALUE)
+ if ((HAL_GetTick() - tickstart) > PLL_TIMEOUT_VALUE)
{
return HAL_TIMEOUT;
}
@@ -657,9 +658,9 @@ HAL_StatusTypeDef HAL_RCC_OscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct)
tickstart = HAL_GetTick();
/* Wait till PLL is ready */
- while(__HAL_RCC_GET_FLAG(RCC_FLAG_PLLRDY) != RESET)
+ while (__HAL_RCC_GET_FLAG(RCC_FLAG_PLLRDY) != RESET)
{
- if((HAL_GetTick() - tickstart ) > PLL_TIMEOUT_VALUE)
+ if ((HAL_GetTick() - tickstart) > PLL_TIMEOUT_VALUE)
{
return HAL_TIMEOUT;
}
@@ -668,7 +669,27 @@ HAL_StatusTypeDef HAL_RCC_OscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct)
}
else
{
- return HAL_ERROR;
+ /* Do not return HAL_ERROR if request repeats the current configuration */
+ pll_config = RCC->PLLCFGR;
+#if defined (RCC_PLLCFGR_PLLR)
+ if (((RCC_OscInitStruct->PLL.PLLState) == RCC_PLL_OFF) ||
+ (READ_BIT(pll_config, RCC_PLLCFGR_PLLSRC) != RCC_OscInitStruct->PLL.PLLSource) ||
+ (READ_BIT(pll_config, RCC_PLLCFGR_PLLM) != RCC_OscInitStruct->PLL.PLLM) ||
+ (READ_BIT(pll_config, RCC_PLLCFGR_PLLN) != (RCC_OscInitStruct->PLL.PLLN << RCC_PLLCFGR_PLLN_Pos)) ||
+ (READ_BIT(pll_config, RCC_PLLCFGR_PLLP) != ((((RCC_OscInitStruct->PLL.PLLP) >> 1U) - 1U) << RCC_PLLCFGR_PLLP_Pos)) ||
+ (READ_BIT(pll_config, RCC_PLLCFGR_PLLQ) != (RCC_OscInitStruct->PLL.PLLQ << RCC_PLLCFGR_PLLQ_Pos)) ||
+ (READ_BIT(pll_config, RCC_PLLCFGR_PLLR) != (RCC_OscInitStruct->PLL.PLLR << RCC_PLLCFGR_PLLR_Pos)))
+#else
+ if (((RCC_OscInitStruct->PLL.PLLState) == RCC_PLL_OFF) ||
+ (READ_BIT(pll_config, RCC_PLLCFGR_PLLSRC) != RCC_OscInitStruct->PLL.PLLSource) ||
+ (READ_BIT(pll_config, RCC_PLLCFGR_PLLM) != RCC_OscInitStruct->PLL.PLLM) ||
+ (READ_BIT(pll_config, RCC_PLLCFGR_PLLN) != (RCC_OscInitStruct->PLL.PLLN << RCC_PLLCFGR_PLLN_Pos)) ||
+ (READ_BIT(pll_config, RCC_PLLCFGR_PLLP) != ((((RCC_OscInitStruct->PLL.PLLP) >> 1U) - 1U) << RCC_PLLCFGR_PLLP_Pos)) ||
+ (READ_BIT(pll_config, RCC_PLLCFGR_PLLQ) != (RCC_OscInitStruct->PLL.PLLQ << RCC_PLLCFGR_PLLQ_Pos)))
+#endif
+ {
+ return HAL_ERROR;
+ }
}
}
return HAL_OK;
@@ -705,7 +726,7 @@ HAL_StatusTypeDef HAL_RCC_ClockConfig(RCC_ClkInitTypeDef *RCC_ClkInitStruct, ui
uint32_t tickstart = 0;
/* Check Null pointer */
- if(RCC_ClkInitStruct == NULL)
+ if (RCC_ClkInitStruct == NULL)
{
return HAL_ERROR;
}
@@ -719,30 +740,30 @@ HAL_StatusTypeDef HAL_RCC_ClockConfig(RCC_ClkInitTypeDef *RCC_ClkInitStruct, ui
(HCLK) and the supply voltage of the device. */
/* Increasing the CPU frequency */
- if(FLatency > __HAL_FLASH_GET_LATENCY())
+ if (FLatency > __HAL_FLASH_GET_LATENCY())
{
/* Program the new number of wait states to the LATENCY bits in the FLASH_ACR register */
__HAL_FLASH_SET_LATENCY(FLatency);
/* Check that the new number of wait states is taken into account to access the Flash
memory by reading the FLASH_ACR register */
- if(__HAL_FLASH_GET_LATENCY() != FLatency)
+ if (__HAL_FLASH_GET_LATENCY() != FLatency)
{
return HAL_ERROR;
}
}
/*-------------------------- HCLK Configuration --------------------------*/
- if(((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_HCLK) == RCC_CLOCKTYPE_HCLK)
+ if (((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_HCLK) == RCC_CLOCKTYPE_HCLK)
{
/* Set the highest APBx dividers in order to ensure that we do not go through
a non-spec phase whatever we decrease or increase HCLK. */
- if(((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_PCLK1) == RCC_CLOCKTYPE_PCLK1)
+ if (((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_PCLK1) == RCC_CLOCKTYPE_PCLK1)
{
MODIFY_REG(RCC->CFGR, RCC_CFGR_PPRE1, RCC_HCLK_DIV16);
}
- if(((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_PCLK2) == RCC_CLOCKTYPE_PCLK2)
+ if (((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_PCLK2) == RCC_CLOCKTYPE_PCLK2)
{
MODIFY_REG(RCC->CFGR, RCC_CFGR_PPRE2, (RCC_HCLK_DIV16 << 3));
}
@@ -753,24 +774,24 @@ HAL_StatusTypeDef HAL_RCC_ClockConfig(RCC_ClkInitTypeDef *RCC_ClkInitStruct, ui
}
/*------------------------- SYSCLK Configuration ---------------------------*/
- if(((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_SYSCLK) == RCC_CLOCKTYPE_SYSCLK)
+ if (((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_SYSCLK) == RCC_CLOCKTYPE_SYSCLK)
{
assert_param(IS_RCC_SYSCLKSOURCE(RCC_ClkInitStruct->SYSCLKSource));
/* HSE is selected as System Clock Source */
- if(RCC_ClkInitStruct->SYSCLKSource == RCC_SYSCLKSOURCE_HSE)
+ if (RCC_ClkInitStruct->SYSCLKSource == RCC_SYSCLKSOURCE_HSE)
{
/* Check the HSE ready flag */
- if(__HAL_RCC_GET_FLAG(RCC_FLAG_HSERDY) == RESET)
+ if (__HAL_RCC_GET_FLAG(RCC_FLAG_HSERDY) == RESET)
{
return HAL_ERROR;
}
}
/* PLL is selected as System Clock Source */
- else if(RCC_ClkInitStruct->SYSCLKSource == RCC_SYSCLKSOURCE_PLLCLK)
+ else if (RCC_ClkInitStruct->SYSCLKSource == RCC_SYSCLKSOURCE_PLLCLK)
{
/* Check the PLL ready flag */
- if(__HAL_RCC_GET_FLAG(RCC_FLAG_PLLRDY) == RESET)
+ if (__HAL_RCC_GET_FLAG(RCC_FLAG_PLLRDY) == RESET)
{
return HAL_ERROR;
}
@@ -779,7 +800,7 @@ HAL_StatusTypeDef HAL_RCC_ClockConfig(RCC_ClkInitTypeDef *RCC_ClkInitStruct, ui
else
{
/* Check the HSI ready flag */
- if(__HAL_RCC_GET_FLAG(RCC_FLAG_HSIRDY) == RESET)
+ if (__HAL_RCC_GET_FLAG(RCC_FLAG_HSIRDY) == RESET)
{
return HAL_ERROR;
}
@@ -800,38 +821,38 @@ HAL_StatusTypeDef HAL_RCC_ClockConfig(RCC_ClkInitTypeDef *RCC_ClkInitStruct, ui
}
/* Decreasing the number of wait states because of lower CPU frequency */
- if(FLatency < __HAL_FLASH_GET_LATENCY())
+ if (FLatency < __HAL_FLASH_GET_LATENCY())
{
/* Program the new number of wait states to the LATENCY bits in the FLASH_ACR register */
__HAL_FLASH_SET_LATENCY(FLatency);
/* Check that the new number of wait states is taken into account to access the Flash
memory by reading the FLASH_ACR register */
- if(__HAL_FLASH_GET_LATENCY() != FLatency)
+ if (__HAL_FLASH_GET_LATENCY() != FLatency)
{
return HAL_ERROR;
}
}
/*-------------------------- PCLK1 Configuration ---------------------------*/
- if(((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_PCLK1) == RCC_CLOCKTYPE_PCLK1)
+ if (((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_PCLK1) == RCC_CLOCKTYPE_PCLK1)
{
assert_param(IS_RCC_PCLK(RCC_ClkInitStruct->APB1CLKDivider));
MODIFY_REG(RCC->CFGR, RCC_CFGR_PPRE1, RCC_ClkInitStruct->APB1CLKDivider);
}
/*-------------------------- PCLK2 Configuration ---------------------------*/
- if(((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_PCLK2) == RCC_CLOCKTYPE_PCLK2)
+ if (((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_PCLK2) == RCC_CLOCKTYPE_PCLK2)
{
assert_param(IS_RCC_PCLK(RCC_ClkInitStruct->APB2CLKDivider));
MODIFY_REG(RCC->CFGR, RCC_CFGR_PPRE2, ((RCC_ClkInitStruct->APB2CLKDivider) << 3));
}
/* Update the SystemCoreClock global variable */
- SystemCoreClock = HAL_RCC_GetSysClockFreq() >> AHBPrescTable[(RCC->CFGR & RCC_CFGR_HPRE)>> RCC_CFGR_HPRE_Pos];
+ SystemCoreClock = HAL_RCC_GetSysClockFreq() >> AHBPrescTable[(RCC->CFGR & RCC_CFGR_HPRE) >> RCC_CFGR_HPRE_Pos];
/* Configure the source of time base considering new system clocks settings*/
- HAL_InitTick (TICK_INT_PRIORITY);
+ HAL_InitTick(uwTickPrio);
return HAL_OK;
}
@@ -888,7 +909,7 @@ void HAL_RCC_MCOConfig(uint32_t RCC_MCOx, uint32_t RCC_MCOSource, uint32_t RCC_M
assert_param(IS_RCC_MCO(RCC_MCOx));
assert_param(IS_RCC_MCODIV(RCC_MCODiv));
/* RCC_MCO1 */
- if(RCC_MCOx == RCC_MCO1)
+ if (RCC_MCOx == RCC_MCO1)
{
assert_param(IS_RCC_MCO1SOURCE(RCC_MCOSource));
@@ -990,7 +1011,7 @@ uint32_t HAL_RCC_GetSysClockFreq(void)
case RCC_SYSCLKSOURCE_STATUS_HSI: /* HSI used as system clock source */
{
sysclockfreq = HSI_VALUE;
- break;
+ break;
}
case RCC_SYSCLKSOURCE_STATUS_HSE: /* HSE used as system clock source */
{
@@ -1005,16 +1026,16 @@ uint32_t HAL_RCC_GetSysClockFreq(void)
if (__HAL_RCC_GET_PLL_OSCSOURCE() != RCC_PLLCFGR_PLLSRC_HSI)
{
/* HSE used as PLL clock source */
- pllvco = (uint32_t) ((((uint64_t) HSE_VALUE * ((uint64_t) ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> RCC_PLLCFGR_PLLN_Pos)))) / (uint64_t)pllm);
+ pllvco = (uint32_t)((((uint64_t) HSE_VALUE * ((uint64_t)((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> RCC_PLLCFGR_PLLN_Pos)))) / (uint64_t)pllm);
}
else
{
/* HSI used as PLL clock source */
- pllvco = (uint32_t) ((((uint64_t) HSI_VALUE * ((uint64_t) ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> RCC_PLLCFGR_PLLN_Pos)))) / (uint64_t)pllm);
+ pllvco = (uint32_t)((((uint64_t) HSI_VALUE * ((uint64_t)((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> RCC_PLLCFGR_PLLN_Pos)))) / (uint64_t)pllm);
}
- pllp = ((((RCC->PLLCFGR & RCC_PLLCFGR_PLLP) >> RCC_PLLCFGR_PLLP_Pos) + 1 ) *2);
+ pllp = ((((RCC->PLLCFGR & RCC_PLLCFGR_PLLP) >> RCC_PLLCFGR_PLLP_Pos) + 1) * 2);
- sysclockfreq = pllvco/pllp;
+ sysclockfreq = pllvco / pllp;
break;
}
default:
@@ -1047,7 +1068,7 @@ uint32_t HAL_RCC_GetHCLKFreq(void)
uint32_t HAL_RCC_GetPCLK1Freq(void)
{
/* Get HCLK source and Compute PCLK1 frequency ---------------------------*/
- return (HAL_RCC_GetHCLKFreq() >> APBPrescTable[(RCC->CFGR & RCC_CFGR_PPRE1)>> RCC_CFGR_PPRE1_Pos]);
+ return (HAL_RCC_GetHCLKFreq() >> APBPrescTable[(RCC->CFGR & RCC_CFGR_PPRE1) >> RCC_CFGR_PPRE1_Pos]);
}
/**
@@ -1059,7 +1080,7 @@ uint32_t HAL_RCC_GetPCLK1Freq(void)
uint32_t HAL_RCC_GetPCLK2Freq(void)
{
/* Get HCLK source and Compute PCLK2 frequency ---------------------------*/
- return (HAL_RCC_GetHCLKFreq()>> APBPrescTable[(RCC->CFGR & RCC_CFGR_PPRE2)>> RCC_CFGR_PPRE2_Pos]);
+ return (HAL_RCC_GetHCLKFreq() >> APBPrescTable[(RCC->CFGR & RCC_CFGR_PPRE2) >> RCC_CFGR_PPRE2_Pos]);
}
/**
@@ -1075,11 +1096,11 @@ void HAL_RCC_GetOscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct)
RCC_OscInitStruct->OscillatorType = RCC_OSCILLATORTYPE_HSE | RCC_OSCILLATORTYPE_HSI | RCC_OSCILLATORTYPE_LSE | RCC_OSCILLATORTYPE_LSI;
/* Get the HSE configuration -----------------------------------------------*/
- if((RCC->CR &RCC_CR_HSEBYP) == RCC_CR_HSEBYP)
+ if ((RCC->CR & RCC_CR_HSEBYP) == RCC_CR_HSEBYP)
{
RCC_OscInitStruct->HSEState = RCC_HSE_BYPASS;
}
- else if((RCC->CR &RCC_CR_HSEON) == RCC_CR_HSEON)
+ else if ((RCC->CR & RCC_CR_HSEON) == RCC_CR_HSEON)
{
RCC_OscInitStruct->HSEState = RCC_HSE_ON;
}
@@ -1089,7 +1110,7 @@ void HAL_RCC_GetOscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct)
}
/* Get the HSI configuration -----------------------------------------------*/
- if((RCC->CR &RCC_CR_HSION) == RCC_CR_HSION)
+ if ((RCC->CR & RCC_CR_HSION) == RCC_CR_HSION)
{
RCC_OscInitStruct->HSIState = RCC_HSI_ON;
}
@@ -1098,14 +1119,14 @@ void HAL_RCC_GetOscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct)
RCC_OscInitStruct->HSIState = RCC_HSI_OFF;
}
- RCC_OscInitStruct->HSICalibrationValue = (uint32_t)((RCC->CR &RCC_CR_HSITRIM) >> RCC_CR_HSITRIM_Pos);
+ RCC_OscInitStruct->HSICalibrationValue = (uint32_t)((RCC->CR & RCC_CR_HSITRIM) >> RCC_CR_HSITRIM_Pos);
/* Get the LSE configuration -----------------------------------------------*/
- if((RCC->BDCR &RCC_BDCR_LSEBYP) == RCC_BDCR_LSEBYP)
+ if ((RCC->BDCR & RCC_BDCR_LSEBYP) == RCC_BDCR_LSEBYP)
{
RCC_OscInitStruct->LSEState = RCC_LSE_BYPASS;
}
- else if((RCC->BDCR &RCC_BDCR_LSEON) == RCC_BDCR_LSEON)
+ else if ((RCC->BDCR & RCC_BDCR_LSEON) == RCC_BDCR_LSEON)
{
RCC_OscInitStruct->LSEState = RCC_LSE_ON;
}
@@ -1115,7 +1136,7 @@ void HAL_RCC_GetOscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct)
}
/* Get the LSI configuration -----------------------------------------------*/
- if((RCC->CSR &RCC_CSR_LSION) == RCC_CSR_LSION)
+ if ((RCC->CSR & RCC_CSR_LSION) == RCC_CSR_LSION)
{
RCC_OscInitStruct->LSIState = RCC_LSI_ON;
}
@@ -1125,7 +1146,7 @@ void HAL_RCC_GetOscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct)
}
/* Get the PLL configuration -----------------------------------------------*/
- if((RCC->CR &RCC_CR_PLLON) == RCC_CR_PLLON)
+ if ((RCC->CR & RCC_CR_PLLON) == RCC_CR_PLLON)
{
RCC_OscInitStruct->PLL.PLLState = RCC_PLL_ON;
}
@@ -1180,7 +1201,7 @@ void HAL_RCC_GetClockConfig(RCC_ClkInitTypeDef *RCC_ClkInitStruct, uint32_t *pF
void HAL_RCC_NMI_IRQHandler(void)
{
/* Check RCC CSSF flag */
- if(__HAL_RCC_GET_IT(RCC_IT_CSS))
+ if (__HAL_RCC_GET_IT(RCC_IT_CSS))
{
/* RCC Clock Security System interrupt user callback */
HAL_RCC_CSSCallback();
diff --git a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_IAR/Prog/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_tim.c b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_IAR/Prog/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_tim.c
index c4676923..29de7d5b 100644
--- a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_IAR/Prog/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_tim.c
+++ b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_IAR/Prog/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_tim.c
@@ -98,18 +98,22 @@
*** Callback registration ***
=============================================
+ [..]
The compilation define USE_HAL_TIM_REGISTER_CALLBACKS when set to 1
allows the user to configure dynamically the driver callbacks.
+ [..]
Use Function @ref HAL_TIM_RegisterCallback() to register a callback.
@ref HAL_TIM_RegisterCallback() takes as parameters the HAL peripheral handle,
the Callback ID and a pointer to the user callback function.
+ [..]
Use function @ref HAL_TIM_UnRegisterCallback() to reset a callback to the default
weak function.
@ref HAL_TIM_UnRegisterCallback takes as parameters the HAL peripheral handle,
and the Callback ID.
+ [..]
These functions allow to register/unregister following callbacks:
(+) Base_MspInitCallback : TIM Base Msp Init Callback.
(+) Base_MspDeInitCallback : TIM Base Msp DeInit Callback.
@@ -140,15 +144,18 @@
(+) BreakCallback : TIM Break Callback.
(+) Break2Callback : TIM Break2 Callback.
+ [..]
By default, after the Init and when the state is HAL_TIM_STATE_RESET
all interrupt callbacks are set to the corresponding weak functions:
examples @ref HAL_TIM_TriggerCallback(), @ref HAL_TIM_ErrorCallback().
+ [..]
Exception done for MspInit and MspDeInit functions that are reset to the legacy weak
functionalities in the Init / DeInit only when these callbacks are null
(not registered beforehand). If not, MspInit or MspDeInit are not null, the Init / DeInit
keep and use the user MspInit / MspDeInit callbacks(registered beforehand)
+ [..]
Callbacks can be registered / unregistered in HAL_TIM_STATE_READY state only.
Exception done MspInit / MspDeInit that can be registered / unregistered
in HAL_TIM_STATE_READY or HAL_TIM_STATE_RESET state,
@@ -156,6 +163,7 @@ all interrupt callbacks are set to the corresponding weak functions:
In that case first register the MspInit/MspDeInit user callbacks
using @ref HAL_TIM_RegisterCallback() before calling DeInit or Init function.
+ [..]
When The compilation define USE_HAL_TIM_REGISTER_CALLBACKS is set to 0 or
not defined, the callback registration feature is not available and all callbacks
are set to the corresponding weak functions.
@@ -216,7 +224,7 @@ static void TIM_DMAPeriodElapsedHalfCplt(DMA_HandleTypeDef *hdma);
static void TIM_DMATriggerCplt(DMA_HandleTypeDef *hdma);
static void TIM_DMATriggerHalfCplt(DMA_HandleTypeDef *hdma);
static HAL_StatusTypeDef TIM_SlaveTimer_SetConfig(TIM_HandleTypeDef *htim,
- TIM_SlaveConfigTypeDef *sSlaveConfig);
+ TIM_SlaveConfigTypeDef *sSlaveConfig);
/**
* @}
*/
@@ -227,8 +235,8 @@ static HAL_StatusTypeDef TIM_SlaveTimer_SetConfig(TIM_HandleTypeDef *htim,
*/
/** @defgroup TIM_Exported_Functions_Group1 TIM Time Base functions
- * @brief Time Base functions
- *
+ * @brief Time Base functions
+ *
@verbatim
==============================================================================
##### Time Base functions #####
@@ -482,11 +490,11 @@ HAL_StatusTypeDef HAL_TIM_Base_Start_DMA(TIM_HandleTypeDef *htim, uint32_t *pDat
/* Check the parameters */
assert_param(IS_TIM_DMA_INSTANCE(htim->Instance));
- if ((htim->State == HAL_TIM_STATE_BUSY))
+ if (htim->State == HAL_TIM_STATE_BUSY)
{
return HAL_BUSY;
}
- else if ((htim->State == HAL_TIM_STATE_READY))
+ else if (htim->State == HAL_TIM_STATE_READY)
{
if ((pData == NULL) && (Length > 0U))
{
@@ -559,8 +567,8 @@ HAL_StatusTypeDef HAL_TIM_Base_Stop_DMA(TIM_HandleTypeDef *htim)
*/
/** @defgroup TIM_Exported_Functions_Group2 TIM Output Compare functions
- * @brief TIM Output Compare functions
- *
+ * @brief TIM Output Compare functions
+ *
@verbatim
==============================================================================
##### TIM Output Compare functions #####
@@ -929,16 +937,16 @@ HAL_StatusTypeDef HAL_TIM_OC_Stop_IT(TIM_HandleTypeDef *htim, uint32_t Channel)
*/
HAL_StatusTypeDef HAL_TIM_OC_Start_DMA(TIM_HandleTypeDef *htim, uint32_t Channel, uint32_t *pData, uint16_t Length)
{
- uint32_t tmpsmcr;
+ uint32_t tmpsmcr;
/* Check the parameters */
assert_param(IS_TIM_CCX_INSTANCE(htim->Instance, Channel));
- if ((htim->State == HAL_TIM_STATE_BUSY))
+ if (htim->State == HAL_TIM_STATE_BUSY)
{
return HAL_BUSY;
}
- else if ((htim->State == HAL_TIM_STATE_READY))
+ else if (htim->State == HAL_TIM_STATE_READY)
{
if ((pData == NULL) && (Length > 0U))
{
@@ -1136,8 +1144,8 @@ HAL_StatusTypeDef HAL_TIM_OC_Stop_DMA(TIM_HandleTypeDef *htim, uint32_t Channel)
*/
/** @defgroup TIM_Exported_Functions_Group3 TIM PWM functions
- * @brief TIM PWM functions
- *
+ * @brief TIM PWM functions
+ *
@verbatim
==============================================================================
##### TIM PWM functions #####
@@ -1513,11 +1521,11 @@ HAL_StatusTypeDef HAL_TIM_PWM_Start_DMA(TIM_HandleTypeDef *htim, uint32_t Channe
/* Check the parameters */
assert_param(IS_TIM_CCX_INSTANCE(htim->Instance, Channel));
- if ((htim->State == HAL_TIM_STATE_BUSY))
+ if (htim->State == HAL_TIM_STATE_BUSY)
{
return HAL_BUSY;
}
- else if ((htim->State == HAL_TIM_STATE_READY))
+ else if (htim->State == HAL_TIM_STATE_READY)
{
if ((pData == NULL) && (Length > 0U))
{
@@ -1714,8 +1722,8 @@ HAL_StatusTypeDef HAL_TIM_PWM_Stop_DMA(TIM_HandleTypeDef *htim, uint32_t Channel
*/
/** @defgroup TIM_Exported_Functions_Group4 TIM Input Capture functions
- * @brief TIM Input Capture functions
- *
+ * @brief TIM Input Capture functions
+ *
@verbatim
==============================================================================
##### TIM Input Capture functions #####
@@ -2061,11 +2069,11 @@ HAL_StatusTypeDef HAL_TIM_IC_Start_DMA(TIM_HandleTypeDef *htim, uint32_t Channel
assert_param(IS_TIM_CCX_INSTANCE(htim->Instance, Channel));
assert_param(IS_TIM_DMA_CC_INSTANCE(htim->Instance));
- if ((htim->State == HAL_TIM_STATE_BUSY))
+ if (htim->State == HAL_TIM_STATE_BUSY)
{
return HAL_BUSY;
}
- else if ((htim->State == HAL_TIM_STATE_READY))
+ else if (htim->State == HAL_TIM_STATE_READY)
{
if ((pData == NULL) && (Length > 0U))
{
@@ -2249,8 +2257,8 @@ HAL_StatusTypeDef HAL_TIM_IC_Stop_DMA(TIM_HandleTypeDef *htim, uint32_t Channel)
*/
/** @defgroup TIM_Exported_Functions_Group5 TIM One Pulse functions
- * @brief TIM One Pulse functions
- *
+ * @brief TIM One Pulse functions
+ *
@verbatim
==============================================================================
##### TIM One Pulse functions #####
@@ -2563,8 +2571,8 @@ HAL_StatusTypeDef HAL_TIM_OnePulse_Stop_IT(TIM_HandleTypeDef *htim, uint32_t Out
*/
/** @defgroup TIM_Exported_Functions_Group6 TIM Encoder functions
- * @brief TIM Encoder functions
- *
+ * @brief TIM Encoder functions
+ *
@verbatim
==============================================================================
##### TIM Encoder functions #####
@@ -2609,15 +2617,15 @@ HAL_StatusTypeDef HAL_TIM_Encoder_Init(TIM_HandleTypeDef *htim, TIM_Encoder_Ini
}
/* Check the parameters */
+ assert_param(IS_TIM_ENCODER_INTERFACE_INSTANCE(htim->Instance));
assert_param(IS_TIM_COUNTER_MODE(htim->Init.CounterMode));
assert_param(IS_TIM_CLOCKDIVISION_DIV(htim->Init.ClockDivision));
assert_param(IS_TIM_AUTORELOAD_PRELOAD(htim->Init.AutoReloadPreload));
- assert_param(IS_TIM_CC2_INSTANCE(htim->Instance));
assert_param(IS_TIM_ENCODER_MODE(sConfig->EncoderMode));
assert_param(IS_TIM_IC_SELECTION(sConfig->IC1Selection));
assert_param(IS_TIM_IC_SELECTION(sConfig->IC2Selection));
- assert_param(IS_TIM_IC_POLARITY(sConfig->IC1Polarity));
- assert_param(IS_TIM_IC_POLARITY(sConfig->IC2Polarity));
+ assert_param(IS_TIM_ENCODERINPUT_POLARITY(sConfig->IC1Polarity));
+ assert_param(IS_TIM_ENCODERINPUT_POLARITY(sConfig->IC2Polarity));
assert_param(IS_TIM_IC_PRESCALER(sConfig->IC1Prescaler));
assert_param(IS_TIM_IC_PRESCALER(sConfig->IC2Prescaler));
assert_param(IS_TIM_IC_FILTER(sConfig->IC1Filter));
@@ -2775,7 +2783,7 @@ __weak void HAL_TIM_Encoder_MspDeInit(TIM_HandleTypeDef *htim)
HAL_StatusTypeDef HAL_TIM_Encoder_Start(TIM_HandleTypeDef *htim, uint32_t Channel)
{
/* Check the parameters */
- assert_param(IS_TIM_CC2_INSTANCE(htim->Instance));
+ assert_param(IS_TIM_ENCODER_INTERFACE_INSTANCE(htim->Instance));
/* Enable the encoder interface channels */
switch (Channel)
@@ -2819,7 +2827,7 @@ HAL_StatusTypeDef HAL_TIM_Encoder_Start(TIM_HandleTypeDef *htim, uint32_t Channe
HAL_StatusTypeDef HAL_TIM_Encoder_Stop(TIM_HandleTypeDef *htim, uint32_t Channel)
{
/* Check the parameters */
- assert_param(IS_TIM_CC2_INSTANCE(htim->Instance));
+ assert_param(IS_TIM_ENCODER_INTERFACE_INSTANCE(htim->Instance));
/* Disable the Input Capture channels 1 and 2
(in the EncoderInterface the two possible channels that can be used are TIM_CHANNEL_1 and TIM_CHANNEL_2) */
@@ -2865,7 +2873,7 @@ HAL_StatusTypeDef HAL_TIM_Encoder_Stop(TIM_HandleTypeDef *htim, uint32_t Channel
HAL_StatusTypeDef HAL_TIM_Encoder_Start_IT(TIM_HandleTypeDef *htim, uint32_t Channel)
{
/* Check the parameters */
- assert_param(IS_TIM_CC2_INSTANCE(htim->Instance));
+ assert_param(IS_TIM_ENCODER_INTERFACE_INSTANCE(htim->Instance));
/* Enable the encoder interface channels */
/* Enable the capture compare Interrupts 1 and/or 2 */
@@ -2915,7 +2923,7 @@ HAL_StatusTypeDef HAL_TIM_Encoder_Start_IT(TIM_HandleTypeDef *htim, uint32_t Cha
HAL_StatusTypeDef HAL_TIM_Encoder_Stop_IT(TIM_HandleTypeDef *htim, uint32_t Channel)
{
/* Check the parameters */
- assert_param(IS_TIM_CC2_INSTANCE(htim->Instance));
+ assert_param(IS_TIM_ENCODER_INTERFACE_INSTANCE(htim->Instance));
/* Disable the Input Capture channels 1 and 2
(in the EncoderInterface the two possible channels that can be used are TIM_CHANNEL_1 and TIM_CHANNEL_2) */
@@ -2966,16 +2974,17 @@ HAL_StatusTypeDef HAL_TIM_Encoder_Stop_IT(TIM_HandleTypeDef *htim, uint32_t Chan
* @param Length The length of data to be transferred from TIM peripheral to memory.
* @retval HAL status
*/
-HAL_StatusTypeDef HAL_TIM_Encoder_Start_DMA(TIM_HandleTypeDef *htim, uint32_t Channel, uint32_t *pData1, uint32_t *pData2, uint16_t Length)
+HAL_StatusTypeDef HAL_TIM_Encoder_Start_DMA(TIM_HandleTypeDef *htim, uint32_t Channel, uint32_t *pData1,
+ uint32_t *pData2, uint16_t Length)
{
/* Check the parameters */
- assert_param(IS_TIM_DMA_CC_INSTANCE(htim->Instance));
+ assert_param(IS_TIM_ENCODER_INTERFACE_INSTANCE(htim->Instance));
- if ((htim->State == HAL_TIM_STATE_BUSY))
+ if (htim->State == HAL_TIM_STATE_BUSY)
{
return HAL_BUSY;
}
- else if ((htim->State == HAL_TIM_STATE_READY))
+ else if (htim->State == HAL_TIM_STATE_READY)
{
if ((((pData1 == NULL) || (pData2 == NULL))) && (Length > 0U))
{
@@ -3103,7 +3112,7 @@ HAL_StatusTypeDef HAL_TIM_Encoder_Start_DMA(TIM_HandleTypeDef *htim, uint32_t Ch
HAL_StatusTypeDef HAL_TIM_Encoder_Stop_DMA(TIM_HandleTypeDef *htim, uint32_t Channel)
{
/* Check the parameters */
- assert_param(IS_TIM_DMA_CC_INSTANCE(htim->Instance));
+ assert_param(IS_TIM_ENCODER_INTERFACE_INSTANCE(htim->Instance));
/* Disable the Input Capture channels 1 and 2
(in the EncoderInterface the two possible channels that can be used are TIM_CHANNEL_1 and TIM_CHANNEL_2) */
@@ -3149,8 +3158,8 @@ HAL_StatusTypeDef HAL_TIM_Encoder_Stop_DMA(TIM_HandleTypeDef *htim, uint32_t Cha
* @}
*/
/** @defgroup TIM_Exported_Functions_Group7 TIM IRQ handler management
- * @brief TIM IRQ handler management
- *
+ * @brief TIM IRQ handler management
+ *
@verbatim
==============================================================================
##### IRQ handler management #####
@@ -3363,8 +3372,8 @@ void HAL_TIM_IRQHandler(TIM_HandleTypeDef *htim)
*/
/** @defgroup TIM_Exported_Functions_Group8 TIM Peripheral Control functions
- * @brief TIM Peripheral Control functions
- *
+ * @brief TIM Peripheral Control functions
+ *
@verbatim
==============================================================================
##### Peripheral Control functions #####
@@ -3738,9 +3747,14 @@ HAL_StatusTypeDef HAL_TIM_PWM_ConfigChannel(TIM_HandleTypeDef *htim,
* This parameter can be one of the following values:
* @arg TIM_CHANNEL_1: TIM Channel 1 selected
* @arg TIM_CHANNEL_2: TIM Channel 2 selected
+ * @note To output a waveform with a minimum delay user can enable the fast
+ * mode by calling the @ref __HAL_TIM_ENABLE_OCxFAST macro. Then CCx
+ * output is forced in response to the edge detection on TIx input,
+ * without taking in account the comparison.
* @retval HAL status
*/
-HAL_StatusTypeDef HAL_TIM_OnePulse_ConfigChannel(TIM_HandleTypeDef *htim, TIM_OnePulse_InitTypeDef *sConfig, uint32_t OutputChannel, uint32_t InputChannel)
+HAL_StatusTypeDef HAL_TIM_OnePulse_ConfigChannel(TIM_HandleTypeDef *htim, TIM_OnePulse_InitTypeDef *sConfig,
+ uint32_t OutputChannel, uint32_t InputChannel)
{
TIM_OC_InitTypeDef temp1;
@@ -3894,11 +3908,11 @@ HAL_StatusTypeDef HAL_TIM_DMABurst_WriteStart(TIM_HandleTypeDef *htim, uint32_t
assert_param(IS_TIM_DMA_SOURCE(BurstRequestSrc));
assert_param(IS_TIM_DMA_LENGTH(BurstLength));
- if ((htim->State == HAL_TIM_STATE_BUSY))
+ if (htim->State == HAL_TIM_STATE_BUSY)
{
return HAL_BUSY;
}
- else if ((htim->State == HAL_TIM_STATE_READY))
+ else if (htim->State == HAL_TIM_STATE_READY)
{
if ((BurstBuffer == NULL) && (BurstLength > 0U))
{
@@ -3941,7 +3955,8 @@ HAL_StatusTypeDef HAL_TIM_DMABurst_WriteStart(TIM_HandleTypeDef *htim, uint32_t
htim->hdma[TIM_DMA_ID_CC1]->XferErrorCallback = TIM_DMAError ;
/* Enable the DMA stream */
- if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC1], (uint32_t)BurstBuffer, (uint32_t)&htim->Instance->DMAR, ((BurstLength) >> 8U) + 1U) != HAL_OK)
+ if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC1], (uint32_t)BurstBuffer,
+ (uint32_t)&htim->Instance->DMAR, ((BurstLength) >> 8U) + 1U) != HAL_OK)
{
return HAL_ERROR;
}
@@ -3957,7 +3972,8 @@ HAL_StatusTypeDef HAL_TIM_DMABurst_WriteStart(TIM_HandleTypeDef *htim, uint32_t
htim->hdma[TIM_DMA_ID_CC2]->XferErrorCallback = TIM_DMAError ;
/* Enable the DMA stream */
- if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC2], (uint32_t)BurstBuffer, (uint32_t)&htim->Instance->DMAR, ((BurstLength) >> 8U) + 1U) != HAL_OK)
+ if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC2], (uint32_t)BurstBuffer,
+ (uint32_t)&htim->Instance->DMAR, ((BurstLength) >> 8U) + 1U) != HAL_OK)
{
return HAL_ERROR;
}
@@ -3973,7 +3989,8 @@ HAL_StatusTypeDef HAL_TIM_DMABurst_WriteStart(TIM_HandleTypeDef *htim, uint32_t
htim->hdma[TIM_DMA_ID_CC3]->XferErrorCallback = TIM_DMAError ;
/* Enable the DMA stream */
- if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC3], (uint32_t)BurstBuffer, (uint32_t)&htim->Instance->DMAR, ((BurstLength) >> 8U) + 1U) != HAL_OK)
+ if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC3], (uint32_t)BurstBuffer,
+ (uint32_t)&htim->Instance->DMAR, ((BurstLength) >> 8U) + 1U) != HAL_OK)
{
return HAL_ERROR;
}
@@ -3989,7 +4006,8 @@ HAL_StatusTypeDef HAL_TIM_DMABurst_WriteStart(TIM_HandleTypeDef *htim, uint32_t
htim->hdma[TIM_DMA_ID_CC4]->XferErrorCallback = TIM_DMAError ;
/* Enable the DMA stream */
- if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC4], (uint32_t)BurstBuffer, (uint32_t)&htim->Instance->DMAR, ((BurstLength) >> 8U) + 1U) != HAL_OK)
+ if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC4], (uint32_t)BurstBuffer,
+ (uint32_t)&htim->Instance->DMAR, ((BurstLength) >> 8U) + 1U) != HAL_OK)
{
return HAL_ERROR;
}
@@ -4005,7 +4023,8 @@ HAL_StatusTypeDef HAL_TIM_DMABurst_WriteStart(TIM_HandleTypeDef *htim, uint32_t
htim->hdma[TIM_DMA_ID_COMMUTATION]->XferErrorCallback = TIM_DMAError ;
/* Enable the DMA stream */
- if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_COMMUTATION], (uint32_t)BurstBuffer, (uint32_t)&htim->Instance->DMAR, ((BurstLength) >> 8U) + 1U) != HAL_OK)
+ if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_COMMUTATION], (uint32_t)BurstBuffer,
+ (uint32_t)&htim->Instance->DMAR, ((BurstLength) >> 8U) + 1U) != HAL_OK)
{
return HAL_ERROR;
}
@@ -4021,7 +4040,8 @@ HAL_StatusTypeDef HAL_TIM_DMABurst_WriteStart(TIM_HandleTypeDef *htim, uint32_t
htim->hdma[TIM_DMA_ID_TRIGGER]->XferErrorCallback = TIM_DMAError ;
/* Enable the DMA stream */
- if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_TRIGGER], (uint32_t)BurstBuffer, (uint32_t)&htim->Instance->DMAR, ((BurstLength) >> 8U) + 1U) != HAL_OK)
+ if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_TRIGGER], (uint32_t)BurstBuffer,
+ (uint32_t)&htim->Instance->DMAR, ((BurstLength) >> 8U) + 1U) != HAL_OK)
{
return HAL_ERROR;
}
@@ -4151,8 +4171,8 @@ HAL_StatusTypeDef HAL_TIM_DMABurst_WriteStop(TIM_HandleTypeDef *htim, uint32_t B
* @note This function should be used only when BurstLength is equal to DMA data transfer length.
* @retval HAL status
*/
-HAL_StatusTypeDef HAL_TIM_DMABurst_ReadStart(TIM_HandleTypeDef *htim, uint32_t BurstBaseAddress, uint32_t BurstRequestSrc,
- uint32_t *BurstBuffer, uint32_t BurstLength)
+HAL_StatusTypeDef HAL_TIM_DMABurst_ReadStart(TIM_HandleTypeDef *htim, uint32_t BurstBaseAddress,
+ uint32_t BurstRequestSrc, uint32_t *BurstBuffer, uint32_t BurstLength)
{
/* Check the parameters */
assert_param(IS_TIM_DMABURST_INSTANCE(htim->Instance));
@@ -4160,11 +4180,11 @@ HAL_StatusTypeDef HAL_TIM_DMABurst_ReadStart(TIM_HandleTypeDef *htim, uint32_t B
assert_param(IS_TIM_DMA_SOURCE(BurstRequestSrc));
assert_param(IS_TIM_DMA_LENGTH(BurstLength));
- if ((htim->State == HAL_TIM_STATE_BUSY))
+ if (htim->State == HAL_TIM_STATE_BUSY)
{
return HAL_BUSY;
}
- else if ((htim->State == HAL_TIM_STATE_READY))
+ else if (htim->State == HAL_TIM_STATE_READY)
{
if ((BurstBuffer == NULL) && (BurstLength > 0U))
{
@@ -4465,7 +4485,7 @@ HAL_StatusTypeDef HAL_TIM_ConfigOCrefClear(TIM_HandleTypeDef *htim,
/* When OCRef clear feature is used with ETR source, ETR prescaler must be off */
if (sClearInputConfig->ClearInputPrescaler != TIM_CLEARINPUTPRESCALER_DIV1)
{
- htim->State = HAL_TIM_STATE_READY;
+ htim->State = HAL_TIM_STATE_READY;
__HAL_UNLOCK(htim);
return HAL_ERROR;
}
@@ -4780,9 +4800,9 @@ HAL_StatusTypeDef HAL_TIM_SlaveConfigSynchro(TIM_HandleTypeDef *htim, TIM_SlaveC
htim->State = HAL_TIM_STATE_BUSY;
- if(TIM_SlaveTimer_SetConfig(htim, sSlaveConfig) != HAL_OK)
+ if (TIM_SlaveTimer_SetConfig(htim, sSlaveConfig) != HAL_OK)
{
- htim->State = HAL_TIM_STATE_READY;
+ htim->State = HAL_TIM_STATE_READY;
__HAL_UNLOCK(htim);
return HAL_ERROR;
}
@@ -4810,7 +4830,7 @@ HAL_StatusTypeDef HAL_TIM_SlaveConfigSynchro(TIM_HandleTypeDef *htim, TIM_SlaveC
* @retval HAL status
*/
HAL_StatusTypeDef HAL_TIM_SlaveConfigSynchro_IT(TIM_HandleTypeDef *htim,
- TIM_SlaveConfigTypeDef *sSlaveConfig)
+ TIM_SlaveConfigTypeDef *sSlaveConfig)
{
/* Check the parameters */
assert_param(IS_TIM_SLAVE_INSTANCE(htim->Instance));
@@ -4821,9 +4841,9 @@ HAL_StatusTypeDef HAL_TIM_SlaveConfigSynchro_IT(TIM_HandleTypeDef *htim,
htim->State = HAL_TIM_STATE_BUSY;
- if(TIM_SlaveTimer_SetConfig(htim, sSlaveConfig) != HAL_OK)
+ if (TIM_SlaveTimer_SetConfig(htim, sSlaveConfig) != HAL_OK)
{
- htim->State = HAL_TIM_STATE_READY;
+ htim->State = HAL_TIM_STATE_READY;
__HAL_UNLOCK(htim);
return HAL_ERROR;
}
@@ -4913,8 +4933,8 @@ uint32_t HAL_TIM_ReadCapturedValue(TIM_HandleTypeDef *htim, uint32_t Channel)
*/
/** @defgroup TIM_Exported_Functions_Group9 TIM Callbacks functions
- * @brief TIM Callbacks functions
- *
+ * @brief TIM Callbacks functions
+ *
@verbatim
==============================================================================
##### TIM Callbacks functions #####
@@ -5118,7 +5138,8 @@ __weak void HAL_TIM_ErrorCallback(TIM_HandleTypeDef *htim)
* @param pCallback pointer to the callback function
* @retval status
*/
-HAL_StatusTypeDef HAL_TIM_RegisterCallback(TIM_HandleTypeDef *htim, HAL_TIM_CallbackIDTypeDef CallbackID, pTIM_CallbackTypeDef pCallback)
+HAL_StatusTypeDef HAL_TIM_RegisterCallback(TIM_HandleTypeDef *htim, HAL_TIM_CallbackIDTypeDef CallbackID,
+ pTIM_CallbackTypeDef pCallback)
{
HAL_StatusTypeDef status = HAL_OK;
@@ -5578,8 +5599,8 @@ HAL_StatusTypeDef HAL_TIM_UnRegisterCallback(TIM_HandleTypeDef *htim, HAL_TIM_Ca
*/
/** @defgroup TIM_Exported_Functions_Group10 TIM Peripheral State functions
- * @brief TIM Peripheral State functions
- *
+ * @brief TIM Peripheral State functions
+ *
@verbatim
==============================================================================
##### Peripheral State functions #####
@@ -6365,7 +6386,7 @@ static void TIM_OC6_SetConfig(TIM_TypeDef *TIMx,
* @retval None
*/
static HAL_StatusTypeDef TIM_SlaveTimer_SetConfig(TIM_HandleTypeDef *htim,
- TIM_SlaveConfigTypeDef *sSlaveConfig)
+ TIM_SlaveConfigTypeDef *sSlaveConfig)
{
uint32_t tmpsmcr;
uint32_t tmpccmr1;
diff --git a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_IAR/Prog/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_tim_ex.c b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_IAR/Prog/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_tim_ex.c
index 271f11ec..f2d976ae 100644
--- a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_IAR/Prog/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_tim_ex.c
+++ b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_IAR/Prog/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_tim_ex.c
@@ -73,7 +73,7 @@
* opensource.org/licenses/BSD-3-Clause
*
******************************************************************************
-*/
+ */
/* Includes ------------------------------------------------------------------*/
#include "stm32f7xx_hal.h"
@@ -397,11 +397,11 @@ HAL_StatusTypeDef HAL_TIMEx_HallSensor_Start_DMA(TIM_HandleTypeDef *htim, uint32
/* Check the parameters */
assert_param(IS_TIM_HALL_SENSOR_INTERFACE_INSTANCE(htim->Instance));
- if ((htim->State == HAL_TIM_STATE_BUSY))
+ if (htim->State == HAL_TIM_STATE_BUSY)
{
return HAL_BUSY;
}
- else if ((htim->State == HAL_TIM_STATE_READY))
+ else if (htim->State == HAL_TIM_STATE_READY)
{
if (((uint32_t)pData == 0U) && (Length > 0U))
{
@@ -709,11 +709,11 @@ HAL_StatusTypeDef HAL_TIMEx_OCN_Start_DMA(TIM_HandleTypeDef *htim, uint32_t Chan
/* Check the parameters */
assert_param(IS_TIM_CCXN_INSTANCE(htim->Instance, Channel));
- if ((htim->State == HAL_TIM_STATE_BUSY))
+ if (htim->State == HAL_TIM_STATE_BUSY)
{
return HAL_BUSY;
}
- else if ((htim->State == HAL_TIM_STATE_READY))
+ else if (htim->State == HAL_TIM_STATE_READY)
{
if (((uint32_t)pData == 0U) && (Length > 0U))
{
@@ -1117,11 +1117,11 @@ HAL_StatusTypeDef HAL_TIMEx_PWMN_Start_DMA(TIM_HandleTypeDef *htim, uint32_t Cha
/* Check the parameters */
assert_param(IS_TIM_CCXN_INSTANCE(htim->Instance, Channel));
- if ((htim->State == HAL_TIM_STATE_BUSY))
+ if (htim->State == HAL_TIM_STATE_BUSY)
{
return HAL_BUSY;
}
- else if ((htim->State == HAL_TIM_STATE_READY))
+ else if (htim->State == HAL_TIM_STATE_READY)
{
if (((uint32_t)pData == 0U) && (Length > 0U))
{
@@ -1466,7 +1466,8 @@ HAL_StatusTypeDef HAL_TIMEx_OnePulseN_Stop_IT(TIM_HandleTypeDef *htim, uint32_t
* @arg TIM_COMMUTATION_SOFTWARE: Commutation source is set by software using the COMG bit
* @retval HAL status
*/
-HAL_StatusTypeDef HAL_TIMEx_ConfigCommutEvent(TIM_HandleTypeDef *htim, uint32_t InputTrigger, uint32_t CommutationSource)
+HAL_StatusTypeDef HAL_TIMEx_ConfigCommutEvent(TIM_HandleTypeDef *htim, uint32_t InputTrigger,
+ uint32_t CommutationSource)
{
/* Check the parameters */
assert_param(IS_TIM_COMMUTATION_EVENT_INSTANCE(htim->Instance));
@@ -1521,7 +1522,8 @@ HAL_StatusTypeDef HAL_TIMEx_ConfigCommutEvent(TIM_HandleTypeDef *htim, uint32_t
* @arg TIM_COMMUTATION_SOFTWARE: Commutation source is set by software using the COMG bit
* @retval HAL status
*/
-HAL_StatusTypeDef HAL_TIMEx_ConfigCommutEvent_IT(TIM_HandleTypeDef *htim, uint32_t InputTrigger, uint32_t CommutationSource)
+HAL_StatusTypeDef HAL_TIMEx_ConfigCommutEvent_IT(TIM_HandleTypeDef *htim, uint32_t InputTrigger,
+ uint32_t CommutationSource)
{
/* Check the parameters */
assert_param(IS_TIM_COMMUTATION_EVENT_INSTANCE(htim->Instance));
@@ -1577,7 +1579,8 @@ HAL_StatusTypeDef HAL_TIMEx_ConfigCommutEvent_IT(TIM_HandleTypeDef *htim, uint32
* @arg TIM_COMMUTATION_SOFTWARE: Commutation source is set by software using the COMG bit
* @retval HAL status
*/
-HAL_StatusTypeDef HAL_TIMEx_ConfigCommutEvent_DMA(TIM_HandleTypeDef *htim, uint32_t InputTrigger, uint32_t CommutationSource)
+HAL_StatusTypeDef HAL_TIMEx_ConfigCommutEvent_DMA(TIM_HandleTypeDef *htim, uint32_t InputTrigger,
+ uint32_t CommutationSource)
{
/* Check the parameters */
assert_param(IS_TIM_COMMUTATION_EVENT_INSTANCE(htim->Instance));
@@ -1632,7 +1635,7 @@ HAL_StatusTypeDef HAL_TIMEx_MasterConfigSynchronization(TIM_HandleTypeDef *htim,
uint32_t tmpsmcr;
/* Check the parameters */
- assert_param(IS_TIM_SYNCHRO_INSTANCE(htim->Instance));
+ assert_param(IS_TIM_MASTER_INSTANCE(htim->Instance));
assert_param(IS_TIM_TRGO_SOURCE(sMasterConfig->MasterOutputTrigger));
assert_param(IS_TIM_MSM_STATE(sMasterConfig->MasterSlaveMode));
@@ -1665,16 +1668,19 @@ HAL_StatusTypeDef HAL_TIMEx_MasterConfigSynchronization(TIM_HandleTypeDef *htim,
/* Select the TRGO source */
tmpcr2 |= sMasterConfig->MasterOutputTrigger;
- /* Reset the MSM Bit */
- tmpsmcr &= ~TIM_SMCR_MSM;
- /* Set master mode */
- tmpsmcr |= sMasterConfig->MasterSlaveMode;
-
/* Update TIMx CR2 */
htim->Instance->CR2 = tmpcr2;
- /* Update TIMx SMCR */
- htim->Instance->SMCR = tmpsmcr;
+ if (IS_TIM_SLAVE_INSTANCE(htim->Instance))
+ {
+ /* Reset the MSM Bit */
+ tmpsmcr &= ~TIM_SMCR_MSM;
+ /* Set master mode */
+ tmpsmcr |= sMasterConfig->MasterSlaveMode;
+
+ /* Update TIMx SMCR */
+ htim->Instance->SMCR = tmpsmcr;
+ }
/* Change the htim state */
htim->State = HAL_TIM_STATE_READY;
@@ -1690,6 +1696,9 @@ HAL_StatusTypeDef HAL_TIMEx_MasterConfigSynchronization(TIM_HandleTypeDef *htim,
* @param htim TIM handle
* @param sBreakDeadTimeConfig pointer to a TIM_ConfigBreakDeadConfigTypeDef structure that
* contains the BDTR Register configuration information for the TIM peripheral.
+ * @note Interrupts can be generated when an active level is detected on the
+ * break input, the break 2 input or the system break input. Break
+ * interrupt can be enabled by calling the @ref __HAL_TIM_ENABLE_IT macro.
* @retval HAL status
*/
HAL_StatusTypeDef HAL_TIMEx_ConfigBreakDeadTime(TIM_HandleTypeDef *htim,
@@ -1763,10 +1772,10 @@ HAL_StatusTypeDef HAL_TIMEx_ConfigBreakInput(TIM_HandleTypeDef *htim,
{
uint32_t tmporx;
- uint32_t bkin_enable_mask = 0U;
- uint32_t bkin_polarity_mask = 0U;
- uint32_t bkin_enable_bitpos = 0U;
- uint32_t bkin_polarity_bitpos = 0U;
+ uint32_t bkin_enable_mask;
+ uint32_t bkin_polarity_mask;
+ uint32_t bkin_enable_bitpos;
+ uint32_t bkin_polarity_bitpos;
/* Check the parameters */
assert_param(IS_TIM_BREAK_INSTANCE(htim->Instance));
@@ -1800,11 +1809,19 @@ HAL_StatusTypeDef HAL_TIMEx_ConfigBreakInput(TIM_HandleTypeDef *htim,
{
bkin_enable_mask = TIM1_AF1_BKDF1BKE;
bkin_enable_bitpos = 8;
+ bkin_polarity_mask = 0U;
+ bkin_polarity_bitpos = 0U;
break;
}
default:
+ {
+ bkin_enable_mask = 0U;
+ bkin_polarity_mask = 0U;
+ bkin_enable_bitpos = 0U;
+ bkin_polarity_bitpos = 0U;
break;
+ }
}
switch (BreakInput)
@@ -2054,7 +2071,7 @@ HAL_TIM_StateTypeDef HAL_TIMEx_HallSensor_GetState(TIM_HandleTypeDef *htim)
*/
/* Private functions ---------------------------------------------------------*/
-/** @defgroup TIMEx_Private_Functions TIM Extended Private Functions
+/** @defgroup TIMEx_Private_Functions TIMEx Private Functions
* @{
*/
diff --git a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_IAR/Prog/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_uart.c b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_IAR/Prog/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_uart.c
index 76efbf84..25a901fe 100644
--- a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_IAR/Prog/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_uart.c
+++ b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_IAR/Prog/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_uart.c
@@ -326,7 +326,6 @@ HAL_StatusTypeDef HAL_UART_Init(UART_HandleTypeDef *huart)
huart->gState = HAL_UART_STATE_BUSY;
- /* Disable the Peripheral */
__HAL_UART_DISABLE(huart);
/* Set the UART Communication parameters */
@@ -346,7 +345,6 @@ HAL_StatusTypeDef HAL_UART_Init(UART_HandleTypeDef *huart)
CLEAR_BIT(huart->Instance->CR2, (USART_CR2_LINEN | USART_CR2_CLKEN));
CLEAR_BIT(huart->Instance->CR3, (USART_CR3_SCEN | USART_CR3_HDSEL | USART_CR3_IREN));
- /* Enable the Peripheral */
__HAL_UART_ENABLE(huart);
/* TEACK and/or REACK to check before moving huart->gState and huart->RxState to Ready */
@@ -393,7 +391,6 @@ HAL_StatusTypeDef HAL_HalfDuplex_Init(UART_HandleTypeDef *huart)
huart->gState = HAL_UART_STATE_BUSY;
- /* Disable the Peripheral */
__HAL_UART_DISABLE(huart);
/* Set the UART Communication parameters */
@@ -416,7 +413,6 @@ HAL_StatusTypeDef HAL_HalfDuplex_Init(UART_HandleTypeDef *huart)
/* Enable the Half-Duplex mode by setting the HDSEL bit in the CR3 register */
SET_BIT(huart->Instance->CR3, USART_CR3_HDSEL);
- /* Enable the Peripheral */
__HAL_UART_ENABLE(huart);
/* TEACK and/or REACK to check before moving huart->gState and huart->RxState to Ready */
@@ -481,7 +477,6 @@ HAL_StatusTypeDef HAL_LIN_Init(UART_HandleTypeDef *huart, uint32_t BreakDetectLe
huart->gState = HAL_UART_STATE_BUSY;
- /* Disable the Peripheral */
__HAL_UART_DISABLE(huart);
/* Set the UART Communication parameters */
@@ -507,7 +502,6 @@ HAL_StatusTypeDef HAL_LIN_Init(UART_HandleTypeDef *huart, uint32_t BreakDetectLe
/* Set the USART LIN Break detection length. */
MODIFY_REG(huart->Instance->CR2, USART_CR2_LBDL, BreakDetectLength);
- /* Enable the Peripheral */
__HAL_UART_ENABLE(huart);
/* TEACK and/or REACK to check before moving huart->gState and huart->RxState to Ready */
@@ -567,7 +561,6 @@ HAL_StatusTypeDef HAL_MultiProcessor_Init(UART_HandleTypeDef *huart, uint8_t Add
huart->gState = HAL_UART_STATE_BUSY;
- /* Disable the Peripheral */
__HAL_UART_DISABLE(huart);
/* Set the UART Communication parameters */
@@ -596,7 +589,6 @@ HAL_StatusTypeDef HAL_MultiProcessor_Init(UART_HandleTypeDef *huart, uint8_t Add
/* Set the wake up method by setting the WAKE bit in the CR1 register */
MODIFY_REG(huart->Instance->CR1, USART_CR1_WAKE, WakeUpMethod);
- /* Enable the Peripheral */
__HAL_UART_ENABLE(huart);
/* TEACK and/or REACK to check before moving huart->gState and huart->RxState to Ready */
@@ -622,7 +614,6 @@ HAL_StatusTypeDef HAL_UART_DeInit(UART_HandleTypeDef *huart)
huart->gState = HAL_UART_STATE_BUSY;
- /* Disable the Peripheral */
__HAL_UART_DISABLE(huart);
huart->Instance->CR1 = 0x0U;
@@ -645,7 +636,6 @@ HAL_StatusTypeDef HAL_UART_DeInit(UART_HandleTypeDef *huart)
huart->gState = HAL_UART_STATE_RESET;
huart->RxState = HAL_UART_STATE_RESET;
- /* Process Unlock */
__HAL_UNLOCK(huart);
return HAL_OK;
@@ -704,18 +694,18 @@ __weak void HAL_UART_MspDeInit(UART_HandleTypeDef *huart)
* @param pCallback pointer to the Callback function
* @retval HAL status
*/
-HAL_StatusTypeDef HAL_UART_RegisterCallback(UART_HandleTypeDef *huart, HAL_UART_CallbackIDTypeDef CallbackID, pUART_CallbackTypeDef pCallback)
+HAL_StatusTypeDef HAL_UART_RegisterCallback(UART_HandleTypeDef *huart, HAL_UART_CallbackIDTypeDef CallbackID,
+ pUART_CallbackTypeDef pCallback)
{
HAL_StatusTypeDef status = HAL_OK;
if (pCallback == NULL)
{
- /* Update the error code */
huart->ErrorCode |= HAL_UART_ERROR_INVALID_CALLBACK;
return HAL_ERROR;
}
- /* Process locked */
+
__HAL_LOCK(huart);
if (huart->gState == HAL_UART_STATE_READY)
@@ -768,10 +758,8 @@ HAL_StatusTypeDef HAL_UART_RegisterCallback(UART_HandleTypeDef *huart, HAL_UART_
break;
default :
- /* Update the error code */
huart->ErrorCode |= HAL_UART_ERROR_INVALID_CALLBACK;
- /* Return error status */
status = HAL_ERROR;
break;
}
@@ -789,24 +777,19 @@ HAL_StatusTypeDef HAL_UART_RegisterCallback(UART_HandleTypeDef *huart, HAL_UART_
break;
default :
- /* Update the error code */
huart->ErrorCode |= HAL_UART_ERROR_INVALID_CALLBACK;
- /* Return error status */
status = HAL_ERROR;
break;
}
}
else
{
- /* Update the error code */
huart->ErrorCode |= HAL_UART_ERROR_INVALID_CALLBACK;
- /* Return error status */
status = HAL_ERROR;
}
- /* Release Lock */
__HAL_UNLOCK(huart);
return status;
@@ -837,7 +820,6 @@ HAL_StatusTypeDef HAL_UART_UnRegisterCallback(UART_HandleTypeDef *huart, HAL_UAR
{
HAL_StatusTypeDef status = HAL_OK;
- /* Process locked */
__HAL_LOCK(huart);
if (HAL_UART_STATE_READY == huart->gState)
@@ -876,6 +858,12 @@ HAL_StatusTypeDef HAL_UART_UnRegisterCallback(UART_HandleTypeDef *huart, HAL_UAR
huart->AbortReceiveCpltCallback = HAL_UART_AbortReceiveCpltCallback; /* Legacy weak AbortReceiveCpltCallback */
break;
+#if defined(USART_CR1_UESM)
+ case HAL_UART_WAKEUP_CB_ID :
+ huart->WakeupCallback = HAL_UARTEx_WakeupCallback; /* Legacy weak WakeupCallback */
+ break;
+
+#endif /* USART_CR1_UESM */
case HAL_UART_MSPINIT_CB_ID :
huart->MspInitCallback = HAL_UART_MspInit; /* Legacy weak MspInitCallback */
break;
@@ -885,10 +873,8 @@ HAL_StatusTypeDef HAL_UART_UnRegisterCallback(UART_HandleTypeDef *huart, HAL_UAR
break;
default :
- /* Update the error code */
huart->ErrorCode |= HAL_UART_ERROR_INVALID_CALLBACK;
- /* Return error status */
status = HAL_ERROR;
break;
}
@@ -906,24 +892,19 @@ HAL_StatusTypeDef HAL_UART_UnRegisterCallback(UART_HandleTypeDef *huart, HAL_UAR
break;
default :
- /* Update the error code */
huart->ErrorCode |= HAL_UART_ERROR_INVALID_CALLBACK;
- /* Return error status */
status = HAL_ERROR;
break;
}
}
else
{
- /* Update the error code */
huart->ErrorCode |= HAL_UART_ERROR_INVALID_CALLBACK;
- /* Return error status */
status = HAL_ERROR;
}
- /* Release Lock */
__HAL_UNLOCK(huart);
return status;
@@ -992,6 +973,11 @@ HAL_StatusTypeDef HAL_UART_UnRegisterCallback(UART_HandleTypeDef *huart, HAL_UAR
(+) HAL_UART_AbortCpltCallback()
(+) HAL_UART_AbortTransmitCpltCallback()
(+) HAL_UART_AbortReceiveCpltCallback()
+#if defined(USART_CR1_UESM)
+
+ (#) Wakeup from Stop mode Callback:
+ (+) HAL_UARTEx_WakeupCallback()
+#endif
(#) In Non-Blocking mode transfers, possible errors are split into 2 categories.
Errors are handled as follows :
@@ -1013,9 +999,12 @@ HAL_StatusTypeDef HAL_UART_UnRegisterCallback(UART_HandleTypeDef *huart, HAL_UAR
/**
* @brief Send an amount of data in blocking mode.
+ * @note When UART parity is not enabled (PCE = 0), and Word Length is configured to 9 bits (M1-M0 = 01),
+ * the sent data is handled as a set of u16. In this case, Size must indicate the number
+ * of u16 provided through pData.
* @param huart UART handle.
- * @param pData Pointer to data buffer.
- * @param Size Amount of data to be sent.
+ * @param pData Pointer to data buffer (u8 or u16 data elements).
+ * @param Size Amount of data elements (u8 or u16) to be sent.
* @param Timeout Timeout duration.
* @retval HAL status
*/
@@ -1033,7 +1022,6 @@ HAL_StatusTypeDef HAL_UART_Transmit(UART_HandleTypeDef *huart, uint8_t *pData, u
return HAL_ERROR;
}
- /* Process Locked */
__HAL_LOCK(huart);
huart->ErrorCode = HAL_UART_ERROR_NONE;
@@ -1045,7 +1033,7 @@ HAL_StatusTypeDef HAL_UART_Transmit(UART_HandleTypeDef *huart, uint8_t *pData, u
huart->TxXferSize = Size;
huart->TxXferCount = Size;
- /* In case of 9bits/No Parity transfer, pData needs to be handled as a uint16_t pointer */
+ /* In case of 9bits/No Parity transfer, pData needs to be handled as a uint16_t pointer */
if ((huart->Init.WordLength == UART_WORDLENGTH_9B) && (huart->Init.Parity == UART_PARITY_NONE))
{
pdata8bits = NULL;
@@ -1057,6 +1045,8 @@ HAL_StatusTypeDef HAL_UART_Transmit(UART_HandleTypeDef *huart, uint8_t *pData, u
pdata16bits = NULL;
}
+ __HAL_UNLOCK(huart);
+
while (huart->TxXferCount > 0U)
{
if (UART_WaitOnFlagUntilTimeout(huart, UART_FLAG_TXE, RESET, tickstart, Timeout) != HAL_OK)
@@ -1084,9 +1074,6 @@ HAL_StatusTypeDef HAL_UART_Transmit(UART_HandleTypeDef *huart, uint8_t *pData, u
/* At end of Tx process, restore huart->gState to Ready */
huart->gState = HAL_UART_STATE_READY;
- /* Process Unlocked */
- __HAL_UNLOCK(huart);
-
return HAL_OK;
}
else
@@ -1097,9 +1084,12 @@ HAL_StatusTypeDef HAL_UART_Transmit(UART_HandleTypeDef *huart, uint8_t *pData, u
/**
* @brief Receive an amount of data in blocking mode.
+ * @note When UART parity is not enabled (PCE = 0), and Word Length is configured to 9 bits (M1-M0 = 01),
+ * the received data is handled as a set of u16. In this case, Size must indicate the number
+ * of u16 available through pData.
* @param huart UART handle.
- * @param pData Pointer to data buffer.
- * @param Size Amount of data to be received.
+ * @param pData Pointer to data buffer (u8 or u16 data elements).
+ * @param Size Amount of data elements (u8 or u16) to be received.
* @param Timeout Timeout duration.
* @retval HAL status
*/
@@ -1118,7 +1108,6 @@ HAL_StatusTypeDef HAL_UART_Receive(UART_HandleTypeDef *huart, uint8_t *pData, ui
return HAL_ERROR;
}
- /* Process Locked */
__HAL_LOCK(huart);
huart->ErrorCode = HAL_UART_ERROR_NONE;
@@ -1146,6 +1135,8 @@ HAL_StatusTypeDef HAL_UART_Receive(UART_HandleTypeDef *huart, uint8_t *pData, ui
pdata16bits = NULL;
}
+ __HAL_UNLOCK(huart);
+
/* as long as data have to be received */
while (huart->RxXferCount > 0U)
{
@@ -1169,9 +1160,6 @@ HAL_StatusTypeDef HAL_UART_Receive(UART_HandleTypeDef *huart, uint8_t *pData, ui
/* At end of Rx process, restore huart->RxState to Ready */
huart->RxState = HAL_UART_STATE_READY;
- /* Process Unlocked */
- __HAL_UNLOCK(huart);
-
return HAL_OK;
}
else
@@ -1182,9 +1170,12 @@ HAL_StatusTypeDef HAL_UART_Receive(UART_HandleTypeDef *huart, uint8_t *pData, ui
/**
* @brief Send an amount of data in interrupt mode.
+ * @note When UART parity is not enabled (PCE = 0), and Word Length is configured to 9 bits (M1-M0 = 01),
+ * the sent data is handled as a set of u16. In this case, Size must indicate the number
+ * of u16 provided through pData.
* @param huart UART handle.
- * @param pData Pointer to data buffer.
- * @param Size Amount of data to be sent.
+ * @param pData Pointer to data buffer (u8 or u16 data elements).
+ * @param Size Amount of data elements (u8 or u16) to be sent.
* @retval HAL status
*/
HAL_StatusTypeDef HAL_UART_Transmit_IT(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size)
@@ -1197,7 +1188,6 @@ HAL_StatusTypeDef HAL_UART_Transmit_IT(UART_HandleTypeDef *huart, uint8_t *pData
return HAL_ERROR;
}
- /* Process Locked */
__HAL_LOCK(huart);
huart->pTxBuffPtr = pData;
@@ -1218,7 +1208,6 @@ HAL_StatusTypeDef HAL_UART_Transmit_IT(UART_HandleTypeDef *huart, uint8_t *pData
huart->TxISR = UART_TxISR_8BIT;
}
- /* Process Unlocked */
__HAL_UNLOCK(huart);
/* Enable the Transmit Data Register Empty interrupt */
@@ -1234,9 +1223,12 @@ HAL_StatusTypeDef HAL_UART_Transmit_IT(UART_HandleTypeDef *huart, uint8_t *pData
/**
* @brief Receive an amount of data in interrupt mode.
+ * @note When UART parity is not enabled (PCE = 0), and Word Length is configured to 9 bits (M1-M0 = 01),
+ * the received data is handled as a set of u16. In this case, Size must indicate the number
+ * of u16 available through pData.
* @param huart UART handle.
- * @param pData Pointer to data buffer.
- * @param Size Amount of data to be received.
+ * @param pData Pointer to data buffer (u8 or u16 data elements).
+ * @param Size Amount of data elements (u8 or u16) to be received.
* @retval HAL status
*/
HAL_StatusTypeDef HAL_UART_Receive_IT(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size)
@@ -1249,7 +1241,6 @@ HAL_StatusTypeDef HAL_UART_Receive_IT(UART_HandleTypeDef *huart, uint8_t *pData,
return HAL_ERROR;
}
- /* Process Locked */
__HAL_LOCK(huart);
huart->pRxBuffPtr = pData;
@@ -1276,7 +1267,6 @@ HAL_StatusTypeDef HAL_UART_Receive_IT(UART_HandleTypeDef *huart, uint8_t *pData,
huart->RxISR = UART_RxISR_8BIT;
}
- /* Process Unlocked */
__HAL_UNLOCK(huart);
/* Enable the UART Parity Error interrupt and Data Register Not Empty interrupt */
@@ -1292,9 +1282,12 @@ HAL_StatusTypeDef HAL_UART_Receive_IT(UART_HandleTypeDef *huart, uint8_t *pData,
/**
* @brief Send an amount of data in DMA mode.
+ * @note When UART parity is not enabled (PCE = 0), and Word Length is configured to 9 bits (M1-M0 = 01),
+ * the sent data is handled as a set of u16. In this case, Size must indicate the number
+ * of u16 provided through pData.
* @param huart UART handle.
- * @param pData Pointer to data buffer.
- * @param Size Amount of data to be sent.
+ * @param pData Pointer to data buffer (u8 or u16 data elements).
+ * @param Size Amount of data elements (u8 or u16) to be sent.
* @retval HAL status
*/
HAL_StatusTypeDef HAL_UART_Transmit_DMA(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size)
@@ -1307,7 +1300,6 @@ HAL_StatusTypeDef HAL_UART_Transmit_DMA(UART_HandleTypeDef *huart, uint8_t *pDat
return HAL_ERROR;
}
- /* Process Locked */
__HAL_LOCK(huart);
huart->pTxBuffPtr = pData;
@@ -1337,7 +1329,6 @@ HAL_StatusTypeDef HAL_UART_Transmit_DMA(UART_HandleTypeDef *huart, uint8_t *pDat
/* Set error code to DMA */
huart->ErrorCode = HAL_UART_ERROR_DMA;
- /* Process Unlocked */
__HAL_UNLOCK(huart);
/* Restore huart->gState to ready */
@@ -1349,7 +1340,6 @@ HAL_StatusTypeDef HAL_UART_Transmit_DMA(UART_HandleTypeDef *huart, uint8_t *pDat
/* Clear the TC flag in the ICR register */
__HAL_UART_CLEAR_FLAG(huart, UART_CLEAR_TCF);
- /* Process Unlocked */
__HAL_UNLOCK(huart);
/* Enable the DMA transfer for transmit request by setting the DMAT bit
@@ -1368,9 +1358,12 @@ HAL_StatusTypeDef HAL_UART_Transmit_DMA(UART_HandleTypeDef *huart, uint8_t *pDat
* @brief Receive an amount of data in DMA mode.
* @note When the UART parity is enabled (PCE = 1), the received data contain
* the parity bit (MSB position).
+ * @note When UART parity is not enabled (PCE = 0), and Word Length is configured to 9 bits (M1-M0 = 01),
+ * the received data is handled as a set of u16. In this case, Size must indicate the number
+ * of u16 available through pData.
* @param huart UART handle.
- * @param pData Pointer to data buffer.
- * @param Size Amount of data to be received.
+ * @param pData Pointer to data buffer (u8 or u16 data elements).
+ * @param Size Amount of data elements (u8 or u16) to be received.
* @retval HAL status
*/
HAL_StatusTypeDef HAL_UART_Receive_DMA(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size)
@@ -1383,7 +1376,6 @@ HAL_StatusTypeDef HAL_UART_Receive_DMA(UART_HandleTypeDef *huart, uint8_t *pData
return HAL_ERROR;
}
- /* Process Locked */
__HAL_LOCK(huart);
huart->pRxBuffPtr = pData;
@@ -1412,7 +1404,6 @@ HAL_StatusTypeDef HAL_UART_Receive_DMA(UART_HandleTypeDef *huart, uint8_t *pData
/* Set error code to DMA */
huart->ErrorCode = HAL_UART_ERROR_DMA;
- /* Process Unlocked */
__HAL_UNLOCK(huart);
/* Restore huart->gState to ready */
@@ -1421,7 +1412,6 @@ HAL_StatusTypeDef HAL_UART_Receive_DMA(UART_HandleTypeDef *huart, uint8_t *pData
return HAL_ERROR;
}
}
- /* Process Unlocked */
__HAL_UNLOCK(huart);
/* Enable the UART Parity Error Interrupt */
@@ -1452,7 +1442,6 @@ HAL_StatusTypeDef HAL_UART_DMAPause(UART_HandleTypeDef *huart)
const HAL_UART_StateTypeDef gstate = huart->gState;
const HAL_UART_StateTypeDef rxstate = huart->RxState;
- /* Process Locked */
__HAL_LOCK(huart);
if ((HAL_IS_BIT_SET(huart->Instance->CR3, USART_CR3_DMAT)) &&
@@ -1472,7 +1461,6 @@ HAL_StatusTypeDef HAL_UART_DMAPause(UART_HandleTypeDef *huart)
CLEAR_BIT(huart->Instance->CR3, USART_CR3_DMAR);
}
- /* Process Unlocked */
__HAL_UNLOCK(huart);
return HAL_OK;
@@ -1485,7 +1473,6 @@ HAL_StatusTypeDef HAL_UART_DMAPause(UART_HandleTypeDef *huart)
*/
HAL_StatusTypeDef HAL_UART_DMAResume(UART_HandleTypeDef *huart)
{
- /* Process Locked */
__HAL_LOCK(huart);
if (huart->gState == HAL_UART_STATE_BUSY_TX)
@@ -1506,7 +1493,6 @@ HAL_StatusTypeDef HAL_UART_DMAResume(UART_HandleTypeDef *huart)
SET_BIT(huart->Instance->CR3, USART_CR3_DMAR);
}
- /* Process Unlocked */
__HAL_UNLOCK(huart);
return HAL_OK;
@@ -1591,7 +1577,7 @@ HAL_StatusTypeDef HAL_UART_DMAStop(UART_HandleTypeDef *huart)
* - Set handle State to READY
* @note This procedure is executed in blocking mode : when exiting function, Abort is considered as completed.
* @retval HAL status
-*/
+ */
HAL_StatusTypeDef HAL_UART_Abort(UART_HandleTypeDef *huart)
{
/* Disable TXEIE, TCIE, RXNE, PE and ERR (Frame error, noise error, overrun error) interrupts */
@@ -1663,7 +1649,6 @@ HAL_StatusTypeDef HAL_UART_Abort(UART_HandleTypeDef *huart)
huart->gState = HAL_UART_STATE_READY;
huart->RxState = HAL_UART_STATE_READY;
- /* Reset Handle ErrorCode to No Error */
huart->ErrorCode = HAL_UART_ERROR_NONE;
return HAL_OK;
@@ -1680,7 +1665,7 @@ HAL_StatusTypeDef HAL_UART_Abort(UART_HandleTypeDef *huart)
* - Set handle State to READY
* @note This procedure is executed in blocking mode : when exiting function, Abort is considered as completed.
* @retval HAL status
-*/
+ */
HAL_StatusTypeDef HAL_UART_AbortTransmit(UART_HandleTypeDef *huart)
{
/* Disable TXEIE and TCIE interrupts */
@@ -1732,7 +1717,7 @@ HAL_StatusTypeDef HAL_UART_AbortTransmit(UART_HandleTypeDef *huart)
* - Set handle State to READY
* @note This procedure is executed in blocking mode : when exiting function, Abort is considered as completed.
* @retval HAL status
-*/
+ */
HAL_StatusTypeDef HAL_UART_AbortReceive(UART_HandleTypeDef *huart)
{
/* Disable RXNE, PE and ERR (Frame error, noise error, overrun error) interrupts */
@@ -1792,7 +1777,7 @@ HAL_StatusTypeDef HAL_UART_AbortReceive(UART_HandleTypeDef *huart)
* @note This procedure is executed in Interrupt mode, meaning that abort procedure could be
* considered as completed only when user abort complete callback is executed (not when exiting function).
* @retval HAL status
-*/
+ */
HAL_StatusTypeDef HAL_UART_Abort_IT(UART_HandleTypeDef *huart)
{
uint32_t abortcplt = 1U;
@@ -1931,7 +1916,7 @@ HAL_StatusTypeDef HAL_UART_Abort_IT(UART_HandleTypeDef *huart)
* @note This procedure is executed in Interrupt mode, meaning that abort procedure could be
* considered as completed only when user abort complete callback is executed (not when exiting function).
* @retval HAL status
-*/
+ */
HAL_StatusTypeDef HAL_UART_AbortTransmit_IT(UART_HandleTypeDef *huart)
{
/* Disable interrupts */
@@ -2015,7 +2000,7 @@ HAL_StatusTypeDef HAL_UART_AbortTransmit_IT(UART_HandleTypeDef *huart)
* @note This procedure is executed in Interrupt mode, meaning that abort procedure could be
* considered as completed only when user abort complete callback is executed (not when exiting function).
* @retval HAL status
-*/
+ */
HAL_StatusTypeDef HAL_UART_AbortReceive_IT(UART_HandleTypeDef *huart)
{
/* Disable RXNE, PE and ERR (Frame error, noise error, overrun error) interrupts */
@@ -2110,7 +2095,7 @@ void HAL_UART_IRQHandler(UART_HandleTypeDef *huart)
uint32_t errorcode;
/* If no error occurs */
- errorflags = (isrflags & (uint32_t)(USART_ISR_PE | USART_ISR_FE | USART_ISR_ORE | USART_ISR_NE));
+ errorflags = (isrflags & (uint32_t)(USART_ISR_PE | USART_ISR_FE | USART_ISR_ORE | USART_ISR_NE | USART_ISR_RTOF));
if (errorflags == 0U)
{
/* UART in mode Receiver ---------------------------------------------------*/
@@ -2164,10 +2149,18 @@ void HAL_UART_IRQHandler(UART_HandleTypeDef *huart)
huart->ErrorCode |= HAL_UART_ERROR_ORE;
}
- /* Call UART Error Call back function if need be --------------------------*/
+ /* UART Receiver Timeout interrupt occurred ---------------------------------*/
+ if (((isrflags & USART_ISR_RTOF) != 0U) && ((cr1its & USART_CR1_RTOIE) != 0U))
+ {
+ __HAL_UART_CLEAR_FLAG(huart, UART_CLEAR_RTOF);
+
+ huart->ErrorCode |= HAL_UART_ERROR_RTO;
+ }
+
+ /* Call UART Error Call back function if need be ----------------------------*/
if (huart->ErrorCode != HAL_UART_ERROR_NONE)
{
- /* UART in mode Receiver ---------------------------------------------------*/
+ /* UART in mode Receiver --------------------------------------------------*/
if (((isrflags & USART_ISR_RXNE) != 0U)
&& ((cr1its & USART_CR1_RXNEIE) != 0U))
{
@@ -2177,11 +2170,14 @@ void HAL_UART_IRQHandler(UART_HandleTypeDef *huart)
}
}
- /* If Overrun error occurs, or if any error occurs in DMA mode reception,
- consider error as blocking */
+ /* If Error is to be considered as blocking :
+ - Receiver Timeout error in Reception
+ - Overrun error in Reception
+ - any error occurs in DMA mode reception
+ */
errorcode = huart->ErrorCode;
if ((HAL_IS_BIT_SET(huart->Instance->CR3, USART_CR3_DMAR)) ||
- ((errorcode & HAL_UART_ERROR_ORE) != 0U))
+ ((errorcode & (HAL_UART_ERROR_RTO | HAL_UART_ERROR_ORE)) != 0U))
{
/* Blocking error : transfer is aborted
Set the UART state ready to be able to start again the process,
@@ -2249,6 +2245,26 @@ void HAL_UART_IRQHandler(UART_HandleTypeDef *huart)
return;
} /* End if some error occurs */
+#if defined(USART_CR1_UESM)
+
+ /* UART wakeup from Stop mode interrupt occurred ---------------------------*/
+ if (((isrflags & USART_ISR_WUF) != 0U) && ((cr3its & USART_CR3_WUFIE) != 0U))
+ {
+ __HAL_UART_CLEAR_FLAG(huart, UART_CLEAR_WUF);
+
+ /* UART Rx state is not reset as a reception process might be ongoing.
+ If UART handle state fields need to be reset to READY, this could be done in Wakeup callback */
+
+#if (USE_HAL_UART_REGISTER_CALLBACKS == 1)
+ /* Call registered Wakeup Callback */
+ huart->WakeupCallback(huart);
+#else
+ /* Call legacy weak Wakeup Callback */
+ HAL_UARTEx_WakeupCallback(huart);
+#endif /* USE_HAL_UART_REGISTER_CALLBACKS */
+ return;
+ }
+#endif /* USART_CR1_UESM */
/* UART in mode Transmitter ------------------------------------------------*/
if (((isrflags & USART_ISR_TXE) != 0U)
@@ -2390,6 +2406,23 @@ __weak void HAL_UART_AbortReceiveCpltCallback(UART_HandleTypeDef *huart)
*/
}
+#if defined(USART_CR1_UESM)
+/**
+ * @brief UART wakeup from Stop mode callback.
+ * @param huart UART handle.
+ * @retval None
+ */
+__weak void HAL_UARTEx_WakeupCallback(UART_HandleTypeDef *huart)
+{
+ /* Prevent unused argument(s) compilation warning */
+ UNUSED(huart);
+
+ /* NOTE : This function should not be modified, when the callback is needed,
+ the HAL_UARTEx_WakeupCallback can be implemented in the user file.
+ */
+}
+
+#endif /* USART_CR1_UESM */
/**
* @}
*/
@@ -2403,6 +2436,9 @@ __weak void HAL_UART_AbortReceiveCpltCallback(UART_HandleTypeDef *huart)
===============================================================================
[..]
This subsection provides a set of functions allowing to control the UART.
+ (+) HAL_UART_ReceiverTimeout_Config() API allows to configure the receiver timeout value on the fly
+ (+) HAL_UART_EnableReceiverTimeout() API enables the receiver timeout feature
+ (+) HAL_UART_DisableReceiverTimeout() API disables the receiver timeout feature
(+) HAL_MultiProcessor_EnableMuteMode() API enables mute mode
(+) HAL_MultiProcessor_DisableMuteMode() API disables mute mode
(+) HAL_MultiProcessor_EnterMuteMode() API enters mute mode
@@ -2416,6 +2452,82 @@ __weak void HAL_UART_AbortReceiveCpltCallback(UART_HandleTypeDef *huart)
* @{
*/
+/**
+ * @brief Update on the fly the receiver timeout value in RTOR register.
+ * @param huart Pointer to a UART_HandleTypeDef structure that contains
+ * the configuration information for the specified UART module.
+ * @param TimeoutValue receiver timeout value in number of baud blocks. The timeout
+ * value must be less or equal to 0x0FFFFFFFF.
+ * @retval None
+ */
+void HAL_UART_ReceiverTimeout_Config(UART_HandleTypeDef *huart, uint32_t TimeoutValue)
+{
+ assert_param(IS_UART_RECEIVER_TIMEOUT_VALUE(TimeoutValue));
+ MODIFY_REG(huart->Instance->RTOR, USART_RTOR_RTO, TimeoutValue);
+}
+
+/**
+ * @brief Enable the UART receiver timeout feature.
+ * @param huart Pointer to a UART_HandleTypeDef structure that contains
+ * the configuration information for the specified UART module.
+ * @retval HAL status
+ */
+HAL_StatusTypeDef HAL_UART_EnableReceiverTimeout(UART_HandleTypeDef *huart)
+{
+ if (huart->gState == HAL_UART_STATE_READY)
+ {
+ /* Process Locked */
+ __HAL_LOCK(huart);
+
+ huart->gState = HAL_UART_STATE_BUSY;
+
+ /* Set the USART RTOEN bit */
+ SET_BIT(huart->Instance->CR2, USART_CR2_RTOEN);
+
+ huart->gState = HAL_UART_STATE_READY;
+
+ /* Process Unlocked */
+ __HAL_UNLOCK(huart);
+
+ return HAL_OK;
+ }
+ else
+ {
+ return HAL_BUSY;
+ }
+}
+
+/**
+ * @brief Disable the UART receiver timeout feature.
+ * @param huart Pointer to a UART_HandleTypeDef structure that contains
+ * the configuration information for the specified UART module.
+ * @retval HAL status
+ */
+HAL_StatusTypeDef HAL_UART_DisableReceiverTimeout(UART_HandleTypeDef *huart)
+{
+ if (huart->gState == HAL_UART_STATE_READY)
+ {
+ /* Process Locked */
+ __HAL_LOCK(huart);
+
+ huart->gState = HAL_UART_STATE_BUSY;
+
+ /* Clear the USART RTOEN bit */
+ CLEAR_BIT(huart->Instance->CR2, USART_CR2_RTOEN);
+
+ huart->gState = HAL_UART_STATE_READY;
+
+ /* Process Unlocked */
+ __HAL_UNLOCK(huart);
+
+ return HAL_OK;
+ }
+ else
+ {
+ return HAL_BUSY;
+ }
+}
+
/**
* @brief Enable UART in mute mode (does not mean UART enters mute mode;
* to enter mute mode, HAL_MultiProcessor_EnterMuteMode() API must be called).
@@ -2424,7 +2536,6 @@ __weak void HAL_UART_AbortReceiveCpltCallback(UART_HandleTypeDef *huart)
*/
HAL_StatusTypeDef HAL_MultiProcessor_EnableMuteMode(UART_HandleTypeDef *huart)
{
- /* Process Locked */
__HAL_LOCK(huart);
huart->gState = HAL_UART_STATE_BUSY;
@@ -2445,7 +2556,6 @@ HAL_StatusTypeDef HAL_MultiProcessor_EnableMuteMode(UART_HandleTypeDef *huart)
*/
HAL_StatusTypeDef HAL_MultiProcessor_DisableMuteMode(UART_HandleTypeDef *huart)
{
- /* Process Locked */
__HAL_LOCK(huart);
huart->gState = HAL_UART_STATE_BUSY;
@@ -2476,7 +2586,6 @@ void HAL_MultiProcessor_EnterMuteMode(UART_HandleTypeDef *huart)
*/
HAL_StatusTypeDef HAL_HalfDuplex_EnableTransmitter(UART_HandleTypeDef *huart)
{
- /* Process Locked */
__HAL_LOCK(huart);
huart->gState = HAL_UART_STATE_BUSY;
@@ -2488,7 +2597,6 @@ HAL_StatusTypeDef HAL_HalfDuplex_EnableTransmitter(UART_HandleTypeDef *huart)
huart->gState = HAL_UART_STATE_READY;
- /* Process Unlocked */
__HAL_UNLOCK(huart);
return HAL_OK;
@@ -2501,7 +2609,6 @@ HAL_StatusTypeDef HAL_HalfDuplex_EnableTransmitter(UART_HandleTypeDef *huart)
*/
HAL_StatusTypeDef HAL_HalfDuplex_EnableReceiver(UART_HandleTypeDef *huart)
{
- /* Process Locked */
__HAL_LOCK(huart);
huart->gState = HAL_UART_STATE_BUSY;
@@ -2513,7 +2620,6 @@ HAL_StatusTypeDef HAL_HalfDuplex_EnableReceiver(UART_HandleTypeDef *huart)
huart->gState = HAL_UART_STATE_READY;
- /* Process Unlocked */
__HAL_UNLOCK(huart);
return HAL_OK;
@@ -2530,7 +2636,6 @@ HAL_StatusTypeDef HAL_LIN_SendBreak(UART_HandleTypeDef *huart)
/* Check the parameters */
assert_param(IS_UART_LIN_INSTANCE(huart->Instance));
- /* Process Locked */
__HAL_LOCK(huart);
huart->gState = HAL_UART_STATE_BUSY;
@@ -2540,7 +2645,6 @@ HAL_StatusTypeDef HAL_LIN_SendBreak(UART_HandleTypeDef *huart)
huart->gState = HAL_UART_STATE_READY;
- /* Process Unlocked */
__HAL_UNLOCK(huart);
return HAL_OK;
@@ -2551,8 +2655,8 @@ HAL_StatusTypeDef HAL_LIN_SendBreak(UART_HandleTypeDef *huart)
*/
/** @defgroup UART_Exported_Functions_Group4 Peripheral State and Error functions
- * @brief UART Peripheral State functions
- *
+ * @brief UART Peripheral State functions
+ *
@verbatim
==============================================================================
##### Peripheral State and Error functions #####
@@ -2574,7 +2678,8 @@ HAL_StatusTypeDef HAL_LIN_SendBreak(UART_HandleTypeDef *huart)
*/
HAL_UART_StateTypeDef HAL_UART_GetState(UART_HandleTypeDef *huart)
{
- uint32_t temp1, temp2;
+ uint32_t temp1;
+ uint32_t temp2;
temp1 = huart->gState;
temp2 = huart->RxState;
@@ -2586,7 +2691,7 @@ HAL_UART_StateTypeDef HAL_UART_GetState(UART_HandleTypeDef *huart)
* @param huart Pointer to a UART_HandleTypeDef structure that contains
* the configuration information for the specified UART.
* @retval UART Error Code
-*/
+ */
uint32_t HAL_UART_GetError(UART_HandleTypeDef *huart)
{
return huart->ErrorCode;
@@ -2620,6 +2725,9 @@ void UART_InitCallbacksToDefault(UART_HandleTypeDef *huart)
huart->AbortCpltCallback = HAL_UART_AbortCpltCallback; /* Legacy weak AbortCpltCallback */
huart->AbortTransmitCpltCallback = HAL_UART_AbortTransmitCpltCallback; /* Legacy weak AbortTransmitCpltCallback */
huart->AbortReceiveCpltCallback = HAL_UART_AbortReceiveCpltCallback; /* Legacy weak AbortReceiveCpltCallback */
+#if defined(USART_CR1_UESM)
+ huart->WakeupCallback = HAL_UARTEx_WakeupCallback; /* Legacy weak WakeupCallback */
+#endif /* USART_CR1_UESM */
}
#endif /* USE_HAL_UART_REGISTER_CALLBACKS */
@@ -2636,6 +2744,7 @@ HAL_StatusTypeDef UART_SetConfig(UART_HandleTypeDef *huart)
UART_ClockSourceTypeDef clocksource;
uint32_t usartdiv = 0x00000000U;
HAL_StatusTypeDef ret = HAL_OK;
+ uint32_t pclk;
/* Check the parameters */
assert_param(IS_UART_BAUDRATE(huart->Init.BaudRate));
@@ -2683,21 +2792,23 @@ HAL_StatusTypeDef UART_SetConfig(UART_HandleTypeDef *huart)
switch (clocksource)
{
case UART_CLOCKSOURCE_PCLK1:
- usartdiv = (uint16_t)(UART_DIV_SAMPLING8(HAL_RCC_GetPCLK1Freq(), huart->Init.BaudRate));
+ pclk = HAL_RCC_GetPCLK1Freq();
+ usartdiv = (uint16_t)(UART_DIV_SAMPLING8(pclk, huart->Init.BaudRate));
break;
case UART_CLOCKSOURCE_PCLK2:
- usartdiv = (uint16_t)(UART_DIV_SAMPLING8(HAL_RCC_GetPCLK2Freq(), huart->Init.BaudRate));
+ pclk = HAL_RCC_GetPCLK2Freq();
+ usartdiv = (uint16_t)(UART_DIV_SAMPLING8(pclk, huart->Init.BaudRate));
break;
case UART_CLOCKSOURCE_HSI:
usartdiv = (uint16_t)(UART_DIV_SAMPLING8(HSI_VALUE, huart->Init.BaudRate));
break;
case UART_CLOCKSOURCE_SYSCLK:
- usartdiv = (uint16_t)(UART_DIV_SAMPLING8(HAL_RCC_GetSysClockFreq(), huart->Init.BaudRate));
+ pclk = HAL_RCC_GetSysClockFreq();
+ usartdiv = (uint16_t)(UART_DIV_SAMPLING8(pclk, huart->Init.BaudRate));
break;
case UART_CLOCKSOURCE_LSE:
usartdiv = (uint16_t)(UART_DIV_SAMPLING8(LSE_VALUE, huart->Init.BaudRate));
break;
- case UART_CLOCKSOURCE_UNDEFINED:
default:
ret = HAL_ERROR;
break;
@@ -2720,21 +2831,23 @@ HAL_StatusTypeDef UART_SetConfig(UART_HandleTypeDef *huart)
switch (clocksource)
{
case UART_CLOCKSOURCE_PCLK1:
- usartdiv = (uint16_t)(UART_DIV_SAMPLING16(HAL_RCC_GetPCLK1Freq(), huart->Init.BaudRate));
+ pclk = HAL_RCC_GetPCLK1Freq();
+ usartdiv = (uint16_t)(UART_DIV_SAMPLING16(pclk, huart->Init.BaudRate));
break;
case UART_CLOCKSOURCE_PCLK2:
- usartdiv = (uint16_t)(UART_DIV_SAMPLING16(HAL_RCC_GetPCLK2Freq(), huart->Init.BaudRate));
+ pclk = HAL_RCC_GetPCLK2Freq();
+ usartdiv = (uint16_t)(UART_DIV_SAMPLING16(pclk, huart->Init.BaudRate));
break;
case UART_CLOCKSOURCE_HSI:
usartdiv = (uint16_t)(UART_DIV_SAMPLING16(HSI_VALUE, huart->Init.BaudRate));
break;
case UART_CLOCKSOURCE_SYSCLK:
- usartdiv = (uint16_t)(UART_DIV_SAMPLING16(HAL_RCC_GetSysClockFreq(), huart->Init.BaudRate));
+ pclk = HAL_RCC_GetSysClockFreq();
+ usartdiv = (uint16_t)(UART_DIV_SAMPLING16(pclk, huart->Init.BaudRate));
break;
case UART_CLOCKSOURCE_LSE:
usartdiv = (uint16_t)(UART_DIV_SAMPLING16(LSE_VALUE, huart->Init.BaudRate));
break;
- case UART_CLOCKSOURCE_UNDEFINED:
default:
ret = HAL_ERROR;
break;
@@ -2858,12 +2971,24 @@ HAL_StatusTypeDef UART_CheckIdleState(UART_HandleTypeDef *huart)
return HAL_TIMEOUT;
}
}
+#if defined(USART_ISR_REACK)
+
+ /* Check if the Receiver is enabled */
+ if ((huart->Instance->CR1 & USART_CR1_RE) == USART_CR1_RE)
+ {
+ /* Wait until REACK flag is set */
+ if (UART_WaitOnFlagUntilTimeout(huart, USART_ISR_REACK, RESET, tickstart, HAL_UART_TIMEOUT_VALUE) != HAL_OK)
+ {
+ /* Timeout occurred */
+ return HAL_TIMEOUT;
+ }
+ }
+#endif
/* Initialize the UART State */
huart->gState = HAL_UART_STATE_READY;
huart->RxState = HAL_UART_STATE_READY;
- /* Process Unlocked */
__HAL_UNLOCK(huart);
return HAL_OK;
@@ -2878,7 +3003,8 @@ HAL_StatusTypeDef UART_CheckIdleState(UART_HandleTypeDef *huart)
* @param Timeout Timeout duration
* @retval HAL status
*/
-HAL_StatusTypeDef UART_WaitOnFlagUntilTimeout(UART_HandleTypeDef *huart, uint32_t Flag, FlagStatus Status, uint32_t Tickstart, uint32_t Timeout)
+HAL_StatusTypeDef UART_WaitOnFlagUntilTimeout(UART_HandleTypeDef *huart, uint32_t Flag, FlagStatus Status,
+ uint32_t Tickstart, uint32_t Timeout)
{
/* Wait until flag is set */
while ((__HAL_UART_GET_FLAG(huart, Flag) ? SET : RESET) == Status)
@@ -2895,11 +3021,32 @@ HAL_StatusTypeDef UART_WaitOnFlagUntilTimeout(UART_HandleTypeDef *huart, uint32_
huart->gState = HAL_UART_STATE_READY;
huart->RxState = HAL_UART_STATE_READY;
- /* Process Unlocked */
__HAL_UNLOCK(huart);
return HAL_TIMEOUT;
}
+
+ if (READ_BIT(huart->Instance->CR1, USART_CR1_RE) != 0U)
+ {
+ if (__HAL_UART_GET_FLAG(huart, UART_FLAG_RTOF) == SET)
+ {
+ /* Clear Receiver Timeout flag*/
+ __HAL_UART_CLEAR_FLAG(huart, UART_CLEAR_RTOF);
+
+ /* Disable TXE, RXNE, PE and ERR (Frame error, noise error, overrun error) interrupts for the interrupt process */
+ CLEAR_BIT(huart->Instance->CR1, (USART_CR1_RXNEIE | USART_CR1_PEIE | USART_CR1_TXEIE));
+ CLEAR_BIT(huart->Instance->CR3, USART_CR3_EIE);
+
+ huart->gState = HAL_UART_STATE_READY;
+ huart->RxState = HAL_UART_STATE_READY;
+ huart->ErrorCode = HAL_UART_ERROR_RTO;
+
+ /* Process Unlocked */
+ __HAL_UNLOCK(huart);
+
+ return HAL_TIMEOUT;
+ }
+ }
}
}
return HAL_OK;
diff --git a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_IAR/Prog/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_uart_ex.c b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_IAR/Prog/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_uart_ex.c
index 415fb56b..fcbcf4fd 100644
--- a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_IAR/Prog/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_uart_ex.c
+++ b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_IAR/Prog/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_uart_ex.c
@@ -57,6 +57,9 @@
/** @defgroup UARTEx_Private_Functions UARTEx Private Functions
* @{
*/
+#if defined(USART_CR1_UESM)
+static void UARTEx_Wakeup_AddressConfig(UART_HandleTypeDef *huart, UART_WakeUpTypeDef WakeUpSelection);
+#endif /* USART_CR1_UESM */
/**
* @}
*/
@@ -144,7 +147,8 @@
* oversampling rate).
* @retval HAL status
*/
-HAL_StatusTypeDef HAL_RS485Ex_Init(UART_HandleTypeDef *huart, uint32_t Polarity, uint32_t AssertionTime, uint32_t DeassertionTime)
+HAL_StatusTypeDef HAL_RS485Ex_Init(UART_HandleTypeDef *huart, uint32_t Polarity, uint32_t AssertionTime,
+ uint32_t DeassertionTime)
{
uint32_t temp;
@@ -224,42 +228,74 @@ HAL_StatusTypeDef HAL_RS485Ex_Init(UART_HandleTypeDef *huart, uint32_t Polarity,
* @}
*/
-/** @defgroup UARTEx_Exported_Functions_Group2 IO operation functions
- * @brief Extended functions
- *
-@verbatim
- ===============================================================================
- ##### IO operation functions #####
- ===============================================================================
- This subsection provides a set of Wakeup and FIFO mode related callback functions.
-
-@endverbatim
- * @{
- */
-
-
-/**
- * @}
- */
/** @defgroup UARTEx_Exported_Functions_Group3 Peripheral Control functions
* @brief Extended Peripheral Control functions
- *
+ *
@verbatim
===============================================================================
##### Peripheral Control functions #####
===============================================================================
[..] This section provides the following functions:
+ (+) HAL_UARTEx_EnableClockStopMode() API enables the UART clock (HSI or LSE only) during stop mode
+ (+) HAL_UARTEx_DisableClockStopMode() API disables the above functionality
(+) HAL_MultiProcessorEx_AddressLength_Set() API optionally sets the UART node address
detection length to more than 4 bits for multiprocessor address mark wake up.
+#if defined(USART_CR1_UESM)
+ (+) HAL_UARTEx_StopModeWakeUpSourceConfig() API defines the wake-up from stop mode
+ trigger: address match, Start Bit detection or RXNE bit status.
+ (+) HAL_UARTEx_EnableStopMode() API enables the UART to wake up the MCU from stop mode
+ (+) HAL_UARTEx_DisableStopMode() API disables the above functionality
+#endif
@endverbatim
* @{
*/
+#if defined(USART_CR3_UCESM)
+/**
+ * @brief Keep UART Clock enabled when in Stop Mode.
+ * @note When the USART clock source is configured to be LSE or HSI, it is possible to keep enabled
+ * this clock during STOP mode by setting the UCESM bit in USART_CR3 control register.
+ * @note When LPUART is used to wakeup from stop with LSE is selected as LPUART clock source,
+ * and desired baud rate is 9600 baud, the bit UCESM bit in LPUART_CR3 control register must be set.
+ * @param huart UART handle.
+ * @retval HAL status
+ */
+HAL_StatusTypeDef HAL_UARTEx_EnableClockStopMode(UART_HandleTypeDef *huart)
+{
+ /* Process Locked */
+ __HAL_LOCK(huart);
+ /* Set UCESM bit */
+ SET_BIT(huart->Instance->CR3, USART_CR3_UCESM);
+ /* Process Unlocked */
+ __HAL_UNLOCK(huart);
+ return HAL_OK;
+}
+
+/**
+ * @brief Disable UART Clock when in Stop Mode.
+ * @param huart UART handle.
+ * @retval HAL status
+ */
+HAL_StatusTypeDef HAL_UARTEx_DisableClockStopMode(UART_HandleTypeDef *huart)
+{
+ /* Process Locked */
+ __HAL_LOCK(huart);
+
+ /* Clear UCESM bit */
+ CLEAR_BIT(huart->Instance->CR3, USART_CR3_UCESM);
+
+ /* Process Unlocked */
+ __HAL_UNLOCK(huart);
+
+ return HAL_OK;
+}
+
+#endif /* USART_CR3_UCESM */
/**
* @brief By default in multiprocessor mode, when the wake up method is set
* to address mark, the UART handles only 4-bit long addresses detection;
@@ -299,8 +335,108 @@ HAL_StatusTypeDef HAL_MultiProcessorEx_AddressLength_Set(UART_HandleTypeDef *hua
return (UART_CheckIdleState(huart));
}
+#if defined(USART_CR1_UESM)
+/**
+ * @brief Set Wakeup from Stop mode interrupt flag selection.
+ * @note It is the application responsibility to enable the interrupt used as
+ * usart_wkup interrupt source before entering low-power mode.
+ * @param huart UART handle.
+ * @param WakeUpSelection Address match, Start Bit detection or RXNE/RXFNE bit status.
+ * This parameter can be one of the following values:
+ * @arg @ref UART_WAKEUP_ON_ADDRESS
+ * @arg @ref UART_WAKEUP_ON_STARTBIT
+ * @arg @ref UART_WAKEUP_ON_READDATA_NONEMPTY
+ * @retval HAL status
+ */
+HAL_StatusTypeDef HAL_UARTEx_StopModeWakeUpSourceConfig(UART_HandleTypeDef *huart, UART_WakeUpTypeDef WakeUpSelection)
+{
+ HAL_StatusTypeDef status = HAL_OK;
+ uint32_t tickstart;
+ /* check the wake-up from stop mode UART instance */
+ assert_param(IS_UART_WAKEUP_FROMSTOP_INSTANCE(huart->Instance));
+ /* check the wake-up selection parameter */
+ assert_param(IS_UART_WAKEUP_SELECTION(WakeUpSelection.WakeUpEvent));
+ /* Process Locked */
+ __HAL_LOCK(huart);
+
+ huart->gState = HAL_UART_STATE_BUSY;
+
+ /* Disable the Peripheral */
+ __HAL_UART_DISABLE(huart);
+
+ /* Set the wake-up selection scheme */
+ MODIFY_REG(huart->Instance->CR3, USART_CR3_WUS, WakeUpSelection.WakeUpEvent);
+
+ if (WakeUpSelection.WakeUpEvent == UART_WAKEUP_ON_ADDRESS)
+ {
+ UARTEx_Wakeup_AddressConfig(huart, WakeUpSelection);
+ }
+
+ /* Enable the Peripheral */
+ __HAL_UART_ENABLE(huart);
+
+ /* Init tickstart for timeout managment*/
+ tickstart = HAL_GetTick();
+
+ /* Wait until REACK flag is set */
+ if (UART_WaitOnFlagUntilTimeout(huart, USART_ISR_REACK, RESET, tickstart, HAL_UART_TIMEOUT_VALUE) != HAL_OK)
+ {
+ status = HAL_TIMEOUT;
+ }
+ else
+ {
+ /* Initialize the UART State */
+ huart->gState = HAL_UART_STATE_READY;
+ }
+
+ /* Process Unlocked */
+ __HAL_UNLOCK(huart);
+
+ return status;
+}
+
+/**
+ * @brief Enable UART Stop Mode.
+ * @note The UART is able to wake up the MCU from Stop 1 mode as long as UART clock is HSI or LSE.
+ * @param huart UART handle.
+ * @retval HAL status
+ */
+HAL_StatusTypeDef HAL_UARTEx_EnableStopMode(UART_HandleTypeDef *huart)
+{
+ /* Process Locked */
+ __HAL_LOCK(huart);
+
+ /* Set UESM bit */
+ SET_BIT(huart->Instance->CR1, USART_CR1_UESM);
+
+ /* Process Unlocked */
+ __HAL_UNLOCK(huart);
+
+ return HAL_OK;
+}
+
+/**
+ * @brief Disable UART Stop Mode.
+ * @param huart UART handle.
+ * @retval HAL status
+ */
+HAL_StatusTypeDef HAL_UARTEx_DisableStopMode(UART_HandleTypeDef *huart)
+{
+ /* Process Locked */
+ __HAL_LOCK(huart);
+
+ /* Clear UESM bit */
+ CLEAR_BIT(huart->Instance->CR1, USART_CR1_UESM);
+
+ /* Process Unlocked */
+ __HAL_UNLOCK(huart);
+
+ return HAL_OK;
+}
+
+#endif /* USART_CR1_UESM */
/**
* @}
*/
@@ -312,6 +448,25 @@ HAL_StatusTypeDef HAL_MultiProcessorEx_AddressLength_Set(UART_HandleTypeDef *hua
/** @addtogroup UARTEx_Private_Functions
* @{
*/
+#if defined(USART_CR1_UESM)
+
+/**
+ * @brief Initialize the UART wake-up from stop mode parameters when triggered by address detection.
+ * @param huart UART handle.
+ * @param WakeUpSelection UART wake up from stop mode parameters.
+ * @retval None
+ */
+static void UARTEx_Wakeup_AddressConfig(UART_HandleTypeDef *huart, UART_WakeUpTypeDef WakeUpSelection)
+{
+ assert_param(IS_UART_ADDRESSLENGTH_DETECT(WakeUpSelection.AddressLength));
+
+ /* Set the USART address length */
+ MODIFY_REG(huart->Instance->CR2, USART_CR2_ADDM7, WakeUpSelection.AddressLength);
+
+ /* Set the USART address node */
+ MODIFY_REG(huart->Instance->CR2, USART_CR2_ADD, ((uint32_t)WakeUpSelection.Address << UART_CR2_ADDRESS_LSB_POS));
+}
+#endif /* USART_CR1_UESM */
/**
* @}
diff --git a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_IAR/Prog/lib/system_stm32f7xx.c b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_IAR/Prog/lib/system_stm32f7xx.c
index cb4e5662..7282bc83 100644
--- a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_IAR/Prog/lib/system_stm32f7xx.c
+++ b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_IAR/Prog/lib/system_stm32f7xx.c
@@ -1,278 +1,244 @@
-/**
- ******************************************************************************
- * @file system_stm32f7xx.c
- * @author MCD Application Team
- * @brief CMSIS Cortex-M7 Device Peripheral Access Layer System Source File.
- *
- * This file provides two functions and one global variable to be called from
- * user application:
- * - SystemInit(): This function is called at startup just after reset and
- * before branch to main program. This call is made inside
- * the "startup_stm32f7xx.s" file.
- *
- * - SystemCoreClock variable: Contains the core clock (HCLK), it can be used
- * by the user application to setup the SysTick
- * timer or configure other parameters.
- *
- * - SystemCoreClockUpdate(): Updates the variable SystemCoreClock and must
- * be called whenever the core clock is changed
- * during program execution.
- *
- *
- ******************************************************************************
- * @attention
- *
- * © COPYRIGHT 2016 STMicroelectronics
- *
- * Redistribution and use in source and binary forms, with or without modification,
- * are permitted provided that the following conditions are met:
- * 1. Redistributions of source code must retain the above copyright notice,
- * this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright notice,
- * this list of conditions and the following disclaimer in the documentation
- * and/or other materials provided with the distribution.
- * 3. Neither the name of STMicroelectronics nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
- * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
- * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- ******************************************************************************
- */
-
-/** @addtogroup CMSIS
- * @{
- */
-
-/** @addtogroup stm32f7xx_system
- * @{
- */
-
-/** @addtogroup STM32F7xx_System_Private_Includes
- * @{
- */
-
-#include "stm32f7xx.h"
-
-#if !defined (HSE_VALUE)
- #define HSE_VALUE ((uint32_t)25000000) /*!< Default value of the External oscillator in Hz */
-#endif /* HSE_VALUE */
-
-#if !defined (HSI_VALUE)
- #define HSI_VALUE ((uint32_t)16000000) /*!< Value of the Internal oscillator in Hz*/
-#endif /* HSI_VALUE */
-
-/**
- * @}
- */
-
-/** @addtogroup STM32F7xx_System_Private_TypesDefinitions
- * @{
- */
-
-/**
- * @}
- */
-
-/** @addtogroup STM32F7xx_System_Private_Defines
- * @{
- */
-
-/************************* Miscellaneous Configuration ************************/
-
-/*!< Uncomment the following line if you need to relocate your vector Table in
- Internal SRAM. */
-/* #define VECT_TAB_SRAM */
-#define VECT_TAB_OFFSET 0x00 /*!< Vector Table base offset field.
- This value must be a multiple of 0x200. */
-/******************************************************************************/
-
-/**
- * @}
- */
-
-/** @addtogroup STM32F7xx_System_Private_Macros
- * @{
- */
-
-/**
- * @}
- */
-
-/** @addtogroup STM32F7xx_System_Private_Variables
- * @{
- */
-
- /* This variable is updated in three ways:
- 1) by calling CMSIS function SystemCoreClockUpdate()
- 2) by calling HAL API function HAL_RCC_GetHCLKFreq()
- 3) each time HAL_RCC_ClockConfig() is called to configure the system clock frequency
- Note: If you use this function to configure the system clock; then there
- is no need to call the 2 first functions listed above, since SystemCoreClock
- variable is updated automatically.
- */
- uint32_t SystemCoreClock = 16000000;
- const uint8_t AHBPrescTable[16] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 6, 7, 8, 9};
- const uint8_t APBPrescTable[8] = {0, 0, 0, 0, 1, 2, 3, 4};
-
-/**
- * @}
- */
-
-/** @addtogroup STM32F7xx_System_Private_FunctionPrototypes
- * @{
- */
-
-/**
- * @}
- */
-
-/** @addtogroup STM32F7xx_System_Private_Functions
- * @{
- */
-
-/**
- * @brief Setup the microcontroller system
- * Initialize the Embedded Flash Interface, the PLL and update the
- * SystemFrequency variable.
- * @param None
- * @retval None
- */
-void SystemInit(void)
-{
- /* FPU settings ------------------------------------------------------------*/
- #if (__FPU_PRESENT == 1) && (__FPU_USED == 1)
- SCB->CPACR |= ((3UL << 10*2)|(3UL << 11*2)); /* set CP10 and CP11 Full Access */
- #endif
- /* Reset the RCC clock configuration to the default reset state ------------*/
- /* Set HSION bit */
- RCC->CR |= (uint32_t)0x00000001;
-
- /* Reset CFGR register */
- RCC->CFGR = 0x00000000;
-
- /* Reset HSEON, CSSON and PLLON bits */
- RCC->CR &= (uint32_t)0xFEF6FFFF;
-
- /* Reset PLLCFGR register */
- RCC->PLLCFGR = 0x24003010;
-
- /* Reset HSEBYP bit */
- RCC->CR &= (uint32_t)0xFFFBFFFF;
-
- /* Disable all interrupts */
- RCC->CIR = 0x00000000;
-
- /* Configure the Vector Table location add offset address ------------------*/
-#ifdef VECT_TAB_SRAM
- SCB->VTOR = RAMDTCM_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAM */
-#else
- SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal FLASH */
-#endif
-}
-
-/**
- * @brief Update SystemCoreClock variable according to Clock Register Values.
- * The SystemCoreClock variable contains the core clock (HCLK), it can
- * be used by the user application to setup the SysTick timer or configure
- * other parameters.
- *
- * @note Each time the core clock (HCLK) changes, this function must be called
- * to update SystemCoreClock variable value. Otherwise, any configuration
- * based on this variable will be incorrect.
- *
- * @note - The system frequency computed by this function is not the real
- * frequency in the chip. It is calculated based on the predefined
- * constant and the selected clock source:
- *
- * - If SYSCLK source is HSI, SystemCoreClock will contain the HSI_VALUE(*)
- *
- * - If SYSCLK source is HSE, SystemCoreClock will contain the HSE_VALUE(**)
- *
- * - If SYSCLK source is PLL, SystemCoreClock will contain the HSE_VALUE(**)
- * or HSI_VALUE(*) multiplied/divided by the PLL factors.
- *
- * (*) HSI_VALUE is a constant defined in stm32f7xx_hal_conf.h file (default value
- * 16 MHz) but the real value may vary depending on the variations
- * in voltage and temperature.
- *
- * (**) HSE_VALUE is a constant defined in stm32f7xx_hal_conf.h file (default value
- * 25 MHz), user has to ensure that HSE_VALUE is same as the real
- * frequency of the crystal used. Otherwise, this function may
- * have wrong result.
- *
- * - The result of this function could be not correct when using fractional
- * value for HSE crystal.
- *
- * @param None
- * @retval None
- */
-void SystemCoreClockUpdate(void)
-{
- uint32_t tmp = 0, pllvco = 0, pllp = 2, pllsource = 0, pllm = 2;
-
- /* Get SYSCLK source -------------------------------------------------------*/
- tmp = RCC->CFGR & RCC_CFGR_SWS;
-
- switch (tmp)
- {
- case 0x00: /* HSI used as system clock source */
- SystemCoreClock = HSI_VALUE;
- break;
- case 0x04: /* HSE used as system clock source */
- SystemCoreClock = HSE_VALUE;
- break;
- case 0x08: /* PLL used as system clock source */
-
- /* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N
- SYSCLK = PLL_VCO / PLL_P
- */
- pllsource = (RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC) >> 22;
- pllm = RCC->PLLCFGR & RCC_PLLCFGR_PLLM;
-
- if (pllsource != 0)
- {
- /* HSE used as PLL clock source */
- pllvco = (HSE_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6);
- }
- else
- {
- /* HSI used as PLL clock source */
- pllvco = (HSI_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6);
- }
-
- pllp = (((RCC->PLLCFGR & RCC_PLLCFGR_PLLP) >>16) + 1 ) *2;
- SystemCoreClock = pllvco/pllp;
- break;
- default:
- SystemCoreClock = HSI_VALUE;
- break;
- }
- /* Compute HCLK frequency --------------------------------------------------*/
- /* Get HCLK prescaler */
- tmp = AHBPrescTable[((RCC->CFGR & RCC_CFGR_HPRE) >> 4)];
- /* HCLK frequency */
- SystemCoreClock >>= tmp;
-}
-
-/**
- * @}
- */
-
-/**
- * @}
- */
-
-/**
- * @}
- */
-/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
+/**
+ ******************************************************************************
+ * @file system_stm32f7xx.c
+ * @author MCD Application Team
+ * @brief CMSIS Cortex-M7 Device Peripheral Access Layer System Source File.
+ *
+ * This file provides two functions and one global variable to be called from
+ * user application:
+ * - SystemInit(): This function is called at startup just after reset and
+ * before branch to main program. This call is made inside
+ * the "startup_stm32f7xx.s" file.
+ *
+ * - SystemCoreClock variable: Contains the core clock (HCLK), it can be used
+ * by the user application to setup the SysTick
+ * timer or configure other parameters.
+ *
+ * - SystemCoreClockUpdate(): Updates the variable SystemCoreClock and must
+ * be called whenever the core clock is changed
+ * during program execution.
+ *
+ *
+ ******************************************************************************
+ * @attention
+ *
+ * © Copyright (c) 2016 STMicroelectronics.
+ * All rights reserved.
+ *
+ * This software component is licensed by ST under BSD 3-Clause license,
+ * the "License"; You may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at:
+ * opensource.org/licenses/BSD-3-Clause
+ *
+ ******************************************************************************
+ */
+
+/** @addtogroup CMSIS
+ * @{
+ */
+
+/** @addtogroup stm32f7xx_system
+ * @{
+ */
+
+/** @addtogroup STM32F7xx_System_Private_Includes
+ * @{
+ */
+
+#include "stm32f7xx.h"
+
+#if !defined (HSE_VALUE)
+ #define HSE_VALUE ((uint32_t)25000000) /*!< Default value of the External oscillator in Hz */
+#endif /* HSE_VALUE */
+
+#if !defined (HSI_VALUE)
+ #define HSI_VALUE ((uint32_t)16000000) /*!< Value of the Internal oscillator in Hz*/
+#endif /* HSI_VALUE */
+
+/**
+ * @}
+ */
+
+/** @addtogroup STM32F7xx_System_Private_TypesDefinitions
+ * @{
+ */
+
+/**
+ * @}
+ */
+
+/** @addtogroup STM32F7xx_System_Private_Defines
+ * @{
+ */
+
+/************************* Miscellaneous Configuration ************************/
+
+/*!< Uncomment the following line if you need to relocate your vector Table in
+ Internal SRAM. */
+/* #define VECT_TAB_SRAM */
+#define VECT_TAB_OFFSET 0x00 /*!< Vector Table base offset field.
+ This value must be a multiple of 0x200. */
+/******************************************************************************/
+
+/**
+ * @}
+ */
+
+/** @addtogroup STM32F7xx_System_Private_Macros
+ * @{
+ */
+
+/**
+ * @}
+ */
+
+/** @addtogroup STM32F7xx_System_Private_Variables
+ * @{
+ */
+
+ /* This variable is updated in three ways:
+ 1) by calling CMSIS function SystemCoreClockUpdate()
+ 2) by calling HAL API function HAL_RCC_GetHCLKFreq()
+ 3) each time HAL_RCC_ClockConfig() is called to configure the system clock frequency
+ Note: If you use this function to configure the system clock; then there
+ is no need to call the 2 first functions listed above, since SystemCoreClock
+ variable is updated automatically.
+ */
+ uint32_t SystemCoreClock = 16000000;
+ const uint8_t AHBPrescTable[16] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 6, 7, 8, 9};
+ const uint8_t APBPrescTable[8] = {0, 0, 0, 0, 1, 2, 3, 4};
+
+/**
+ * @}
+ */
+
+/** @addtogroup STM32F7xx_System_Private_FunctionPrototypes
+ * @{
+ */
+
+/**
+ * @}
+ */
+
+/** @addtogroup STM32F7xx_System_Private_Functions
+ * @{
+ */
+
+/**
+ * @brief Setup the microcontroller system
+ * Initialize the Embedded Flash Interface, the PLL and update the
+ * SystemFrequency variable.
+ * @param None
+ * @retval None
+ */
+void SystemInit(void)
+{
+ /* FPU settings ------------------------------------------------------------*/
+#if (__FPU_PRESENT == 1) && (__FPU_USED == 1)
+ SCB->CPACR |= ((3UL << 10*2)|(3UL << 11*2)); /* set CP10 and CP11 Full Access */
+#endif
+
+ /* Configure the Vector Table location add offset address ------------------*/
+#ifdef VECT_TAB_SRAM
+ SCB->VTOR = RAMDTCM_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAM */
+#else
+ SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal FLASH */
+#endif
+}
+
+/**
+ * @brief Update SystemCoreClock variable according to Clock Register Values.
+ * The SystemCoreClock variable contains the core clock (HCLK), it can
+ * be used by the user application to setup the SysTick timer or configure
+ * other parameters.
+ *
+ * @note Each time the core clock (HCLK) changes, this function must be called
+ * to update SystemCoreClock variable value. Otherwise, any configuration
+ * based on this variable will be incorrect.
+ *
+ * @note - The system frequency computed by this function is not the real
+ * frequency in the chip. It is calculated based on the predefined
+ * constant and the selected clock source:
+ *
+ * - If SYSCLK source is HSI, SystemCoreClock will contain the HSI_VALUE(*)
+ *
+ * - If SYSCLK source is HSE, SystemCoreClock will contain the HSE_VALUE(**)
+ *
+ * - If SYSCLK source is PLL, SystemCoreClock will contain the HSE_VALUE(**)
+ * or HSI_VALUE(*) multiplied/divided by the PLL factors.
+ *
+ * (*) HSI_VALUE is a constant defined in stm32f7xx_hal_conf.h file (default value
+ * 16 MHz) but the real value may vary depending on the variations
+ * in voltage and temperature.
+ *
+ * (**) HSE_VALUE is a constant defined in stm32f7xx_hal_conf.h file (default value
+ * 25 MHz), user has to ensure that HSE_VALUE is same as the real
+ * frequency of the crystal used. Otherwise, this function may
+ * have wrong result.
+ *
+ * - The result of this function could be not correct when using fractional
+ * value for HSE crystal.
+ *
+ * @param None
+ * @retval None
+ */
+void SystemCoreClockUpdate(void)
+{
+ uint32_t tmp = 0, pllvco = 0, pllp = 2, pllsource = 0, pllm = 2;
+
+ /* Get SYSCLK source -------------------------------------------------------*/
+ tmp = RCC->CFGR & RCC_CFGR_SWS;
+
+ switch (tmp)
+ {
+ case 0x00: /* HSI used as system clock source */
+ SystemCoreClock = HSI_VALUE;
+ break;
+ case 0x04: /* HSE used as system clock source */
+ SystemCoreClock = HSE_VALUE;
+ break;
+ case 0x08: /* PLL used as system clock source */
+
+ /* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N
+ SYSCLK = PLL_VCO / PLL_P
+ */
+ pllsource = (RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC) >> 22;
+ pllm = RCC->PLLCFGR & RCC_PLLCFGR_PLLM;
+
+ if (pllsource != 0)
+ {
+ /* HSE used as PLL clock source */
+ pllvco = (HSE_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6);
+ }
+ else
+ {
+ /* HSI used as PLL clock source */
+ pllvco = (HSI_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6);
+ }
+
+ pllp = (((RCC->PLLCFGR & RCC_PLLCFGR_PLLP) >>16) + 1 ) *2;
+ SystemCoreClock = pllvco/pllp;
+ break;
+ default:
+ SystemCoreClock = HSI_VALUE;
+ break;
+ }
+ /* Compute HCLK frequency --------------------------------------------------*/
+ /* Get HCLK prescaler */
+ tmp = AHBPrescTable[((RCC->CFGR & RCC_CFGR_HPRE) >> 4)];
+ /* HCLK frequency */
+ SystemCoreClock >>= tmp;
+}
+
+/**
+ * @}
+ */
+
+/**
+ * @}
+ */
+
+/**
+ * @}
+ */
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff --git a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_Keil/Boot/bin/openblt_stm32f746.axf b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_Keil/Boot/bin/openblt_stm32f746.axf
index 7aed20cc..192366ce 100644
Binary files a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_Keil/Boot/bin/openblt_stm32f746.axf and b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_Keil/Boot/bin/openblt_stm32f746.axf differ
diff --git a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_Keil/Boot/lib/CMSIS/Device/ST/STM32F7xx/Include/stm32f746xx.h b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_Keil/Boot/lib/CMSIS/Device/ST/STM32F7xx/Include/stm32f746xx.h
index 5de6c6e1..2c47d3f0 100644
--- a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_Keil/Boot/lib/CMSIS/Device/ST/STM32F7xx/Include/stm32f746xx.h
+++ b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_Keil/Boot/lib/CMSIS/Device/ST/STM32F7xx/Include/stm32f746xx.h
@@ -12,29 +12,13 @@
******************************************************************************
* @attention
*
- * © COPYRIGHT(c) 2016 STMicroelectronics
+ * © Copyright (c) 2016 STMicroelectronics.
+ * All rights reserved.
*
- * Redistribution and use in source and binary forms, with or without modification,
- * are permitted provided that the following conditions are met:
- * 1. Redistributions of source code must retain the above copyright notice,
- * this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright notice,
- * this list of conditions and the following disclaimer in the documentation
- * and/or other materials provided with the distribution.
- * 3. Neither the name of STMicroelectronics nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
- * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
- * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ * This software component is licensed by ST under BSD 3-Clause license,
+ * the "License"; You may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at:
+ * opensource.org/licenses/BSD-3-Clause
*
******************************************************************************
*/
@@ -1433,28 +1417,32 @@ typedef struct
/* Analog to Digital Converter */
/* */
/******************************************************************************/
+#define VREFINT_CAL_ADDR_CMSIS ((uint16_t*) (0x1FF0F44A)) /*!© COPYRIGHT(c) 2016 STMicroelectronics
+ * © Copyright (c) 2016 STMicroelectronics.
+ * All rights reserved.
*
- * Redistribution and use in source and binary forms, with or without modification,
- * are permitted provided that the following conditions are met:
- * 1. Redistributions of source code must retain the above copyright notice,
- * this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright notice,
- * this list of conditions and the following disclaimer in the documentation
- * and/or other materials provided with the distribution.
- * 3. Neither the name of STMicroelectronics nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
- * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
- * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ * This software component is licensed by ST under BSD 3-Clause license,
+ * the "License"; You may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at:
+ * opensource.org/licenses/BSD-3-Clause
*
******************************************************************************
*/
@@ -72,10 +56,10 @@
/* Uncomment the line below according to the target STM32 device used in your
application
*/
-#if !defined (STM32F756xx) && !defined (STM32F746xx) && !defined (STM32F745xx) && !defined (STM32F767xx) && \
- !defined (STM32F769xx) && !defined (STM32F777xx) && !defined (STM32F779xx) && !defined (STM32F722xx) && \
- !defined (STM32F723xx) && !defined (STM32F732xx) && !defined (STM32F733xx) && !defined (STM32F730xx) && \
- !defined (STM32F750xx)
+#if !defined (STM32F756xx) && !defined (STM32F746xx) && !defined (STM32F745xx) && !defined (STM32F765xx) && \
+ !defined (STM32F767xx) && !defined (STM32F769xx) && !defined (STM32F777xx) && !defined (STM32F779xx) && \
+ !defined (STM32F722xx) && !defined (STM32F723xx) && !defined (STM32F732xx) && !defined (STM32F733xx) && \
+ !defined (STM32F730xx) && !defined (STM32F750xx)
/* #define STM32F756xx */ /*!< STM32F756VG, STM32F756ZG, STM32F756ZG, STM32F756IG, STM32F756BG,
STM32F756NG Devices */
@@ -113,11 +97,11 @@
#endif /* USE_HAL_DRIVER */
/**
- * @brief CMSIS Device version number V1.2.4
+ * @brief CMSIS Device version number V1.2.5
*/
#define __STM32F7_CMSIS_VERSION_MAIN (0x01) /*!< [31:24] main version */
#define __STM32F7_CMSIS_VERSION_SUB1 (0x02) /*!< [23:16] sub1 version */
-#define __STM32F7_CMSIS_VERSION_SUB2 (0x04) /*!< [15:8] sub2 version */
+#define __STM32F7_CMSIS_VERSION_SUB2 (0x05) /*!< [15:8] sub2 version */
#define __STM32F7_CMSIS_VERSION_RC (0x00) /*!< [7:0] release candidate */
#define __STM32F7_CMSIS_VERSION ((__STM32F7_CMSIS_VERSION_MAIN << 24)\
|(__STM32F7_CMSIS_VERSION_SUB1 << 16)\
diff --git a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_Keil/Boot/lib/STM32F7xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_Keil/Boot/lib/STM32F7xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h
index 13b68bc2..2d265fb6 100644
--- a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_Keil/Boot/lib/STM32F7xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h
+++ b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_Keil/Boot/lib/STM32F7xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h
@@ -7,7 +7,7 @@
******************************************************************************
* @attention
*
- * © Copyright (c) 2018 STMicroelectronics.
+ * © Copyright (c) 2019 STMicroelectronics.
* All rights reserved.
*
* This software component is licensed by ST under BSD 3-Clause license,
@@ -236,6 +236,16 @@
#define DAC_WAVEGENERATION_NOISE DAC_WAVE_NOISE
#define DAC_WAVEGENERATION_TRIANGLE DAC_WAVE_TRIANGLE
+#if defined(STM32G4) || defined(STM32H7)
+#define DAC_CHIPCONNECT_DISABLE DAC_CHIPCONNECT_EXTERNAL
+#define DAC_CHIPCONNECT_ENABLE DAC_CHIPCONNECT_INTERNAL
+#endif
+
+#if defined(STM32L1) || defined(STM32L4) || defined(STM32G0) || defined(STM32L5) || defined(STM32H7) || defined(STM32F4)
+#define HAL_DAC_MSP_INIT_CB_ID HAL_DAC_MSPINIT_CB_ID
+#define HAL_DAC_MSP_DEINIT_CB_ID HAL_DAC_MSPDEINIT_CB_ID
+#endif
+
/**
* @}
*/
@@ -296,8 +306,17 @@
#define HAL_DMAMUX_REQUEST_GEN_FALLING HAL_DMAMUX_REQ_GEN_FALLING
#define HAL_DMAMUX_REQUEST_GEN_RISING_FALLING HAL_DMAMUX_REQ_GEN_RISING_FALLING
+#if defined(STM32L4R5xx) || defined(STM32L4R9xx) || defined(STM32L4R9xx) || defined(STM32L4S5xx) || defined(STM32L4S7xx) || defined(STM32L4S9xx)
+#define DMA_REQUEST_DCMI_PSSI DMA_REQUEST_DCMI
+#endif
+
#endif /* STM32L4 */
+#if defined(STM32G0)
+#define DMA_REQUEST_DAC1_CHANNEL1 DMA_REQUEST_DAC1_CH1
+#define DMA_REQUEST_DAC1_CHANNEL2 DMA_REQUEST_DAC1_CH2
+#endif
+
#if defined(STM32H7)
#define DMA_REQUEST_DAC1 DMA_REQUEST_DAC1_CH1
@@ -355,6 +374,9 @@
#define DFSDM_FILTER_EXT_TRIG_LPTIM2 DFSDM_FILTER_EXT_TRIG_LPTIM2_OUT
#define DFSDM_FILTER_EXT_TRIG_LPTIM3 DFSDM_FILTER_EXT_TRIG_LPTIM3_OUT
+#define DAC_TRIGGER_LP1_OUT DAC_TRIGGER_LPTIM1_OUT
+#define DAC_TRIGGER_LP2_OUT DAC_TRIGGER_LPTIM2_OUT
+
#endif /* STM32H7 */
/**
@@ -450,7 +472,9 @@
#define FLASH_FLAG_SNECCE_BANK2RR FLASH_FLAG_SNECCERR_BANK2
#define FLASH_FLAG_DBECCE_BANK2RR FLASH_FLAG_DBECCERR_BANK2
#define FLASH_FLAG_STRBER_BANK2R FLASH_FLAG_STRBERR_BANK2
-#endif
+#define FLASH_FLAG_WDW FLASH_FLAG_WBNE
+#define OB_WRP_SECTOR_All OB_WRP_SECTOR_ALL
+#endif /* STM32H7 */
/**
* @}
@@ -486,6 +510,13 @@
#define HAL_SYSCFG_FASTMODEPLUS_I2C1 I2C_FASTMODEPLUS_I2C1
#define HAL_SYSCFG_FASTMODEPLUS_I2C2 I2C_FASTMODEPLUS_I2C2
#define HAL_SYSCFG_FASTMODEPLUS_I2C3 I2C_FASTMODEPLUS_I2C3
+#if defined(STM32G4)
+
+#define HAL_SYSCFG_EnableIOAnalogSwitchBooster HAL_SYSCFG_EnableIOSwitchBooster
+#define HAL_SYSCFG_DisableIOAnalogSwitchBooster HAL_SYSCFG_DisableIOSwitchBooster
+#define HAL_SYSCFG_EnableIOAnalogSwitchVDD HAL_SYSCFG_EnableIOSwitchVDD
+#define HAL_SYSCFG_DisableIOAnalogSwitchVDD HAL_SYSCFG_DisableIOSwitchVDD
+#endif /* STM32G4 */
/**
* @}
*/
@@ -494,7 +525,7 @@
/** @defgroup LL_FMC_Aliased_Defines LL FMC Aliased Defines maintained for compatibility purpose
* @{
*/
-#if defined(STM32L4) || defined(STM32F7) || defined(STM32H7)
+#if defined(STM32L4) || defined(STM32F7) || defined(STM32H7) || defined(STM32G4)
#define FMC_NAND_PCC_WAIT_FEATURE_DISABLE FMC_NAND_WAIT_FEATURE_DISABLE
#define FMC_NAND_PCC_WAIT_FEATURE_ENABLE FMC_NAND_WAIT_FEATURE_ENABLE
#define FMC_NAND_PCC_MEM_BUS_WIDTH_8 FMC_NAND_MEM_BUS_WIDTH_8
@@ -547,18 +578,25 @@
#define GPIO_AF9_SDIO2 GPIO_AF9_SDMMC2
#define GPIO_AF10_SDIO2 GPIO_AF10_SDMMC2
#define GPIO_AF11_SDIO2 GPIO_AF11_SDMMC2
-#endif
+
+#if defined (STM32H743xx) || defined (STM32H753xx) || defined (STM32H750xx) || defined (STM32H742xx) || \
+ defined (STM32H745xx) || defined (STM32H755xx) || defined (STM32H747xx) || defined (STM32H757xx)
+#define GPIO_AF10_OTG2_HS GPIO_AF10_OTG2_FS
+#define GPIO_AF10_OTG1_FS GPIO_AF10_OTG1_HS
+#define GPIO_AF12_OTG2_FS GPIO_AF12_OTG1_FS
+#endif /*STM32H743xx || STM32H753xx || STM32H750xx || STM32H742xx || STM32H745xx || STM32H755xx || STM32H747xx || STM32H757xx */
+#endif /* STM32H7 */
#define GPIO_AF0_LPTIM GPIO_AF0_LPTIM1
#define GPIO_AF1_LPTIM GPIO_AF1_LPTIM1
#define GPIO_AF2_LPTIM GPIO_AF2_LPTIM1
-#if defined(STM32L0) || defined(STM32L4) || defined(STM32F4) || defined(STM32F2) || defined(STM32F7) || defined(STM32H7)
+#if defined(STM32L0) || defined(STM32L4) || defined(STM32F4) || defined(STM32F2) || defined(STM32F7) || defined(STM32G4) || defined(STM32H7)
#define GPIO_SPEED_LOW GPIO_SPEED_FREQ_LOW
#define GPIO_SPEED_MEDIUM GPIO_SPEED_FREQ_MEDIUM
#define GPIO_SPEED_FAST GPIO_SPEED_FREQ_HIGH
#define GPIO_SPEED_HIGH GPIO_SPEED_FREQ_VERY_HIGH
-#endif /* STM32L0 || STM32L4 || STM32F4 || STM32F2 || STM32F7 || STM32H7*/
+#endif /* STM32L0 || STM32L4 || STM32F4 || STM32F2 || STM32F7 || STM32G4 || STM32H7*/
#if defined(STM32L1)
#define GPIO_SPEED_VERY_LOW GPIO_SPEED_FREQ_LOW
@@ -599,6 +637,185 @@
#define __HAL_HRTIM_GetClockPrescaler __HAL_HRTIM_GETCLOCKPRESCALER
#define __HAL_HRTIM_SetCompare __HAL_HRTIM_SETCOMPARE
#define __HAL_HRTIM_GetCompare __HAL_HRTIM_GETCOMPARE
+
+#if defined(STM32G4)
+#define HAL_HRTIM_ExternalEventCounterConfig HAL_HRTIM_ExtEventCounterConfig
+#define HAL_HRTIM_ExternalEventCounterEnable HAL_HRTIM_ExtEventCounterEnable
+#define HAL_HRTIM_ExternalEventCounterDisable HAL_HRTIM_ExtEventCounterDisable
+#define HAL_HRTIM_ExternalEventCounterReset HAL_HRTIM_ExtEventCounterReset
+#endif /* STM32G4 */
+
+#if defined(STM32H7)
+#define HRTIM_OUTPUTSET_TIMAEV1_TIMBCMP1 HRTIM_OUTPUTSET_TIMEV_1
+#define HRTIM_OUTPUTSET_TIMAEV2_TIMBCMP2 HRTIM_OUTPUTSET_TIMEV_2
+#define HRTIM_OUTPUTSET_TIMAEV3_TIMCCMP2 HRTIM_OUTPUTSET_TIMEV_3
+#define HRTIM_OUTPUTSET_TIMAEV4_TIMCCMP3 HRTIM_OUTPUTSET_TIMEV_4
+#define HRTIM_OUTPUTSET_TIMAEV5_TIMDCMP1 HRTIM_OUTPUTSET_TIMEV_5
+#define HRTIM_OUTPUTSET_TIMAEV6_TIMDCMP2 HRTIM_OUTPUTSET_TIMEV_6
+#define HRTIM_OUTPUTSET_TIMAEV7_TIMECMP3 HRTIM_OUTPUTSET_TIMEV_7
+#define HRTIM_OUTPUTSET_TIMAEV8_TIMECMP4 HRTIM_OUTPUTSET_TIMEV_8
+#define HRTIM_OUTPUTSET_TIMAEV9_TIMFCMP4 HRTIM_OUTPUTSET_TIMEV_9
+#define HRTIM_OUTPUTSET_TIMBEV1_TIMACMP1 HRTIM_OUTPUTSET_TIMEV_1
+#define HRTIM_OUTPUTSET_TIMBEV2_TIMACMP2 HRTIM_OUTPUTSET_TIMEV_2
+#define HRTIM_OUTPUTSET_TIMBEV3_TIMCCMP3 HRTIM_OUTPUTSET_TIMEV_3
+#define HRTIM_OUTPUTSET_TIMBEV4_TIMCCMP4 HRTIM_OUTPUTSET_TIMEV_4
+#define HRTIM_OUTPUTSET_TIMBEV5_TIMDCMP3 HRTIM_OUTPUTSET_TIMEV_5
+#define HRTIM_OUTPUTSET_TIMBEV6_TIMDCMP4 HRTIM_OUTPUTSET_TIMEV_6
+#define HRTIM_OUTPUTSET_TIMBEV7_TIMECMP1 HRTIM_OUTPUTSET_TIMEV_7
+#define HRTIM_OUTPUTSET_TIMBEV8_TIMECMP2 HRTIM_OUTPUTSET_TIMEV_8
+#define HRTIM_OUTPUTSET_TIMBEV9_TIMFCMP3 HRTIM_OUTPUTSET_TIMEV_9
+#define HRTIM_OUTPUTSET_TIMCEV1_TIMACMP1 HRTIM_OUTPUTSET_TIMEV_1
+#define HRTIM_OUTPUTSET_TIMCEV2_TIMACMP2 HRTIM_OUTPUTSET_TIMEV_2
+#define HRTIM_OUTPUTSET_TIMCEV3_TIMBCMP2 HRTIM_OUTPUTSET_TIMEV_3
+#define HRTIM_OUTPUTSET_TIMCEV4_TIMBCMP3 HRTIM_OUTPUTSET_TIMEV_4
+#define HRTIM_OUTPUTSET_TIMCEV5_TIMDCMP2 HRTIM_OUTPUTSET_TIMEV_5
+#define HRTIM_OUTPUTSET_TIMCEV6_TIMDCMP4 HRTIM_OUTPUTSET_TIMEV_6
+#define HRTIM_OUTPUTSET_TIMCEV7_TIMECMP3 HRTIM_OUTPUTSET_TIMEV_7
+#define HRTIM_OUTPUTSET_TIMCEV8_TIMECMP4 HRTIM_OUTPUTSET_TIMEV_8
+#define HRTIM_OUTPUTSET_TIMCEV9_TIMFCMP2 HRTIM_OUTPUTSET_TIMEV_9
+#define HRTIM_OUTPUTSET_TIMDEV1_TIMACMP1 HRTIM_OUTPUTSET_TIMEV_1
+#define HRTIM_OUTPUTSET_TIMDEV2_TIMACMP4 HRTIM_OUTPUTSET_TIMEV_2
+#define HRTIM_OUTPUTSET_TIMDEV3_TIMBCMP2 HRTIM_OUTPUTSET_TIMEV_3
+#define HRTIM_OUTPUTSET_TIMDEV4_TIMBCMP4 HRTIM_OUTPUTSET_TIMEV_4
+#define HRTIM_OUTPUTSET_TIMDEV5_TIMCCMP4 HRTIM_OUTPUTSET_TIMEV_5
+#define HRTIM_OUTPUTSET_TIMDEV6_TIMECMP1 HRTIM_OUTPUTSET_TIMEV_6
+#define HRTIM_OUTPUTSET_TIMDEV7_TIMECMP4 HRTIM_OUTPUTSET_TIMEV_7
+#define HRTIM_OUTPUTSET_TIMDEV8_TIMFCMP1 HRTIM_OUTPUTSET_TIMEV_8
+#define HRTIM_OUTPUTSET_TIMDEV9_TIMFCMP3 HRTIM_OUTPUTSET_TIMEV_9
+#define HRTIM_OUTPUTSET_TIMEEV1_TIMACMP4 HRTIM_OUTPUTSET_TIMEV_1
+#define HRTIM_OUTPUTSET_TIMEEV2_TIMBCMP3 HRTIM_OUTPUTSET_TIMEV_2
+#define HRTIM_OUTPUTSET_TIMEEV3_TIMBCMP4 HRTIM_OUTPUTSET_TIMEV_3
+#define HRTIM_OUTPUTSET_TIMEEV4_TIMCCMP1 HRTIM_OUTPUTSET_TIMEV_4
+#define HRTIM_OUTPUTSET_TIMEEV5_TIMDCMP2 HRTIM_OUTPUTSET_TIMEV_5
+#define HRTIM_OUTPUTSET_TIMEEV6_TIMDCMP1 HRTIM_OUTPUTSET_TIMEV_6
+#define HRTIM_OUTPUTSET_TIMEEV7_TIMDCMP2 HRTIM_OUTPUTSET_TIMEV_7
+#define HRTIM_OUTPUTSET_TIMEEV8_TIMFCMP3 HRTIM_OUTPUTSET_TIMEV_8
+#define HRTIM_OUTPUTSET_TIMEEV9_TIMFCMP4 HRTIM_OUTPUTSET_TIMEV_9
+#define HRTIM_OUTPUTSET_TIMFEV1_TIMACMP3 HRTIM_OUTPUTSET_TIMEV_1
+#define HRTIM_OUTPUTSET_TIMFEV2_TIMBCMP1 HRTIM_OUTPUTSET_TIMEV_2
+#define HRTIM_OUTPUTSET_TIMFEV3_TIMBCMP4 HRTIM_OUTPUTSET_TIMEV_3
+#define HRTIM_OUTPUTSET_TIMFEV4_TIMCCMP1 HRTIM_OUTPUTSET_TIMEV_4
+#define HRTIM_OUTPUTSET_TIMFEV5_TIMCCMP4 HRTIM_OUTPUTSET_TIMEV_5
+#define HRTIM_OUTPUTSET_TIMFEV6_TIMDCMP3 HRTIM_OUTPUTSET_TIMEV_6
+#define HRTIM_OUTPUTSET_TIMFEV7_TIMDCMP4 HRTIM_OUTPUTSET_TIMEV_7
+#define HRTIM_OUTPUTSET_TIMFEV8_TIMECMP2 HRTIM_OUTPUTSET_TIMEV_8
+#define HRTIM_OUTPUTSET_TIMFEV9_TIMECMP3 HRTIM_OUTPUTSET_TIMEV_9
+
+#define HRTIM_OUTPUTRESET_TIMAEV1_TIMBCMP1 HRTIM_OUTPUTSET_TIMEV_1
+#define HRTIM_OUTPUTRESET_TIMAEV2_TIMBCMP2 HRTIM_OUTPUTSET_TIMEV_2
+#define HRTIM_OUTPUTRESET_TIMAEV3_TIMCCMP2 HRTIM_OUTPUTSET_TIMEV_3
+#define HRTIM_OUTPUTRESET_TIMAEV4_TIMCCMP3 HRTIM_OUTPUTSET_TIMEV_4
+#define HRTIM_OUTPUTRESET_TIMAEV5_TIMDCMP1 HRTIM_OUTPUTSET_TIMEV_5
+#define HRTIM_OUTPUTRESET_TIMAEV6_TIMDCMP2 HRTIM_OUTPUTSET_TIMEV_6
+#define HRTIM_OUTPUTRESET_TIMAEV7_TIMECMP3 HRTIM_OUTPUTSET_TIMEV_7
+#define HRTIM_OUTPUTRESET_TIMAEV8_TIMECMP4 HRTIM_OUTPUTSET_TIMEV_8
+#define HRTIM_OUTPUTRESET_TIMAEV9_TIMFCMP4 HRTIM_OUTPUTSET_TIMEV_9
+#define HRTIM_OUTPUTRESET_TIMBEV1_TIMACMP1 HRTIM_OUTPUTSET_TIMEV_1
+#define HRTIM_OUTPUTRESET_TIMBEV2_TIMACMP2 HRTIM_OUTPUTSET_TIMEV_2
+#define HRTIM_OUTPUTRESET_TIMBEV3_TIMCCMP3 HRTIM_OUTPUTSET_TIMEV_3
+#define HRTIM_OUTPUTRESET_TIMBEV4_TIMCCMP4 HRTIM_OUTPUTSET_TIMEV_4
+#define HRTIM_OUTPUTRESET_TIMBEV5_TIMDCMP3 HRTIM_OUTPUTSET_TIMEV_5
+#define HRTIM_OUTPUTRESET_TIMBEV6_TIMDCMP4 HRTIM_OUTPUTSET_TIMEV_6
+#define HRTIM_OUTPUTRESET_TIMBEV7_TIMECMP1 HRTIM_OUTPUTSET_TIMEV_7
+#define HRTIM_OUTPUTRESET_TIMBEV8_TIMECMP2 HRTIM_OUTPUTSET_TIMEV_8
+#define HRTIM_OUTPUTRESET_TIMBEV9_TIMFCMP3 HRTIM_OUTPUTSET_TIMEV_9
+#define HRTIM_OUTPUTRESET_TIMCEV1_TIMACMP1 HRTIM_OUTPUTSET_TIMEV_1
+#define HRTIM_OUTPUTRESET_TIMCEV2_TIMACMP2 HRTIM_OUTPUTSET_TIMEV_2
+#define HRTIM_OUTPUTRESET_TIMCEV3_TIMBCMP2 HRTIM_OUTPUTSET_TIMEV_3
+#define HRTIM_OUTPUTRESET_TIMCEV4_TIMBCMP3 HRTIM_OUTPUTSET_TIMEV_4
+#define HRTIM_OUTPUTRESET_TIMCEV5_TIMDCMP2 HRTIM_OUTPUTSET_TIMEV_5
+#define HRTIM_OUTPUTRESET_TIMCEV6_TIMDCMP4 HRTIM_OUTPUTSET_TIMEV_6
+#define HRTIM_OUTPUTRESET_TIMCEV7_TIMECMP3 HRTIM_OUTPUTSET_TIMEV_7
+#define HRTIM_OUTPUTRESET_TIMCEV8_TIMECMP4 HRTIM_OUTPUTSET_TIMEV_8
+#define HRTIM_OUTPUTRESET_TIMCEV9_TIMFCMP2 HRTIM_OUTPUTSET_TIMEV_9
+#define HRTIM_OUTPUTRESET_TIMDEV1_TIMACMP1 HRTIM_OUTPUTSET_TIMEV_1
+#define HRTIM_OUTPUTRESET_TIMDEV2_TIMACMP4 HRTIM_OUTPUTSET_TIMEV_2
+#define HRTIM_OUTPUTRESET_TIMDEV3_TIMBCMP2 HRTIM_OUTPUTSET_TIMEV_3
+#define HRTIM_OUTPUTRESET_TIMDEV4_TIMBCMP4 HRTIM_OUTPUTSET_TIMEV_4
+#define HRTIM_OUTPUTRESET_TIMDEV5_TIMCCMP4 HRTIM_OUTPUTSET_TIMEV_5
+#define HRTIM_OUTPUTRESET_TIMDEV6_TIMECMP1 HRTIM_OUTPUTSET_TIMEV_6
+#define HRTIM_OUTPUTRESET_TIMDEV7_TIMECMP4 HRTIM_OUTPUTSET_TIMEV_7
+#define HRTIM_OUTPUTRESET_TIMDEV8_TIMFCMP1 HRTIM_OUTPUTSET_TIMEV_8
+#define HRTIM_OUTPUTRESET_TIMDEV9_TIMFCMP3 HRTIM_OUTPUTSET_TIMEV_9
+#define HRTIM_OUTPUTRESET_TIMEEV1_TIMACMP4 HRTIM_OUTPUTSET_TIMEV_1
+#define HRTIM_OUTPUTRESET_TIMEEV2_TIMBCMP3 HRTIM_OUTPUTSET_TIMEV_2
+#define HRTIM_OUTPUTRESET_TIMEEV3_TIMBCMP4 HRTIM_OUTPUTSET_TIMEV_3
+#define HRTIM_OUTPUTRESET_TIMEEV4_TIMCCMP1 HRTIM_OUTPUTSET_TIMEV_4
+#define HRTIM_OUTPUTRESET_TIMEEV5_TIMDCMP2 HRTIM_OUTPUTSET_TIMEV_5
+#define HRTIM_OUTPUTRESET_TIMEEV6_TIMDCMP1 HRTIM_OUTPUTSET_TIMEV_6
+#define HRTIM_OUTPUTRESET_TIMEEV7_TIMDCMP2 HRTIM_OUTPUTSET_TIMEV_7
+#define HRTIM_OUTPUTRESET_TIMEEV8_TIMFCMP3 HRTIM_OUTPUTSET_TIMEV_8
+#define HRTIM_OUTPUTRESET_TIMEEV9_TIMFCMP4 HRTIM_OUTPUTSET_TIMEV_9
+#define HRTIM_OUTPUTRESET_TIMFEV1_TIMACMP3 HRTIM_OUTPUTSET_TIMEV_1
+#define HRTIM_OUTPUTRESET_TIMFEV2_TIMBCMP1 HRTIM_OUTPUTSET_TIMEV_2
+#define HRTIM_OUTPUTRESET_TIMFEV3_TIMBCMP4 HRTIM_OUTPUTSET_TIMEV_3
+#define HRTIM_OUTPUTRESET_TIMFEV4_TIMCCMP1 HRTIM_OUTPUTSET_TIMEV_4
+#define HRTIM_OUTPUTRESET_TIMFEV5_TIMCCMP4 HRTIM_OUTPUTSET_TIMEV_5
+#define HRTIM_OUTPUTRESET_TIMFEV6_TIMDCMP3 HRTIM_OUTPUTSET_TIMEV_6
+#define HRTIM_OUTPUTRESET_TIMFEV7_TIMDCMP4 HRTIM_OUTPUTSET_TIMEV_7
+#define HRTIM_OUTPUTRESET_TIMFEV8_TIMECMP2 HRTIM_OUTPUTSET_TIMEV_8
+#define HRTIM_OUTPUTRESET_TIMFEV9_TIMECMP3 HRTIM_OUTPUTSET_TIMEV_9
+#endif /* STM32H7 */
+
+#if defined(STM32F3)
+/** @brief Constants defining available sources associated to external events.
+ */
+#define HRTIM_EVENTSRC_1 (0x00000000U)
+#define HRTIM_EVENTSRC_2 (HRTIM_EECR1_EE1SRC_0)
+#define HRTIM_EVENTSRC_3 (HRTIM_EECR1_EE1SRC_1)
+#define HRTIM_EVENTSRC_4 (HRTIM_EECR1_EE1SRC_1 | HRTIM_EECR1_EE1SRC_0)
+
+/** @brief Constants defining the events that can be selected to configure the
+ * set/reset crossbar of a timer output
+ */
+#define HRTIM_OUTPUTSET_TIMEV_1 (HRTIM_SET1R_TIMEVNT1)
+#define HRTIM_OUTPUTSET_TIMEV_2 (HRTIM_SET1R_TIMEVNT2)
+#define HRTIM_OUTPUTSET_TIMEV_3 (HRTIM_SET1R_TIMEVNT3)
+#define HRTIM_OUTPUTSET_TIMEV_4 (HRTIM_SET1R_TIMEVNT4)
+#define HRTIM_OUTPUTSET_TIMEV_5 (HRTIM_SET1R_TIMEVNT5)
+#define HRTIM_OUTPUTSET_TIMEV_6 (HRTIM_SET1R_TIMEVNT6)
+#define HRTIM_OUTPUTSET_TIMEV_7 (HRTIM_SET1R_TIMEVNT7)
+#define HRTIM_OUTPUTSET_TIMEV_8 (HRTIM_SET1R_TIMEVNT8)
+#define HRTIM_OUTPUTSET_TIMEV_9 (HRTIM_SET1R_TIMEVNT9)
+
+#define HRTIM_OUTPUTRESET_TIMEV_1 (HRTIM_RST1R_TIMEVNT1)
+#define HRTIM_OUTPUTRESET_TIMEV_2 (HRTIM_RST1R_TIMEVNT2)
+#define HRTIM_OUTPUTRESET_TIMEV_3 (HRTIM_RST1R_TIMEVNT3)
+#define HRTIM_OUTPUTRESET_TIMEV_4 (HRTIM_RST1R_TIMEVNT4)
+#define HRTIM_OUTPUTRESET_TIMEV_5 (HRTIM_RST1R_TIMEVNT5)
+#define HRTIM_OUTPUTRESET_TIMEV_6 (HRTIM_RST1R_TIMEVNT6)
+#define HRTIM_OUTPUTRESET_TIMEV_7 (HRTIM_RST1R_TIMEVNT7)
+#define HRTIM_OUTPUTRESET_TIMEV_8 (HRTIM_RST1R_TIMEVNT8)
+#define HRTIM_OUTPUTRESET_TIMEV_9 (HRTIM_RST1R_TIMEVNT9)
+
+/** @brief Constants defining the event filtering applied to external events
+ * by a timer
+ */
+#define HRTIM_TIMEVENTFILTER_NONE (0x00000000U)
+#define HRTIM_TIMEVENTFILTER_BLANKINGCMP1 (HRTIM_EEFR1_EE1FLTR_0)
+#define HRTIM_TIMEVENTFILTER_BLANKINGCMP2 (HRTIM_EEFR1_EE1FLTR_1)
+#define HRTIM_TIMEVENTFILTER_BLANKINGCMP3 (HRTIM_EEFR1_EE1FLTR_1 | HRTIM_EEFR1_EE1FLTR_0)
+#define HRTIM_TIMEVENTFILTER_BLANKINGCMP4 (HRTIM_EEFR1_EE1FLTR_2)
+#define HRTIM_TIMEVENTFILTER_BLANKINGFLTR1 (HRTIM_EEFR1_EE1FLTR_2 | HRTIM_EEFR1_EE1FLTR_0)
+#define HRTIM_TIMEVENTFILTER_BLANKINGFLTR2 (HRTIM_EEFR1_EE1FLTR_2 | HRTIM_EEFR1_EE1FLTR_1)
+#define HRTIM_TIMEVENTFILTER_BLANKINGFLTR3 (HRTIM_EEFR1_EE1FLTR_2 | HRTIM_EEFR1_EE1FLTR_1 | HRTIM_EEFR1_EE1FLTR_0)
+#define HRTIM_TIMEVENTFILTER_BLANKINGFLTR4 (HRTIM_EEFR1_EE1FLTR_3)
+#define HRTIM_TIMEVENTFILTER_BLANKINGFLTR5 (HRTIM_EEFR1_EE1FLTR_3 | HRTIM_EEFR1_EE1FLTR_0)
+#define HRTIM_TIMEVENTFILTER_BLANKINGFLTR6 (HRTIM_EEFR1_EE1FLTR_3 | HRTIM_EEFR1_EE1FLTR_1)
+#define HRTIM_TIMEVENTFILTER_BLANKINGFLTR7 (HRTIM_EEFR1_EE1FLTR_3 | HRTIM_EEFR1_EE1FLTR_1 | HRTIM_EEFR1_EE1FLTR_0)
+#define HRTIM_TIMEVENTFILTER_BLANKINGFLTR8 (HRTIM_EEFR1_EE1FLTR_3 | HRTIM_EEFR1_EE1FLTR_2)
+#define HRTIM_TIMEVENTFILTER_WINDOWINGCMP2 (HRTIM_EEFR1_EE1FLTR_3 | HRTIM_EEFR1_EE1FLTR_2 | HRTIM_EEFR1_EE1FLTR_0)
+#define HRTIM_TIMEVENTFILTER_WINDOWINGCMP3 (HRTIM_EEFR1_EE1FLTR_3 | HRTIM_EEFR1_EE1FLTR_2 | HRTIM_EEFR1_EE1FLTR_1)
+#define HRTIM_TIMEVENTFILTER_WINDOWINGTIM (HRTIM_EEFR1_EE1FLTR_3 | HRTIM_EEFR1_EE1FLTR_2 | HRTIM_EEFR1_EE1FLTR_1 | HRTIM_EEFR1_EE1FLTR_0)
+
+/** @brief Constants defining the DLL calibration periods (in micro seconds)
+ */
+#define HRTIM_CALIBRATIONRATE_7300 0x00000000U
+#define HRTIM_CALIBRATIONRATE_910 (HRTIM_DLLCR_CALRTE_0)
+#define HRTIM_CALIBRATIONRATE_114 (HRTIM_DLLCR_CALRTE_1)
+#define HRTIM_CALIBRATIONRATE_14 (HRTIM_DLLCR_CALRTE_1 | HRTIM_DLLCR_CALRTE_0)
+
+#endif /* STM32F3 */
/**
* @}
*/
@@ -738,6 +955,12 @@
#define OPAMP_PGACONNECT_VM0 OPAMP_PGA_CONNECT_INVERTINGINPUT_IO0
#define OPAMP_PGACONNECT_VM1 OPAMP_PGA_CONNECT_INVERTINGINPUT_IO1
+#if defined(STM32L1) || defined(STM32L4) || defined(STM32L5) || defined(STM32H7)
+#define HAL_OPAMP_MSP_INIT_CB_ID HAL_OPAMP_MSPINIT_CB_ID
+#define HAL_OPAMP_MSP_DEINIT_CB_ID HAL_OPAMP_MSPDEINIT_CB_ID
+#endif
+
+
/**
* @}
*/
@@ -753,7 +976,6 @@
#define I2S_FLAG_TXE I2S_FLAG_TXP
#define I2S_FLAG_RXNE I2S_FLAG_RXP
- #define I2S_FLAG_FRE I2S_FLAG_TIFRE
#endif
#if defined(STM32F7)
@@ -824,6 +1046,16 @@
#define RTC_TAMPERPIN_PA0 RTC_TAMPERPIN_POS1
#define RTC_TAMPERPIN_PI8 RTC_TAMPERPIN_POS1
+#if defined(STM32H7)
+#define RTC_TAMPCR_TAMPXE RTC_TAMPER_X
+#define RTC_TAMPCR_TAMPXIE RTC_TAMPER_X_INTERRUPT
+
+#define RTC_TAMPER1_INTERRUPT RTC_IT_TAMP1
+#define RTC_TAMPER2_INTERRUPT RTC_IT_TAMP2
+#define RTC_TAMPER3_INTERRUPT RTC_IT_TAMP3
+#define RTC_ALL_TAMPER_INTERRUPT RTC_IT_TAMPALL
+#endif /* STM32H7 */
+
/**
* @}
*/
@@ -971,6 +1203,24 @@
#define IS_TIM_HALL_INTERFACE_INSTANCE IS_TIM_HALL_SENSOR_INTERFACE_INSTANCE
#endif
+#if defined(STM32H7)
+#define TIM_TIM1_ETR_COMP1_OUT TIM_TIM1_ETR_COMP1
+#define TIM_TIM1_ETR_COMP2_OUT TIM_TIM1_ETR_COMP2
+#define TIM_TIM8_ETR_COMP1_OUT TIM_TIM8_ETR_COMP1
+#define TIM_TIM8_ETR_COMP2_OUT TIM_TIM8_ETR_COMP2
+#define TIM_TIM2_ETR_COMP1_OUT TIM_TIM2_ETR_COMP1
+#define TIM_TIM2_ETR_COMP2_OUT TIM_TIM2_ETR_COMP2
+#define TIM_TIM3_ETR_COMP1_OUT TIM_TIM3_ETR_COMP1
+#define TIM_TIM1_TI1_COMP1_OUT TIM_TIM1_TI1_COMP1
+#define TIM_TIM8_TI1_COMP2_OUT TIM_TIM8_TI1_COMP2
+#define TIM_TIM2_TI4_COMP1_OUT TIM_TIM2_TI4_COMP1
+#define TIM_TIM2_TI4_COMP2_OUT TIM_TIM2_TI4_COMP2
+#define TIM_TIM2_TI4_COMP1COMP2_OUT TIM_TIM2_TI4_COMP1_COMP2
+#define TIM_TIM3_TI1_COMP1_OUT TIM_TIM3_TI1_COMP1
+#define TIM_TIM3_TI1_COMP2_OUT TIM_TIM3_TI1_COMP2
+#define TIM_TIM3_TI1_COMP1COMP2_OUT TIM_TIM3_TI1_COMP1_COMP2
+#endif
+
/**
* @}
*/
@@ -1199,6 +1449,30 @@
#define HASH_HMACKeyType_ShortKey HASH_HMAC_KEYTYPE_SHORTKEY
#define HASH_HMACKeyType_LongKey HASH_HMAC_KEYTYPE_LONGKEY
+
+#if defined(STM32L4) || defined(STM32F4) || defined(STM32F7) || defined(STM32H7)
+
+#define HAL_HASH_MD5_Accumulate HAL_HASH_MD5_Accmlt
+#define HAL_HASH_MD5_Accumulate_End HAL_HASH_MD5_Accmlt_End
+#define HAL_HASH_MD5_Accumulate_IT HAL_HASH_MD5_Accmlt_IT
+#define HAL_HASH_MD5_Accumulate_End_IT HAL_HASH_MD5_Accmlt_End_IT
+
+#define HAL_HASH_SHA1_Accumulate HAL_HASH_SHA1_Accmlt
+#define HAL_HASH_SHA1_Accumulate_End HAL_HASH_SHA1_Accmlt_End
+#define HAL_HASH_SHA1_Accumulate_IT HAL_HASH_SHA1_Accmlt_IT
+#define HAL_HASH_SHA1_Accumulate_End_IT HAL_HASH_SHA1_Accmlt_End_IT
+
+#define HAL_HASHEx_SHA224_Accumulate HAL_HASHEx_SHA224_Accmlt
+#define HAL_HASHEx_SHA224_Accumulate_End HAL_HASHEx_SHA224_Accmlt_End
+#define HAL_HASHEx_SHA224_Accumulate_IT HAL_HASHEx_SHA224_Accmlt_IT
+#define HAL_HASHEx_SHA224_Accumulate_End_IT HAL_HASHEx_SHA224_Accmlt_End_IT
+
+#define HAL_HASHEx_SHA256_Accumulate HAL_HASHEx_SHA256_Accmlt
+#define HAL_HASHEx_SHA256_Accumulate_End HAL_HASHEx_SHA256_Accmlt_End
+#define HAL_HASHEx_SHA256_Accumulate_IT HAL_HASHEx_SHA256_Accmlt_IT
+#define HAL_HASHEx_SHA256_Accumulate_End_IT HAL_HASHEx_SHA256_Accmlt_End_IT
+
+#endif /* STM32L4 || STM32F4 || STM32F7 || STM32H7 */
/**
* @}
*/
@@ -1221,6 +1495,13 @@
#endif
#define HAL_ADC_EnableBuffer_Cmd(cmd) (((cmd)==ENABLE) ? HAL_ADCEx_EnableVREFINT() : HAL_ADCEx_DisableVREFINT())
#define HAL_ADC_EnableBufferSensor_Cmd(cmd) (((cmd)==ENABLE) ? HAL_ADCEx_EnableVREFINTTempSensor() : HAL_ADCEx_DisableVREFINTTempSensor())
+#if defined(STM32H7A3xx) || defined(STM32H7B3xx) || defined(STM32H7B0xx) || defined(STM32H7A3xxQ) || defined(STM32H7B3xxQ) || defined(STM32H7B0xxQ)
+#define HAL_EnableSRDomainDBGStopMode HAL_EnableDomain3DBGStopMode
+#define HAL_DisableSRDomainDBGStopMode HAL_DisableDomain3DBGStopMode
+#define HAL_EnableSRDomainDBGStandbyMode HAL_EnableDomain3DBGStandbyMode
+#define HAL_DisableSRDomainDBGStandbyMode HAL_DisableDomain3DBGStandbyMode
+#endif /* STM32H7A3xx || STM32H7B3xx || STM32H7B0xx || STM32H7A3xxQ || STM32H7B3xxQ || STM32H7B0xxQ */
+
/**
* @}
*/
@@ -1250,16 +1531,18 @@
#define HAL_I2CFastModePlusConfig(SYSCFG_I2CFastModePlus, cmd) (((cmd)==ENABLE)? HAL_I2CEx_EnableFastModePlus(SYSCFG_I2CFastModePlus): HAL_I2CEx_DisableFastModePlus(SYSCFG_I2CFastModePlus))
-#if defined(STM32H7) || defined(STM32WB) || defined(STM32G0) || defined(STM32F4) || defined(STM32F7)
+#if defined(STM32H7) || defined(STM32WB) || defined(STM32G0) || defined(STM32F0) || defined(STM32F1) || defined(STM32F2) || defined(STM32F3) || defined(STM32F4) || defined(STM32F7) || defined(STM32L0) || defined(STM32L4) || defined(STM32L5) || defined(STM32G4)
#define HAL_I2C_Master_Sequential_Transmit_IT HAL_I2C_Master_Seq_Transmit_IT
#define HAL_I2C_Master_Sequential_Receive_IT HAL_I2C_Master_Seq_Receive_IT
#define HAL_I2C_Slave_Sequential_Transmit_IT HAL_I2C_Slave_Seq_Transmit_IT
#define HAL_I2C_Slave_Sequential_Receive_IT HAL_I2C_Slave_Seq_Receive_IT
+#endif /* STM32H7 || STM32WB || STM32G0 || STM32F0 || STM32F1 || STM32F2 || STM32F3 || STM32F4 || STM32F7 || STM32L0 || STM32L4 || STM32L5 || STM32G4 */
+#if defined(STM32H7) || defined(STM32WB) || defined(STM32G0) || defined(STM32F4) || defined(STM32F7) || defined(STM32L0) || defined(STM32L4) || defined(STM32L5) || defined(STM32G4)
#define HAL_I2C_Master_Sequential_Transmit_DMA HAL_I2C_Master_Seq_Transmit_DMA
#define HAL_I2C_Master_Sequential_Receive_DMA HAL_I2C_Master_Seq_Receive_DMA
#define HAL_I2C_Slave_Sequential_Transmit_DMA HAL_I2C_Slave_Seq_Transmit_DMA
#define HAL_I2C_Slave_Sequential_Receive_DMA HAL_I2C_Slave_Seq_Receive_DMA
-#endif /* STM32H7 || STM32WB || STM32G0 || STM32F4 || STM32F7 */
+#endif /* STM32H7 || STM32WB || STM32G0 || STM32F4 || STM32F7 || STM32L0 || STM32L4 || STM32L5 || STM32G4 */
#if defined(STM32F4)
#define HAL_FMPI2C_Master_Sequential_Transmit_IT HAL_FMPI2C_Master_Seq_Transmit_IT
@@ -1278,6 +1561,13 @@
/** @defgroup HAL_PWR_Aliased HAL PWR Aliased maintained for legacy purpose
* @{
*/
+
+#if defined(STM32G0)
+#define HAL_PWR_ConfigPVD HAL_PWREx_ConfigPVD
+#define HAL_PWR_EnablePVD HAL_PWREx_EnablePVD
+#define HAL_PWR_DisablePVD HAL_PWREx_DisablePVD
+#define HAL_PWR_PVD_IRQHandler HAL_PWREx_PVD_IRQHandler
+#endif
#define HAL_PWR_PVDConfig HAL_PWR_ConfigPVD
#define HAL_PWR_DisableBkUpReg HAL_PWREx_DisableBkUpReg
#define HAL_PWR_DisableFlashPowerDown HAL_PWREx_DisableFlashPowerDown
@@ -1350,14 +1640,14 @@
#define HAL_TIM_DMAError TIM_DMAError
#define HAL_TIM_DMACaptureCplt TIM_DMACaptureCplt
#define HAL_TIMEx_DMACommutationCplt TIMEx_DMACommutationCplt
-#if defined(STM32H7) || defined(STM32G0) || defined(STM32F7) || defined(STM32F4) || defined(STM32L0)
+#if defined(STM32H7) || defined(STM32G0) || defined(STM32F0) || defined(STM32F1) || defined(STM32F2) || defined(STM32F3) || defined(STM32F4) || defined(STM32F7) || defined(STM32L0) || defined(STM32L4)
#define HAL_TIM_SlaveConfigSynchronization HAL_TIM_SlaveConfigSynchro
#define HAL_TIM_SlaveConfigSynchronization_IT HAL_TIM_SlaveConfigSynchro_IT
#define HAL_TIMEx_CommutationCallback HAL_TIMEx_CommutCallback
#define HAL_TIMEx_ConfigCommutationEvent HAL_TIMEx_ConfigCommutEvent
#define HAL_TIMEx_ConfigCommutationEvent_IT HAL_TIMEx_ConfigCommutEvent_IT
#define HAL_TIMEx_ConfigCommutationEvent_DMA HAL_TIMEx_ConfigCommutEvent_DMA
-#endif /* STM32H7 || STM32G0 || STM32F7 || STM32F4 || STM32L0 */
+#endif /* STM32H7 || STM32G0 || STM32F0 || STM32F1 || STM32F2 || STM32F3 || STM32F4 || STM32F7 || STM32L0 */
/**
* @}
*/
@@ -2476,12 +2766,28 @@
#define __USB_OTG_FS_CLK_DISABLE __HAL_RCC_USB_OTG_FS_CLK_DISABLE
#define __USB_OTG_FS_CLK_ENABLE __HAL_RCC_USB_OTG_FS_CLK_ENABLE
#define __USB_RELEASE_RESET __HAL_RCC_USB_RELEASE_RESET
+
+#if defined(STM32H7)
+#define __HAL_RCC_WWDG_CLK_DISABLE __HAL_RCC_WWDG1_CLK_DISABLE
+#define __HAL_RCC_WWDG_CLK_ENABLE __HAL_RCC_WWDG1_CLK_ENABLE
+#define __HAL_RCC_WWDG_CLK_SLEEP_DISABLE __HAL_RCC_WWDG1_CLK_SLEEP_DISABLE
+#define __HAL_RCC_WWDG_CLK_SLEEP_ENABLE __HAL_RCC_WWDG1_CLK_SLEEP_ENABLE
+
+#define __HAL_RCC_WWDG_FORCE_RESET ((void)0U) /* Not available on the STM32H7*/
+#define __HAL_RCC_WWDG_RELEASE_RESET ((void)0U) /* Not available on the STM32H7*/
+
+
+#define __HAL_RCC_WWDG_IS_CLK_ENABLED __HAL_RCC_WWDG1_IS_CLK_ENABLED
+#define __HAL_RCC_WWDG_IS_CLK_DISABLED __HAL_RCC_WWDG1_IS_CLK_DISABLED
+#endif
+
#define __WWDG_CLK_DISABLE __HAL_RCC_WWDG_CLK_DISABLE
#define __WWDG_CLK_ENABLE __HAL_RCC_WWDG_CLK_ENABLE
#define __WWDG_CLK_SLEEP_DISABLE __HAL_RCC_WWDG_CLK_SLEEP_DISABLE
#define __WWDG_CLK_SLEEP_ENABLE __HAL_RCC_WWDG_CLK_SLEEP_ENABLE
#define __WWDG_FORCE_RESET __HAL_RCC_WWDG_FORCE_RESET
#define __WWDG_RELEASE_RESET __HAL_RCC_WWDG_RELEASE_RESET
+
#define __TIM21_CLK_ENABLE __HAL_RCC_TIM21_CLK_ENABLE
#define __TIM21_CLK_DISABLE __HAL_RCC_TIM21_CLK_DISABLE
#define __TIM21_FORCE_RESET __HAL_RCC_TIM21_FORCE_RESET
@@ -2814,6 +3120,15 @@
#define __WWDG_IS_CLK_ENABLED __HAL_RCC_WWDG_IS_CLK_ENABLED
#define __WWDG_IS_CLK_DISABLED __HAL_RCC_WWDG_IS_CLK_DISABLED
+#if defined(STM32L1)
+#define __HAL_RCC_CRYP_CLK_DISABLE __HAL_RCC_AES_CLK_DISABLE
+#define __HAL_RCC_CRYP_CLK_ENABLE __HAL_RCC_AES_CLK_ENABLE
+#define __HAL_RCC_CRYP_CLK_SLEEP_DISABLE __HAL_RCC_AES_CLK_SLEEP_DISABLE
+#define __HAL_RCC_CRYP_CLK_SLEEP_ENABLE __HAL_RCC_AES_CLK_SLEEP_ENABLE
+#define __HAL_RCC_CRYP_FORCE_RESET __HAL_RCC_AES_FORCE_RESET
+#define __HAL_RCC_CRYP_RELEASE_RESET __HAL_RCC_AES_RELEASE_RESET
+#endif /* STM32L1 */
+
#if defined(STM32F4)
#define __HAL_RCC_SDMMC1_FORCE_RESET __HAL_RCC_SDIO_FORCE_RESET
#define __HAL_RCC_SDMMC1_RELEASE_RESET __HAL_RCC_SDIO_RELEASE_RESET
@@ -2930,7 +3245,7 @@
#if defined(STM32L4)
#define RCC_RTCCLKSOURCE_NO_CLK RCC_RTCCLKSOURCE_NONE
-#elif defined(STM32WB) || defined(STM32G0)
+#elif defined(STM32WB) || defined(STM32G0) || defined(STM32G4) || defined(STM32L5)
#else
#define RCC_RTCCLKSOURCE_NONE RCC_RTCCLKSOURCE_NO_CLK
#endif
@@ -3058,7 +3373,7 @@
/** @defgroup HAL_RTC_Aliased_Macros HAL RTC Aliased Macros maintained for legacy purpose
* @{
*/
-#if defined (STM32G0) || defined (STM32L412xx) || defined (STM32L422xx) || defined (STM32L4P5xx) || defined (STM32L4Q5xx)
+#if defined (STM32G0) || defined (STM32L5) || defined (STM32L412xx) || defined (STM32L422xx) || defined (STM32L4P5xx) || defined (STM32L4Q5xx) || defined (STM32G4)
#else
#define __HAL_RTC_CLEAR_FLAG __HAL_RTC_EXTI_CLEAR_FLAG
#endif
@@ -3174,14 +3489,14 @@
#define SDIO_IRQHandler SDMMC1_IRQHandler
#endif
-#if defined(STM32F7) || defined(STM32F4) || defined(STM32F2)
+#if defined(STM32F7) || defined(STM32F4) || defined(STM32F2) || defined(STM32L4) || defined(STM32H7)
#define HAL_SD_CardCIDTypedef HAL_SD_CardCIDTypeDef
#define HAL_SD_CardCSDTypedef HAL_SD_CardCSDTypeDef
#define HAL_SD_CardStatusTypedef HAL_SD_CardStatusTypeDef
#define HAL_SD_CardStateTypedef HAL_SD_CardStateTypeDef
#endif
-#if defined(STM32H7)
+#if defined(STM32H7) || defined(STM32L5)
#define HAL_MMCEx_Read_DMADoubleBuffer0CpltCallback HAL_MMCEx_Read_DMADoubleBuf0CpltCallback
#define HAL_MMCEx_Read_DMADoubleBuffer1CpltCallback HAL_MMCEx_Read_DMADoubleBuf1CpltCallback
#define HAL_MMCEx_Write_DMADoubleBuffer0CpltCallback HAL_MMCEx_Write_DMADoubleBuf0CpltCallback
@@ -3421,18 +3736,28 @@
/** @defgroup HAL_HRTIM_Aliased_Functions HAL HRTIM Aliased Functions maintained for legacy purpose
* @{
*/
-#if defined (STM32H7) || defined (STM32F3)
-#define HAL_HRTIM_WaveformCounterStart_IT HAL_HRTIM_WaveformCountStart_IT
-#define HAL_HRTIM_WaveformCounterStart_DMA HAL_HRTIM_WaveformCountStart_DMA
-#define HAL_HRTIM_WaveformCounterStart HAL_HRTIM_WaveformCountStart
-#define HAL_HRTIM_WaveformCounterStop_IT HAL_HRTIM_WaveformCountStop_IT
-#define HAL_HRTIM_WaveformCounterStop_DMA HAL_HRTIM_WaveformCountStop_DMA
-#define HAL_HRTIM_WaveformCounterStop HAL_HRTIM_WaveformCountStop
+#if defined (STM32H7) || defined (STM32G4) || defined (STM32F3)
+#define HAL_HRTIM_WaveformCounterStart_IT HAL_HRTIM_WaveformCountStart_IT
+#define HAL_HRTIM_WaveformCounterStart_DMA HAL_HRTIM_WaveformCountStart_DMA
+#define HAL_HRTIM_WaveformCounterStart HAL_HRTIM_WaveformCountStart
+#define HAL_HRTIM_WaveformCounterStop_IT HAL_HRTIM_WaveformCountStop_IT
+#define HAL_HRTIM_WaveformCounterStop_DMA HAL_HRTIM_WaveformCountStop_DMA
+#define HAL_HRTIM_WaveformCounterStop HAL_HRTIM_WaveformCountStop
#endif
/**
* @}
*/
+/** @defgroup HAL_QSPI_Aliased_Macros HAL QSPI Aliased Macros maintained for legacy purpose
+ * @{
+ */
+#if defined (STM32L4) || defined (STM32F4) || defined (STM32F7)
+#define HAL_QPSI_TIMEOUT_DEFAULT_VALUE HAL_QSPI_TIMEOUT_DEFAULT_VALUE
+#endif /* STM32L4 || STM32F4 || STM32F7 */
+/**
+ * @}
+ */
+
/** @defgroup HAL_PPP_Aliased_Macros HAL PPP Aliased Macros maintained for legacy purpose
* @{
*/
diff --git a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_Keil/Boot/lib/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_exti.h b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_Keil/Boot/lib/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_exti.h
index bf82a38e..c9f137c1 100644
--- a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_Keil/Boot/lib/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_exti.h
+++ b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_Keil/Boot/lib/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_exti.h
@@ -18,8 +18,8 @@
*/
/* Define to prevent recursive inclusion -------------------------------------*/
-#ifndef __STM32F7xx_HAL_EXTI_H
-#define __STM32F7xx_HAL_EXTI_H
+#ifndef STM32F7xx_HAL_EXTI_H
+#define STM32F7xx_HAL_EXTI_H
#ifdef __cplusplus
extern "C" {
@@ -38,14 +38,13 @@ extern "C" {
*/
/* Exported types ------------------------------------------------------------*/
+
/** @defgroup EXTI_Exported_Types EXTI Exported Types
* @{
*/
typedef enum
{
- HAL_EXTI_COMMON_CB_ID = 0x00U,
- HAL_EXTI_RISING_CB_ID = 0x01U,
- HAL_EXTI_FALLING_CB_ID = 0x02U,
+ HAL_EXTI_COMMON_CB_ID = 0x00U
} EXTI_CallbackIDTypeDef;
/**
@@ -68,6 +67,9 @@ typedef struct
This parameter can be a combination of @ref EXTI_Mode */
uint32_t Trigger; /*!< The Exti Trigger to be configured. This parameter
can be a value of @ref EXTI_Trigger */
+ uint32_t GPIOSel; /*!< The Exti GPIO multiplexer selection to be configured.
+ This parameter is only possible for line 0 to 15. It
+ can be a value of @ref EXTI_GPIOSel */
} EXTI_ConfigTypeDef;
/**
@@ -82,48 +84,36 @@ typedef struct
/** @defgroup EXTI_Line EXTI Line
* @{
*/
-#define EXTI_LINE_0 EXTI_IMR_IM0 /*!< External interrupt line 0 */
-#define EXTI_LINE_1 EXTI_IMR_IM1 /*!< External interrupt line 1 */
-#define EXTI_LINE_2 EXTI_IMR_IM2 /*!< External interrupt line 2 */
-#define EXTI_LINE_3 EXTI_IMR_IM3 /*!< External interrupt line 3 */
-#define EXTI_LINE_4 EXTI_IMR_IM4 /*!< External interrupt line 4 */
-#define EXTI_LINE_5 EXTI_IMR_IM5 /*!< External interrupt line 5 */
-#define EXTI_LINE_6 EXTI_IMR_IM6 /*!< External interrupt line 6 */
-#define EXTI_LINE_7 EXTI_IMR_IM7 /*!< External interrupt line 7 */
-#define EXTI_LINE_8 EXTI_IMR_IM8 /*!< External interrupt line 8 */
-#define EXTI_LINE_9 EXTI_IMR_IM9 /*!< External interrupt line 9 */
-#define EXTI_LINE_10 EXTI_IMR_IM10 /*!< External interrupt line 10 */
-#define EXTI_LINE_11 EXTI_IMR_IM11 /*!< External interrupt line 11 */
-#define EXTI_LINE_12 EXTI_IMR_IM12 /*!< External interrupt line 12 */
-#define EXTI_LINE_13 EXTI_IMR_IM13 /*!< External interrupt line 13 */
-#define EXTI_LINE_14 EXTI_IMR_IM14 /*!< External interrupt line 14 */
-#define EXTI_LINE_15 EXTI_IMR_IM15 /*!< External interrupt line 15 */
-#if defined(EXTI_IMR_IM16)
-#define EXTI_LINE_16 EXTI_IMR_IM16 /*!< External interrupt line 16 Connected to the PVD Output */
-#endif /* EXTI_IMR_IM16 */
-#if defined(EXTI_IMR_IM17)
-#define EXTI_LINE_17 EXTI_IMR_IM17 /*!< External interrupt line 17 Connected to the RTC Alarm event */
-#endif /* EXTI_IMR_IM17 */
-#if defined(EXTI_IMR_IM18)
-#define EXTI_LINE_18 EXTI_IMR_IM18 /*!< External interrupt line 18 Connected to the USB OTG FS Wakeup from suspend event */
-#endif /* EXTI_IMR_IM18 */
-#if defined(EXTI_IMR_IM19)
-#define EXTI_LINE_19 EXTI_IMR_IM19 /*!< External interrupt line 19 Connected to the Ethernet Wakeup event */
-#endif /* EXTI_IMR_IM19 */
-#if defined(EXTI_IMR_IM20)
-#define EXTI_LINE_20 EXTI_IMR_IM20 /*!< External interrupt line 20 Connected to the USB OTG HS (configured in FS) Wakeup event */
-#endif /* EXTI_IMR_IM20 */
-#if defined(EXTI_IMR_IM21)
-#define EXTI_LINE_21 EXTI_IMR_IM21 /*!< External interrupt line 21 Connected to the RTC Tamper and Time Stamp events */
-#endif /* EXTI_IMR_IM21 */
-#if defined(EXTI_IMR_IM22)
-#define EXTI_LINE_22 EXTI_IMR_IM22 /*!< External interrupt line 22 Connected to the RTC Wakeup event */
-#endif /* EXTI_IMR_IM22 */
-#if defined(EXTI_IMR_IM23)
-#define EXTI_LINE_23 EXTI_IMR_IM23 /*!< External interrupt line 23 Connected to the LPTIM Wakeup event */
-#endif /* EXTI_IMR_IM23 */
+#define EXTI_LINE_0 (EXTI_GPIO | 0x00u) /*!< External interrupt line 0 */
+#define EXTI_LINE_1 (EXTI_GPIO | 0x01u) /*!< External interrupt line 1 */
+#define EXTI_LINE_2 (EXTI_GPIO | 0x02u) /*!< External interrupt line 2 */
+#define EXTI_LINE_3 (EXTI_GPIO | 0x03u) /*!< External interrupt line 3 */
+#define EXTI_LINE_4 (EXTI_GPIO | 0x04u) /*!< External interrupt line 4 */
+#define EXTI_LINE_5 (EXTI_GPIO | 0x05u) /*!< External interrupt line 5 */
+#define EXTI_LINE_6 (EXTI_GPIO | 0x06u) /*!< External interrupt line 6 */
+#define EXTI_LINE_7 (EXTI_GPIO | 0x07u) /*!< External interrupt line 7 */
+#define EXTI_LINE_8 (EXTI_GPIO | 0x08u) /*!< External interrupt line 8 */
+#define EXTI_LINE_9 (EXTI_GPIO | 0x09u) /*!< External interrupt line 9 */
+#define EXTI_LINE_10 (EXTI_GPIO | 0x0Au) /*!< External interrupt line 10 */
+#define EXTI_LINE_11 (EXTI_GPIO | 0x0Bu) /*!< External interrupt line 11 */
+#define EXTI_LINE_12 (EXTI_GPIO | 0x0Cu) /*!< External interrupt line 12 */
+#define EXTI_LINE_13 (EXTI_GPIO | 0x0Du) /*!< External interrupt line 13 */
+#define EXTI_LINE_14 (EXTI_GPIO | 0x0Eu) /*!< External interrupt line 14 */
+#define EXTI_LINE_15 (EXTI_GPIO | 0x0Fu) /*!< External interrupt line 15 */
+#define EXTI_LINE_16 (EXTI_CONFIG | 0x10u) /*!< External interrupt line 16 Connected to the PVD Output */
+#define EXTI_LINE_17 (EXTI_CONFIG | 0x11u) /*!< External interrupt line 17 Connected to the RTC Alarm event */
+#define EXTI_LINE_18 (EXTI_CONFIG | 0x12u) /*!< External interrupt line 18 Connected to the USB OTG FS Wakeup from suspend event */
+#if defined(ETH)
+#define EXTI_LINE_19 (EXTI_CONFIG | 0x13u) /*!< External interrupt line 19 Connected to the Ethernet Wakeup event */
+#else
+#define EXTI_LINE_19 (EXTI_RESERVED | 0x13u) /*!< No interrupt supported in this line */
+#endif /* ETH */
+#define EXTI_LINE_20 (EXTI_CONFIG | 0x14u) /*!< External interrupt line 20 Connected to the USB OTG HS (configured in FS) Wakeup event */
+#define EXTI_LINE_21 (EXTI_CONFIG | 0x15u) /*!< External interrupt line 21 Connected to the RTC Tamper and Time Stamp events */
+#define EXTI_LINE_22 (EXTI_CONFIG | 0x16u) /*!< External interrupt line 22 Connected to the RTC Wakeup event */
+#define EXTI_LINE_23 (EXTI_CONFIG | 0x17u) /*!< External interrupt line 23 Connected to the LPTIM Wakeup event */
#if defined(EXTI_IMR_IM24)
-#define EXTI_LINE_24 EXTI_IMR_IM24 /*!< External interrupt line 24 Connected to the MDIO Slave global Interrupt Wakeup event */
+#define EXTI_LINE_24 (EXTI_CONFIG | 0x18u) /*!< External interrupt line 24 Connected to the MDIO Slave global Interrupt Wakeup event */
#endif /* EXTI_IMR_IM24 */
/**
* @}
@@ -142,6 +132,7 @@ typedef struct
/** @defgroup EXTI_Trigger EXTI Trigger
* @{
*/
+
#define EXTI_TRIGGER_NONE 0x00000000u
#define EXTI_TRIGGER_RISING 0x00000001u
#define EXTI_TRIGGER_FALLING 0x00000002u
@@ -150,6 +141,24 @@ typedef struct
* @}
*/
+/** @defgroup EXTI_GPIOSel EXTI GPIOSel
+ * @brief
+ * @{
+ */
+#define EXTI_GPIOA 0x00000000u
+#define EXTI_GPIOB 0x00000001u
+#define EXTI_GPIOC 0x00000002u
+#define EXTI_GPIOD 0x00000003u
+#define EXTI_GPIOE 0x00000004u
+#define EXTI_GPIOF 0x00000005u
+#define EXTI_GPIOG 0x00000006u
+#define EXTI_GPIOH 0x00000007u
+#define EXTI_GPIOI 0x00000008u
+#define EXTI_GPIOJ 0x00000009u
+#if defined (GPIOK)
+#define EXTI_GPIOK 0x0000000Au
+#endif /* GPIOK */
+
/**
* @}
*/
@@ -167,6 +176,20 @@ typedef struct
/** @defgroup EXTI_Private_Constants EXTI Private Constants
* @{
*/
+/**
+ * @brief EXTI Line property definition
+ */
+#define EXTI_PROPERTY_SHIFT 24u
+#define EXTI_CONFIG (0x02uL << EXTI_PROPERTY_SHIFT)
+#define EXTI_GPIO ((0x04uL << EXTI_PROPERTY_SHIFT) | EXTI_CONFIG)
+#define EXTI_RESERVED (0x08uL << EXTI_PROPERTY_SHIFT)
+#define EXTI_PROPERTY_MASK (EXTI_CONFIG | EXTI_GPIO)
+
+/**
+ * @brief EXTI bit usage
+ */
+#define EXTI_PIN_MASK 0x0000001Fu
+
/**
* @brief EXTI Mask for interrupt & event mode
*/
@@ -175,12 +198,17 @@ typedef struct
/**
* @brief EXTI Mask for trigger possibilities
*/
-#define EXTI_TRIGGER_MASK (EXTI_TRIGGER_RISING | EXTI_TRIGGER_FALLING | EXTI_TRIGGER_RISING_FALLING)
+#define EXTI_TRIGGER_MASK (EXTI_TRIGGER_RISING | EXTI_TRIGGER_FALLING)
/**
* @brief EXTI Line number
*/
+#if defined(EXTI_IMR_IM24)
#define EXTI_LINE_NB 25u
+#else
+#define EXTI_LINE_NB 24u
+#endif /* EXTI_IMR_IM24 */
+
/**
* @}
@@ -190,16 +218,47 @@ typedef struct
/** @defgroup EXTI_Private_Macros EXTI Private Macros
* @{
*/
-#define IS_EXTI_LINE(__LINE__) ((((__LINE__) & ~EXTI_IMR_IM) == 0x00U) && (__LINE__))
+#define IS_EXTI_LINE(__LINE__) ((((__LINE__) & ~(EXTI_PROPERTY_MASK | EXTI_PIN_MASK)) == 0x00u) && \
+ ((((__LINE__) & EXTI_PROPERTY_MASK) == EXTI_CONFIG) || \
+ (((__LINE__) & EXTI_PROPERTY_MASK) == EXTI_GPIO)) && \
+ (((__LINE__) & EXTI_PIN_MASK) < EXTI_LINE_NB))
-#define IS_EXTI_MODE(__LINE__) ((((__LINE__) & ~EXTI_MODE_MASK) == 0x00U))
+#define IS_EXTI_MODE(__LINE__) ((((__LINE__) & EXTI_MODE_MASK) != 0x00u) && \
+ (((__LINE__) & ~EXTI_MODE_MASK) == 0x00u))
-#define IS_EXTI_TRIGGER(__LINE__) (((__LINE__) & ~EXTI_TRIGGER_MASK) == 0x00U)
+#define IS_EXTI_TRIGGER(__LINE__) (((__LINE__) & ~EXTI_TRIGGER_MASK) == 0x00u)
#define IS_EXTI_PENDING_EDGE(__LINE__) (((__LINE__) == EXTI_TRIGGER_FALLING) || \
((__LINE__) == EXTI_TRIGGER_RISING) || \
((__LINE__) == EXTI_TRIGGER_RISING_FALLING))
+#define IS_EXTI_CONFIG_LINE(__LINE__) (((__LINE__) & EXTI_CONFIG) != 0x00u)
+
+#if defined (GPIOK)
+#define IS_EXTI_GPIO_PORT(__PORT__) (((__PORT__) == EXTI_GPIOA) || \
+ ((__PORT__) == EXTI_GPIOB) || \
+ ((__PORT__) == EXTI_GPIOC) || \
+ ((__PORT__) == EXTI_GPIOD) || \
+ ((__PORT__) == EXTI_GPIOE) || \
+ ((__PORT__) == EXTI_GPIOF) || \
+ ((__PORT__) == EXTI_GPIOG) || \
+ ((__PORT__) == EXTI_GPIOH) || \
+ ((__PORT__) == EXTI_GPIOI) || \
+ ((__PORT__) == EXTI_GPIOJ) || \
+ ((__PORT__) == EXTI_GPIOK))
+#else
+#define IS_EXTI_GPIO_PORT(__PORT__) (((__PORT__) == EXTI_GPIOA) || \
+ ((__PORT__) == EXTI_GPIOB) || \
+ ((__PORT__) == EXTI_GPIOC) || \
+ ((__PORT__) == EXTI_GPIOD) || \
+ ((__PORT__) == EXTI_GPIOE) || \
+ ((__PORT__) == EXTI_GPIOF) || \
+ ((__PORT__) == EXTI_GPIOG) || \
+ ((__PORT__) == EXTI_GPIOH) || \
+ ((__PORT__) == EXTI_GPIOI) || \
+ ((__PORT__) == EXTI_GPIOJ))
+#endif /* GPIOK */
+
#define IS_EXTI_GPIO_PIN(__PIN__) ((__PIN__) < 16U)
/**
* @}
@@ -255,6 +314,6 @@ void HAL_EXTI_GenerateSWI(EXTI_HandleTypeDef *hexti);
}
#endif
-#endif /* __STM32F7xx_HAL_EXTI_H */
+#endif /* STM32F7xx_HAL_EXTI_H */
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff --git a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_Keil/Boot/lib/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_gpio.h b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_Keil/Boot/lib/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_gpio.h
index 3d9de6e2..08e0acb2 100644
--- a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_Keil/Boot/lib/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_gpio.h
+++ b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_Keil/Boot/lib/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_gpio.h
@@ -262,7 +262,7 @@ void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin);
* @{
*/
#define IS_GPIO_PIN_ACTION(ACTION) (((ACTION) == GPIO_PIN_RESET) || ((ACTION) == GPIO_PIN_SET))
-#define IS_GPIO_PIN(__PIN__) ((((__PIN__) & GPIO_PIN_MASK) != (uint32_t)0x00))
+#define IS_GPIO_PIN(__PIN__) ((((uint32_t)(__PIN__) & GPIO_PIN_MASK) != 0x00U))
#define IS_GPIO_MODE(MODE) (((MODE) == GPIO_MODE_INPUT) ||\
((MODE) == GPIO_MODE_OUTPUT_PP) ||\
((MODE) == GPIO_MODE_OUTPUT_OD) ||\
diff --git a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_Keil/Boot/lib/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_i2c_ex.h b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_Keil/Boot/lib/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_i2c_ex.h
index d5d75314..83037894 100644
--- a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_Keil/Boot/lib/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_i2c_ex.h
+++ b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_Keil/Boot/lib/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_i2c_ex.h
@@ -167,6 +167,9 @@ void HAL_I2CEx_DisableFastModePlus(uint32_t ConfigFastModePlus);
(((__CONFIG__) & I2C_FASTMODEPLUS_PB9) == I2C_FASTMODEPLUS_PB9) || \
(((__CONFIG__) & I2C_FASTMODEPLUS_I2C1) == I2C_FASTMODEPLUS_I2C1))
#endif /* SYSCFG_PMC_I2C1_FMP && SYSCFG_PMC_I2C2_FMP && SYSCFG_PMC_I2C3_FMP && SYSCFG_PMC_I2C4_FMP */
+
+
+
/**
* @}
*/
diff --git a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_Keil/Boot/lib/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_pcd.h b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_Keil/Boot/lib/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_pcd.h
index 0633bb22..2650b739 100644
--- a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_Keil/Boot/lib/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_pcd.h
+++ b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_Keil/Boot/lib/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_pcd.h
@@ -96,16 +96,16 @@ typedef struct __PCD_HandleTypeDef
typedef struct
#endif /* USE_HAL_PCD_REGISTER_CALLBACKS */
{
- PCD_TypeDef *Instance; /*!< Register base address */
- PCD_InitTypeDef Init; /*!< PCD required parameters */
- __IO uint8_t USB_Address; /*!< USB Address */
- PCD_EPTypeDef IN_ep[16]; /*!< IN endpoint parameters */
- PCD_EPTypeDef OUT_ep[16]; /*!< OUT endpoint parameters */
- HAL_LockTypeDef Lock; /*!< PCD peripheral status */
- __IO PCD_StateTypeDef State; /*!< PCD communication state */
- __IO uint32_t ErrorCode; /*!< PCD Error code */
- uint32_t Setup[12]; /*!< Setup packet buffer */
- PCD_LPM_StateTypeDef LPM_State; /*!< LPM State */
+ PCD_TypeDef *Instance; /*!< Register base address */
+ PCD_InitTypeDef Init; /*!< PCD required parameters */
+ __IO uint8_t USB_Address; /*!< USB Address */
+ PCD_EPTypeDef IN_ep[16]; /*!< IN endpoint parameters */
+ PCD_EPTypeDef OUT_ep[16]; /*!< OUT endpoint parameters */
+ HAL_LockTypeDef Lock; /*!< PCD peripheral status */
+ __IO PCD_StateTypeDef State; /*!< PCD communication state */
+ __IO uint32_t ErrorCode; /*!< PCD Error code */
+ uint32_t Setup[12]; /*!< Setup packet buffer */
+ PCD_LPM_StateTypeDef LPM_State; /*!< LPM State */
uint32_t BESL;
@@ -148,9 +148,9 @@ typedef struct
/** @defgroup PCD_Speed PCD Speed
* @{
*/
-#define PCD_SPEED_HIGH 0U
-#define PCD_SPEED_HIGH_IN_FULL 1U
-#define PCD_SPEED_FULL 2U
+#define PCD_SPEED_HIGH USBD_HS_SPEED
+#define PCD_SPEED_HIGH_IN_FULL USBD_HSINFS_SPEED
+#define PCD_SPEED_FULL USBD_FS_SPEED
/**
* @}
*/
@@ -207,20 +207,20 @@ typedef struct
#define __HAL_USB_OTG_HS_WAKEUP_EXTI_GET_FLAG() EXTI->PR & (USB_OTG_HS_WAKEUP_EXTI_LINE)
#define __HAL_USB_OTG_HS_WAKEUP_EXTI_CLEAR_FLAG() EXTI->PR = (USB_OTG_HS_WAKEUP_EXTI_LINE)
-#define __HAL_USB_OTG_HS_WAKEUP_EXTI_ENABLE_RISING_EDGE() \
- do { \
+#define __HAL_USB_OTG_HS_WAKEUP_EXTI_ENABLE_RISING_EDGE() \
+ do { \
EXTI->FTSR &= ~(USB_OTG_HS_WAKEUP_EXTI_LINE); \
- EXTI->RTSR |= USB_OTG_HS_WAKEUP_EXTI_LINE; \
+ EXTI->RTSR |= USB_OTG_HS_WAKEUP_EXTI_LINE; \
} while(0U)
#define __HAL_USB_OTG_FS_WAKEUP_EXTI_ENABLE_IT() EXTI->IMR |= USB_OTG_FS_WAKEUP_EXTI_LINE
#define __HAL_USB_OTG_FS_WAKEUP_EXTI_DISABLE_IT() EXTI->IMR &= ~(USB_OTG_FS_WAKEUP_EXTI_LINE)
#define __HAL_USB_OTG_FS_WAKEUP_EXTI_GET_FLAG() EXTI->PR & (USB_OTG_FS_WAKEUP_EXTI_LINE)
#define __HAL_USB_OTG_FS_WAKEUP_EXTI_CLEAR_FLAG() EXTI->PR = USB_OTG_FS_WAKEUP_EXTI_LINE
-#define __HAL_USB_OTG_FS_WAKEUP_EXTI_ENABLE_RISING_EDGE() \
- do { \
+#define __HAL_USB_OTG_FS_WAKEUP_EXTI_ENABLE_RISING_EDGE() \
+ do { \
EXTI->FTSR &= ~(USB_OTG_FS_WAKEUP_EXTI_LINE); \
- EXTI->RTSR |= USB_OTG_FS_WAKEUP_EXTI_LINE; \
+ EXTI->RTSR |= USB_OTG_FS_WAKEUP_EXTI_LINE; \
} while(0U)
#endif /* defined (USB_OTG_FS) || defined (USB_OTG_HS) */
@@ -256,7 +256,7 @@ typedef enum
HAL_PCD_SUSPEND_CB_ID = 0x04, /*!< USB PCD Suspend callback ID */
HAL_PCD_RESUME_CB_ID = 0x05, /*!< USB PCD Resume callback ID */
HAL_PCD_CONNECT_CB_ID = 0x06, /*!< USB PCD Connect callback ID */
- HAL_PCD_DISCONNECT_CB_ID = 0x07, /*!< USB PCD Disconnect callback ID */
+ HAL_PCD_DISCONNECT_CB_ID = 0x07, /*!< USB PCD Disconnect callback ID */
HAL_PCD_MSPINIT_CB_ID = 0x08, /*!< USB PCD MspInit callback ID */
HAL_PCD_MSPDEINIT_CB_ID = 0x09 /*!< USB PCD MspDeInit callback ID */
@@ -371,14 +371,6 @@ PCD_StateTypeDef HAL_PCD_GetState(PCD_HandleTypeDef *hpcd);
* @{
*/
#if defined (USB_OTG_FS) || defined (USB_OTG_HS)
-#define USB_OTG_FS_WAKEUP_EXTI_RISING_EDGE 0x08U
-#define USB_OTG_FS_WAKEUP_EXTI_FALLING_EDGE 0x0CU
-#define USB_OTG_FS_WAKEUP_EXTI_RISING_FALLING_EDGE 0x10U
-
-#define USB_OTG_HS_WAKEUP_EXTI_RISING_EDGE 0x08U
-#define USB_OTG_HS_WAKEUP_EXTI_FALLING_EDGE 0x0CU
-#define USB_OTG_HS_WAKEUP_EXTI_RISING_FALLING_EDGE 0x10U
-
#define USB_OTG_FS_WAKEUP_EXTI_LINE (0x1U << 18) /*!< USB FS EXTI Line WakeUp Interrupt */
#define USB_OTG_HS_WAKEUP_EXTI_LINE (0x1U << 20) /*!< USB HS EXTI Line WakeUp Interrupt */
#endif /* defined (USB_OTG_FS) || defined (USB_OTG_HS) */
diff --git a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_Keil/Boot/lib/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_tim.h b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_Keil/Boot/lib/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_tim.h
index 6a29ae50..ab067a59 100644
--- a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_Keil/Boot/lib/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_tim.h
+++ b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_Keil/Boot/lib/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_tim.h
@@ -167,7 +167,7 @@ typedef struct
This parameter can be a value of @ref TIM_Encoder_Mode */
uint32_t IC1Polarity; /*!< Specifies the active edge of the input signal.
- This parameter can be a value of @ref TIM_Input_Capture_Polarity */
+ This parameter can be a value of @ref TIM_Encoder_Input_Polarity */
uint32_t IC1Selection; /*!< Specifies the input.
This parameter can be a value of @ref TIM_Input_Capture_Selection */
@@ -179,7 +179,7 @@ typedef struct
This parameter can be a number between Min_Data = 0x0 and Max_Data = 0xF */
uint32_t IC2Polarity; /*!< Specifies the active edge of the input signal.
- This parameter can be a value of @ref TIM_Input_Capture_Polarity */
+ This parameter can be a value of @ref TIM_Encoder_Input_Polarity */
uint32_t IC2Selection; /*!< Specifies the input.
This parameter can be a value of @ref TIM_Input_Capture_Selection */
@@ -235,7 +235,12 @@ typedef struct
uint32_t MasterOutputTrigger2; /*!< Trigger output2 (TRGO2) selection
This parameter can be a value of @ref TIM_Master_Mode_Selection_2 */
uint32_t MasterSlaveMode; /*!< Master/slave mode selection
- This parameter can be a value of @ref TIM_Master_Slave_Mode */
+ This parameter can be a value of @ref TIM_Master_Slave_Mode
+ @note When the Master/slave mode is enabled, the effect of
+ an event on the trigger input (TRGI) is delayed to allow a
+ perfect synchronization between the current timer and its
+ slaves (through TRGO). It is not mandatory in case of timer
+ synchronization mode. */
} TIM_MasterConfigTypeDef;
/**
@@ -518,6 +523,15 @@ typedef void (*pTIM_CallbackTypeDef)(TIM_HandleTypeDef *htim); /*!< pointer to
* @}
*/
+/** @defgroup TIM_Update_Interrupt_Flag_Remap TIM Update Interrupt Flag Remap
+ * @{
+ */
+#define TIM_UIFREMAP_DISABLE 0x00000000U /*!< Update interrupt flag remap disabled */
+#define TIM_UIFREMAP_ENABLE TIM_CR1_UIFREMAP /*!< Update interrupt flag remap enabled */
+/**
+ * @}
+ */
+
/** @defgroup TIM_ClockDivision TIM Clock Division
* @{
*/
@@ -611,6 +625,15 @@ typedef void (*pTIM_CallbackTypeDef)(TIM_HandleTypeDef *htim); /*!< pointer to
* @}
*/
+/** @defgroup TIM_Encoder_Input_Polarity TIM Encoder Input Polarity
+ * @{
+ */
+#define TIM_ENCODERINPUTPOLARITY_RISING TIM_INPUTCHANNELPOLARITY_RISING /*!< Encoder input with rising edge polarity */
+#define TIM_ENCODERINPUTPOLARITY_FALLING TIM_INPUTCHANNELPOLARITY_FALLING /*!< Encoder input with falling edge polarity */
+/**
+ * @}
+ */
+
/** @defgroup TIM_Input_Capture_Selection TIM Input Capture Selection
* @{
*/
@@ -1119,15 +1142,15 @@ typedef void (*pTIM_CallbackTypeDef)(TIM_HandleTypeDef *htim); /*!< pointer to
* @retval None
*/
#define __HAL_TIM_DISABLE(__HANDLE__) \
- do { \
- if (((__HANDLE__)->Instance->CCER & TIM_CCER_CCxE_MASK) == 0UL) \
- { \
- if(((__HANDLE__)->Instance->CCER & TIM_CCER_CCxNE_MASK) == 0UL) \
- { \
- (__HANDLE__)->Instance->CR1 &= ~(TIM_CR1_CEN); \
- } \
- } \
- } while(0)
+ do { \
+ if (((__HANDLE__)->Instance->CCER & TIM_CCER_CCxE_MASK) == 0UL) \
+ { \
+ if(((__HANDLE__)->Instance->CCER & TIM_CCER_CCxNE_MASK) == 0UL) \
+ { \
+ (__HANDLE__)->Instance->CR1 &= ~(TIM_CR1_CEN); \
+ } \
+ } \
+ } while(0)
/**
* @brief Disable the TIM main Output.
@@ -1136,15 +1159,15 @@ typedef void (*pTIM_CallbackTypeDef)(TIM_HandleTypeDef *htim); /*!< pointer to
* @note The Main Output Enable of a timer instance is disabled only if all the CCx and CCxN channels have been disabled
*/
#define __HAL_TIM_MOE_DISABLE(__HANDLE__) \
- do { \
- if (((__HANDLE__)->Instance->CCER & TIM_CCER_CCxE_MASK) == 0UL) \
- { \
- if(((__HANDLE__)->Instance->CCER & TIM_CCER_CCxNE_MASK) == 0UL) \
- { \
- (__HANDLE__)->Instance->BDTR &= ~(TIM_BDTR_MOE); \
- } \
- } \
- } while(0)
+ do { \
+ if (((__HANDLE__)->Instance->CCER & TIM_CCER_CCxE_MASK) == 0UL) \
+ { \
+ if(((__HANDLE__)->Instance->CCER & TIM_CCER_CCxNE_MASK) == 0UL) \
+ { \
+ (__HANDLE__)->Instance->BDTR &= ~(TIM_BDTR_MOE); \
+ } \
+ } \
+ } while(0)
/**
* @brief Disable the TIM main Output.
@@ -1279,7 +1302,8 @@ typedef void (*pTIM_CallbackTypeDef)(TIM_HandleTypeDef *htim); /*!< pointer to
* @arg TIM_IT_BREAK: Break interrupt
* @retval The state of TIM_IT (SET or RESET).
*/
-#define __HAL_TIM_GET_IT_SOURCE(__HANDLE__, __INTERRUPT__) ((((__HANDLE__)->Instance->DIER & (__INTERRUPT__)) == (__INTERRUPT__)) ? SET : RESET)
+#define __HAL_TIM_GET_IT_SOURCE(__HANDLE__, __INTERRUPT__) ((((__HANDLE__)->Instance->DIER & (__INTERRUPT__)) \
+ == (__INTERRUPT__)) ? SET : RESET)
/** @brief Clear the TIM interrupt pending bits.
* @param __HANDLE__ TIM handle
@@ -1297,6 +1321,31 @@ typedef void (*pTIM_CallbackTypeDef)(TIM_HandleTypeDef *htim); /*!< pointer to
*/
#define __HAL_TIM_CLEAR_IT(__HANDLE__, __INTERRUPT__) ((__HANDLE__)->Instance->SR = ~(__INTERRUPT__))
+/**
+ * @brief Force a continuous copy of the update interrupt flag (UIF) into the timer counter register (bit 31).
+ * @note This allows both the counter value and a potential roll-over condition signalled by the UIFCPY flag to be read in an atomic way.
+ * @param __HANDLE__ TIM handle.
+ * @retval None
+mode.
+ */
+#define __HAL_TIM_UIFREMAP_ENABLE(__HANDLE__) (((__HANDLE__)->Instance->CR1 |= TIM_CR1_UIFREMAP))
+
+/**
+ * @brief Disable update interrupt flag (UIF) remapping.
+ * @param __HANDLE__ TIM handle.
+ * @retval None
+mode.
+ */
+#define __HAL_TIM_UIFREMAP_DISABLE(__HANDLE__) (((__HANDLE__)->Instance->CR1 &= ~TIM_CR1_UIFREMAP))
+
+/**
+ * @brief Get update interrupt flag (UIF) copy status.
+ * @param __COUNTER__ Counter value.
+ * @retval The state of UIFCPY (TRUE or FALSE).
+mode.
+ */
+#define __HAL_TIM_GET_UIFCPY(__COUNTER__) (((__COUNTER__) & (TIM_CNT_UIFCPY)) == (TIM_CNT_UIFCPY))
+
/**
* @brief Indicates whether or not the TIM Counter is used as downcounter.
* @param __HANDLE__ TIM handle.
@@ -1316,6 +1365,8 @@ mode.
/**
* @brief Set the TIM Counter Register value on runtime.
+ * Note Please check if the bit 31 of CNT register is used as UIF copy or not, this may affect the counter range in case of 32 bits counter TIM instance.
+ * Bit 31 of CNT can be enabled/disabled using __HAL_TIM_UIFREMAP_ENABLE()/__HAL_TIM_UIFREMAP_DISABLE() macros.
* @param __HANDLE__ TIM handle.
* @param __COUNTER__ specifies the Counter register new value.
* @retval None
@@ -1327,8 +1378,7 @@ mode.
* @param __HANDLE__ TIM handle.
* @retval 16-bit or 32-bit value of the timer counter register (TIMx_CNT)
*/
-#define __HAL_TIM_GET_COUNTER(__HANDLE__) \
- ((__HANDLE__)->Instance->CNT)
+#define __HAL_TIM_GET_COUNTER(__HANDLE__) ((__HANDLE__)->Instance->CNT)
/**
* @brief Set the TIM Autoreload Register value on runtime without calling another time any Init function.
@@ -1337,18 +1387,17 @@ mode.
* @retval None
*/
#define __HAL_TIM_SET_AUTORELOAD(__HANDLE__, __AUTORELOAD__) \
- do{ \
- (__HANDLE__)->Instance->ARR = (__AUTORELOAD__); \
- (__HANDLE__)->Init.Period = (__AUTORELOAD__); \
- } while(0)
+ do{ \
+ (__HANDLE__)->Instance->ARR = (__AUTORELOAD__); \
+ (__HANDLE__)->Init.Period = (__AUTORELOAD__); \
+ } while(0)
/**
* @brief Get the TIM Autoreload Register value on runtime.
* @param __HANDLE__ TIM handle.
* @retval 16-bit or 32-bit value of the timer auto-reload register(TIMx_ARR)
*/
-#define __HAL_TIM_GET_AUTORELOAD(__HANDLE__) \
- ((__HANDLE__)->Instance->ARR)
+#define __HAL_TIM_GET_AUTORELOAD(__HANDLE__) ((__HANDLE__)->Instance->ARR)
/**
* @brief Set the TIM Clock Division value on runtime without calling another time any Init function.
@@ -1361,11 +1410,11 @@ mode.
* @retval None
*/
#define __HAL_TIM_SET_CLOCKDIVISION(__HANDLE__, __CKD__) \
- do{ \
- (__HANDLE__)->Instance->CR1 &= (~TIM_CR1_CKD); \
- (__HANDLE__)->Instance->CR1 |= (__CKD__); \
- (__HANDLE__)->Init.ClockDivision = (__CKD__); \
- } while(0)
+ do{ \
+ (__HANDLE__)->Instance->CR1 &= (~TIM_CR1_CKD); \
+ (__HANDLE__)->Instance->CR1 |= (__CKD__); \
+ (__HANDLE__)->Init.ClockDivision = (__CKD__); \
+ } while(0)
/**
* @brief Get the TIM Clock Division value on runtime.
@@ -1375,8 +1424,7 @@ mode.
* @arg TIM_CLOCKDIVISION_DIV2: tDTS=2*tCK_INT
* @arg TIM_CLOCKDIVISION_DIV4: tDTS=4*tCK_INT
*/
-#define __HAL_TIM_GET_CLOCKDIVISION(__HANDLE__) \
- ((__HANDLE__)->Instance->CR1 & TIM_CR1_CKD)
+#define __HAL_TIM_GET_CLOCKDIVISION(__HANDLE__) ((__HANDLE__)->Instance->CR1 & TIM_CR1_CKD)
/**
* @brief Set the TIM Input Capture prescaler on runtime without calling another time HAL_TIM_IC_ConfigChannel() function.
@@ -1396,10 +1444,10 @@ mode.
* @retval None
*/
#define __HAL_TIM_SET_ICPRESCALER(__HANDLE__, __CHANNEL__, __ICPSC__) \
- do{ \
- TIM_RESET_ICPRESCALERVALUE((__HANDLE__), (__CHANNEL__)); \
- TIM_SET_ICPRESCALERVALUE((__HANDLE__), (__CHANNEL__), (__ICPSC__)); \
- } while(0)
+ do{ \
+ TIM_RESET_ICPRESCALERVALUE((__HANDLE__), (__CHANNEL__)); \
+ TIM_SET_ICPRESCALERVALUE((__HANDLE__), (__CHANNEL__), (__ICPSC__)); \
+ } while(0)
/**
* @brief Get the TIM Input Capture prescaler on runtime.
@@ -1437,12 +1485,12 @@ mode.
* @retval None
*/
#define __HAL_TIM_SET_COMPARE(__HANDLE__, __CHANNEL__, __COMPARE__) \
-(((__CHANNEL__) == TIM_CHANNEL_1) ? ((__HANDLE__)->Instance->CCR1 = (__COMPARE__)) :\
- ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCR2 = (__COMPARE__)) :\
- ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCR3 = (__COMPARE__)) :\
- ((__CHANNEL__) == TIM_CHANNEL_4) ? ((__HANDLE__)->Instance->CCR4 = (__COMPARE__)) :\
- ((__CHANNEL__) == TIM_CHANNEL_5) ? ((__HANDLE__)->Instance->CCR5 = (__COMPARE__)) :\
- ((__HANDLE__)->Instance->CCR6 = (__COMPARE__)))
+ (((__CHANNEL__) == TIM_CHANNEL_1) ? ((__HANDLE__)->Instance->CCR1 = (__COMPARE__)) :\
+ ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCR2 = (__COMPARE__)) :\
+ ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCR3 = (__COMPARE__)) :\
+ ((__CHANNEL__) == TIM_CHANNEL_4) ? ((__HANDLE__)->Instance->CCR4 = (__COMPARE__)) :\
+ ((__CHANNEL__) == TIM_CHANNEL_5) ? ((__HANDLE__)->Instance->CCR5 = (__COMPARE__)) :\
+ ((__HANDLE__)->Instance->CCR6 = (__COMPARE__)))
/**
* @brief Get the TIM Capture Compare Register value on runtime.
@@ -1458,12 +1506,12 @@ mode.
* @retval 16-bit or 32-bit value of the capture/compare register (TIMx_CCRy)
*/
#define __HAL_TIM_GET_COMPARE(__HANDLE__, __CHANNEL__) \
-(((__CHANNEL__) == TIM_CHANNEL_1) ? ((__HANDLE__)->Instance->CCR1) :\
- ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCR2) :\
- ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCR3) :\
- ((__CHANNEL__) == TIM_CHANNEL_4) ? ((__HANDLE__)->Instance->CCR4) :\
- ((__CHANNEL__) == TIM_CHANNEL_5) ? ((__HANDLE__)->Instance->CCR5) :\
- ((__HANDLE__)->Instance->CCR6))
+ (((__CHANNEL__) == TIM_CHANNEL_1) ? ((__HANDLE__)->Instance->CCR1) :\
+ ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCR2) :\
+ ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCR3) :\
+ ((__CHANNEL__) == TIM_CHANNEL_4) ? ((__HANDLE__)->Instance->CCR4) :\
+ ((__CHANNEL__) == TIM_CHANNEL_5) ? ((__HANDLE__)->Instance->CCR5) :\
+ ((__HANDLE__)->Instance->CCR6))
/**
* @brief Set the TIM Output compare preload.
@@ -1479,12 +1527,12 @@ mode.
* @retval None
*/
#define __HAL_TIM_ENABLE_OCxPRELOAD(__HANDLE__, __CHANNEL__) \
- (((__CHANNEL__) == TIM_CHANNEL_1) ? ((__HANDLE__)->Instance->CCMR1 |= TIM_CCMR1_OC1PE) :\
- ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCMR1 |= TIM_CCMR1_OC2PE) :\
- ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCMR2 |= TIM_CCMR2_OC3PE) :\
- ((__CHANNEL__) == TIM_CHANNEL_4) ? ((__HANDLE__)->Instance->CCMR2 |= TIM_CCMR2_OC4PE) :\
- ((__CHANNEL__) == TIM_CHANNEL_5) ? ((__HANDLE__)->Instance->CCMR3 |= TIM_CCMR3_OC5PE) :\
- ((__HANDLE__)->Instance->CCMR3 |= TIM_CCMR3_OC6PE))
+ (((__CHANNEL__) == TIM_CHANNEL_1) ? ((__HANDLE__)->Instance->CCMR1 |= TIM_CCMR1_OC1PE) :\
+ ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCMR1 |= TIM_CCMR1_OC2PE) :\
+ ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCMR2 |= TIM_CCMR2_OC3PE) :\
+ ((__CHANNEL__) == TIM_CHANNEL_4) ? ((__HANDLE__)->Instance->CCMR2 |= TIM_CCMR2_OC4PE) :\
+ ((__CHANNEL__) == TIM_CHANNEL_5) ? ((__HANDLE__)->Instance->CCMR3 |= TIM_CCMR3_OC5PE) :\
+ ((__HANDLE__)->Instance->CCMR3 |= TIM_CCMR3_OC6PE))
/**
* @brief Reset the TIM Output compare preload.
@@ -1500,12 +1548,62 @@ mode.
* @retval None
*/
#define __HAL_TIM_DISABLE_OCxPRELOAD(__HANDLE__, __CHANNEL__) \
- (((__CHANNEL__) == TIM_CHANNEL_1) ? ((__HANDLE__)->Instance->CCMR1 &= (uint16_t)~TIM_CCMR1_OC1PE) :\
- ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCMR1 &= (uint16_t)~TIM_CCMR1_OC2PE) :\
- ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCMR2 &= (uint16_t)~TIM_CCMR2_OC3PE) :\
- ((__CHANNEL__) == TIM_CHANNEL_4) ? ((__HANDLE__)->Instance->CCMR2 &= (uint16_t)~TIM_CCMR2_OC4PE) :\
- ((__CHANNEL__) == TIM_CHANNEL_5) ? ((__HANDLE__)->Instance->CCMR3 &= (uint16_t)~TIM_CCMR3_OC5PE) :\
- ((__HANDLE__)->Instance->CCMR3 &= (uint16_t)~TIM_CCMR3_OC6PE))
+ (((__CHANNEL__) == TIM_CHANNEL_1) ? ((__HANDLE__)->Instance->CCMR1 &= ~TIM_CCMR1_OC1PE) :\
+ ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCMR1 &= ~TIM_CCMR1_OC2PE) :\
+ ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCMR2 &= ~TIM_CCMR2_OC3PE) :\
+ ((__CHANNEL__) == TIM_CHANNEL_4) ? ((__HANDLE__)->Instance->CCMR2 &= ~TIM_CCMR2_OC4PE) :\
+ ((__CHANNEL__) == TIM_CHANNEL_5) ? ((__HANDLE__)->Instance->CCMR3 &= ~TIM_CCMR3_OC5PE) :\
+ ((__HANDLE__)->Instance->CCMR3 &= ~TIM_CCMR3_OC6PE))
+
+/**
+ * @brief Enable fast mode for a given channel.
+ * @param __HANDLE__ TIM handle.
+ * @param __CHANNEL__ TIM Channels to be configured.
+ * This parameter can be one of the following values:
+ * @arg TIM_CHANNEL_1: TIM Channel 1 selected
+ * @arg TIM_CHANNEL_2: TIM Channel 2 selected
+ * @arg TIM_CHANNEL_3: TIM Channel 3 selected
+ * @arg TIM_CHANNEL_4: TIM Channel 4 selected
+ * @arg TIM_CHANNEL_5: TIM Channel 5 selected
+ * @arg TIM_CHANNEL_6: TIM Channel 6 selected
+ * @note When fast mode is enabled an active edge on the trigger input acts
+ * like a compare match on CCx output. Delay to sample the trigger
+ * input and to activate CCx output is reduced to 3 clock cycles.
+ * @note Fast mode acts only if the channel is configured in PWM1 or PWM2 mode.
+ * @retval None
+ */
+#define __HAL_TIM_ENABLE_OCxFAST(__HANDLE__, __CHANNEL__) \
+ (((__CHANNEL__) == TIM_CHANNEL_1) ? ((__HANDLE__)->Instance->CCMR1 |= TIM_CCMR1_OC1FE) :\
+ ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCMR1 |= TIM_CCMR1_OC2FE) :\
+ ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCMR2 |= TIM_CCMR2_OC3FE) :\
+ ((__CHANNEL__) == TIM_CHANNEL_4) ? ((__HANDLE__)->Instance->CCMR2 |= TIM_CCMR2_OC4FE) :\
+ ((__CHANNEL__) == TIM_CHANNEL_5) ? ((__HANDLE__)->Instance->CCMR3 |= TIM_CCMR3_OC5FE) :\
+ ((__HANDLE__)->Instance->CCMR3 |= TIM_CCMR3_OC6FE))
+
+/**
+ * @brief Disable fast mode for a given channel.
+ * @param __HANDLE__ TIM handle.
+ * @param __CHANNEL__ TIM Channels to be configured.
+ * This parameter can be one of the following values:
+ * @arg TIM_CHANNEL_1: TIM Channel 1 selected
+ * @arg TIM_CHANNEL_2: TIM Channel 2 selected
+ * @arg TIM_CHANNEL_3: TIM Channel 3 selected
+ * @arg TIM_CHANNEL_4: TIM Channel 4 selected
+ * @arg TIM_CHANNEL_5: TIM Channel 5 selected
+ * @arg TIM_CHANNEL_6: TIM Channel 6 selected
+ * @note When fast mode is disabled CCx output behaves normally depending
+ * on counter and CCRx values even when the trigger is ON. The minimum
+ * delay to activate CCx output when an active edge occurs on the
+ * trigger input is 5 clock cycles.
+ * @retval None
+ */
+#define __HAL_TIM_DISABLE_OCxFAST(__HANDLE__, __CHANNEL__) \
+ (((__CHANNEL__) == TIM_CHANNEL_1) ? ((__HANDLE__)->Instance->CCMR1 &= ~TIM_CCMR1_OC1FE) :\
+ ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCMR1 &= ~TIM_CCMR1_OC2FE) :\
+ ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCMR2 &= ~TIM_CCMR2_OC3FE) :\
+ ((__CHANNEL__) == TIM_CHANNEL_4) ? ((__HANDLE__)->Instance->CCMR2 &= ~TIM_CCMR2_OC4FE) :\
+ ((__CHANNEL__) == TIM_CHANNEL_5) ? ((__HANDLE__)->Instance->CCMR3 &= ~TIM_CCMR3_OC5FE) :\
+ ((__HANDLE__)->Instance->CCMR3 &= ~TIM_CCMR3_OC6FE))
/**
* @brief Set the Update Request Source (URS) bit of the TIMx_CR1 register.
@@ -1515,8 +1613,7 @@ mode.
* enabled)
* @retval None
*/
-#define __HAL_TIM_URS_ENABLE(__HANDLE__) \
- ((__HANDLE__)->Instance->CR1|= TIM_CR1_URS)
+#define __HAL_TIM_URS_ENABLE(__HANDLE__) ((__HANDLE__)->Instance->CR1|= TIM_CR1_URS)
/**
* @brief Reset the Update Request Source (URS) bit of the TIMx_CR1 register.
@@ -1529,8 +1626,7 @@ mode.
* _ Update generation through the slave mode controller
* @retval None
*/
-#define __HAL_TIM_URS_DISABLE(__HANDLE__) \
- ((__HANDLE__)->Instance->CR1&=~TIM_CR1_URS)
+#define __HAL_TIM_URS_DISABLE(__HANDLE__) ((__HANDLE__)->Instance->CR1&=~TIM_CR1_URS)
/**
* @brief Set the TIM Capture x input polarity on runtime.
@@ -1548,10 +1644,10 @@ mode.
* @retval None
*/
#define __HAL_TIM_SET_CAPTUREPOLARITY(__HANDLE__, __CHANNEL__, __POLARITY__) \
- do{ \
- TIM_RESET_CAPTUREPOLARITY((__HANDLE__), (__CHANNEL__)); \
- TIM_SET_CAPTUREPOLARITY((__HANDLE__), (__CHANNEL__), (__POLARITY__)); \
- }while(0)
+ do{ \
+ TIM_RESET_CAPTUREPOLARITY((__HANDLE__), (__CHANNEL__)); \
+ TIM_SET_CAPTUREPOLARITY((__HANDLE__), (__CHANNEL__), (__POLARITY__)); \
+ }while(0)
/**
* @}
@@ -1579,29 +1675,29 @@ mode.
((__MODE__) == TIM_CLEARINPUTSOURCE_ETR))
#if defined(TIM_AF1_BKINE)&&defined(TIM_AF2_BKINE)
-#define IS_TIM_DMA_BASE(__BASE__) (((__BASE__) == TIM_DMABASE_CR1) || \
- ((__BASE__) == TIM_DMABASE_CR2) || \
- ((__BASE__) == TIM_DMABASE_SMCR) || \
- ((__BASE__) == TIM_DMABASE_DIER) || \
- ((__BASE__) == TIM_DMABASE_SR) || \
- ((__BASE__) == TIM_DMABASE_EGR) || \
- ((__BASE__) == TIM_DMABASE_CCMR1) || \
- ((__BASE__) == TIM_DMABASE_CCMR2) || \
- ((__BASE__) == TIM_DMABASE_CCER) || \
- ((__BASE__) == TIM_DMABASE_CNT) || \
- ((__BASE__) == TIM_DMABASE_PSC) || \
- ((__BASE__) == TIM_DMABASE_ARR) || \
- ((__BASE__) == TIM_DMABASE_RCR) || \
- ((__BASE__) == TIM_DMABASE_CCR1) || \
- ((__BASE__) == TIM_DMABASE_CCR2) || \
- ((__BASE__) == TIM_DMABASE_CCR3) || \
- ((__BASE__) == TIM_DMABASE_CCR4) || \
- ((__BASE__) == TIM_DMABASE_BDTR) || \
- ((__BASE__) == TIM_DMABASE_OR) || \
- ((__BASE__) == TIM_DMABASE_CCMR3) || \
- ((__BASE__) == TIM_DMABASE_CCR5) || \
- ((__BASE__) == TIM_DMABASE_CCR6) || \
- ((__BASE__) == TIM_DMABASE_AF1) || \
+#define IS_TIM_DMA_BASE(__BASE__) (((__BASE__) == TIM_DMABASE_CR1) || \
+ ((__BASE__) == TIM_DMABASE_CR2) || \
+ ((__BASE__) == TIM_DMABASE_SMCR) || \
+ ((__BASE__) == TIM_DMABASE_DIER) || \
+ ((__BASE__) == TIM_DMABASE_SR) || \
+ ((__BASE__) == TIM_DMABASE_EGR) || \
+ ((__BASE__) == TIM_DMABASE_CCMR1) || \
+ ((__BASE__) == TIM_DMABASE_CCMR2) || \
+ ((__BASE__) == TIM_DMABASE_CCER) || \
+ ((__BASE__) == TIM_DMABASE_CNT) || \
+ ((__BASE__) == TIM_DMABASE_PSC) || \
+ ((__BASE__) == TIM_DMABASE_ARR) || \
+ ((__BASE__) == TIM_DMABASE_RCR) || \
+ ((__BASE__) == TIM_DMABASE_CCR1) || \
+ ((__BASE__) == TIM_DMABASE_CCR2) || \
+ ((__BASE__) == TIM_DMABASE_CCR3) || \
+ ((__BASE__) == TIM_DMABASE_CCR4) || \
+ ((__BASE__) == TIM_DMABASE_BDTR) || \
+ ((__BASE__) == TIM_DMABASE_OR) || \
+ ((__BASE__) == TIM_DMABASE_CCMR3) || \
+ ((__BASE__) == TIM_DMABASE_CCR5) || \
+ ((__BASE__) == TIM_DMABASE_CCR6) || \
+ ((__BASE__) == TIM_DMABASE_AF1) || \
((__BASE__) == TIM_DMABASE_AF2))
#else
#define IS_TIM_DMA_BASE(__BASE__) (((__BASE__) == TIM_DMABASE_CR1) || \
@@ -1636,6 +1732,9 @@ mode.
((__MODE__) == TIM_COUNTERMODE_CENTERALIGNED2) || \
((__MODE__) == TIM_COUNTERMODE_CENTERALIGNED3))
+#define IS_TIM_UIFREMAP_MODE(__MODE__) (((__MODE__) == TIM_UIFREMAP_DISABLE) || \
+ ((__MODE__) == TIM_UIFREMAP_ENALE))
+
#define IS_TIM_CLOCKDIVISION_DIV(__DIV__) (((__DIV__) == TIM_CLOCKDIVISION_DIV1) || \
((__DIV__) == TIM_CLOCKDIVISION_DIV2) || \
((__DIV__) == TIM_CLOCKDIVISION_DIV4))
@@ -1658,6 +1757,9 @@ mode.
#define IS_TIM_OCNIDLE_STATE(__STATE__) (((__STATE__) == TIM_OCNIDLESTATE_SET) || \
((__STATE__) == TIM_OCNIDLESTATE_RESET))
+#define IS_TIM_ENCODERINPUT_POLARITY(__POLARITY__) (((__POLARITY__) == TIM_ENCODERINPUTPOLARITY_RISING) || \
+ ((__POLARITY__) == TIM_ENCODERINPUTPOLARITY_FALLING))
+
#define IS_TIM_IC_POLARITY(__POLARITY__) (((__POLARITY__) == TIM_ICPOLARITY_RISING) || \
((__POLARITY__) == TIM_ICPOLARITY_FALLING) || \
((__POLARITY__) == TIM_ICPOLARITY_BOTHEDGE))
@@ -1876,28 +1978,28 @@ mode.
((__TRIGGER__) == TIM_SLAVEMODE_COMBINED_RESETTRIGGER))
#define TIM_SET_ICPRESCALERVALUE(__HANDLE__, __CHANNEL__, __ICPSC__) \
-(((__CHANNEL__) == TIM_CHANNEL_1) ? ((__HANDLE__)->Instance->CCMR1 |= (__ICPSC__)) :\
- ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCMR1 |= ((__ICPSC__) << 8U)) :\
- ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCMR2 |= (__ICPSC__)) :\
- ((__HANDLE__)->Instance->CCMR2 |= ((__ICPSC__) << 8U)))
+ (((__CHANNEL__) == TIM_CHANNEL_1) ? ((__HANDLE__)->Instance->CCMR1 |= (__ICPSC__)) :\
+ ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCMR1 |= ((__ICPSC__) << 8U)) :\
+ ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCMR2 |= (__ICPSC__)) :\
+ ((__HANDLE__)->Instance->CCMR2 |= ((__ICPSC__) << 8U)))
#define TIM_RESET_ICPRESCALERVALUE(__HANDLE__, __CHANNEL__) \
-(((__CHANNEL__) == TIM_CHANNEL_1) ? ((__HANDLE__)->Instance->CCMR1 &= (uint16_t)~TIM_CCMR1_IC1PSC) :\
- ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCMR1 &= (uint16_t)~TIM_CCMR1_IC2PSC) :\
- ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCMR2 &= (uint16_t)~TIM_CCMR2_IC3PSC) :\
- ((__HANDLE__)->Instance->CCMR2 &= (uint16_t)~TIM_CCMR2_IC4PSC))
+ (((__CHANNEL__) == TIM_CHANNEL_1) ? ((__HANDLE__)->Instance->CCMR1 &= ~TIM_CCMR1_IC1PSC) :\
+ ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCMR1 &= ~TIM_CCMR1_IC2PSC) :\
+ ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCMR2 &= ~TIM_CCMR2_IC3PSC) :\
+ ((__HANDLE__)->Instance->CCMR2 &= ~TIM_CCMR2_IC4PSC))
#define TIM_SET_CAPTUREPOLARITY(__HANDLE__, __CHANNEL__, __POLARITY__) \
-(((__CHANNEL__) == TIM_CHANNEL_1) ? ((__HANDLE__)->Instance->CCER |= (__POLARITY__)) :\
- ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCER |= ((__POLARITY__) << 4U)) :\
- ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCER |= ((__POLARITY__) << 8U)) :\
- ((__HANDLE__)->Instance->CCER |= (((__POLARITY__) << 12U))))
+ (((__CHANNEL__) == TIM_CHANNEL_1) ? ((__HANDLE__)->Instance->CCER |= (__POLARITY__)) :\
+ ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCER |= ((__POLARITY__) << 4U)) :\
+ ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCER |= ((__POLARITY__) << 8U)) :\
+ ((__HANDLE__)->Instance->CCER |= (((__POLARITY__) << 12U))))
#define TIM_RESET_CAPTUREPOLARITY(__HANDLE__, __CHANNEL__) \
-(((__CHANNEL__) == TIM_CHANNEL_1) ? ((__HANDLE__)->Instance->CCER &= (uint16_t)~(TIM_CCER_CC1P | TIM_CCER_CC1NP)) :\
- ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCER &= (uint16_t)~(TIM_CCER_CC2P | TIM_CCER_CC2NP)) :\
- ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCER &= (uint16_t)~(TIM_CCER_CC3P | TIM_CCER_CC3NP)) :\
- ((__HANDLE__)->Instance->CCER &= (uint16_t)~(TIM_CCER_CC4P | TIM_CCER_CC4NP)))
+ (((__CHANNEL__) == TIM_CHANNEL_1) ? ((__HANDLE__)->Instance->CCER &= ~(TIM_CCER_CC1P | TIM_CCER_CC1NP)) :\
+ ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCER &= ~(TIM_CCER_CC2P | TIM_CCER_CC2NP)) :\
+ ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCER &= ~(TIM_CCER_CC3P | TIM_CCER_CC3NP)) :\
+ ((__HANDLE__)->Instance->CCER &= ~(TIM_CCER_CC4P | TIM_CCER_CC4NP)))
/**
* @}
@@ -2035,7 +2137,8 @@ HAL_StatusTypeDef HAL_TIM_Encoder_Stop(TIM_HandleTypeDef *htim, uint32_t Channel
HAL_StatusTypeDef HAL_TIM_Encoder_Start_IT(TIM_HandleTypeDef *htim, uint32_t Channel);
HAL_StatusTypeDef HAL_TIM_Encoder_Stop_IT(TIM_HandleTypeDef *htim, uint32_t Channel);
/* Non-Blocking mode: DMA */
-HAL_StatusTypeDef HAL_TIM_Encoder_Start_DMA(TIM_HandleTypeDef *htim, uint32_t Channel, uint32_t *pData1, uint32_t *pData2, uint16_t Length);
+HAL_StatusTypeDef HAL_TIM_Encoder_Start_DMA(TIM_HandleTypeDef *htim, uint32_t Channel, uint32_t *pData1,
+ uint32_t *pData2, uint16_t Length);
HAL_StatusTypeDef HAL_TIM_Encoder_Stop_DMA(TIM_HandleTypeDef *htim, uint32_t Channel);
/**
* @}
@@ -2059,17 +2162,19 @@ void HAL_TIM_IRQHandler(TIM_HandleTypeDef *htim);
HAL_StatusTypeDef HAL_TIM_OC_ConfigChannel(TIM_HandleTypeDef *htim, TIM_OC_InitTypeDef *sConfig, uint32_t Channel);
HAL_StatusTypeDef HAL_TIM_PWM_ConfigChannel(TIM_HandleTypeDef *htim, TIM_OC_InitTypeDef *sConfig, uint32_t Channel);
HAL_StatusTypeDef HAL_TIM_IC_ConfigChannel(TIM_HandleTypeDef *htim, TIM_IC_InitTypeDef *sConfig, uint32_t Channel);
-HAL_StatusTypeDef HAL_TIM_OnePulse_ConfigChannel(TIM_HandleTypeDef *htim, TIM_OnePulse_InitTypeDef *sConfig, uint32_t OutputChannel, uint32_t InputChannel);
-HAL_StatusTypeDef HAL_TIM_ConfigOCrefClear(TIM_HandleTypeDef *htim, TIM_ClearInputConfigTypeDef *sClearInputConfig, uint32_t Channel);
+HAL_StatusTypeDef HAL_TIM_OnePulse_ConfigChannel(TIM_HandleTypeDef *htim, TIM_OnePulse_InitTypeDef *sConfig,
+ uint32_t OutputChannel, uint32_t InputChannel);
+HAL_StatusTypeDef HAL_TIM_ConfigOCrefClear(TIM_HandleTypeDef *htim, TIM_ClearInputConfigTypeDef *sClearInputConfig,
+ uint32_t Channel);
HAL_StatusTypeDef HAL_TIM_ConfigClockSource(TIM_HandleTypeDef *htim, TIM_ClockConfigTypeDef *sClockSourceConfig);
HAL_StatusTypeDef HAL_TIM_ConfigTI1Input(TIM_HandleTypeDef *htim, uint32_t TI1_Selection);
HAL_StatusTypeDef HAL_TIM_SlaveConfigSynchro(TIM_HandleTypeDef *htim, TIM_SlaveConfigTypeDef *sSlaveConfig);
HAL_StatusTypeDef HAL_TIM_SlaveConfigSynchro_IT(TIM_HandleTypeDef *htim, TIM_SlaveConfigTypeDef *sSlaveConfig);
-HAL_StatusTypeDef HAL_TIM_DMABurst_WriteStart(TIM_HandleTypeDef *htim, uint32_t BurstBaseAddress, uint32_t BurstRequestSrc, \
- uint32_t *BurstBuffer, uint32_t BurstLength);
+HAL_StatusTypeDef HAL_TIM_DMABurst_WriteStart(TIM_HandleTypeDef *htim, uint32_t BurstBaseAddress,
+ uint32_t BurstRequestSrc, uint32_t *BurstBuffer, uint32_t BurstLength);
HAL_StatusTypeDef HAL_TIM_DMABurst_WriteStop(TIM_HandleTypeDef *htim, uint32_t BurstRequestSrc);
-HAL_StatusTypeDef HAL_TIM_DMABurst_ReadStart(TIM_HandleTypeDef *htim, uint32_t BurstBaseAddress, uint32_t BurstRequestSrc, \
- uint32_t *BurstBuffer, uint32_t BurstLength);
+HAL_StatusTypeDef HAL_TIM_DMABurst_ReadStart(TIM_HandleTypeDef *htim, uint32_t BurstBaseAddress,
+ uint32_t BurstRequestSrc, uint32_t *BurstBuffer, uint32_t BurstLength);
HAL_StatusTypeDef HAL_TIM_DMABurst_ReadStop(TIM_HandleTypeDef *htim, uint32_t BurstRequestSrc);
HAL_StatusTypeDef HAL_TIM_GenerateEvent(TIM_HandleTypeDef *htim, uint32_t EventSource);
uint32_t HAL_TIM_ReadCapturedValue(TIM_HandleTypeDef *htim, uint32_t Channel);
@@ -2095,7 +2200,8 @@ void HAL_TIM_ErrorCallback(TIM_HandleTypeDef *htim);
/* Callbacks Register/UnRegister functions ***********************************/
#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)
-HAL_StatusTypeDef HAL_TIM_RegisterCallback(TIM_HandleTypeDef *htim, HAL_TIM_CallbackIDTypeDef CallbackID, pTIM_CallbackTypeDef pCallback);
+HAL_StatusTypeDef HAL_TIM_RegisterCallback(TIM_HandleTypeDef *htim, HAL_TIM_CallbackIDTypeDef CallbackID,
+ pTIM_CallbackTypeDef pCallback);
HAL_StatusTypeDef HAL_TIM_UnRegisterCallback(TIM_HandleTypeDef *htim, HAL_TIM_CallbackIDTypeDef CallbackID);
#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */
@@ -2125,8 +2231,8 @@ HAL_TIM_StateTypeDef HAL_TIM_Encoder_GetState(TIM_HandleTypeDef *htim);
/* Private functions----------------------------------------------------------*/
/** @defgroup TIM_Private_Functions TIM Private Functions
-* @{
-*/
+ * @{
+ */
void TIM_Base_SetConfig(TIM_TypeDef *TIMx, TIM_Base_InitTypeDef *Structure);
void TIM_TI1_SetConfig(TIM_TypeDef *TIMx, uint32_t TIM_ICPolarity, uint32_t TIM_ICSelection, uint32_t TIM_ICFilter);
void TIM_OC2_SetConfig(TIM_TypeDef *TIMx, TIM_OC_InitTypeDef *OC_Config);
@@ -2145,8 +2251,8 @@ void TIM_ResetCallback(TIM_HandleTypeDef *htim);
#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */
/**
-* @}
-*/
+ * @}
+ */
/* End of private functions --------------------------------------------------*/
/**
diff --git a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_Keil/Boot/lib/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_tim_ex.h b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_Keil/Boot/lib/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_tim_ex.h
index 598f5c6e..b8d3472e 100644
--- a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_Keil/Boot/lib/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_tim_ex.h
+++ b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_Keil/Boot/lib/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_tim_ex.h
@@ -201,9 +201,9 @@ TIMEx_BreakInputConfigTypeDef;
*/
/** @addtogroup TIMEx_Exported_Functions_Group1 Extended Timer Hall Sensor functions
- * @brief Timer Hall Sensor functions
- * @{
- */
+ * @brief Timer Hall Sensor functions
+ * @{
+ */
/* Timer Hall Sensor functions **********************************************/
HAL_StatusTypeDef HAL_TIMEx_HallSensor_Init(TIM_HandleTypeDef *htim, TIM_HallSensor_InitTypeDef *sConfig);
HAL_StatusTypeDef HAL_TIMEx_HallSensor_DeInit(TIM_HandleTypeDef *htim);
@@ -225,9 +225,9 @@ HAL_StatusTypeDef HAL_TIMEx_HallSensor_Stop_DMA(TIM_HandleTypeDef *htim);
*/
/** @addtogroup TIMEx_Exported_Functions_Group2 Extended Timer Complementary Output Compare functions
- * @brief Timer Complementary Output Compare functions
- * @{
- */
+ * @brief Timer Complementary Output Compare functions
+ * @{
+ */
/* Timer Complementary Output Compare functions *****************************/
/* Blocking mode: Polling */
HAL_StatusTypeDef HAL_TIMEx_OCN_Start(TIM_HandleTypeDef *htim, uint32_t Channel);
@@ -245,9 +245,9 @@ HAL_StatusTypeDef HAL_TIMEx_OCN_Stop_DMA(TIM_HandleTypeDef *htim, uint32_t Chann
*/
/** @addtogroup TIMEx_Exported_Functions_Group3 Extended Timer Complementary PWM functions
- * @brief Timer Complementary PWM functions
- * @{
- */
+ * @brief Timer Complementary PWM functions
+ * @{
+ */
/* Timer Complementary PWM functions ****************************************/
/* Blocking mode: Polling */
HAL_StatusTypeDef HAL_TIMEx_PWMN_Start(TIM_HandleTypeDef *htim, uint32_t Channel);
@@ -264,9 +264,9 @@ HAL_StatusTypeDef HAL_TIMEx_PWMN_Stop_DMA(TIM_HandleTypeDef *htim, uint32_t Chan
*/
/** @addtogroup TIMEx_Exported_Functions_Group4 Extended Timer Complementary One Pulse functions
- * @brief Timer Complementary One Pulse functions
- * @{
- */
+ * @brief Timer Complementary One Pulse functions
+ * @{
+ */
/* Timer Complementary One Pulse functions **********************************/
/* Blocking mode: Polling */
HAL_StatusTypeDef HAL_TIMEx_OnePulseN_Start(TIM_HandleTypeDef *htim, uint32_t OutputChannel);
@@ -280,17 +280,23 @@ HAL_StatusTypeDef HAL_TIMEx_OnePulseN_Stop_IT(TIM_HandleTypeDef *htim, uint32_t
*/
/** @addtogroup TIMEx_Exported_Functions_Group5 Extended Peripheral Control functions
- * @brief Peripheral Control functions
- * @{
- */
+ * @brief Peripheral Control functions
+ * @{
+ */
/* Extended Control functions ************************************************/
-HAL_StatusTypeDef HAL_TIMEx_ConfigCommutEvent(TIM_HandleTypeDef *htim, uint32_t InputTrigger, uint32_t CommutationSource);
-HAL_StatusTypeDef HAL_TIMEx_ConfigCommutEvent_IT(TIM_HandleTypeDef *htim, uint32_t InputTrigger, uint32_t CommutationSource);
-HAL_StatusTypeDef HAL_TIMEx_ConfigCommutEvent_DMA(TIM_HandleTypeDef *htim, uint32_t InputTrigger, uint32_t CommutationSource);
-HAL_StatusTypeDef HAL_TIMEx_MasterConfigSynchronization(TIM_HandleTypeDef *htim, TIM_MasterConfigTypeDef *sMasterConfig);
-HAL_StatusTypeDef HAL_TIMEx_ConfigBreakDeadTime(TIM_HandleTypeDef *htim, TIM_BreakDeadTimeConfigTypeDef *sBreakDeadTimeConfig);
+HAL_StatusTypeDef HAL_TIMEx_ConfigCommutEvent(TIM_HandleTypeDef *htim, uint32_t InputTrigger,
+ uint32_t CommutationSource);
+HAL_StatusTypeDef HAL_TIMEx_ConfigCommutEvent_IT(TIM_HandleTypeDef *htim, uint32_t InputTrigger,
+ uint32_t CommutationSource);
+HAL_StatusTypeDef HAL_TIMEx_ConfigCommutEvent_DMA(TIM_HandleTypeDef *htim, uint32_t InputTrigger,
+ uint32_t CommutationSource);
+HAL_StatusTypeDef HAL_TIMEx_MasterConfigSynchronization(TIM_HandleTypeDef *htim,
+ TIM_MasterConfigTypeDef *sMasterConfig);
+HAL_StatusTypeDef HAL_TIMEx_ConfigBreakDeadTime(TIM_HandleTypeDef *htim,
+ TIM_BreakDeadTimeConfigTypeDef *sBreakDeadTimeConfig);
#if defined(TIM_BREAK_INPUT_SUPPORT)
-HAL_StatusTypeDef HAL_TIMEx_ConfigBreakInput(TIM_HandleTypeDef *htim, uint32_t BreakInput, TIMEx_BreakInputConfigTypeDef *sBreakInputConfig);
+HAL_StatusTypeDef HAL_TIMEx_ConfigBreakInput(TIM_HandleTypeDef *htim, uint32_t BreakInput,
+ TIMEx_BreakInputConfigTypeDef *sBreakInputConfig);
#endif /* TIM_BREAK_INPUT_SUPPORT */
HAL_StatusTypeDef HAL_TIMEx_GroupChannel5(TIM_HandleTypeDef *htim, uint32_t Channels);
HAL_StatusTypeDef HAL_TIMEx_RemapConfig(TIM_HandleTypeDef *htim, uint32_t Remap);
@@ -327,7 +333,7 @@ HAL_TIM_StateTypeDef HAL_TIMEx_HallSensor_GetState(TIM_HandleTypeDef *htim);
/* End of exported functions -------------------------------------------------*/
/* Private functions----------------------------------------------------------*/
-/** @defgroup TIMEx_Private_Functions TIM Extended Private Functions
+/** @addtogroup TIMEx_Private_Functions TIMEx Private Functions
* @{
*/
void TIMEx_DMACommutationCplt(DMA_HandleTypeDef *hdma);
diff --git a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_Keil/Boot/lib/STM32F7xx_HAL_Driver/Inc/stm32f7xx_ll_usart.h b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_Keil/Boot/lib/STM32F7xx_HAL_Driver/Inc/stm32f7xx_ll_usart.h
index f151a3d3..9bbccb71 100644
--- a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_Keil/Boot/lib/STM32F7xx_HAL_Driver/Inc/stm32f7xx_ll_usart.h
+++ b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_Keil/Boot/lib/STM32F7xx_HAL_Driver/Inc/stm32f7xx_ll_usart.h
@@ -42,13 +42,6 @@ extern "C" {
/* Private variables ---------------------------------------------------------*/
/* Private constants ---------------------------------------------------------*/
-/** @defgroup USART_LL_Private_Constants USART Private Constants
- * @{
- */
-/**
- * @}
- */
-
/* Private macros ------------------------------------------------------------*/
#if defined(USE_FULL_LL_DRIVER)
/** @defgroup USART_LL_Private_Macros USART Private Macros
@@ -156,18 +149,21 @@ typedef struct
*/
#define LL_USART_ICR_PECF USART_ICR_PECF /*!< Parity error flag */
#define LL_USART_ICR_FECF USART_ICR_FECF /*!< Framing error flag */
-#define LL_USART_ICR_NCF USART_ICR_NCF /*!< Noise error detected flag */
+#define LL_USART_ICR_NCF USART_ICR_NCF /*!< Noise error detected flag */
#define LL_USART_ICR_ORECF USART_ICR_ORECF /*!< Overrun error flag */
#define LL_USART_ICR_IDLECF USART_ICR_IDLECF /*!< Idle line detected flag */
#define LL_USART_ICR_TCCF USART_ICR_TCCF /*!< Transmission complete flag */
#if defined(USART_TCBGT_SUPPORT)
#define LL_USART_ICR_TCBGTCF USART_ICR_TCBGTCF /*!< Transmission completed before guard time flag */
-#endif
+#endif /* USART_TCBGT_SUPPORT */
#define LL_USART_ICR_LBDCF USART_ICR_LBDCF /*!< LIN break detection flag */
#define LL_USART_ICR_CTSCF USART_ICR_CTSCF /*!< CTS flag */
#define LL_USART_ICR_RTOCF USART_ICR_RTOCF /*!< Receiver timeout flag */
#define LL_USART_ICR_EOBCF USART_ICR_EOBCF /*!< End of block flag */
#define LL_USART_ICR_CMCF USART_ICR_CMCF /*!< Character match flag */
+#if defined(USART_CR1_UESM)
+#define LL_USART_ICR_WUCF USART_ICR_WUCF /*!< Wakeup from Stop mode flag */
+#endif /* USART_CR1_UESM */
/**
* @}
*/
@@ -195,10 +191,16 @@ typedef struct
#define LL_USART_ISR_CMF USART_ISR_CMF /*!< Character match flag */
#define LL_USART_ISR_SBKF USART_ISR_SBKF /*!< Send break flag */
#define LL_USART_ISR_RWU USART_ISR_RWU /*!< Receiver wakeup from Mute mode flag */
+#if defined(USART_CR1_UESM)
+#define LL_USART_ISR_WUF USART_ISR_WUF /*!< Wakeup from Stop mode flag */
+#endif /* USART_CR1_UESM */
#define LL_USART_ISR_TEACK USART_ISR_TEACK /*!< Transmit enable acknowledge flag */
+#if defined(USART_ISR_REACK)
+#define LL_USART_ISR_REACK USART_ISR_REACK /*!< Receive enable acknowledge flag */
+#endif /* USART_ISR_REACK */
#if defined(USART_TCBGT_SUPPORT)
#define LL_USART_ISR_TCBGT USART_ISR_TCBGT /*!< Transmission complete before guard time completion flag */
-#endif
+#endif /* USART_TCBGT_SUPPORT */
/**
* @}
*/
@@ -218,9 +220,12 @@ typedef struct
#define LL_USART_CR2_LBDIE USART_CR2_LBDIE /*!< LIN break detection interrupt enable */
#define LL_USART_CR3_EIE USART_CR3_EIE /*!< Error interrupt enable */
#define LL_USART_CR3_CTSIE USART_CR3_CTSIE /*!< CTS interrupt enable */
+#if defined(USART_CR1_UESM)
+#define LL_USART_CR3_WUFIE USART_CR3_WUFIE /*!< Wakeup from Stop mode interrupt enable */
+#endif /* USART_CR1_UESM */
#if defined(USART_TCBGT_SUPPORT)
#define LL_USART_CR3_TCBGTIE USART_CR3_TCBGTIE /*!< Transmission complete before guard time interrupt enable */
-#endif
+#endif /* USART_TCBGT_SUPPORT */
/**
* @}
*/
@@ -400,6 +405,18 @@ typedef struct
* @}
*/
+#if defined(USART_CR1_UESM)
+/** @defgroup USART_LL_EC_WAKEUP_ON Wakeup Activation
+ * @{
+ */
+#define LL_USART_WAKEUP_ON_ADDRESS 0x00000000U /*!< Wake up active on address match */
+#define LL_USART_WAKEUP_ON_STARTBIT USART_CR3_WUS_1 /*!< Wake up active on Start bit detection */
+#define LL_USART_WAKEUP_ON_RXNE (USART_CR3_WUS_0 | USART_CR3_WUS_1) /*!< Wake up active on RXNE */
+/**
+ * @}
+ */
+
+#endif /* USART_CR1_UESM */
/** @defgroup USART_LL_EC_IRDA_POWER IrDA Power
* @{
*/
@@ -480,7 +497,8 @@ typedef struct
* @param __BAUDRATE__ Baud rate value to achieve
* @retval USARTDIV value to be used for BRR register filling in OverSampling_8 case
*/
-#define __LL_USART_DIV_SAMPLING8(__PERIPHCLK__, __BAUDRATE__) ((((__PERIPHCLK__)*2U) + ((__BAUDRATE__)/2U))/(__BAUDRATE__))
+#define __LL_USART_DIV_SAMPLING8(__PERIPHCLK__, __BAUDRATE__) ((((__PERIPHCLK__)*2U)\
+ + ((__BAUDRATE__)/2U))/(__BAUDRATE__))
/**
* @brief Compute USARTDIV value according to Peripheral Clock and
@@ -545,6 +563,87 @@ __STATIC_INLINE uint32_t LL_USART_IsEnabled(USART_TypeDef *USARTx)
return ((READ_BIT(USARTx->CR1, USART_CR1_UE) == (USART_CR1_UE)) ? 1UL : 0UL);
}
+#if defined(USART_CR1_UESM)
+/**
+ * @brief USART enabled in STOP Mode.
+ * @note When this function is enabled, USART is able to wake up the MCU from Stop mode, provided that
+ * USART clock selection is HSI or LSE in RCC.
+ * @note Macro @ref IS_UART_WAKEUP_FROMSTOP_INSTANCE(USARTx) can be used to check whether or not
+ * Wake-up from Stop mode feature is supported by the USARTx instance.
+ * @rmtoll CR1 UESM LL_USART_EnableInStopMode
+ * @param USARTx USART Instance
+ * @retval None
+ */
+__STATIC_INLINE void LL_USART_EnableInStopMode(USART_TypeDef *USARTx)
+{
+ SET_BIT(USARTx->CR1, USART_CR1_UESM);
+}
+
+/**
+ * @brief USART disabled in STOP Mode.
+ * @note When this function is disabled, USART is not able to wake up the MCU from Stop mode
+ * @note Macro @ref IS_UART_WAKEUP_FROMSTOP_INSTANCE(USARTx) can be used to check whether or not
+ * Wake-up from Stop mode feature is supported by the USARTx instance.
+ * @rmtoll CR1 UESM LL_USART_DisableInStopMode
+ * @param USARTx USART Instance
+ * @retval None
+ */
+__STATIC_INLINE void LL_USART_DisableInStopMode(USART_TypeDef *USARTx)
+{
+ CLEAR_BIT(USARTx->CR1, USART_CR1_UESM);
+}
+
+/**
+ * @brief Indicate if USART is enabled in STOP Mode (able to wake up MCU from Stop mode or not)
+ * @note Macro @ref IS_UART_WAKEUP_FROMSTOP_INSTANCE(USARTx) can be used to check whether or not
+ * Wake-up from Stop mode feature is supported by the USARTx instance.
+ * @rmtoll CR1 UESM LL_USART_IsEnabledInStopMode
+ * @param USARTx USART Instance
+ * @retval State of bit (1 or 0).
+ */
+__STATIC_INLINE uint32_t LL_USART_IsEnabledInStopMode(USART_TypeDef *USARTx)
+{
+ return ((READ_BIT(USARTx->CR1, USART_CR1_UESM) == (USART_CR1_UESM)) ? 1UL : 0UL);
+}
+
+#if defined(USART_CR3_UCESM)
+/**
+ * @brief USART Clock enabled in STOP Mode
+ * @note When this function is called, USART Clock is enabled while in STOP mode
+ * @rmtoll CR3 UCESM LL_USART_EnableClockInStopMode
+ * @param USARTx USART Instance
+ * @retval None
+ */
+__STATIC_INLINE void LL_USART_EnableClockInStopMode(USART_TypeDef *USARTx)
+{
+ SET_BIT(USARTx->CR3, USART_CR3_UCESM);
+}
+
+/**
+ * @brief USART clock disabled in STOP Mode
+ * @note When this function is called, USART Clock is disabled while in STOP mode
+ * @rmtoll CR3 UCESM LL_USART_DisableClockInStopMode
+ * @param USARTx USART Instance
+ * @retval None
+ */
+__STATIC_INLINE void LL_USART_DisableClockInStopMode(USART_TypeDef *USARTx)
+{
+ CLEAR_BIT(USARTx->CR3, USART_CR3_UCESM);
+}
+
+/**
+ * @brief Indicate if USART clock is enabled in STOP Mode
+ * @rmtoll CR3 UCESM LL_USART_IsClockEnabledInStopMode
+ * @param USARTx USART Instance
+ * @retval State of bit (1 or 0).
+ */
+__STATIC_INLINE uint32_t LL_USART_IsClockEnabledInStopMode(USART_TypeDef *USARTx)
+{
+ return (READ_BIT(USARTx->CR3, USART_CR3_UCESM) == (USART_CR3_UCESM));
+}
+
+#endif /* USART_CR3_UCESM */
+#endif /* USART_CR1_UESM*/
/**
* @brief Receiver Enable (Receiver is enabled and begins searching for a start bit)
* @rmtoll CR1 RE LL_USART_EnableDirectionRx
@@ -1461,6 +1560,41 @@ __STATIC_INLINE uint32_t LL_USART_IsEnabledOverrunDetect(USART_TypeDef *USARTx)
return ((READ_BIT(USARTx->CR3, USART_CR3_OVRDIS) != USART_CR3_OVRDIS) ? 1UL : 0UL);
}
+#if defined(USART_CR1_UESM)
+/**
+ * @brief Select event type for Wake UP Interrupt Flag (WUS[1:0] bits)
+ * @note Macro @ref IS_UART_WAKEUP_FROMSTOP_INSTANCE(USARTx) can be used to check whether or not
+ * Wake-up from Stop mode feature is supported by the USARTx instance.
+ * @rmtoll CR3 WUS LL_USART_SetWKUPType
+ * @param USARTx USART Instance
+ * @param Type This parameter can be one of the following values:
+ * @arg @ref LL_USART_WAKEUP_ON_ADDRESS
+ * @arg @ref LL_USART_WAKEUP_ON_STARTBIT
+ * @arg @ref LL_USART_WAKEUP_ON_RXNE
+ * @retval None
+ */
+__STATIC_INLINE void LL_USART_SetWKUPType(USART_TypeDef *USARTx, uint32_t Type)
+{
+ MODIFY_REG(USARTx->CR3, USART_CR3_WUS, Type);
+}
+
+/**
+ * @brief Return event type for Wake UP Interrupt Flag (WUS[1:0] bits)
+ * @note Macro @ref IS_UART_WAKEUP_FROMSTOP_INSTANCE(USARTx) can be used to check whether or not
+ * Wake-up from Stop mode feature is supported by the USARTx instance.
+ * @rmtoll CR3 WUS LL_USART_GetWKUPType
+ * @param USARTx USART Instance
+ * @retval Returned value can be one of the following values:
+ * @arg @ref LL_USART_WAKEUP_ON_ADDRESS
+ * @arg @ref LL_USART_WAKEUP_ON_STARTBIT
+ * @arg @ref LL_USART_WAKEUP_ON_RXNE
+ */
+__STATIC_INLINE uint32_t LL_USART_GetWKUPType(USART_TypeDef *USARTx)
+{
+ return (uint32_t)(READ_BIT(USARTx->CR3, USART_CR3_WUS));
+}
+
+#endif /* USART_CR1_UESM */
/**
* @brief Configure USART BRR register for achieving expected Baud Rate value.
* @note Compute and set USARTDIV value in BRR Register (full BRR content)
@@ -1480,7 +1614,7 @@ __STATIC_INLINE uint32_t LL_USART_IsEnabledOverrunDetect(USART_TypeDef *USARTx)
__STATIC_INLINE void LL_USART_SetBaudRate(USART_TypeDef *USARTx, uint32_t PeriphClk, uint32_t OverSampling,
uint32_t BaudRate)
{
- register uint32_t usartdiv;
+ uint32_t usartdiv;
register uint32_t brrtemp;
if (OverSampling == LL_USART_OVERSAMPLING_8)
@@ -2161,7 +2295,8 @@ __STATIC_INLINE void LL_USART_ConfigAsyncMode(USART_TypeDef *USARTx)
{
/* In Asynchronous mode, the following bits must be kept cleared:
- LINEN, CLKEN bits in the USART_CR2 register,
- - SCEN, IREN and HDSEL bits in the USART_CR3 register.*/
+ - SCEN, IREN and HDSEL bits in the USART_CR3 register.
+ */
CLEAR_BIT(USARTx->CR2, (USART_CR2_LINEN | USART_CR2_CLKEN));
CLEAR_BIT(USARTx->CR3, (USART_CR3_SCEN | USART_CR3_IREN | USART_CR3_HDSEL));
}
@@ -2197,7 +2332,8 @@ __STATIC_INLINE void LL_USART_ConfigSyncMode(USART_TypeDef *USARTx)
{
/* In Synchronous mode, the following bits must be kept cleared:
- LINEN bit in the USART_CR2 register,
- - SCEN, IREN and HDSEL bits in the USART_CR3 register.*/
+ - SCEN, IREN and HDSEL bits in the USART_CR3 register.
+ */
CLEAR_BIT(USARTx->CR2, (USART_CR2_LINEN));
CLEAR_BIT(USARTx->CR3, (USART_CR3_SCEN | USART_CR3_IREN | USART_CR3_HDSEL));
/* set the UART/USART in Synchronous mode */
@@ -2237,7 +2373,8 @@ __STATIC_INLINE void LL_USART_ConfigLINMode(USART_TypeDef *USARTx)
{
/* In LIN mode, the following bits must be kept cleared:
- STOP and CLKEN bits in the USART_CR2 register,
- - IREN, SCEN and HDSEL bits in the USART_CR3 register.*/
+ - IREN, SCEN and HDSEL bits in the USART_CR3 register.
+ */
CLEAR_BIT(USARTx->CR2, (USART_CR2_CLKEN | USART_CR2_STOP));
CLEAR_BIT(USARTx->CR3, (USART_CR3_IREN | USART_CR3_SCEN | USART_CR3_HDSEL));
/* Set the UART/USART in LIN mode */
@@ -2275,7 +2412,8 @@ __STATIC_INLINE void LL_USART_ConfigHalfDuplexMode(USART_TypeDef *USARTx)
{
/* In Half Duplex mode, the following bits must be kept cleared:
- LINEN and CLKEN bits in the USART_CR2 register,
- - SCEN and IREN bits in the USART_CR3 register.*/
+ - SCEN and IREN bits in the USART_CR3 register.
+ */
CLEAR_BIT(USARTx->CR2, (USART_CR2_LINEN | USART_CR2_CLKEN));
CLEAR_BIT(USARTx->CR3, (USART_CR3_SCEN | USART_CR3_IREN));
/* set the UART/USART in Half Duplex mode */
@@ -2315,7 +2453,8 @@ __STATIC_INLINE void LL_USART_ConfigSmartcardMode(USART_TypeDef *USARTx)
{
/* In Smartcard mode, the following bits must be kept cleared:
- LINEN bit in the USART_CR2 register,
- - IREN and HDSEL bits in the USART_CR3 register.*/
+ - IREN and HDSEL bits in the USART_CR3 register.
+ */
CLEAR_BIT(USARTx->CR2, (USART_CR2_LINEN));
CLEAR_BIT(USARTx->CR3, (USART_CR3_IREN | USART_CR3_HDSEL));
/* Configure Stop bits to 1.5 bits */
@@ -2358,7 +2497,8 @@ __STATIC_INLINE void LL_USART_ConfigIrdaMode(USART_TypeDef *USARTx)
{
/* In IRDA mode, the following bits must be kept cleared:
- LINEN, STOP and CLKEN bits in the USART_CR2 register,
- - SCEN and HDSEL bits in the USART_CR3 register.*/
+ - SCEN and HDSEL bits in the USART_CR3 register.
+ */
CLEAR_BIT(USARTx->CR2, (USART_CR2_LINEN | USART_CR2_CLKEN | USART_CR2_STOP));
CLEAR_BIT(USARTx->CR3, (USART_CR3_SCEN | USART_CR3_HDSEL));
/* set the UART/USART in IRDA mode */
@@ -2396,7 +2536,8 @@ __STATIC_INLINE void LL_USART_ConfigMultiProcessMode(USART_TypeDef *USARTx)
{
/* In Multi Processor mode, the following bits must be kept cleared:
- LINEN and CLKEN bits in the USART_CR2 register,
- - IREN, SCEN and HDSEL bits in the USART_CR3 register.*/
+ - IREN, SCEN and HDSEL bits in the USART_CR3 register.
+ */
CLEAR_BIT(USARTx->CR2, (USART_CR2_LINEN | USART_CR2_CLKEN));
CLEAR_BIT(USARTx->CR3, (USART_CR3_SCEN | USART_CR3_HDSEL | USART_CR3_IREN));
}
@@ -2630,6 +2771,21 @@ __STATIC_INLINE uint32_t LL_USART_IsActiveFlag_RWU(USART_TypeDef *USARTx)
return ((READ_BIT(USARTx->ISR, USART_ISR_RWU) == (USART_ISR_RWU)) ? 1UL : 0UL);
}
+#if defined(USART_CR1_UESM)
+/**
+ * @brief Check if the USART Wake Up from stop mode Flag is set or not
+ * @note Macro @ref IS_UART_WAKEUP_FROMSTOP_INSTANCE(USARTx) can be used to check whether or not
+ * Wake-up from Stop mode feature is supported by the USARTx instance.
+ * @rmtoll ISR WUF LL_USART_IsActiveFlag_WKUP
+ * @param USARTx USART Instance
+ * @retval State of bit (1 or 0).
+ */
+__STATIC_INLINE uint32_t LL_USART_IsActiveFlag_WKUP(USART_TypeDef *USARTx)
+{
+ return ((READ_BIT(USARTx->ISR, USART_ISR_WUF) == (USART_ISR_WUF)) ? 1UL : 0UL);
+}
+
+#endif /* USART_CR1_UESM */
/**
* @brief Check if the USART Transmit Enable Acknowledge Flag is set or not
* @rmtoll ISR TEACK LL_USART_IsActiveFlag_TEACK
@@ -2641,6 +2797,19 @@ __STATIC_INLINE uint32_t LL_USART_IsActiveFlag_TEACK(USART_TypeDef *USARTx)
return ((READ_BIT(USARTx->ISR, USART_ISR_TEACK) == (USART_ISR_TEACK)) ? 1UL : 0UL);
}
+#if defined(USART_ISR_REACK)
+/**
+ * @brief Check if the USART Receive Enable Acknowledge Flag is set or not
+ * @rmtoll ISR REACK LL_USART_IsActiveFlag_REACK
+ * @param USARTx USART Instance
+ * @retval State of bit (1 or 0).
+ */
+__STATIC_INLINE uint32_t LL_USART_IsActiveFlag_REACK(USART_TypeDef *USARTx)
+{
+ return ((READ_BIT(USARTx->ISR, USART_ISR_REACK) == (USART_ISR_REACK)) ? 1UL : 0UL);
+}
+
+#endif/* USART_ISR_REACK */
#if defined(USART_TCBGT_SUPPORT)
/* Function available only on devices supporting Transmit Complete before Guard Time feature */
/**
@@ -2653,8 +2822,8 @@ __STATIC_INLINE uint32_t LL_USART_IsActiveFlag_TCBGT(USART_TypeDef *USARTx)
{
return ((READ_BIT(USARTx->ISR, USART_ISR_TCBGT) == (USART_ISR_TCBGT)) ? 1UL : 0UL);
}
-#endif
+#endif /* USART_TCBGT_SUPPORT */
/**
* @brief Clear Parity Error Flag
* @rmtoll ICR PECF LL_USART_ClearFlag_PE
@@ -2733,7 +2902,7 @@ __STATIC_INLINE void LL_USART_ClearFlag_TCBGT(USART_TypeDef *USARTx)
{
WRITE_REG(USARTx->ICR, USART_ICR_TCBGTCF);
}
-#endif
+#endif /* USART_TCBGT_SUPPORT */
/**
* @brief Clear LIN Break Detection Flag
@@ -2796,6 +2965,21 @@ __STATIC_INLINE void LL_USART_ClearFlag_CM(USART_TypeDef *USARTx)
WRITE_REG(USARTx->ICR, USART_ICR_CMCF);
}
+#if defined(USART_CR1_UESM)
+/**
+ * @brief Clear Wake Up from stop mode Flag
+ * @note Macro @ref IS_UART_WAKEUP_FROMSTOP_INSTANCE(USARTx) can be used to check whether or not
+ * Wake-up from Stop mode feature is supported by the USARTx instance.
+ * @rmtoll ICR WUCF LL_USART_ClearFlag_WKUP
+ * @param USARTx USART Instance
+ * @retval None
+ */
+__STATIC_INLINE void LL_USART_ClearFlag_WKUP(USART_TypeDef *USARTx)
+{
+ WRITE_REG(USARTx->ICR, USART_ICR_WUCF);
+}
+
+#endif /* USART_CR1_UESM */
/**
* @}
*/
@@ -2935,6 +3119,21 @@ __STATIC_INLINE void LL_USART_EnableIT_CTS(USART_TypeDef *USARTx)
SET_BIT(USARTx->CR3, USART_CR3_CTSIE);
}
+#if defined(USART_CR1_UESM)
+/**
+ * @brief Enable Wake Up from Stop Mode Interrupt
+ * @note Macro @ref IS_UART_WAKEUP_FROMSTOP_INSTANCE(USARTx) can be used to check whether or not
+ * Wake-up from Stop mode feature is supported by the USARTx instance.
+ * @rmtoll CR3 WUFIE LL_USART_EnableIT_WKUP
+ * @param USARTx USART Instance
+ * @retval None
+ */
+__STATIC_INLINE void LL_USART_EnableIT_WKUP(USART_TypeDef *USARTx)
+{
+ SET_BIT(USARTx->CR3, USART_CR3_WUFIE);
+}
+
+#endif /* USART_CR1_UESM */
#if defined(USART_TCBGT_SUPPORT)
/* Function available only on devices supporting Transmit Complete before Guard Time feature */
/**
@@ -2949,7 +3148,7 @@ __STATIC_INLINE void LL_USART_EnableIT_TCBGT(USART_TypeDef *USARTx)
{
SET_BIT(USARTx->CR3, USART_CR3_TCBGTIE);
}
-#endif
+#endif /* USART_TCBGT_SUPPORT */
/**
* @brief Disable IDLE Interrupt
@@ -3082,6 +3281,21 @@ __STATIC_INLINE void LL_USART_DisableIT_CTS(USART_TypeDef *USARTx)
CLEAR_BIT(USARTx->CR3, USART_CR3_CTSIE);
}
+#if defined(USART_CR1_UESM)
+/**
+ * @brief Disable Wake Up from Stop Mode Interrupt
+ * @note Macro @ref IS_UART_WAKEUP_FROMSTOP_INSTANCE(USARTx) can be used to check whether or not
+ * Wake-up from Stop mode feature is supported by the USARTx instance.
+ * @rmtoll CR3 WUFIE LL_USART_DisableIT_WKUP
+ * @param USARTx USART Instance
+ * @retval None
+ */
+__STATIC_INLINE void LL_USART_DisableIT_WKUP(USART_TypeDef *USARTx)
+{
+ CLEAR_BIT(USARTx->CR3, USART_CR3_WUFIE);
+}
+
+#endif /* USART_CR1_UESM */
#if defined(USART_TCBGT_SUPPORT)
/* Function available only on devices supporting Transmit Complete before Guard Time feature */
/**
@@ -3096,7 +3310,7 @@ __STATIC_INLINE void LL_USART_DisableIT_TCBGT(USART_TypeDef *USARTx)
{
CLEAR_BIT(USARTx->CR3, USART_CR3_TCBGTIE);
}
-#endif
+#endif /* USART_TCBGT_SUPPORT */
/**
* @brief Check if the USART IDLE Interrupt source is enabled or disabled.
@@ -3225,6 +3439,21 @@ __STATIC_INLINE uint32_t LL_USART_IsEnabledIT_CTS(USART_TypeDef *USARTx)
return ((READ_BIT(USARTx->CR3, USART_CR3_CTSIE) == (USART_CR3_CTSIE)) ? 1UL : 0UL);
}
+#if defined(USART_CR1_UESM)
+/**
+ * @brief Check if the USART Wake Up from Stop Mode Interrupt is enabled or disabled.
+ * @note Macro @ref IS_UART_WAKEUP_FROMSTOP_INSTANCE(USARTx) can be used to check whether or not
+ * Wake-up from Stop mode feature is supported by the USARTx instance.
+ * @rmtoll CR3 WUFIE LL_USART_IsEnabledIT_WKUP
+ * @param USARTx USART Instance
+ * @retval State of bit (1 or 0).
+ */
+__STATIC_INLINE uint32_t LL_USART_IsEnabledIT_WKUP(USART_TypeDef *USARTx)
+{
+ return ((READ_BIT(USARTx->CR3, USART_CR3_WUFIE) == (USART_CR3_WUFIE)) ? 1UL : 0UL);
+}
+
+#endif /* USART_CR1_UESM */
#if defined(USART_TCBGT_SUPPORT)
/* Function available only on devices supporting Transmit Complete before Guard Time feature */
/**
@@ -3239,7 +3468,7 @@ __STATIC_INLINE uint32_t LL_USART_IsEnabledIT_TCBGT(USART_TypeDef *USARTx)
{
return ((READ_BIT(USARTx->CR3, USART_CR3_TCBGTIE) == (USART_CR3_TCBGTIE)) ? 1UL : 0UL);
}
-#endif
+#endif /* USART_TCBGT_SUPPORT */
/**
* @}
@@ -3365,12 +3594,12 @@ __STATIC_INLINE uint32_t LL_USART_DMA_GetRegAddr(USART_TypeDef *USARTx, uint32_t
if (Direction == LL_USART_DMA_REG_DATA_TRANSMIT)
{
/* return address of TDR register */
- data_reg_addr = (uint32_t) & (USARTx->TDR);
+ data_reg_addr = (uint32_t) &(USARTx->TDR);
}
else
{
/* return address of RDR register */
- data_reg_addr = (uint32_t) & (USARTx->RDR);
+ data_reg_addr = (uint32_t) &(USARTx->RDR);
}
return data_reg_addr;
@@ -3392,7 +3621,7 @@ __STATIC_INLINE uint32_t LL_USART_DMA_GetRegAddr(USART_TypeDef *USARTx, uint32_t
*/
__STATIC_INLINE uint8_t LL_USART_ReceiveData8(USART_TypeDef *USARTx)
{
- return (uint8_t)(READ_BIT(USARTx->RDR, USART_RDR_RDR));
+ return (uint8_t)(READ_BIT(USARTx->RDR, USART_RDR_RDR) & 0xFFU);
}
/**
diff --git a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_Keil/Boot/lib/STM32F7xx_HAL_Driver/Inc/stm32f7xx_ll_usb.h b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_Keil/Boot/lib/STM32F7xx_HAL_Driver/Inc/stm32f7xx_ll_usb.h
index 1f768abf..44bf4853 100644
--- a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_Keil/Boot/lib/STM32F7xx_HAL_Driver/Inc/stm32f7xx_ll_usb.h
+++ b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_Keil/Boot/lib/STM32F7xx_HAL_Driver/Inc/stm32f7xx_ll_usb.h
@@ -155,7 +155,7 @@ typedef struct
typedef struct
{
- uint8_t dev_addr ; /*!< USB device address.
+ uint8_t dev_addr; /*!< USB device address.
This parameter must be a number between Min_Data = 1 and Max_Data = 255 */
uint8_t ch_num; /*!< Host channel number.
@@ -199,10 +199,10 @@ typedef struct
uint32_t ErrCnt; /*!< Host channel error count.*/
- USB_OTG_URBStateTypeDef urb_state; /*!< URB state.
+ USB_OTG_URBStateTypeDef urb_state; /*!< URB state.
This parameter can be any value of @ref USB_OTG_URBStateTypeDef */
- USB_OTG_HCStateTypeDef state; /*!< Host Channel state.
+ USB_OTG_HCStateTypeDef state; /*!< Host Channel state.
This parameter can be any value of @ref USB_OTG_HCStateTypeDef */
} USB_OTG_HCTypeDef;
#endif /* defined (USB_OTG_FS) || defined (USB_OTG_HS) */
@@ -234,6 +234,18 @@ typedef struct
* @}
*/
+/** @defgroup USB_LL Device Speed
+ * @{
+ */
+#define USBD_HS_SPEED 0U
+#define USBD_HSINFS_SPEED 1U
+#define USBH_HS_SPEED 0U
+#define USBD_FS_SPEED 2U
+#define USBH_FSLS_SPEED 1U
+/**
+ * @}
+ */
+
/** @defgroup USB_LL_Core_Speed USB Low Layer Core Speed
* @{
*/
@@ -252,7 +264,7 @@ typedef struct
#define USB_OTG_HS_EMBEDDED_PHY 3U
#if !defined (USB_HS_PHYC_TUNE_VALUE)
-#define USB_HS_PHYC_TUNE_VALUE 0x00000F13U /*!< Value of USB HS PHY Tune */
+#define USB_HS_PHYC_TUNE_VALUE 0x00000F13U /*!< Value of USB HS PHY Tune */
#endif /* USB_HS_PHYC_TUNE_VALUE */
/**
* @}
@@ -262,11 +274,11 @@ typedef struct
* @{
*/
#ifndef USBD_HS_TRDT_VALUE
-#define USBD_HS_TRDT_VALUE 9U
+#define USBD_HS_TRDT_VALUE 9U
#endif /* USBD_HS_TRDT_VALUE */
#ifndef USBD_FS_TRDT_VALUE
-#define USBD_FS_TRDT_VALUE 5U
-#define USBD_DEFAULT_TRDT_VALUE 9U
+#define USBD_FS_TRDT_VALUE 5U
+#define USBD_DEFAULT_TRDT_VALUE 9U
#endif /* USBD_HS_TRDT_VALUE */
/**
* @}
@@ -275,9 +287,9 @@ typedef struct
/** @defgroup USB_LL_Core_MPS USB Low Layer Core MPS
* @{
*/
-#define USB_OTG_HS_MAX_PACKET_SIZE 512U
-#define USB_OTG_FS_MAX_PACKET_SIZE 64U
-#define USB_OTG_MAX_EP0_SIZE 64U
+#define USB_OTG_HS_MAX_PACKET_SIZE 512U
+#define USB_OTG_FS_MAX_PACKET_SIZE 64U
+#define USB_OTG_MAX_EP0_SIZE 64U
/**
* @}
*/
@@ -287,7 +299,6 @@ typedef struct
*/
#define DSTS_ENUMSPD_HS_PHY_30MHZ_OR_60MHZ (0U << 1)
#define DSTS_ENUMSPD_FS_PHY_30MHZ_OR_60MHZ (1U << 1)
-#define DSTS_ENUMSPD_LS_PHY_6MHZ (2U << 1)
#define DSTS_ENUMSPD_FS_PHY_48MHZ (3U << 1)
/**
* @}
@@ -397,7 +408,7 @@ typedef struct
#define USBPHYC ((USBPHYC_GlobalTypeDef *)((uint32_t )USB_PHY_HS_CONTROLLER_BASE))
#endif /* defined (USB_OTG_FS) || defined (USB_OTG_HS) */
-#define EP_ADDR_MSK 0xFU
+#define EP_ADDR_MSK 0xFU
/**
* @}
*/
@@ -462,13 +473,9 @@ HAL_StatusTypeDef USB_ResetPort(USB_OTG_GlobalTypeDef *USBx);
HAL_StatusTypeDef USB_DriveVbus(USB_OTG_GlobalTypeDef *USBx, uint8_t state);
uint32_t USB_GetHostSpeed(USB_OTG_GlobalTypeDef *USBx);
uint32_t USB_GetCurrentFrame(USB_OTG_GlobalTypeDef *USBx);
-HAL_StatusTypeDef USB_HC_Init(USB_OTG_GlobalTypeDef *USBx,
- uint8_t ch_num,
- uint8_t epnum,
- uint8_t dev_address,
- uint8_t speed,
- uint8_t ep_type,
- uint16_t mps);
+HAL_StatusTypeDef USB_HC_Init(USB_OTG_GlobalTypeDef *USBx, uint8_t ch_num,
+ uint8_t epnum, uint8_t dev_address, uint8_t speed,
+ uint8_t ep_type, uint16_t mps);
HAL_StatusTypeDef USB_HC_StartXfer(USB_OTG_GlobalTypeDef *USBx, USB_OTG_HCTypeDef *hc, uint8_t dma);
uint32_t USB_HC_ReadInterrupt(USB_OTG_GlobalTypeDef *USBx);
HAL_StatusTypeDef USB_HC_Halt(USB_OTG_GlobalTypeDef *USBx, uint8_t hc_num);
diff --git a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_Keil/Boot/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal.c b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_Keil/Boot/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal.c
index 81a39d76..48bbd535 100644
--- a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_Keil/Boot/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal.c
+++ b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_Keil/Boot/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal.c
@@ -50,11 +50,11 @@
* @{
*/
/**
- * @brief STM32F7xx HAL Driver version number V1.2.7
+ * @brief STM32F7xx HAL Driver version number V1.2.8
*/
#define __STM32F7xx_HAL_VERSION_MAIN (0x01) /*!< [31:24] main version */
#define __STM32F7xx_HAL_VERSION_SUB1 (0x02) /*!< [23:16] sub1 version */
-#define __STM32F7xx_HAL_VERSION_SUB2 (0x07) /*!< [15:8] sub2 version */
+#define __STM32F7xx_HAL_VERSION_SUB2 (0x08) /*!< [15:8] sub2 version */
#define __STM32F7xx_HAL_VERSION_RC (0x00) /*!< [7:0] release candidate */
#define __STM32F7xx_HAL_VERSION ((__STM32F7xx_HAL_VERSION_MAIN << 24)\
|(__STM32F7xx_HAL_VERSION_SUB1 << 16)\
@@ -319,14 +319,26 @@ uint32_t HAL_GetTickPrio(void)
HAL_StatusTypeDef HAL_SetTickFreq(HAL_TickFreqTypeDef Freq)
{
HAL_StatusTypeDef status = HAL_OK;
+ HAL_TickFreqTypeDef prevTickFreq;
+
assert_param(IS_TICKFREQ(Freq));
if (uwTickFreq != Freq)
{
+ /* Back up uwTickFreq frequency */
+ prevTickFreq = uwTickFreq;
+
+ /* Update uwTickFreq global variable used by HAL_InitTick() */
uwTickFreq = Freq;
/* Apply the new tick Freq */
status = HAL_InitTick(uwTickPrio);
+
+ if (status != HAL_OK)
+ {
+ /* Restore previous tick frequency */
+ uwTickFreq = prevTickFreq;
+ }
}
return status;
diff --git a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_Keil/Boot/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_can.c b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_Keil/Boot/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_can.c
index 6978c4da..a381dfc4 100644
--- a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_Keil/Boot/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_can.c
+++ b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_Keil/Boot/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_can.c
@@ -1556,7 +1556,7 @@ HAL_StatusTypeDef HAL_CAN_GetRxMessage(CAN_HandleTypeDef *hcan, uint32_t RxFifo,
{
pHeader->ExtId = ((CAN_RI0R_EXID | CAN_RI0R_STID) & hcan->Instance->sFIFOMailBox[RxFifo].RIR) >> CAN_RI0R_EXID_Pos;
}
- pHeader->RTR = (CAN_RI0R_RTR & hcan->Instance->sFIFOMailBox[RxFifo].RIR) >> CAN_RI0R_RTR_Pos;
+ pHeader->RTR = (CAN_RI0R_RTR & hcan->Instance->sFIFOMailBox[RxFifo].RIR);
pHeader->DLC = (CAN_RDT0R_DLC & hcan->Instance->sFIFOMailBox[RxFifo].RDTR) >> CAN_RDT0R_DLC_Pos;
pHeader->FilterMatchIndex = (CAN_RDT0R_FMI & hcan->Instance->sFIFOMailBox[RxFifo].RDTR) >> CAN_RDT0R_FMI_Pos;
pHeader->Timestamp = (CAN_RDT0R_TIME & hcan->Instance->sFIFOMailBox[RxFifo].RDTR) >> CAN_RDT0R_TIME_Pos;
diff --git a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_Keil/Boot/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_exti.c b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_Keil/Boot/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_exti.c
index 07e53536..246f4562 100644
--- a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_Keil/Boot/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_exti.c
+++ b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_Keil/Boot/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_exti.c
@@ -85,7 +85,6 @@
/* Includes ------------------------------------------------------------------*/
#include "stm32f7xx_hal.h"
-#include "stm32f7xx_hal_exti.h"
/** @addtogroup STM32F7xx_HAL_Driver
* @{
@@ -105,7 +104,7 @@
#ifdef HAL_EXTI_MODULE_ENABLED
/* Private typedef -----------------------------------------------------------*/
-/* Private defines ------------------------------------------------------------*/
+/* Private defines -----------------------------------------------------------*/
/** @defgroup EXTI_Private_Constants EXTI Private Constants
* @{
*/
@@ -144,6 +143,8 @@
HAL_StatusTypeDef HAL_EXTI_SetConfigLine(EXTI_HandleTypeDef *hexti, EXTI_ConfigTypeDef *pExtiConfig)
{
uint32_t regval;
+ uint32_t linepos;
+ uint32_t maskline;
/* Check null pointer */
if ((hexti == NULL) || (pExtiConfig == NULL))
@@ -154,37 +155,77 @@ HAL_StatusTypeDef HAL_EXTI_SetConfigLine(EXTI_HandleTypeDef *hexti, EXTI_ConfigT
/* Check parameters */
assert_param(IS_EXTI_LINE(pExtiConfig->Line));
assert_param(IS_EXTI_MODE(pExtiConfig->Mode));
- assert_param(IS_EXTI_TRIGGER(pExtiConfig->Trigger));
-
+
/* Assign line number to handle */
hexti->Line = pExtiConfig->Line;
-
- /* Clear EXTI line configuration */
- EXTI->IMR &= ~pExtiConfig->Line;
- EXTI->EMR &= ~pExtiConfig->Line;
-
- /* Select the Mode for the selected external interrupts */
- regval = (uint32_t)EXTI_BASE;
- regval += pExtiConfig->Mode;
- *(__IO uint32_t *) regval |= pExtiConfig->Line;
-
- /* Clear Rising Falling edge configuration */
- EXTI->RTSR &= ~pExtiConfig->Line;
- EXTI->FTSR &= ~pExtiConfig->Line;
-
- /* Select the trigger for the selected external interrupts */
- if (pExtiConfig->Trigger == EXTI_TRIGGER_RISING_FALLING)
+
+ /* Compute line mask */
+ linepos = (pExtiConfig->Line & EXTI_PIN_MASK);
+ maskline = (1uL << linepos);
+
+ /* Configure triggers for configurable lines */
+ if ((pExtiConfig->Line & EXTI_CONFIG) != 0x00u)
{
- /* Rising Falling edge */
- EXTI->RTSR |= pExtiConfig->Line;
- EXTI->FTSR |= pExtiConfig->Line;
+ assert_param(IS_EXTI_TRIGGER(pExtiConfig->Trigger));
+
+ /* Configure rising trigger */
+ /* Mask or set line */
+ if ((pExtiConfig->Trigger & EXTI_TRIGGER_RISING) != 0x00u)
+ {
+ EXTI->RTSR |= maskline;
+ }
+ else
+ {
+ EXTI->RTSR &= ~maskline;
+ }
+
+ /* Configure falling trigger */
+ /* Mask or set line */
+ if ((pExtiConfig->Trigger & EXTI_TRIGGER_FALLING) != 0x00u)
+ {
+ EXTI->FTSR |= maskline;
+ }
+ else
+ {
+ EXTI->FTSR &= ~maskline;
+ }
+
+
+ /* Configure gpio port selection in case of gpio exti line */
+ if ((pExtiConfig->Line & EXTI_GPIO) == EXTI_GPIO)
+ {
+ assert_param(IS_EXTI_GPIO_PORT(pExtiConfig->GPIOSel));
+ assert_param(IS_EXTI_GPIO_PIN(linepos));
+
+ regval = SYSCFG->EXTICR[linepos >> 2u];
+ regval &= ~(SYSCFG_EXTICR1_EXTI0 << (SYSCFG_EXTICR1_EXTI1_Pos * (linepos & 0x03u)));
+ regval |= (pExtiConfig->GPIOSel << (SYSCFG_EXTICR1_EXTI1_Pos * (linepos & 0x03u)));
+ SYSCFG->EXTICR[linepos >> 2u] = regval;
+ }
+ }
+
+ /* Configure interrupt mode : read current mode */
+ /* Mask or set line */
+ if ((pExtiConfig->Mode & EXTI_MODE_INTERRUPT) != 0x00u)
+ {
+ EXTI->IMR |= maskline;
}
else
{
- regval = (uint32_t)EXTI_BASE;
- regval += pExtiConfig->Trigger;
- *(__IO uint32_t *) regval |= pExtiConfig->Line;
+ EXTI->IMR &= ~maskline;
}
+
+ /* Configure event mode : read current mode */
+ /* Mask or set line */
+ if ((pExtiConfig->Mode & EXTI_MODE_EVENT) != 0x00u)
+ {
+ EXTI->EMR |= maskline;
+ }
+ else
+ {
+ EXTI->EMR &= ~maskline;
+ }
+
return HAL_OK;
}
@@ -196,6 +237,10 @@ HAL_StatusTypeDef HAL_EXTI_SetConfigLine(EXTI_HandleTypeDef *hexti, EXTI_ConfigT
*/
HAL_StatusTypeDef HAL_EXTI_GetConfigLine(EXTI_HandleTypeDef *hexti, EXTI_ConfigTypeDef *pExtiConfig)
{
+ uint32_t regval;
+ uint32_t linepos;
+ uint32_t maskline;
+
/* Check null pointer */
if ((hexti == NULL) || (pExtiConfig == NULL))
{
@@ -208,41 +253,67 @@ HAL_StatusTypeDef HAL_EXTI_GetConfigLine(EXTI_HandleTypeDef *hexti, EXTI_ConfigT
/* Store handle line number to configuration structure */
pExtiConfig->Line = hexti->Line;
- /* Get EXTI mode to configiguration structure */
- if ((EXTI->IMR & hexti->Line) == hexti->Line)
+ /* Compute line mask */
+ linepos = (pExtiConfig->Line & EXTI_PIN_MASK);
+ maskline = (1uL << linepos);
+
+ /* 1] Get core mode : interrupt */
+
+ /* Check if selected line is enable */
+ if ((EXTI->IMR & maskline) != 0x00u)
{
pExtiConfig->Mode = EXTI_MODE_INTERRUPT;
}
- else if ((EXTI->EMR & hexti->Line) == hexti->Line)
- {
- pExtiConfig->Mode = EXTI_MODE_EVENT;
- }
else
{
- /* No MODE selected */
- pExtiConfig->Mode = 0x0Bu;
+ pExtiConfig->Mode = EXTI_MODE_NONE;
}
- /* Get EXTI Trigger to configiguration structure */
- if ((EXTI->RTSR & hexti->Line) == hexti->Line)
+ /* Get event mode */
+ /* Check if selected line is enable */
+ if ((EXTI->EMR & maskline) != 0x00u)
{
- if ((EXTI->FTSR & hexti->Line) == hexti->Line)
- {
- pExtiConfig->Trigger = EXTI_TRIGGER_RISING_FALLING;
- }
- else
+ pExtiConfig->Mode |= EXTI_MODE_EVENT;
+ }
+
+ /* 2] Get trigger for configurable lines : rising */
+ if ((pExtiConfig->Line & EXTI_CONFIG) != 0x00u)
+ {
+ /* Check if configuration of selected line is enable */
+ if ((EXTI->RTSR & maskline) != 0x00u)
{
pExtiConfig->Trigger = EXTI_TRIGGER_RISING;
}
- }
- else if ((EXTI->FTSR & hexti->Line) == hexti->Line)
- {
- pExtiConfig->Trigger = EXTI_TRIGGER_FALLING;
+ else
+ {
+ pExtiConfig->Trigger = EXTI_TRIGGER_NONE;
+ }
+
+ /* Get falling configuration */
+ /* Check if configuration of selected line is enable */
+ if ((EXTI->FTSR & maskline) != 0x00u)
+ {
+ pExtiConfig->Trigger |= EXTI_TRIGGER_FALLING;
+ }
+
+ /* Get Gpio port selection for gpio lines */
+ if ((pExtiConfig->Line & EXTI_GPIO) == EXTI_GPIO)
+ {
+ assert_param(IS_EXTI_GPIO_PIN(linepos));
+
+ regval = SYSCFG->EXTICR[linepos >> 2u];
+ pExtiConfig->GPIOSel = ((regval << (SYSCFG_EXTICR1_EXTI1_Pos * (3uL - (linepos & 0x03u)))) >> 24);
+ }
+ else
+ {
+ pExtiConfig->GPIOSel = 0x00u;
+ }
}
else
{
/* No Trigger selected */
- pExtiConfig->Trigger = 0x00u;
+ pExtiConfig->Trigger = EXTI_TRIGGER_NONE;
+ pExtiConfig->GPIOSel = 0x00u;
}
return HAL_OK;
@@ -255,6 +326,10 @@ HAL_StatusTypeDef HAL_EXTI_GetConfigLine(EXTI_HandleTypeDef *hexti, EXTI_ConfigT
*/
HAL_StatusTypeDef HAL_EXTI_ClearConfigLine(EXTI_HandleTypeDef *hexti)
{
+ uint32_t regval;
+ uint32_t linepos;
+ uint32_t maskline;
+
/* Check null pointer */
if (hexti == NULL)
{
@@ -264,15 +339,32 @@ HAL_StatusTypeDef HAL_EXTI_ClearConfigLine(EXTI_HandleTypeDef *hexti)
/* Check the parameter */
assert_param(IS_EXTI_LINE(hexti->Line));
+ /* compute line mask */
+ linepos = (hexti->Line & EXTI_PIN_MASK);
+ maskline = (1uL << linepos);
+
/* 1] Clear interrupt mode */
- EXTI->IMR = (EXTI->IMR & ~hexti->Line);
+ EXTI->IMR = (EXTI->IMR & ~maskline);
/* 2] Clear event mode */
- EXTI->EMR = (EXTI->EMR & ~hexti->Line);
+ EXTI->EMR = (EXTI->EMR & ~maskline);
- /* 3] Clear triggers */
- EXTI->RTSR = (EXTI->RTSR & ~hexti->Line);
- EXTI->FTSR = (EXTI->FTSR & ~hexti->Line);
+ /* 3] Clear triggers in case of configurable lines */
+ if ((hexti->Line & EXTI_CONFIG) != 0x00u)
+ {
+ EXTI->RTSR = (EXTI->RTSR & ~maskline);
+ EXTI->FTSR = (EXTI->FTSR & ~maskline);
+
+ /* Get Gpio port selection for gpio lines */
+ if ((hexti->Line & EXTI_GPIO) == EXTI_GPIO)
+ {
+ assert_param(IS_EXTI_GPIO_PIN(linepos));
+
+ regval = SYSCFG->EXTICR[linepos >> 2u];
+ regval &= ~(SYSCFG_EXTICR1_EXTI0 << (SYSCFG_EXTICR1_EXTI1_Pos * (linepos & 0x03u)));
+ SYSCFG->EXTICR[linepos >> 2u] = regval;
+ }
+ }
return HAL_OK;
}
@@ -352,17 +444,18 @@ HAL_StatusTypeDef HAL_EXTI_GetHandle(EXTI_HandleTypeDef *hexti, uint32_t ExtiLin
*/
void HAL_EXTI_IRQHandler(EXTI_HandleTypeDef *hexti)
{
- __IO uint32_t *regaddr;
uint32_t regval;
+ uint32_t maskline;
+
+ /* Compute line mask */
+ maskline = (1uL << (hexti->Line & EXTI_PIN_MASK));
/* Get pending bit */
- regaddr = (&EXTI->PR);
- regval = (*regaddr & hexti->Line);
-
+ regval = (EXTI->PR & maskline);
if (regval != 0x00u)
{
/* Clear pending bit */
- *regaddr = hexti->Line;
+ EXTI->PR = maskline;
/* Call callback */
if (hexti->PendingCallback != NULL)
@@ -383,19 +476,21 @@ void HAL_EXTI_IRQHandler(EXTI_HandleTypeDef *hexti)
*/
uint32_t HAL_EXTI_GetPending(EXTI_HandleTypeDef *hexti, uint32_t Edge)
{
- __IO uint32_t *regaddr;
uint32_t regval;
+ uint32_t linepos;
+ uint32_t maskline;
/* Check parameters */
assert_param(IS_EXTI_LINE(hexti->Line));
+ assert_param(IS_EXTI_CONFIG_LINE(hexti->Line));
assert_param(IS_EXTI_PENDING_EDGE(Edge));
- /* Get pending bit */
- regaddr = &EXTI->PR;
+ /* Compute line mask */
+ linepos = (hexti->Line & EXTI_PIN_MASK);
+ maskline = (1uL << linepos);
/* return 1 if bit is set else 0 */
- regval = ((*regaddr & hexti->Line) >> POSITION_VAL(hexti->Line));
-
+ regval = ((EXTI->PR & maskline) >> linepos);
return regval;
}
@@ -410,12 +505,18 @@ uint32_t HAL_EXTI_GetPending(EXTI_HandleTypeDef *hexti, uint32_t Edge)
*/
void HAL_EXTI_ClearPending(EXTI_HandleTypeDef *hexti, uint32_t Edge)
{
+ uint32_t maskline;
+
/* Check parameters */
assert_param(IS_EXTI_LINE(hexti->Line));
+ assert_param(IS_EXTI_CONFIG_LINE(hexti->Line));
assert_param(IS_EXTI_PENDING_EDGE(Edge));
-
+
+ /* Compute line mask */
+ maskline = (1uL << (hexti->Line & EXTI_PIN_MASK));
+
/* Clear Pending bit */
- EXTI->PR = hexti->Line;
+ EXTI->PR = maskline;
}
/**
@@ -425,10 +526,17 @@ void HAL_EXTI_ClearPending(EXTI_HandleTypeDef *hexti, uint32_t Edge)
*/
void HAL_EXTI_GenerateSWI(EXTI_HandleTypeDef *hexti)
{
+ uint32_t maskline;
+
/* Check parameters */
assert_param(IS_EXTI_LINE(hexti->Line));
+ assert_param(IS_EXTI_CONFIG_LINE(hexti->Line));
- EXTI->SWIER = hexti->Line;
+ /* Compute line mask */
+ maskline = (1uL << (hexti->Line & EXTI_PIN_MASK));
+
+ /* Generate Software interrupt */
+ EXTI->SWIER = maskline;
}
/**
diff --git a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_Keil/Boot/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_gpio.c b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_Keil/Boot/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_gpio.c
index ffc617dd..0afa1df1 100644
--- a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_Keil/Boot/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_gpio.c
+++ b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_Keil/Boot/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_gpio.c
@@ -190,25 +190,6 @@ void HAL_GPIO_Init(GPIO_TypeDef *GPIOx, GPIO_InitTypeDef *GPIO_Init)
if(iocurrent == ioposition)
{
/*--------------------- GPIO Mode Configuration ------------------------*/
- /* In case of Alternate function mode selection */
- if((GPIO_Init->Mode == GPIO_MODE_AF_PP) || (GPIO_Init->Mode == GPIO_MODE_AF_OD))
- {
- /* Check the Alternate function parameter */
- assert_param(IS_GPIO_AF(GPIO_Init->Alternate));
-
- /* Configure Alternate function mapped with the current IO */
- temp = GPIOx->AFR[position >> 3];
- temp &= ~((uint32_t)0xF << ((uint32_t)(position & (uint32_t)0x07) * 4)) ;
- temp |= ((uint32_t)(GPIO_Init->Alternate) << (((uint32_t)position & (uint32_t)0x07) * 4));
- GPIOx->AFR[position >> 3] = temp;
- }
-
- /* Configure IO Direction mode (Input, Output, Alternate or Analog) */
- temp = GPIOx->MODER;
- temp &= ~(GPIO_MODER_MODER0 << (position * 2));
- temp |= ((GPIO_Init->Mode & GPIO_MODE) << (position * 2));
- GPIOx->MODER = temp;
-
/* In case of Output or Alternate function mode selection */
if((GPIO_Init->Mode == GPIO_MODE_OUTPUT_PP) || (GPIO_Init->Mode == GPIO_MODE_AF_PP) ||
(GPIO_Init->Mode == GPIO_MODE_OUTPUT_OD) || (GPIO_Init->Mode == GPIO_MODE_AF_OD))
@@ -234,6 +215,25 @@ void HAL_GPIO_Init(GPIO_TypeDef *GPIOx, GPIO_InitTypeDef *GPIO_Init)
temp |= ((GPIO_Init->Pull) << (position * 2));
GPIOx->PUPDR = temp;
+ /* In case of Alternate function mode selection */
+ if((GPIO_Init->Mode == GPIO_MODE_AF_PP) || (GPIO_Init->Mode == GPIO_MODE_AF_OD))
+ {
+ /* Check the Alternate function parameter */
+ assert_param(IS_GPIO_AF(GPIO_Init->Alternate));
+
+ /* Configure Alternate function mapped with the current IO */
+ temp = GPIOx->AFR[position >> 3];
+ temp &= ~((uint32_t)0xF << ((uint32_t)(position & (uint32_t)0x07) * 4)) ;
+ temp |= ((uint32_t)(GPIO_Init->Alternate) << (((uint32_t)position & (uint32_t)0x07) * 4));
+ GPIOx->AFR[position >> 3] = temp;
+ }
+
+ /* Configure IO Direction mode (Input, Output, Alternate or Analog) */
+ temp = GPIOx->MODER;
+ temp &= ~(GPIO_MODER_MODER0 << (position * 2));
+ temp |= ((GPIO_Init->Mode & GPIO_MODE) << (position * 2));
+ GPIOx->MODER = temp;
+
/*--------------------- EXTI Mode Configuration ------------------------*/
/* Configure the External Interrupt or event for the current IO */
if((GPIO_Init->Mode & EXTI_MODE) == EXTI_MODE)
@@ -300,7 +300,7 @@ void HAL_GPIO_DeInit(GPIO_TypeDef *GPIOx, uint32_t GPIO_Pin)
/* Check the parameters */
assert_param(IS_GPIO_ALL_INSTANCE(GPIOx));
-
+
/* Configure the port pins */
for(position = 0; position < GPIO_NUMBER; position++)
{
@@ -316,10 +316,6 @@ void HAL_GPIO_DeInit(GPIO_TypeDef *GPIOx, uint32_t GPIO_Pin)
tmp &= (((uint32_t)0x0F) << (4 * (position & 0x03)));
if(tmp == ((uint32_t)(GPIO_GET_INDEX(GPIOx)) << (4 * (position & 0x03))))
{
- /* Configure the External Interrupt or event for the current IO */
- tmp = ((uint32_t)0x0F) << (4 * (position & 0x03));
- SYSCFG->EXTICR[position >> 2] &= ~tmp;
-
/* Clear EXTI line configuration */
EXTI->IMR &= ~((uint32_t)iocurrent);
EXTI->EMR &= ~((uint32_t)iocurrent);
@@ -327,6 +323,10 @@ void HAL_GPIO_DeInit(GPIO_TypeDef *GPIOx, uint32_t GPIO_Pin)
/* Clear Rising Falling edge configuration */
EXTI->RTSR &= ~((uint32_t)iocurrent);
EXTI->FTSR &= ~((uint32_t)iocurrent);
+
+ /* Configure the External Interrupt or event for the current IO */
+ tmp = ((uint32_t)0x0F) << (4 * (position & 0x03));
+ SYSCFG->EXTICR[position >> 2] &= ~tmp;
}
/*------------------------- GPIO Mode Configuration --------------------*/
/* Configure IO Direction in Input Floating Mode */
@@ -335,14 +335,14 @@ void HAL_GPIO_DeInit(GPIO_TypeDef *GPIOx, uint32_t GPIO_Pin)
/* Configure the default Alternate Function in current IO */
GPIOx->AFR[position >> 3] &= ~((uint32_t)0xF << ((uint32_t)(position & (uint32_t)0x07) * 4)) ;
- /* Configure the default value for IO Speed */
- GPIOx->OSPEEDR &= ~(GPIO_OSPEEDER_OSPEEDR0 << (position * 2));
+ /* Deactivate the Pull-up and Pull-down resistor for the current IO */
+ GPIOx->PUPDR &= ~(GPIO_PUPDR_PUPDR0 << (position * 2));
/* Configure the default value IO Output Type */
GPIOx->OTYPER &= ~(GPIO_OTYPER_OT_0 << position) ;
- /* Deactivate the Pull-up and Pull-down resistor for the current IO */
- GPIOx->PUPDR &= ~(GPIO_PUPDR_PUPDR0 << (position * 2));
+ /* Configure the default value for IO Speed */
+ GPIOx->OSPEEDR &= ~(GPIO_OSPEEDER_OSPEEDR0 << (position * 2));
}
}
}
@@ -431,13 +431,13 @@ void HAL_GPIO_TogglePin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
/* Check the parameters */
assert_param(IS_GPIO_PIN(GPIO_Pin));
- if ((GPIOx->ODR & GPIO_Pin) == GPIO_Pin)
+ if ((GPIOx->ODR & GPIO_Pin) != 0X00u)
{
GPIOx->BSRR = (uint32_t)GPIO_Pin << GPIO_NUMBER;
}
else
{
- GPIOx->BSRR = GPIO_Pin;
+ GPIOx->BSRR = (uint32_t)GPIO_Pin;
}
}
@@ -467,10 +467,11 @@ HAL_StatusTypeDef HAL_GPIO_LockPin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
GPIOx->LCKR = GPIO_Pin;
/* Set LCKx bit(s): LCKK='1' + LCK[15-0] */
GPIOx->LCKR = tmp;
- /* Read LCKK bit*/
+ /* Read LCKR register. This read is mandatory to complete key lock sequence */
tmp = GPIOx->LCKR;
- if((GPIOx->LCKR & GPIO_LCKR_LCKK) != RESET)
+ /* Read again in order to confirm lock is active */
+ if((GPIOx->LCKR & GPIO_LCKR_LCKK) != RESET)
{
return HAL_OK;
}
diff --git a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_Keil/Boot/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_i2c.c b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_Keil/Boot/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_i2c.c
index 775bff23..ef049ec4 100644
--- a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_Keil/Boot/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_i2c.c
+++ b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_Keil/Boot/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_i2c.c
@@ -223,12 +223,12 @@
*** Callback registration ***
=============================================
-
+ [..]
The compilation flag USE_HAL_I2C_REGISTER_CALLBACKS when set to 1
allows the user to configure dynamically the driver callbacks.
Use Functions @ref HAL_I2C_RegisterCallback() or @ref HAL_I2C_RegisterAddrCallback()
to register an interrupt callback.
-
+ [..]
Function @ref HAL_I2C_RegisterCallback() allows to register following callbacks:
(+) MasterTxCpltCallback : callback for Master transmission end of transfer.
(+) MasterRxCpltCallback : callback for Master reception end of transfer.
@@ -243,9 +243,9 @@
(+) MspDeInitCallback : callback for Msp DeInit.
This function takes as parameters the HAL peripheral handle, the Callback ID
and a pointer to the user callback function.
-
+ [..]
For specific callback AddrCallback use dedicated register callbacks : @ref HAL_I2C_RegisterAddrCallback().
-
+ [..]
Use function @ref HAL_I2C_UnRegisterCallback to reset a callback to the default
weak function.
@ref HAL_I2C_UnRegisterCallback takes as parameters the HAL peripheral handle,
@@ -262,9 +262,9 @@
(+) AbortCpltCallback : callback for abort completion process.
(+) MspInitCallback : callback for Msp Init.
(+) MspDeInitCallback : callback for Msp DeInit.
-
+ [..]
For callback AddrCallback use dedicated register callbacks : @ref HAL_I2C_UnRegisterAddrCallback().
-
+ [..]
By default, after the @ref HAL_I2C_Init() and when the state is @ref HAL_I2C_STATE_RESET
all callbacks are set to the corresponding weak functions:
examples @ref HAL_I2C_MasterTxCpltCallback(), @ref HAL_I2C_MasterRxCpltCallback().
@@ -273,7 +273,7 @@
these callbacks are null (not registered beforehand).
If MspInit or MspDeInit are not null, the @ref HAL_I2C_Init()/ @ref HAL_I2C_DeInit()
keep and use the user MspInit/MspDeInit callbacks (registered beforehand) whatever the state.
-
+ [..]
Callbacks can be registered/unregistered in @ref HAL_I2C_STATE_READY state only.
Exception done MspInit/MspDeInit functions that can be registered/unregistered
in @ref HAL_I2C_STATE_READY or @ref HAL_I2C_STATE_RESET state,
@@ -281,7 +281,7 @@
Then, the user first registers the MspInit/MspDeInit user callbacks
using @ref HAL_I2C_RegisterCallback() before calling @ref HAL_I2C_DeInit()
or @ref HAL_I2C_Init() function.
-
+ [..]
When the compilation flag USE_HAL_I2C_REGISTER_CALLBACKS is set to 0 or
not defined, the callback registration feature is not available and all callbacks
are set to the corresponding weak functions.
@@ -4737,6 +4737,13 @@ static HAL_StatusTypeDef I2C_Slave_ISR_IT(struct __I2C_HandleTypeDef *hi2c, uint
/* Process locked */
__HAL_LOCK(hi2c);
+ /* Check if STOPF is set */
+ if ((I2C_CHECK_FLAG(tmpITFlags, I2C_FLAG_STOPF) != RESET) && (I2C_CHECK_IT_SOURCE(ITSources, I2C_IT_STOPI) != RESET))
+ {
+ /* Call I2C Slave complete process */
+ I2C_ITSlaveCplt(hi2c, tmpITFlags);
+ }
+
if ((I2C_CHECK_FLAG(tmpITFlags, I2C_FLAG_AF) != RESET) && (I2C_CHECK_IT_SOURCE(ITSources, I2C_IT_NACKI) != RESET))
{
/* Check that I2C transfer finished */
@@ -4788,9 +4795,6 @@ static HAL_StatusTypeDef I2C_Slave_ISR_IT(struct __I2C_HandleTypeDef *hi2c, uint
{
if (hi2c->XferCount > 0U)
{
- /* Remove RXNE flag on temporary variable as read done */
- tmpITFlags &= ~I2C_FLAG_RXNE;
-
/* Read data from RXDR */
*hi2c->pBuffPtr = (uint8_t)hi2c->Instance->RXDR;
@@ -4844,13 +4848,6 @@ static HAL_StatusTypeDef I2C_Slave_ISR_IT(struct __I2C_HandleTypeDef *hi2c, uint
/* Nothing to do */
}
- /* Check if STOPF is set */
- if ((I2C_CHECK_FLAG(tmpITFlags, I2C_FLAG_STOPF) != RESET) && (I2C_CHECK_IT_SOURCE(ITSources, I2C_IT_STOPI) != RESET))
- {
- /* Call I2C Slave complete process */
- I2C_ITSlaveCplt(hi2c, tmpITFlags);
- }
-
/* Process Unlocked */
__HAL_UNLOCK(hi2c);
@@ -5008,6 +5005,13 @@ static HAL_StatusTypeDef I2C_Slave_ISR_DMA(struct __I2C_HandleTypeDef *hi2c, uin
/* Process locked */
__HAL_LOCK(hi2c);
+ /* Check if STOPF is set */
+ if ((I2C_CHECK_FLAG(ITFlags, I2C_FLAG_STOPF) != RESET) && (I2C_CHECK_IT_SOURCE(ITSources, I2C_IT_STOPI) != RESET))
+ {
+ /* Call I2C Slave complete process */
+ I2C_ITSlaveCplt(hi2c, ITFlags);
+ }
+
if ((I2C_CHECK_FLAG(ITFlags, I2C_FLAG_AF) != RESET) && (I2C_CHECK_IT_SOURCE(ITSources, I2C_IT_NACKI) != RESET))
{
/* Check that I2C transfer finished */
@@ -5092,11 +5096,6 @@ static HAL_StatusTypeDef I2C_Slave_ISR_DMA(struct __I2C_HandleTypeDef *hi2c, uin
{
I2C_ITAddrCplt(hi2c, ITFlags);
}
- else if ((I2C_CHECK_FLAG(ITFlags, I2C_FLAG_STOPF) != RESET) && (I2C_CHECK_IT_SOURCE(ITSources, I2C_IT_STOPI) != RESET))
- {
- /* Call I2C Slave complete process */
- I2C_ITSlaveCplt(hi2c, ITFlags);
- }
else
{
/* Nothing to do */
diff --git a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_Keil/Boot/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_pcd.c b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_Keil/Boot/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_pcd.c
index 2b4a5eff..ea532df6 100644
--- a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_Keil/Boot/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_pcd.c
+++ b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_Keil/Boot/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_pcd.c
@@ -122,6 +122,7 @@ static HAL_StatusTypeDef PCD_EP_OutSetupPacket_int(PCD_HandleTypeDef *hpcd, uint
*/
HAL_StatusTypeDef HAL_PCD_Init(PCD_HandleTypeDef *hpcd)
{
+ USB_OTG_GlobalTypeDef *USBx;
uint8_t i;
/* Check the PCD handle allocation */
@@ -133,6 +134,8 @@ HAL_StatusTypeDef HAL_PCD_Init(PCD_HandleTypeDef *hpcd)
/* Check the parameters */
assert_param(IS_PCD_ALL_INSTANCE(hpcd->Instance));
+ USBx = hpcd->Instance;
+
if (hpcd->State == HAL_PCD_STATE_RESET)
{
/* Allocate lock resource and initialize it */
@@ -166,6 +169,12 @@ HAL_StatusTypeDef HAL_PCD_Init(PCD_HandleTypeDef *hpcd)
hpcd->State = HAL_PCD_STATE_BUSY;
+ /* Disable DMA mode for FS instance */
+ if ((USBx->CID & (0x1U << 8)) == 0U)
+ {
+ hpcd->Init.dma_enable = 0U;
+ }
+
/* Disable the Interrupts */
__HAL_PCD_DISABLE(hpcd);
@@ -943,7 +952,7 @@ void HAL_PCD_IRQHandler(PCD_HandleTypeDef *hpcd)
{
USB_OTG_GlobalTypeDef *USBx = hpcd->Instance;
uint32_t USBx_BASE = (uint32_t)USBx;
- uint32_t i, ep_intr, epint, epnum = 0U;
+ uint32_t i, ep_intr, epint, epnum;
uint32_t fifoemptymsk, temp;
USB_OTG_EPTypeDef *ep;
@@ -962,6 +971,38 @@ void HAL_PCD_IRQHandler(PCD_HandleTypeDef *hpcd)
__HAL_PCD_CLEAR_FLAG(hpcd, USB_OTG_GINTSTS_MMIS);
}
+ /* Handle RxQLevel Interrupt */
+ if (__HAL_PCD_GET_FLAG(hpcd, USB_OTG_GINTSTS_RXFLVL))
+ {
+ USB_MASK_INTERRUPT(hpcd->Instance, USB_OTG_GINTSTS_RXFLVL);
+
+ temp = USBx->GRXSTSP;
+
+ ep = &hpcd->OUT_ep[temp & USB_OTG_GRXSTSP_EPNUM];
+
+ if (((temp & USB_OTG_GRXSTSP_PKTSTS) >> 17) == STS_DATA_UPDT)
+ {
+ if ((temp & USB_OTG_GRXSTSP_BCNT) != 0U)
+ {
+ (void)USB_ReadPacket(USBx, ep->xfer_buff,
+ (uint16_t)((temp & USB_OTG_GRXSTSP_BCNT) >> 4));
+
+ ep->xfer_buff += (temp & USB_OTG_GRXSTSP_BCNT) >> 4;
+ ep->xfer_count += (temp & USB_OTG_GRXSTSP_BCNT) >> 4;
+ }
+ }
+ else if (((temp & USB_OTG_GRXSTSP_PKTSTS) >> 17) == STS_SETUP_UPDT)
+ {
+ (void)USB_ReadPacket(USBx, (uint8_t *)hpcd->Setup, 8U);
+ ep->xfer_count += (temp & USB_OTG_GRXSTSP_BCNT) >> 4;
+ }
+ else
+ {
+ /* ... */
+ }
+ USB_UNMASK_INTERRUPT(hpcd->Instance, USB_OTG_GINTSTS_RXFLVL);
+ }
+
if (__HAL_PCD_GET_FLAG(hpcd, USB_OTG_GINTSTS_OEPINT))
{
epnum = 0U;
@@ -983,9 +1024,9 @@ void HAL_PCD_IRQHandler(PCD_HandleTypeDef *hpcd)
if ((epint & USB_OTG_DOEPINT_STUP) == USB_OTG_DOEPINT_STUP)
{
+ CLEAR_OUT_EP_INTR(epnum, USB_OTG_DOEPINT_STUP);
/* Class B setup phase done for previous decoded setup */
(void)PCD_EP_OutSetupPacket_int(hpcd, epnum);
- CLEAR_OUT_EP_INTR(epnum, USB_OTG_DOEPINT_STUP);
}
if ((epint & USB_OTG_DOEPINT_OTEPDIS) == USB_OTG_DOEPINT_OTEPDIS)
@@ -996,10 +1037,6 @@ void HAL_PCD_IRQHandler(PCD_HandleTypeDef *hpcd)
/* Clear Status Phase Received interrupt */
if ((epint & USB_OTG_DOEPINT_OTEPSPR) == USB_OTG_DOEPINT_OTEPSPR)
{
- if (hpcd->Init.dma_enable == 1U)
- {
- (void)USB_EP0_OutStart(hpcd->Instance, 1U, (uint8_t *)hpcd->Setup);
- }
CLEAR_OUT_EP_INTR(epnum, USB_OTG_DOEPINT_OTEPSPR);
}
@@ -1037,16 +1074,7 @@ void HAL_PCD_IRQHandler(PCD_HandleTypeDef *hpcd)
if (hpcd->Init.dma_enable == 1U)
{
hpcd->IN_ep[epnum].xfer_buff += hpcd->IN_ep[epnum].maxpacket;
- }
-#if (USE_HAL_PCD_REGISTER_CALLBACKS == 1U)
- hpcd->DataInStageCallback(hpcd, (uint8_t)epnum);
-#else
- HAL_PCD_DataInStageCallback(hpcd, (uint8_t)epnum);
-#endif /* USE_HAL_PCD_REGISTER_CALLBACKS */
-
- if (hpcd->Init.dma_enable == 1U)
- {
/* this is ZLP, so prepare EP0 for next setup */
if ((epnum == 0U) && (hpcd->IN_ep[epnum].xfer_len == 0U))
{
@@ -1054,6 +1082,12 @@ void HAL_PCD_IRQHandler(PCD_HandleTypeDef *hpcd)
(void)USB_EP0_OutStart(hpcd->Instance, 1U, (uint8_t *)hpcd->Setup);
}
}
+
+#if (USE_HAL_PCD_REGISTER_CALLBACKS == 1U)
+ hpcd->DataInStageCallback(hpcd, (uint8_t)epnum);
+#else
+ HAL_PCD_DataInStageCallback(hpcd, (uint8_t)epnum);
+#endif /* USE_HAL_PCD_REGISTER_CALLBACKS */
}
if ((epint & USB_OTG_DIEPINT_TOC) == USB_OTG_DIEPINT_TOC)
{
@@ -1159,8 +1193,10 @@ void HAL_PCD_IRQHandler(PCD_HandleTypeDef *hpcd)
{
USBx_INEP(i)->DIEPINT = 0xFB7FU;
USBx_INEP(i)->DIEPCTL &= ~USB_OTG_DIEPCTL_STALL;
+ USBx_INEP(i)->DIEPCTL |= USB_OTG_DIEPCTL_SNAK;
USBx_OUTEP(i)->DOEPINT = 0xFB7FU;
USBx_OUTEP(i)->DOEPCTL &= ~USB_OTG_DOEPCTL_STALL;
+ USBx_OUTEP(i)->DOEPCTL |= USB_OTG_DOEPCTL_SNAK;
}
USBx_DEVICE->DAINTMSK |= 0x10001U;
@@ -1217,38 +1253,6 @@ void HAL_PCD_IRQHandler(PCD_HandleTypeDef *hpcd)
__HAL_PCD_CLEAR_FLAG(hpcd, USB_OTG_GINTSTS_ENUMDNE);
}
- /* Handle RxQLevel Interrupt */
- if (__HAL_PCD_GET_FLAG(hpcd, USB_OTG_GINTSTS_RXFLVL))
- {
- USB_MASK_INTERRUPT(hpcd->Instance, USB_OTG_GINTSTS_RXFLVL);
-
- temp = USBx->GRXSTSP;
-
- ep = &hpcd->OUT_ep[temp & USB_OTG_GRXSTSP_EPNUM];
-
- if (((temp & USB_OTG_GRXSTSP_PKTSTS) >> 17) == STS_DATA_UPDT)
- {
- if ((temp & USB_OTG_GRXSTSP_BCNT) != 0U)
- {
- (void)USB_ReadPacket(USBx, ep->xfer_buff,
- (uint16_t)((temp & USB_OTG_GRXSTSP_BCNT) >> 4));
-
- ep->xfer_buff += (temp & USB_OTG_GRXSTSP_BCNT) >> 4;
- ep->xfer_count += (temp & USB_OTG_GRXSTSP_BCNT) >> 4;
- }
- }
- else if (((temp & USB_OTG_GRXSTSP_PKTSTS) >> 17) == STS_SETUP_UPDT)
- {
- (void)USB_ReadPacket(USBx, (uint8_t *)hpcd->Setup, 8U);
- ep->xfer_count += (temp & USB_OTG_GRXSTSP_BCNT) >> 4;
- }
- else
- {
- /* ... */
- }
- USB_UNMASK_INTERRUPT(hpcd->Instance, USB_OTG_GINTSTS_RXFLVL);
- }
-
/* Handle SOF Interrupt */
if (__HAL_PCD_GET_FLAG(hpcd, USB_OTG_GINTSTS_SOF))
{
@@ -1264,6 +1268,10 @@ void HAL_PCD_IRQHandler(PCD_HandleTypeDef *hpcd)
/* Handle Incomplete ISO IN Interrupt */
if (__HAL_PCD_GET_FLAG(hpcd, USB_OTG_GINTSTS_IISOIXFR))
{
+ /* Keep application checking the corresponding Iso IN endpoint
+ causing the incomplete Interrupt */
+ epnum = 0U;
+
#if (USE_HAL_PCD_REGISTER_CALLBACKS == 1U)
hpcd->ISOINIncompleteCallback(hpcd, (uint8_t)epnum);
#else
@@ -1276,6 +1284,10 @@ void HAL_PCD_IRQHandler(PCD_HandleTypeDef *hpcd)
/* Handle Incomplete ISO OUT Interrupt */
if (__HAL_PCD_GET_FLAG(hpcd, USB_OTG_GINTSTS_PXFR_INCOMPISOOUT))
{
+ /* Keep application checking the corresponding Iso OUT endpoint
+ causing the incomplete Interrupt */
+ epnum = 0U;
+
#if (USE_HAL_PCD_REGISTER_CALLBACKS == 1U)
hpcd->ISOOUTIncompleteCallback(hpcd, (uint8_t)epnum);
#else
@@ -1955,16 +1967,6 @@ static HAL_StatusTypeDef PCD_EP_OutXfrComplete_int(PCD_HandleTypeDef *hpcd, uint
{
CLEAR_OUT_EP_INTR(epnum, USB_OTG_DOEPINT_STPKTRX);
}
-
- /* Inform the upper layer that a setup packet is available */
-#if (USE_HAL_PCD_REGISTER_CALLBACKS == 1U)
- hpcd->SetupStageCallback(hpcd);
-#else
- HAL_PCD_SetupStageCallback(hpcd);
-#endif /* USE_HAL_PCD_REGISTER_CALLBACKS */
-
- (void)USB_EP0_OutStart(hpcd->Instance, 1U, (uint8_t *)hpcd->Setup);
- CLEAR_OUT_EP_INTR(epnum, USB_OTG_DOEPINT_STUP);
}
else if ((DoepintReg & USB_OTG_DOEPINT_OTEPSPR) == USB_OTG_DOEPINT_OTEPSPR) /* Class E */
{
@@ -1987,17 +1989,16 @@ static HAL_StatusTypeDef PCD_EP_OutXfrComplete_int(PCD_HandleTypeDef *hpcd, uint
hpcd->OUT_ep[epnum].xfer_buff += hpcd->OUT_ep[epnum].maxpacket;
-#if (USE_HAL_PCD_REGISTER_CALLBACKS == 1U)
- hpcd->DataOutStageCallback(hpcd, (uint8_t)epnum);
-#else
- HAL_PCD_DataOutStageCallback(hpcd, (uint8_t)epnum);
-#endif /* USE_HAL_PCD_REGISTER_CALLBACKS */
-
if ((epnum == 0U) && (hpcd->OUT_ep[epnum].xfer_len == 0U))
{
/* this is ZLP, so prepare EP0 for next setup */
(void)USB_EP0_OutStart(hpcd->Instance, 1U, (uint8_t *)hpcd->Setup);
}
+#if (USE_HAL_PCD_REGISTER_CALLBACKS == 1U)
+ hpcd->DataOutStageCallback(hpcd, (uint8_t)epnum);
+#else
+ HAL_PCD_DataOutStageCallback(hpcd, (uint8_t)epnum);
+#endif /* USE_HAL_PCD_REGISTER_CALLBACKS */
}
}
else
@@ -2030,6 +2031,12 @@ static HAL_StatusTypeDef PCD_EP_OutXfrComplete_int(PCD_HandleTypeDef *hpcd, uint
}
else
{
+ if ((epnum == 0U) && (hpcd->OUT_ep[epnum].xfer_len == 0U))
+ {
+ /* this is ZLP, so prepare EP0 for next setup */
+ (void)USB_EP0_OutStart(hpcd->Instance, 0U, (uint8_t *)hpcd->Setup);
+ }
+
#if (USE_HAL_PCD_REGISTER_CALLBACKS == 1U)
hpcd->DataOutStageCallback(hpcd, (uint8_t)epnum);
#else
@@ -2055,22 +2062,10 @@ static HAL_StatusTypeDef PCD_EP_OutSetupPacket_int(PCD_HandleTypeDef *hpcd, uint
uint32_t gSNPSiD = *(__IO uint32_t *)(&USBx->CID + 0x1U);
uint32_t DoepintReg = USBx_OUTEP(epnum)->DOEPINT;
- if (hpcd->Init.dma_enable == 1U)
+ if ((gSNPSiD > USB_OTG_CORE_ID_300A) &&
+ ((DoepintReg & USB_OTG_DOEPINT_STPKTRX) == USB_OTG_DOEPINT_STPKTRX))
{
- /* StupPktRcvd = 1 pending setup packet int */
- if ((gSNPSiD > USB_OTG_CORE_ID_300A) &&
- ((DoepintReg & USB_OTG_DOEPINT_STPKTRX) == USB_OTG_DOEPINT_STPKTRX))
- {
- CLEAR_OUT_EP_INTR(epnum, USB_OTG_DOEPINT_STPKTRX);
- }
- }
- else
- {
- if ((gSNPSiD == USB_OTG_CORE_ID_310A) &&
- ((DoepintReg & USB_OTG_DOEPINT_STPKTRX) == USB_OTG_DOEPINT_STPKTRX))
- {
- CLEAR_OUT_EP_INTR(epnum, USB_OTG_DOEPINT_STPKTRX);
- }
+ CLEAR_OUT_EP_INTR(epnum, USB_OTG_DOEPINT_STPKTRX);
}
/* Inform the upper layer that a setup packet is available */
diff --git a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_Keil/Boot/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_rcc.c b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_Keil/Boot/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_rcc.c
index bf33cff4..d63a6f4e 100644
--- a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_Keil/Boot/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_rcc.c
+++ b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_Keil/Boot/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_rcc.c
@@ -317,7 +317,7 @@ HAL_StatusTypeDef HAL_RCC_DeInit(void)
SystemCoreClock = HSI_VALUE;
/* Adapt Systick interrupt period */
- if(HAL_InitTick(TICK_INT_PRIORITY) != HAL_OK)
+ if (HAL_InitTick(uwTickPrio) != HAL_OK)
{
return HAL_ERROR;
}
@@ -344,10 +344,11 @@ HAL_StatusTypeDef HAL_RCC_DeInit(void)
HAL_StatusTypeDef HAL_RCC_OscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct)
{
uint32_t tickstart;
+ uint32_t pll_config;
FlagStatus pwrclkchanged = RESET;
/* Check Null pointer */
- if(RCC_OscInitStruct == NULL)
+ if (RCC_OscInitStruct == NULL)
{
return HAL_ERROR;
}
@@ -356,15 +357,15 @@ HAL_StatusTypeDef HAL_RCC_OscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct)
assert_param(IS_RCC_OSCILLATORTYPE(RCC_OscInitStruct->OscillatorType));
/*------------------------------- HSE Configuration ------------------------*/
- if(((RCC_OscInitStruct->OscillatorType) & RCC_OSCILLATORTYPE_HSE) == RCC_OSCILLATORTYPE_HSE)
+ if (((RCC_OscInitStruct->OscillatorType) & RCC_OSCILLATORTYPE_HSE) == RCC_OSCILLATORTYPE_HSE)
{
/* Check the parameters */
assert_param(IS_RCC_HSE(RCC_OscInitStruct->HSEState));
/* When the HSE is used as system clock or clock source for PLL, It can not be disabled */
- if((__HAL_RCC_GET_SYSCLK_SOURCE() == RCC_SYSCLKSOURCE_STATUS_HSE)
- || ((__HAL_RCC_GET_SYSCLK_SOURCE() == RCC_SYSCLKSOURCE_STATUS_PLLCLK) && ((RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC) == RCC_PLLCFGR_PLLSRC_HSE)))
+ if ((__HAL_RCC_GET_SYSCLK_SOURCE() == RCC_SYSCLKSOURCE_STATUS_HSE)
+ || ((__HAL_RCC_GET_SYSCLK_SOURCE() == RCC_SYSCLKSOURCE_STATUS_PLLCLK) && ((RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC) == RCC_PLLCFGR_PLLSRC_HSE)))
{
- if((__HAL_RCC_GET_FLAG(RCC_FLAG_HSERDY) != RESET) && (RCC_OscInitStruct->HSEState == RCC_HSE_OFF))
+ if ((__HAL_RCC_GET_FLAG(RCC_FLAG_HSERDY) != RESET) && (RCC_OscInitStruct->HSEState == RCC_HSE_OFF))
{
return HAL_ERROR;
}
@@ -375,15 +376,15 @@ HAL_StatusTypeDef HAL_RCC_OscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct)
__HAL_RCC_HSE_CONFIG(RCC_OscInitStruct->HSEState);
/* Check the HSE State */
- if(RCC_OscInitStruct->HSEState != RCC_HSE_OFF)
+ if (RCC_OscInitStruct->HSEState != RCC_HSE_OFF)
{
/* Get Start Tick*/
tickstart = HAL_GetTick();
/* Wait till HSE is ready */
- while(__HAL_RCC_GET_FLAG(RCC_FLAG_HSERDY) == RESET)
+ while (__HAL_RCC_GET_FLAG(RCC_FLAG_HSERDY) == RESET)
{
- if((HAL_GetTick() - tickstart ) > HSE_TIMEOUT_VALUE)
+ if ((HAL_GetTick() - tickstart) > HSE_TIMEOUT_VALUE)
{
return HAL_TIMEOUT;
}
@@ -395,9 +396,9 @@ HAL_StatusTypeDef HAL_RCC_OscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct)
tickstart = HAL_GetTick();
/* Wait till HSE is bypassed or disabled */
- while(__HAL_RCC_GET_FLAG(RCC_FLAG_HSERDY) != RESET)
+ while (__HAL_RCC_GET_FLAG(RCC_FLAG_HSERDY) != RESET)
{
- if((HAL_GetTick() - tickstart ) > HSE_TIMEOUT_VALUE)
+ if ((HAL_GetTick() - tickstart) > HSE_TIMEOUT_VALUE)
{
return HAL_TIMEOUT;
}
@@ -406,18 +407,18 @@ HAL_StatusTypeDef HAL_RCC_OscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct)
}
}
/*----------------------------- HSI Configuration --------------------------*/
- if(((RCC_OscInitStruct->OscillatorType) & RCC_OSCILLATORTYPE_HSI) == RCC_OSCILLATORTYPE_HSI)
+ if (((RCC_OscInitStruct->OscillatorType) & RCC_OSCILLATORTYPE_HSI) == RCC_OSCILLATORTYPE_HSI)
{
/* Check the parameters */
assert_param(IS_RCC_HSI(RCC_OscInitStruct->HSIState));
assert_param(IS_RCC_CALIBRATION_VALUE(RCC_OscInitStruct->HSICalibrationValue));
/* Check if HSI is used as system clock or as PLL source when PLL is selected as system clock */
- if((__HAL_RCC_GET_SYSCLK_SOURCE() == RCC_SYSCLKSOURCE_STATUS_HSI)
- || ((__HAL_RCC_GET_SYSCLK_SOURCE() == RCC_SYSCLKSOURCE_STATUS_PLLCLK) && ((RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC) == RCC_PLLCFGR_PLLSRC_HSI)))
+ if ((__HAL_RCC_GET_SYSCLK_SOURCE() == RCC_SYSCLKSOURCE_STATUS_HSI)
+ || ((__HAL_RCC_GET_SYSCLK_SOURCE() == RCC_SYSCLKSOURCE_STATUS_PLLCLK) && ((RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC) == RCC_PLLCFGR_PLLSRC_HSI)))
{
/* When HSI is used as system clock it will not disabled */
- if((__HAL_RCC_GET_FLAG(RCC_FLAG_HSIRDY) != RESET) && (RCC_OscInitStruct->HSIState != RCC_HSI_ON))
+ if ((__HAL_RCC_GET_FLAG(RCC_FLAG_HSIRDY) != RESET) && (RCC_OscInitStruct->HSIState != RCC_HSI_ON))
{
return HAL_ERROR;
}
@@ -431,7 +432,7 @@ HAL_StatusTypeDef HAL_RCC_OscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct)
else
{
/* Check the HSI State */
- if((RCC_OscInitStruct->HSIState)!= RCC_HSI_OFF)
+ if ((RCC_OscInitStruct->HSIState) != RCC_HSI_OFF)
{
/* Enable the Internal High Speed oscillator (HSI). */
__HAL_RCC_HSI_ENABLE();
@@ -440,9 +441,9 @@ HAL_StatusTypeDef HAL_RCC_OscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct)
tickstart = HAL_GetTick();
/* Wait till HSI is ready */
- while(__HAL_RCC_GET_FLAG(RCC_FLAG_HSIRDY) == RESET)
+ while (__HAL_RCC_GET_FLAG(RCC_FLAG_HSIRDY) == RESET)
{
- if((HAL_GetTick() - tickstart ) > HSI_TIMEOUT_VALUE)
+ if ((HAL_GetTick() - tickstart) > HSI_TIMEOUT_VALUE)
{
return HAL_TIMEOUT;
}
@@ -460,9 +461,9 @@ HAL_StatusTypeDef HAL_RCC_OscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct)
tickstart = HAL_GetTick();
/* Wait till HSI is ready */
- while(__HAL_RCC_GET_FLAG(RCC_FLAG_HSIRDY) != RESET)
+ while (__HAL_RCC_GET_FLAG(RCC_FLAG_HSIRDY) != RESET)
{
- if((HAL_GetTick() - tickstart ) > HSI_TIMEOUT_VALUE)
+ if ((HAL_GetTick() - tickstart) > HSI_TIMEOUT_VALUE)
{
return HAL_TIMEOUT;
}
@@ -471,13 +472,13 @@ HAL_StatusTypeDef HAL_RCC_OscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct)
}
}
/*------------------------------ LSI Configuration -------------------------*/
- if(((RCC_OscInitStruct->OscillatorType) & RCC_OSCILLATORTYPE_LSI) == RCC_OSCILLATORTYPE_LSI)
+ if (((RCC_OscInitStruct->OscillatorType) & RCC_OSCILLATORTYPE_LSI) == RCC_OSCILLATORTYPE_LSI)
{
/* Check the parameters */
assert_param(IS_RCC_LSI(RCC_OscInitStruct->LSIState));
/* Check the LSI State */
- if((RCC_OscInitStruct->LSIState)!= RCC_LSI_OFF)
+ if ((RCC_OscInitStruct->LSIState) != RCC_LSI_OFF)
{
/* Enable the Internal Low Speed oscillator (LSI). */
__HAL_RCC_LSI_ENABLE();
@@ -486,9 +487,9 @@ HAL_StatusTypeDef HAL_RCC_OscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct)
tickstart = HAL_GetTick();
/* Wait till LSI is ready */
- while(__HAL_RCC_GET_FLAG(RCC_FLAG_LSIRDY) == RESET)
+ while (__HAL_RCC_GET_FLAG(RCC_FLAG_LSIRDY) == RESET)
{
- if((HAL_GetTick() - tickstart ) > LSI_TIMEOUT_VALUE)
+ if ((HAL_GetTick() - tickstart) > LSI_TIMEOUT_VALUE)
{
return HAL_TIMEOUT;
}
@@ -503,9 +504,9 @@ HAL_StatusTypeDef HAL_RCC_OscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct)
tickstart = HAL_GetTick();
/* Wait till LSI is ready */
- while(__HAL_RCC_GET_FLAG(RCC_FLAG_LSIRDY) != RESET)
+ while (__HAL_RCC_GET_FLAG(RCC_FLAG_LSIRDY) != RESET)
{
- if((HAL_GetTick() - tickstart ) > LSI_TIMEOUT_VALUE)
+ if ((HAL_GetTick() - tickstart) > LSI_TIMEOUT_VALUE)
{
return HAL_TIMEOUT;
}
@@ -513,21 +514,21 @@ HAL_StatusTypeDef HAL_RCC_OscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct)
}
}
/*------------------------------ LSE Configuration -------------------------*/
- if(((RCC_OscInitStruct->OscillatorType) & RCC_OSCILLATORTYPE_LSE) == RCC_OSCILLATORTYPE_LSE)
+ if (((RCC_OscInitStruct->OscillatorType) & RCC_OSCILLATORTYPE_LSE) == RCC_OSCILLATORTYPE_LSE)
{
/* Check the parameters */
assert_param(IS_RCC_LSE(RCC_OscInitStruct->LSEState));
/* Update LSE configuration in Backup Domain control register */
/* Requires to enable write access to Backup Domain of necessary */
- if(__HAL_RCC_PWR_IS_CLK_DISABLED())
+ if (__HAL_RCC_PWR_IS_CLK_DISABLED())
{
/* Enable Power Clock*/
__HAL_RCC_PWR_CLK_ENABLE();
pwrclkchanged = SET;
}
- if(HAL_IS_BIT_CLR(PWR->CR1, PWR_CR1_DBP))
+ if (HAL_IS_BIT_CLR(PWR->CR1, PWR_CR1_DBP))
{
/* Enable write access to Backup domain */
PWR->CR1 |= PWR_CR1_DBP;
@@ -535,9 +536,9 @@ HAL_StatusTypeDef HAL_RCC_OscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct)
/* Wait for Backup domain Write protection disable */
tickstart = HAL_GetTick();
- while(HAL_IS_BIT_CLR(PWR->CR1, PWR_CR1_DBP))
+ while (HAL_IS_BIT_CLR(PWR->CR1, PWR_CR1_DBP))
{
- if((HAL_GetTick() - tickstart ) > RCC_DBP_TIMEOUT_VALUE)
+ if ((HAL_GetTick() - tickstart) > RCC_DBP_TIMEOUT_VALUE)
{
return HAL_TIMEOUT;
}
@@ -547,15 +548,15 @@ HAL_StatusTypeDef HAL_RCC_OscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct)
/* Set the new LSE configuration -----------------------------------------*/
__HAL_RCC_LSE_CONFIG(RCC_OscInitStruct->LSEState);
/* Check the LSE State */
- if((RCC_OscInitStruct->LSEState) != RCC_LSE_OFF)
+ if ((RCC_OscInitStruct->LSEState) != RCC_LSE_OFF)
{
/* Get Start Tick*/
tickstart = HAL_GetTick();
/* Wait till LSE is ready */
- while(__HAL_RCC_GET_FLAG(RCC_FLAG_LSERDY) == RESET)
+ while (__HAL_RCC_GET_FLAG(RCC_FLAG_LSERDY) == RESET)
{
- if((HAL_GetTick() - tickstart ) > RCC_LSE_TIMEOUT_VALUE)
+ if ((HAL_GetTick() - tickstart) > RCC_LSE_TIMEOUT_VALUE)
{
return HAL_TIMEOUT;
}
@@ -567,9 +568,9 @@ HAL_StatusTypeDef HAL_RCC_OscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct)
tickstart = HAL_GetTick();
/* Wait till LSE is ready */
- while(__HAL_RCC_GET_FLAG(RCC_FLAG_LSERDY) != RESET)
+ while (__HAL_RCC_GET_FLAG(RCC_FLAG_LSERDY) != RESET)
{
- if((HAL_GetTick() - tickstart ) > RCC_LSE_TIMEOUT_VALUE)
+ if ((HAL_GetTick() - tickstart) > RCC_LSE_TIMEOUT_VALUE)
{
return HAL_TIMEOUT;
}
@@ -577,7 +578,7 @@ HAL_StatusTypeDef HAL_RCC_OscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct)
}
/* Restore clock configuration if changed */
- if(pwrclkchanged == SET)
+ if (pwrclkchanged == SET)
{
__HAL_RCC_PWR_CLK_DISABLE();
}
@@ -588,9 +589,9 @@ HAL_StatusTypeDef HAL_RCC_OscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct)
if ((RCC_OscInitStruct->PLL.PLLState) != RCC_PLL_NONE)
{
/* Check if the PLL is used as system clock or not */
- if(__HAL_RCC_GET_SYSCLK_SOURCE() != RCC_SYSCLKSOURCE_STATUS_PLLCLK)
+ if (__HAL_RCC_GET_SYSCLK_SOURCE() != RCC_SYSCLKSOURCE_STATUS_PLLCLK)
{
- if((RCC_OscInitStruct->PLL.PLLState) == RCC_PLL_ON)
+ if ((RCC_OscInitStruct->PLL.PLLState) == RCC_PLL_ON)
{
/* Check the parameters */
assert_param(IS_RCC_PLLSOURCE(RCC_OscInitStruct->PLL.PLLSource));
@@ -609,9 +610,9 @@ HAL_StatusTypeDef HAL_RCC_OscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct)
tickstart = HAL_GetTick();
/* Wait till PLL is ready */
- while(__HAL_RCC_GET_FLAG(RCC_FLAG_PLLRDY) != RESET)
+ while (__HAL_RCC_GET_FLAG(RCC_FLAG_PLLRDY) != RESET)
{
- if((HAL_GetTick() - tickstart ) > PLL_TIMEOUT_VALUE)
+ if ((HAL_GetTick() - tickstart) > PLL_TIMEOUT_VALUE)
{
return HAL_TIMEOUT;
}
@@ -640,9 +641,9 @@ HAL_StatusTypeDef HAL_RCC_OscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct)
tickstart = HAL_GetTick();
/* Wait till PLL is ready */
- while(__HAL_RCC_GET_FLAG(RCC_FLAG_PLLRDY) == RESET)
+ while (__HAL_RCC_GET_FLAG(RCC_FLAG_PLLRDY) == RESET)
{
- if((HAL_GetTick() - tickstart ) > PLL_TIMEOUT_VALUE)
+ if ((HAL_GetTick() - tickstart) > PLL_TIMEOUT_VALUE)
{
return HAL_TIMEOUT;
}
@@ -657,9 +658,9 @@ HAL_StatusTypeDef HAL_RCC_OscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct)
tickstart = HAL_GetTick();
/* Wait till PLL is ready */
- while(__HAL_RCC_GET_FLAG(RCC_FLAG_PLLRDY) != RESET)
+ while (__HAL_RCC_GET_FLAG(RCC_FLAG_PLLRDY) != RESET)
{
- if((HAL_GetTick() - tickstart ) > PLL_TIMEOUT_VALUE)
+ if ((HAL_GetTick() - tickstart) > PLL_TIMEOUT_VALUE)
{
return HAL_TIMEOUT;
}
@@ -668,7 +669,27 @@ HAL_StatusTypeDef HAL_RCC_OscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct)
}
else
{
- return HAL_ERROR;
+ /* Do not return HAL_ERROR if request repeats the current configuration */
+ pll_config = RCC->PLLCFGR;
+#if defined (RCC_PLLCFGR_PLLR)
+ if (((RCC_OscInitStruct->PLL.PLLState) == RCC_PLL_OFF) ||
+ (READ_BIT(pll_config, RCC_PLLCFGR_PLLSRC) != RCC_OscInitStruct->PLL.PLLSource) ||
+ (READ_BIT(pll_config, RCC_PLLCFGR_PLLM) != RCC_OscInitStruct->PLL.PLLM) ||
+ (READ_BIT(pll_config, RCC_PLLCFGR_PLLN) != (RCC_OscInitStruct->PLL.PLLN << RCC_PLLCFGR_PLLN_Pos)) ||
+ (READ_BIT(pll_config, RCC_PLLCFGR_PLLP) != ((((RCC_OscInitStruct->PLL.PLLP) >> 1U) - 1U) << RCC_PLLCFGR_PLLP_Pos)) ||
+ (READ_BIT(pll_config, RCC_PLLCFGR_PLLQ) != (RCC_OscInitStruct->PLL.PLLQ << RCC_PLLCFGR_PLLQ_Pos)) ||
+ (READ_BIT(pll_config, RCC_PLLCFGR_PLLR) != (RCC_OscInitStruct->PLL.PLLR << RCC_PLLCFGR_PLLR_Pos)))
+#else
+ if (((RCC_OscInitStruct->PLL.PLLState) == RCC_PLL_OFF) ||
+ (READ_BIT(pll_config, RCC_PLLCFGR_PLLSRC) != RCC_OscInitStruct->PLL.PLLSource) ||
+ (READ_BIT(pll_config, RCC_PLLCFGR_PLLM) != RCC_OscInitStruct->PLL.PLLM) ||
+ (READ_BIT(pll_config, RCC_PLLCFGR_PLLN) != (RCC_OscInitStruct->PLL.PLLN << RCC_PLLCFGR_PLLN_Pos)) ||
+ (READ_BIT(pll_config, RCC_PLLCFGR_PLLP) != ((((RCC_OscInitStruct->PLL.PLLP) >> 1U) - 1U) << RCC_PLLCFGR_PLLP_Pos)) ||
+ (READ_BIT(pll_config, RCC_PLLCFGR_PLLQ) != (RCC_OscInitStruct->PLL.PLLQ << RCC_PLLCFGR_PLLQ_Pos)))
+#endif
+ {
+ return HAL_ERROR;
+ }
}
}
return HAL_OK;
@@ -705,7 +726,7 @@ HAL_StatusTypeDef HAL_RCC_ClockConfig(RCC_ClkInitTypeDef *RCC_ClkInitStruct, ui
uint32_t tickstart = 0;
/* Check Null pointer */
- if(RCC_ClkInitStruct == NULL)
+ if (RCC_ClkInitStruct == NULL)
{
return HAL_ERROR;
}
@@ -719,30 +740,30 @@ HAL_StatusTypeDef HAL_RCC_ClockConfig(RCC_ClkInitTypeDef *RCC_ClkInitStruct, ui
(HCLK) and the supply voltage of the device. */
/* Increasing the CPU frequency */
- if(FLatency > __HAL_FLASH_GET_LATENCY())
+ if (FLatency > __HAL_FLASH_GET_LATENCY())
{
/* Program the new number of wait states to the LATENCY bits in the FLASH_ACR register */
__HAL_FLASH_SET_LATENCY(FLatency);
/* Check that the new number of wait states is taken into account to access the Flash
memory by reading the FLASH_ACR register */
- if(__HAL_FLASH_GET_LATENCY() != FLatency)
+ if (__HAL_FLASH_GET_LATENCY() != FLatency)
{
return HAL_ERROR;
}
}
/*-------------------------- HCLK Configuration --------------------------*/
- if(((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_HCLK) == RCC_CLOCKTYPE_HCLK)
+ if (((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_HCLK) == RCC_CLOCKTYPE_HCLK)
{
/* Set the highest APBx dividers in order to ensure that we do not go through
a non-spec phase whatever we decrease or increase HCLK. */
- if(((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_PCLK1) == RCC_CLOCKTYPE_PCLK1)
+ if (((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_PCLK1) == RCC_CLOCKTYPE_PCLK1)
{
MODIFY_REG(RCC->CFGR, RCC_CFGR_PPRE1, RCC_HCLK_DIV16);
}
- if(((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_PCLK2) == RCC_CLOCKTYPE_PCLK2)
+ if (((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_PCLK2) == RCC_CLOCKTYPE_PCLK2)
{
MODIFY_REG(RCC->CFGR, RCC_CFGR_PPRE2, (RCC_HCLK_DIV16 << 3));
}
@@ -753,24 +774,24 @@ HAL_StatusTypeDef HAL_RCC_ClockConfig(RCC_ClkInitTypeDef *RCC_ClkInitStruct, ui
}
/*------------------------- SYSCLK Configuration ---------------------------*/
- if(((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_SYSCLK) == RCC_CLOCKTYPE_SYSCLK)
+ if (((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_SYSCLK) == RCC_CLOCKTYPE_SYSCLK)
{
assert_param(IS_RCC_SYSCLKSOURCE(RCC_ClkInitStruct->SYSCLKSource));
/* HSE is selected as System Clock Source */
- if(RCC_ClkInitStruct->SYSCLKSource == RCC_SYSCLKSOURCE_HSE)
+ if (RCC_ClkInitStruct->SYSCLKSource == RCC_SYSCLKSOURCE_HSE)
{
/* Check the HSE ready flag */
- if(__HAL_RCC_GET_FLAG(RCC_FLAG_HSERDY) == RESET)
+ if (__HAL_RCC_GET_FLAG(RCC_FLAG_HSERDY) == RESET)
{
return HAL_ERROR;
}
}
/* PLL is selected as System Clock Source */
- else if(RCC_ClkInitStruct->SYSCLKSource == RCC_SYSCLKSOURCE_PLLCLK)
+ else if (RCC_ClkInitStruct->SYSCLKSource == RCC_SYSCLKSOURCE_PLLCLK)
{
/* Check the PLL ready flag */
- if(__HAL_RCC_GET_FLAG(RCC_FLAG_PLLRDY) == RESET)
+ if (__HAL_RCC_GET_FLAG(RCC_FLAG_PLLRDY) == RESET)
{
return HAL_ERROR;
}
@@ -779,7 +800,7 @@ HAL_StatusTypeDef HAL_RCC_ClockConfig(RCC_ClkInitTypeDef *RCC_ClkInitStruct, ui
else
{
/* Check the HSI ready flag */
- if(__HAL_RCC_GET_FLAG(RCC_FLAG_HSIRDY) == RESET)
+ if (__HAL_RCC_GET_FLAG(RCC_FLAG_HSIRDY) == RESET)
{
return HAL_ERROR;
}
@@ -800,38 +821,38 @@ HAL_StatusTypeDef HAL_RCC_ClockConfig(RCC_ClkInitTypeDef *RCC_ClkInitStruct, ui
}
/* Decreasing the number of wait states because of lower CPU frequency */
- if(FLatency < __HAL_FLASH_GET_LATENCY())
+ if (FLatency < __HAL_FLASH_GET_LATENCY())
{
/* Program the new number of wait states to the LATENCY bits in the FLASH_ACR register */
__HAL_FLASH_SET_LATENCY(FLatency);
/* Check that the new number of wait states is taken into account to access the Flash
memory by reading the FLASH_ACR register */
- if(__HAL_FLASH_GET_LATENCY() != FLatency)
+ if (__HAL_FLASH_GET_LATENCY() != FLatency)
{
return HAL_ERROR;
}
}
/*-------------------------- PCLK1 Configuration ---------------------------*/
- if(((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_PCLK1) == RCC_CLOCKTYPE_PCLK1)
+ if (((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_PCLK1) == RCC_CLOCKTYPE_PCLK1)
{
assert_param(IS_RCC_PCLK(RCC_ClkInitStruct->APB1CLKDivider));
MODIFY_REG(RCC->CFGR, RCC_CFGR_PPRE1, RCC_ClkInitStruct->APB1CLKDivider);
}
/*-------------------------- PCLK2 Configuration ---------------------------*/
- if(((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_PCLK2) == RCC_CLOCKTYPE_PCLK2)
+ if (((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_PCLK2) == RCC_CLOCKTYPE_PCLK2)
{
assert_param(IS_RCC_PCLK(RCC_ClkInitStruct->APB2CLKDivider));
MODIFY_REG(RCC->CFGR, RCC_CFGR_PPRE2, ((RCC_ClkInitStruct->APB2CLKDivider) << 3));
}
/* Update the SystemCoreClock global variable */
- SystemCoreClock = HAL_RCC_GetSysClockFreq() >> AHBPrescTable[(RCC->CFGR & RCC_CFGR_HPRE)>> RCC_CFGR_HPRE_Pos];
+ SystemCoreClock = HAL_RCC_GetSysClockFreq() >> AHBPrescTable[(RCC->CFGR & RCC_CFGR_HPRE) >> RCC_CFGR_HPRE_Pos];
/* Configure the source of time base considering new system clocks settings*/
- HAL_InitTick (TICK_INT_PRIORITY);
+ HAL_InitTick(uwTickPrio);
return HAL_OK;
}
@@ -888,7 +909,7 @@ void HAL_RCC_MCOConfig(uint32_t RCC_MCOx, uint32_t RCC_MCOSource, uint32_t RCC_M
assert_param(IS_RCC_MCO(RCC_MCOx));
assert_param(IS_RCC_MCODIV(RCC_MCODiv));
/* RCC_MCO1 */
- if(RCC_MCOx == RCC_MCO1)
+ if (RCC_MCOx == RCC_MCO1)
{
assert_param(IS_RCC_MCO1SOURCE(RCC_MCOSource));
@@ -990,7 +1011,7 @@ uint32_t HAL_RCC_GetSysClockFreq(void)
case RCC_SYSCLKSOURCE_STATUS_HSI: /* HSI used as system clock source */
{
sysclockfreq = HSI_VALUE;
- break;
+ break;
}
case RCC_SYSCLKSOURCE_STATUS_HSE: /* HSE used as system clock source */
{
@@ -1005,16 +1026,16 @@ uint32_t HAL_RCC_GetSysClockFreq(void)
if (__HAL_RCC_GET_PLL_OSCSOURCE() != RCC_PLLCFGR_PLLSRC_HSI)
{
/* HSE used as PLL clock source */
- pllvco = (uint32_t) ((((uint64_t) HSE_VALUE * ((uint64_t) ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> RCC_PLLCFGR_PLLN_Pos)))) / (uint64_t)pllm);
+ pllvco = (uint32_t)((((uint64_t) HSE_VALUE * ((uint64_t)((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> RCC_PLLCFGR_PLLN_Pos)))) / (uint64_t)pllm);
}
else
{
/* HSI used as PLL clock source */
- pllvco = (uint32_t) ((((uint64_t) HSI_VALUE * ((uint64_t) ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> RCC_PLLCFGR_PLLN_Pos)))) / (uint64_t)pllm);
+ pllvco = (uint32_t)((((uint64_t) HSI_VALUE * ((uint64_t)((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> RCC_PLLCFGR_PLLN_Pos)))) / (uint64_t)pllm);
}
- pllp = ((((RCC->PLLCFGR & RCC_PLLCFGR_PLLP) >> RCC_PLLCFGR_PLLP_Pos) + 1 ) *2);
+ pllp = ((((RCC->PLLCFGR & RCC_PLLCFGR_PLLP) >> RCC_PLLCFGR_PLLP_Pos) + 1) * 2);
- sysclockfreq = pllvco/pllp;
+ sysclockfreq = pllvco / pllp;
break;
}
default:
@@ -1047,7 +1068,7 @@ uint32_t HAL_RCC_GetHCLKFreq(void)
uint32_t HAL_RCC_GetPCLK1Freq(void)
{
/* Get HCLK source and Compute PCLK1 frequency ---------------------------*/
- return (HAL_RCC_GetHCLKFreq() >> APBPrescTable[(RCC->CFGR & RCC_CFGR_PPRE1)>> RCC_CFGR_PPRE1_Pos]);
+ return (HAL_RCC_GetHCLKFreq() >> APBPrescTable[(RCC->CFGR & RCC_CFGR_PPRE1) >> RCC_CFGR_PPRE1_Pos]);
}
/**
@@ -1059,7 +1080,7 @@ uint32_t HAL_RCC_GetPCLK1Freq(void)
uint32_t HAL_RCC_GetPCLK2Freq(void)
{
/* Get HCLK source and Compute PCLK2 frequency ---------------------------*/
- return (HAL_RCC_GetHCLKFreq()>> APBPrescTable[(RCC->CFGR & RCC_CFGR_PPRE2)>> RCC_CFGR_PPRE2_Pos]);
+ return (HAL_RCC_GetHCLKFreq() >> APBPrescTable[(RCC->CFGR & RCC_CFGR_PPRE2) >> RCC_CFGR_PPRE2_Pos]);
}
/**
@@ -1075,11 +1096,11 @@ void HAL_RCC_GetOscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct)
RCC_OscInitStruct->OscillatorType = RCC_OSCILLATORTYPE_HSE | RCC_OSCILLATORTYPE_HSI | RCC_OSCILLATORTYPE_LSE | RCC_OSCILLATORTYPE_LSI;
/* Get the HSE configuration -----------------------------------------------*/
- if((RCC->CR &RCC_CR_HSEBYP) == RCC_CR_HSEBYP)
+ if ((RCC->CR & RCC_CR_HSEBYP) == RCC_CR_HSEBYP)
{
RCC_OscInitStruct->HSEState = RCC_HSE_BYPASS;
}
- else if((RCC->CR &RCC_CR_HSEON) == RCC_CR_HSEON)
+ else if ((RCC->CR & RCC_CR_HSEON) == RCC_CR_HSEON)
{
RCC_OscInitStruct->HSEState = RCC_HSE_ON;
}
@@ -1089,7 +1110,7 @@ void HAL_RCC_GetOscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct)
}
/* Get the HSI configuration -----------------------------------------------*/
- if((RCC->CR &RCC_CR_HSION) == RCC_CR_HSION)
+ if ((RCC->CR & RCC_CR_HSION) == RCC_CR_HSION)
{
RCC_OscInitStruct->HSIState = RCC_HSI_ON;
}
@@ -1098,14 +1119,14 @@ void HAL_RCC_GetOscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct)
RCC_OscInitStruct->HSIState = RCC_HSI_OFF;
}
- RCC_OscInitStruct->HSICalibrationValue = (uint32_t)((RCC->CR &RCC_CR_HSITRIM) >> RCC_CR_HSITRIM_Pos);
+ RCC_OscInitStruct->HSICalibrationValue = (uint32_t)((RCC->CR & RCC_CR_HSITRIM) >> RCC_CR_HSITRIM_Pos);
/* Get the LSE configuration -----------------------------------------------*/
- if((RCC->BDCR &RCC_BDCR_LSEBYP) == RCC_BDCR_LSEBYP)
+ if ((RCC->BDCR & RCC_BDCR_LSEBYP) == RCC_BDCR_LSEBYP)
{
RCC_OscInitStruct->LSEState = RCC_LSE_BYPASS;
}
- else if((RCC->BDCR &RCC_BDCR_LSEON) == RCC_BDCR_LSEON)
+ else if ((RCC->BDCR & RCC_BDCR_LSEON) == RCC_BDCR_LSEON)
{
RCC_OscInitStruct->LSEState = RCC_LSE_ON;
}
@@ -1115,7 +1136,7 @@ void HAL_RCC_GetOscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct)
}
/* Get the LSI configuration -----------------------------------------------*/
- if((RCC->CSR &RCC_CSR_LSION) == RCC_CSR_LSION)
+ if ((RCC->CSR & RCC_CSR_LSION) == RCC_CSR_LSION)
{
RCC_OscInitStruct->LSIState = RCC_LSI_ON;
}
@@ -1125,7 +1146,7 @@ void HAL_RCC_GetOscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct)
}
/* Get the PLL configuration -----------------------------------------------*/
- if((RCC->CR &RCC_CR_PLLON) == RCC_CR_PLLON)
+ if ((RCC->CR & RCC_CR_PLLON) == RCC_CR_PLLON)
{
RCC_OscInitStruct->PLL.PLLState = RCC_PLL_ON;
}
@@ -1180,7 +1201,7 @@ void HAL_RCC_GetClockConfig(RCC_ClkInitTypeDef *RCC_ClkInitStruct, uint32_t *pF
void HAL_RCC_NMI_IRQHandler(void)
{
/* Check RCC CSSF flag */
- if(__HAL_RCC_GET_IT(RCC_IT_CSS))
+ if (__HAL_RCC_GET_IT(RCC_IT_CSS))
{
/* RCC Clock Security System interrupt user callback */
HAL_RCC_CSSCallback();
diff --git a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_Keil/Boot/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_tim.c b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_Keil/Boot/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_tim.c
index c4676923..29de7d5b 100644
--- a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_Keil/Boot/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_tim.c
+++ b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_Keil/Boot/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_tim.c
@@ -98,18 +98,22 @@
*** Callback registration ***
=============================================
+ [..]
The compilation define USE_HAL_TIM_REGISTER_CALLBACKS when set to 1
allows the user to configure dynamically the driver callbacks.
+ [..]
Use Function @ref HAL_TIM_RegisterCallback() to register a callback.
@ref HAL_TIM_RegisterCallback() takes as parameters the HAL peripheral handle,
the Callback ID and a pointer to the user callback function.
+ [..]
Use function @ref HAL_TIM_UnRegisterCallback() to reset a callback to the default
weak function.
@ref HAL_TIM_UnRegisterCallback takes as parameters the HAL peripheral handle,
and the Callback ID.
+ [..]
These functions allow to register/unregister following callbacks:
(+) Base_MspInitCallback : TIM Base Msp Init Callback.
(+) Base_MspDeInitCallback : TIM Base Msp DeInit Callback.
@@ -140,15 +144,18 @@
(+) BreakCallback : TIM Break Callback.
(+) Break2Callback : TIM Break2 Callback.
+ [..]
By default, after the Init and when the state is HAL_TIM_STATE_RESET
all interrupt callbacks are set to the corresponding weak functions:
examples @ref HAL_TIM_TriggerCallback(), @ref HAL_TIM_ErrorCallback().
+ [..]
Exception done for MspInit and MspDeInit functions that are reset to the legacy weak
functionalities in the Init / DeInit only when these callbacks are null
(not registered beforehand). If not, MspInit or MspDeInit are not null, the Init / DeInit
keep and use the user MspInit / MspDeInit callbacks(registered beforehand)
+ [..]
Callbacks can be registered / unregistered in HAL_TIM_STATE_READY state only.
Exception done MspInit / MspDeInit that can be registered / unregistered
in HAL_TIM_STATE_READY or HAL_TIM_STATE_RESET state,
@@ -156,6 +163,7 @@ all interrupt callbacks are set to the corresponding weak functions:
In that case first register the MspInit/MspDeInit user callbacks
using @ref HAL_TIM_RegisterCallback() before calling DeInit or Init function.
+ [..]
When The compilation define USE_HAL_TIM_REGISTER_CALLBACKS is set to 0 or
not defined, the callback registration feature is not available and all callbacks
are set to the corresponding weak functions.
@@ -216,7 +224,7 @@ static void TIM_DMAPeriodElapsedHalfCplt(DMA_HandleTypeDef *hdma);
static void TIM_DMATriggerCplt(DMA_HandleTypeDef *hdma);
static void TIM_DMATriggerHalfCplt(DMA_HandleTypeDef *hdma);
static HAL_StatusTypeDef TIM_SlaveTimer_SetConfig(TIM_HandleTypeDef *htim,
- TIM_SlaveConfigTypeDef *sSlaveConfig);
+ TIM_SlaveConfigTypeDef *sSlaveConfig);
/**
* @}
*/
@@ -227,8 +235,8 @@ static HAL_StatusTypeDef TIM_SlaveTimer_SetConfig(TIM_HandleTypeDef *htim,
*/
/** @defgroup TIM_Exported_Functions_Group1 TIM Time Base functions
- * @brief Time Base functions
- *
+ * @brief Time Base functions
+ *
@verbatim
==============================================================================
##### Time Base functions #####
@@ -482,11 +490,11 @@ HAL_StatusTypeDef HAL_TIM_Base_Start_DMA(TIM_HandleTypeDef *htim, uint32_t *pDat
/* Check the parameters */
assert_param(IS_TIM_DMA_INSTANCE(htim->Instance));
- if ((htim->State == HAL_TIM_STATE_BUSY))
+ if (htim->State == HAL_TIM_STATE_BUSY)
{
return HAL_BUSY;
}
- else if ((htim->State == HAL_TIM_STATE_READY))
+ else if (htim->State == HAL_TIM_STATE_READY)
{
if ((pData == NULL) && (Length > 0U))
{
@@ -559,8 +567,8 @@ HAL_StatusTypeDef HAL_TIM_Base_Stop_DMA(TIM_HandleTypeDef *htim)
*/
/** @defgroup TIM_Exported_Functions_Group2 TIM Output Compare functions
- * @brief TIM Output Compare functions
- *
+ * @brief TIM Output Compare functions
+ *
@verbatim
==============================================================================
##### TIM Output Compare functions #####
@@ -929,16 +937,16 @@ HAL_StatusTypeDef HAL_TIM_OC_Stop_IT(TIM_HandleTypeDef *htim, uint32_t Channel)
*/
HAL_StatusTypeDef HAL_TIM_OC_Start_DMA(TIM_HandleTypeDef *htim, uint32_t Channel, uint32_t *pData, uint16_t Length)
{
- uint32_t tmpsmcr;
+ uint32_t tmpsmcr;
/* Check the parameters */
assert_param(IS_TIM_CCX_INSTANCE(htim->Instance, Channel));
- if ((htim->State == HAL_TIM_STATE_BUSY))
+ if (htim->State == HAL_TIM_STATE_BUSY)
{
return HAL_BUSY;
}
- else if ((htim->State == HAL_TIM_STATE_READY))
+ else if (htim->State == HAL_TIM_STATE_READY)
{
if ((pData == NULL) && (Length > 0U))
{
@@ -1136,8 +1144,8 @@ HAL_StatusTypeDef HAL_TIM_OC_Stop_DMA(TIM_HandleTypeDef *htim, uint32_t Channel)
*/
/** @defgroup TIM_Exported_Functions_Group3 TIM PWM functions
- * @brief TIM PWM functions
- *
+ * @brief TIM PWM functions
+ *
@verbatim
==============================================================================
##### TIM PWM functions #####
@@ -1513,11 +1521,11 @@ HAL_StatusTypeDef HAL_TIM_PWM_Start_DMA(TIM_HandleTypeDef *htim, uint32_t Channe
/* Check the parameters */
assert_param(IS_TIM_CCX_INSTANCE(htim->Instance, Channel));
- if ((htim->State == HAL_TIM_STATE_BUSY))
+ if (htim->State == HAL_TIM_STATE_BUSY)
{
return HAL_BUSY;
}
- else if ((htim->State == HAL_TIM_STATE_READY))
+ else if (htim->State == HAL_TIM_STATE_READY)
{
if ((pData == NULL) && (Length > 0U))
{
@@ -1714,8 +1722,8 @@ HAL_StatusTypeDef HAL_TIM_PWM_Stop_DMA(TIM_HandleTypeDef *htim, uint32_t Channel
*/
/** @defgroup TIM_Exported_Functions_Group4 TIM Input Capture functions
- * @brief TIM Input Capture functions
- *
+ * @brief TIM Input Capture functions
+ *
@verbatim
==============================================================================
##### TIM Input Capture functions #####
@@ -2061,11 +2069,11 @@ HAL_StatusTypeDef HAL_TIM_IC_Start_DMA(TIM_HandleTypeDef *htim, uint32_t Channel
assert_param(IS_TIM_CCX_INSTANCE(htim->Instance, Channel));
assert_param(IS_TIM_DMA_CC_INSTANCE(htim->Instance));
- if ((htim->State == HAL_TIM_STATE_BUSY))
+ if (htim->State == HAL_TIM_STATE_BUSY)
{
return HAL_BUSY;
}
- else if ((htim->State == HAL_TIM_STATE_READY))
+ else if (htim->State == HAL_TIM_STATE_READY)
{
if ((pData == NULL) && (Length > 0U))
{
@@ -2249,8 +2257,8 @@ HAL_StatusTypeDef HAL_TIM_IC_Stop_DMA(TIM_HandleTypeDef *htim, uint32_t Channel)
*/
/** @defgroup TIM_Exported_Functions_Group5 TIM One Pulse functions
- * @brief TIM One Pulse functions
- *
+ * @brief TIM One Pulse functions
+ *
@verbatim
==============================================================================
##### TIM One Pulse functions #####
@@ -2563,8 +2571,8 @@ HAL_StatusTypeDef HAL_TIM_OnePulse_Stop_IT(TIM_HandleTypeDef *htim, uint32_t Out
*/
/** @defgroup TIM_Exported_Functions_Group6 TIM Encoder functions
- * @brief TIM Encoder functions
- *
+ * @brief TIM Encoder functions
+ *
@verbatim
==============================================================================
##### TIM Encoder functions #####
@@ -2609,15 +2617,15 @@ HAL_StatusTypeDef HAL_TIM_Encoder_Init(TIM_HandleTypeDef *htim, TIM_Encoder_Ini
}
/* Check the parameters */
+ assert_param(IS_TIM_ENCODER_INTERFACE_INSTANCE(htim->Instance));
assert_param(IS_TIM_COUNTER_MODE(htim->Init.CounterMode));
assert_param(IS_TIM_CLOCKDIVISION_DIV(htim->Init.ClockDivision));
assert_param(IS_TIM_AUTORELOAD_PRELOAD(htim->Init.AutoReloadPreload));
- assert_param(IS_TIM_CC2_INSTANCE(htim->Instance));
assert_param(IS_TIM_ENCODER_MODE(sConfig->EncoderMode));
assert_param(IS_TIM_IC_SELECTION(sConfig->IC1Selection));
assert_param(IS_TIM_IC_SELECTION(sConfig->IC2Selection));
- assert_param(IS_TIM_IC_POLARITY(sConfig->IC1Polarity));
- assert_param(IS_TIM_IC_POLARITY(sConfig->IC2Polarity));
+ assert_param(IS_TIM_ENCODERINPUT_POLARITY(sConfig->IC1Polarity));
+ assert_param(IS_TIM_ENCODERINPUT_POLARITY(sConfig->IC2Polarity));
assert_param(IS_TIM_IC_PRESCALER(sConfig->IC1Prescaler));
assert_param(IS_TIM_IC_PRESCALER(sConfig->IC2Prescaler));
assert_param(IS_TIM_IC_FILTER(sConfig->IC1Filter));
@@ -2775,7 +2783,7 @@ __weak void HAL_TIM_Encoder_MspDeInit(TIM_HandleTypeDef *htim)
HAL_StatusTypeDef HAL_TIM_Encoder_Start(TIM_HandleTypeDef *htim, uint32_t Channel)
{
/* Check the parameters */
- assert_param(IS_TIM_CC2_INSTANCE(htim->Instance));
+ assert_param(IS_TIM_ENCODER_INTERFACE_INSTANCE(htim->Instance));
/* Enable the encoder interface channels */
switch (Channel)
@@ -2819,7 +2827,7 @@ HAL_StatusTypeDef HAL_TIM_Encoder_Start(TIM_HandleTypeDef *htim, uint32_t Channe
HAL_StatusTypeDef HAL_TIM_Encoder_Stop(TIM_HandleTypeDef *htim, uint32_t Channel)
{
/* Check the parameters */
- assert_param(IS_TIM_CC2_INSTANCE(htim->Instance));
+ assert_param(IS_TIM_ENCODER_INTERFACE_INSTANCE(htim->Instance));
/* Disable the Input Capture channels 1 and 2
(in the EncoderInterface the two possible channels that can be used are TIM_CHANNEL_1 and TIM_CHANNEL_2) */
@@ -2865,7 +2873,7 @@ HAL_StatusTypeDef HAL_TIM_Encoder_Stop(TIM_HandleTypeDef *htim, uint32_t Channel
HAL_StatusTypeDef HAL_TIM_Encoder_Start_IT(TIM_HandleTypeDef *htim, uint32_t Channel)
{
/* Check the parameters */
- assert_param(IS_TIM_CC2_INSTANCE(htim->Instance));
+ assert_param(IS_TIM_ENCODER_INTERFACE_INSTANCE(htim->Instance));
/* Enable the encoder interface channels */
/* Enable the capture compare Interrupts 1 and/or 2 */
@@ -2915,7 +2923,7 @@ HAL_StatusTypeDef HAL_TIM_Encoder_Start_IT(TIM_HandleTypeDef *htim, uint32_t Cha
HAL_StatusTypeDef HAL_TIM_Encoder_Stop_IT(TIM_HandleTypeDef *htim, uint32_t Channel)
{
/* Check the parameters */
- assert_param(IS_TIM_CC2_INSTANCE(htim->Instance));
+ assert_param(IS_TIM_ENCODER_INTERFACE_INSTANCE(htim->Instance));
/* Disable the Input Capture channels 1 and 2
(in the EncoderInterface the two possible channels that can be used are TIM_CHANNEL_1 and TIM_CHANNEL_2) */
@@ -2966,16 +2974,17 @@ HAL_StatusTypeDef HAL_TIM_Encoder_Stop_IT(TIM_HandleTypeDef *htim, uint32_t Chan
* @param Length The length of data to be transferred from TIM peripheral to memory.
* @retval HAL status
*/
-HAL_StatusTypeDef HAL_TIM_Encoder_Start_DMA(TIM_HandleTypeDef *htim, uint32_t Channel, uint32_t *pData1, uint32_t *pData2, uint16_t Length)
+HAL_StatusTypeDef HAL_TIM_Encoder_Start_DMA(TIM_HandleTypeDef *htim, uint32_t Channel, uint32_t *pData1,
+ uint32_t *pData2, uint16_t Length)
{
/* Check the parameters */
- assert_param(IS_TIM_DMA_CC_INSTANCE(htim->Instance));
+ assert_param(IS_TIM_ENCODER_INTERFACE_INSTANCE(htim->Instance));
- if ((htim->State == HAL_TIM_STATE_BUSY))
+ if (htim->State == HAL_TIM_STATE_BUSY)
{
return HAL_BUSY;
}
- else if ((htim->State == HAL_TIM_STATE_READY))
+ else if (htim->State == HAL_TIM_STATE_READY)
{
if ((((pData1 == NULL) || (pData2 == NULL))) && (Length > 0U))
{
@@ -3103,7 +3112,7 @@ HAL_StatusTypeDef HAL_TIM_Encoder_Start_DMA(TIM_HandleTypeDef *htim, uint32_t Ch
HAL_StatusTypeDef HAL_TIM_Encoder_Stop_DMA(TIM_HandleTypeDef *htim, uint32_t Channel)
{
/* Check the parameters */
- assert_param(IS_TIM_DMA_CC_INSTANCE(htim->Instance));
+ assert_param(IS_TIM_ENCODER_INTERFACE_INSTANCE(htim->Instance));
/* Disable the Input Capture channels 1 and 2
(in the EncoderInterface the two possible channels that can be used are TIM_CHANNEL_1 and TIM_CHANNEL_2) */
@@ -3149,8 +3158,8 @@ HAL_StatusTypeDef HAL_TIM_Encoder_Stop_DMA(TIM_HandleTypeDef *htim, uint32_t Cha
* @}
*/
/** @defgroup TIM_Exported_Functions_Group7 TIM IRQ handler management
- * @brief TIM IRQ handler management
- *
+ * @brief TIM IRQ handler management
+ *
@verbatim
==============================================================================
##### IRQ handler management #####
@@ -3363,8 +3372,8 @@ void HAL_TIM_IRQHandler(TIM_HandleTypeDef *htim)
*/
/** @defgroup TIM_Exported_Functions_Group8 TIM Peripheral Control functions
- * @brief TIM Peripheral Control functions
- *
+ * @brief TIM Peripheral Control functions
+ *
@verbatim
==============================================================================
##### Peripheral Control functions #####
@@ -3738,9 +3747,14 @@ HAL_StatusTypeDef HAL_TIM_PWM_ConfigChannel(TIM_HandleTypeDef *htim,
* This parameter can be one of the following values:
* @arg TIM_CHANNEL_1: TIM Channel 1 selected
* @arg TIM_CHANNEL_2: TIM Channel 2 selected
+ * @note To output a waveform with a minimum delay user can enable the fast
+ * mode by calling the @ref __HAL_TIM_ENABLE_OCxFAST macro. Then CCx
+ * output is forced in response to the edge detection on TIx input,
+ * without taking in account the comparison.
* @retval HAL status
*/
-HAL_StatusTypeDef HAL_TIM_OnePulse_ConfigChannel(TIM_HandleTypeDef *htim, TIM_OnePulse_InitTypeDef *sConfig, uint32_t OutputChannel, uint32_t InputChannel)
+HAL_StatusTypeDef HAL_TIM_OnePulse_ConfigChannel(TIM_HandleTypeDef *htim, TIM_OnePulse_InitTypeDef *sConfig,
+ uint32_t OutputChannel, uint32_t InputChannel)
{
TIM_OC_InitTypeDef temp1;
@@ -3894,11 +3908,11 @@ HAL_StatusTypeDef HAL_TIM_DMABurst_WriteStart(TIM_HandleTypeDef *htim, uint32_t
assert_param(IS_TIM_DMA_SOURCE(BurstRequestSrc));
assert_param(IS_TIM_DMA_LENGTH(BurstLength));
- if ((htim->State == HAL_TIM_STATE_BUSY))
+ if (htim->State == HAL_TIM_STATE_BUSY)
{
return HAL_BUSY;
}
- else if ((htim->State == HAL_TIM_STATE_READY))
+ else if (htim->State == HAL_TIM_STATE_READY)
{
if ((BurstBuffer == NULL) && (BurstLength > 0U))
{
@@ -3941,7 +3955,8 @@ HAL_StatusTypeDef HAL_TIM_DMABurst_WriteStart(TIM_HandleTypeDef *htim, uint32_t
htim->hdma[TIM_DMA_ID_CC1]->XferErrorCallback = TIM_DMAError ;
/* Enable the DMA stream */
- if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC1], (uint32_t)BurstBuffer, (uint32_t)&htim->Instance->DMAR, ((BurstLength) >> 8U) + 1U) != HAL_OK)
+ if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC1], (uint32_t)BurstBuffer,
+ (uint32_t)&htim->Instance->DMAR, ((BurstLength) >> 8U) + 1U) != HAL_OK)
{
return HAL_ERROR;
}
@@ -3957,7 +3972,8 @@ HAL_StatusTypeDef HAL_TIM_DMABurst_WriteStart(TIM_HandleTypeDef *htim, uint32_t
htim->hdma[TIM_DMA_ID_CC2]->XferErrorCallback = TIM_DMAError ;
/* Enable the DMA stream */
- if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC2], (uint32_t)BurstBuffer, (uint32_t)&htim->Instance->DMAR, ((BurstLength) >> 8U) + 1U) != HAL_OK)
+ if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC2], (uint32_t)BurstBuffer,
+ (uint32_t)&htim->Instance->DMAR, ((BurstLength) >> 8U) + 1U) != HAL_OK)
{
return HAL_ERROR;
}
@@ -3973,7 +3989,8 @@ HAL_StatusTypeDef HAL_TIM_DMABurst_WriteStart(TIM_HandleTypeDef *htim, uint32_t
htim->hdma[TIM_DMA_ID_CC3]->XferErrorCallback = TIM_DMAError ;
/* Enable the DMA stream */
- if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC3], (uint32_t)BurstBuffer, (uint32_t)&htim->Instance->DMAR, ((BurstLength) >> 8U) + 1U) != HAL_OK)
+ if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC3], (uint32_t)BurstBuffer,
+ (uint32_t)&htim->Instance->DMAR, ((BurstLength) >> 8U) + 1U) != HAL_OK)
{
return HAL_ERROR;
}
@@ -3989,7 +4006,8 @@ HAL_StatusTypeDef HAL_TIM_DMABurst_WriteStart(TIM_HandleTypeDef *htim, uint32_t
htim->hdma[TIM_DMA_ID_CC4]->XferErrorCallback = TIM_DMAError ;
/* Enable the DMA stream */
- if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC4], (uint32_t)BurstBuffer, (uint32_t)&htim->Instance->DMAR, ((BurstLength) >> 8U) + 1U) != HAL_OK)
+ if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC4], (uint32_t)BurstBuffer,
+ (uint32_t)&htim->Instance->DMAR, ((BurstLength) >> 8U) + 1U) != HAL_OK)
{
return HAL_ERROR;
}
@@ -4005,7 +4023,8 @@ HAL_StatusTypeDef HAL_TIM_DMABurst_WriteStart(TIM_HandleTypeDef *htim, uint32_t
htim->hdma[TIM_DMA_ID_COMMUTATION]->XferErrorCallback = TIM_DMAError ;
/* Enable the DMA stream */
- if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_COMMUTATION], (uint32_t)BurstBuffer, (uint32_t)&htim->Instance->DMAR, ((BurstLength) >> 8U) + 1U) != HAL_OK)
+ if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_COMMUTATION], (uint32_t)BurstBuffer,
+ (uint32_t)&htim->Instance->DMAR, ((BurstLength) >> 8U) + 1U) != HAL_OK)
{
return HAL_ERROR;
}
@@ -4021,7 +4040,8 @@ HAL_StatusTypeDef HAL_TIM_DMABurst_WriteStart(TIM_HandleTypeDef *htim, uint32_t
htim->hdma[TIM_DMA_ID_TRIGGER]->XferErrorCallback = TIM_DMAError ;
/* Enable the DMA stream */
- if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_TRIGGER], (uint32_t)BurstBuffer, (uint32_t)&htim->Instance->DMAR, ((BurstLength) >> 8U) + 1U) != HAL_OK)
+ if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_TRIGGER], (uint32_t)BurstBuffer,
+ (uint32_t)&htim->Instance->DMAR, ((BurstLength) >> 8U) + 1U) != HAL_OK)
{
return HAL_ERROR;
}
@@ -4151,8 +4171,8 @@ HAL_StatusTypeDef HAL_TIM_DMABurst_WriteStop(TIM_HandleTypeDef *htim, uint32_t B
* @note This function should be used only when BurstLength is equal to DMA data transfer length.
* @retval HAL status
*/
-HAL_StatusTypeDef HAL_TIM_DMABurst_ReadStart(TIM_HandleTypeDef *htim, uint32_t BurstBaseAddress, uint32_t BurstRequestSrc,
- uint32_t *BurstBuffer, uint32_t BurstLength)
+HAL_StatusTypeDef HAL_TIM_DMABurst_ReadStart(TIM_HandleTypeDef *htim, uint32_t BurstBaseAddress,
+ uint32_t BurstRequestSrc, uint32_t *BurstBuffer, uint32_t BurstLength)
{
/* Check the parameters */
assert_param(IS_TIM_DMABURST_INSTANCE(htim->Instance));
@@ -4160,11 +4180,11 @@ HAL_StatusTypeDef HAL_TIM_DMABurst_ReadStart(TIM_HandleTypeDef *htim, uint32_t B
assert_param(IS_TIM_DMA_SOURCE(BurstRequestSrc));
assert_param(IS_TIM_DMA_LENGTH(BurstLength));
- if ((htim->State == HAL_TIM_STATE_BUSY))
+ if (htim->State == HAL_TIM_STATE_BUSY)
{
return HAL_BUSY;
}
- else if ((htim->State == HAL_TIM_STATE_READY))
+ else if (htim->State == HAL_TIM_STATE_READY)
{
if ((BurstBuffer == NULL) && (BurstLength > 0U))
{
@@ -4465,7 +4485,7 @@ HAL_StatusTypeDef HAL_TIM_ConfigOCrefClear(TIM_HandleTypeDef *htim,
/* When OCRef clear feature is used with ETR source, ETR prescaler must be off */
if (sClearInputConfig->ClearInputPrescaler != TIM_CLEARINPUTPRESCALER_DIV1)
{
- htim->State = HAL_TIM_STATE_READY;
+ htim->State = HAL_TIM_STATE_READY;
__HAL_UNLOCK(htim);
return HAL_ERROR;
}
@@ -4780,9 +4800,9 @@ HAL_StatusTypeDef HAL_TIM_SlaveConfigSynchro(TIM_HandleTypeDef *htim, TIM_SlaveC
htim->State = HAL_TIM_STATE_BUSY;
- if(TIM_SlaveTimer_SetConfig(htim, sSlaveConfig) != HAL_OK)
+ if (TIM_SlaveTimer_SetConfig(htim, sSlaveConfig) != HAL_OK)
{
- htim->State = HAL_TIM_STATE_READY;
+ htim->State = HAL_TIM_STATE_READY;
__HAL_UNLOCK(htim);
return HAL_ERROR;
}
@@ -4810,7 +4830,7 @@ HAL_StatusTypeDef HAL_TIM_SlaveConfigSynchro(TIM_HandleTypeDef *htim, TIM_SlaveC
* @retval HAL status
*/
HAL_StatusTypeDef HAL_TIM_SlaveConfigSynchro_IT(TIM_HandleTypeDef *htim,
- TIM_SlaveConfigTypeDef *sSlaveConfig)
+ TIM_SlaveConfigTypeDef *sSlaveConfig)
{
/* Check the parameters */
assert_param(IS_TIM_SLAVE_INSTANCE(htim->Instance));
@@ -4821,9 +4841,9 @@ HAL_StatusTypeDef HAL_TIM_SlaveConfigSynchro_IT(TIM_HandleTypeDef *htim,
htim->State = HAL_TIM_STATE_BUSY;
- if(TIM_SlaveTimer_SetConfig(htim, sSlaveConfig) != HAL_OK)
+ if (TIM_SlaveTimer_SetConfig(htim, sSlaveConfig) != HAL_OK)
{
- htim->State = HAL_TIM_STATE_READY;
+ htim->State = HAL_TIM_STATE_READY;
__HAL_UNLOCK(htim);
return HAL_ERROR;
}
@@ -4913,8 +4933,8 @@ uint32_t HAL_TIM_ReadCapturedValue(TIM_HandleTypeDef *htim, uint32_t Channel)
*/
/** @defgroup TIM_Exported_Functions_Group9 TIM Callbacks functions
- * @brief TIM Callbacks functions
- *
+ * @brief TIM Callbacks functions
+ *
@verbatim
==============================================================================
##### TIM Callbacks functions #####
@@ -5118,7 +5138,8 @@ __weak void HAL_TIM_ErrorCallback(TIM_HandleTypeDef *htim)
* @param pCallback pointer to the callback function
* @retval status
*/
-HAL_StatusTypeDef HAL_TIM_RegisterCallback(TIM_HandleTypeDef *htim, HAL_TIM_CallbackIDTypeDef CallbackID, pTIM_CallbackTypeDef pCallback)
+HAL_StatusTypeDef HAL_TIM_RegisterCallback(TIM_HandleTypeDef *htim, HAL_TIM_CallbackIDTypeDef CallbackID,
+ pTIM_CallbackTypeDef pCallback)
{
HAL_StatusTypeDef status = HAL_OK;
@@ -5578,8 +5599,8 @@ HAL_StatusTypeDef HAL_TIM_UnRegisterCallback(TIM_HandleTypeDef *htim, HAL_TIM_Ca
*/
/** @defgroup TIM_Exported_Functions_Group10 TIM Peripheral State functions
- * @brief TIM Peripheral State functions
- *
+ * @brief TIM Peripheral State functions
+ *
@verbatim
==============================================================================
##### Peripheral State functions #####
@@ -6365,7 +6386,7 @@ static void TIM_OC6_SetConfig(TIM_TypeDef *TIMx,
* @retval None
*/
static HAL_StatusTypeDef TIM_SlaveTimer_SetConfig(TIM_HandleTypeDef *htim,
- TIM_SlaveConfigTypeDef *sSlaveConfig)
+ TIM_SlaveConfigTypeDef *sSlaveConfig)
{
uint32_t tmpsmcr;
uint32_t tmpccmr1;
diff --git a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_Keil/Boot/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_tim_ex.c b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_Keil/Boot/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_tim_ex.c
index 271f11ec..f2d976ae 100644
--- a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_Keil/Boot/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_tim_ex.c
+++ b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_Keil/Boot/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_tim_ex.c
@@ -73,7 +73,7 @@
* opensource.org/licenses/BSD-3-Clause
*
******************************************************************************
-*/
+ */
/* Includes ------------------------------------------------------------------*/
#include "stm32f7xx_hal.h"
@@ -397,11 +397,11 @@ HAL_StatusTypeDef HAL_TIMEx_HallSensor_Start_DMA(TIM_HandleTypeDef *htim, uint32
/* Check the parameters */
assert_param(IS_TIM_HALL_SENSOR_INTERFACE_INSTANCE(htim->Instance));
- if ((htim->State == HAL_TIM_STATE_BUSY))
+ if (htim->State == HAL_TIM_STATE_BUSY)
{
return HAL_BUSY;
}
- else if ((htim->State == HAL_TIM_STATE_READY))
+ else if (htim->State == HAL_TIM_STATE_READY)
{
if (((uint32_t)pData == 0U) && (Length > 0U))
{
@@ -709,11 +709,11 @@ HAL_StatusTypeDef HAL_TIMEx_OCN_Start_DMA(TIM_HandleTypeDef *htim, uint32_t Chan
/* Check the parameters */
assert_param(IS_TIM_CCXN_INSTANCE(htim->Instance, Channel));
- if ((htim->State == HAL_TIM_STATE_BUSY))
+ if (htim->State == HAL_TIM_STATE_BUSY)
{
return HAL_BUSY;
}
- else if ((htim->State == HAL_TIM_STATE_READY))
+ else if (htim->State == HAL_TIM_STATE_READY)
{
if (((uint32_t)pData == 0U) && (Length > 0U))
{
@@ -1117,11 +1117,11 @@ HAL_StatusTypeDef HAL_TIMEx_PWMN_Start_DMA(TIM_HandleTypeDef *htim, uint32_t Cha
/* Check the parameters */
assert_param(IS_TIM_CCXN_INSTANCE(htim->Instance, Channel));
- if ((htim->State == HAL_TIM_STATE_BUSY))
+ if (htim->State == HAL_TIM_STATE_BUSY)
{
return HAL_BUSY;
}
- else if ((htim->State == HAL_TIM_STATE_READY))
+ else if (htim->State == HAL_TIM_STATE_READY)
{
if (((uint32_t)pData == 0U) && (Length > 0U))
{
@@ -1466,7 +1466,8 @@ HAL_StatusTypeDef HAL_TIMEx_OnePulseN_Stop_IT(TIM_HandleTypeDef *htim, uint32_t
* @arg TIM_COMMUTATION_SOFTWARE: Commutation source is set by software using the COMG bit
* @retval HAL status
*/
-HAL_StatusTypeDef HAL_TIMEx_ConfigCommutEvent(TIM_HandleTypeDef *htim, uint32_t InputTrigger, uint32_t CommutationSource)
+HAL_StatusTypeDef HAL_TIMEx_ConfigCommutEvent(TIM_HandleTypeDef *htim, uint32_t InputTrigger,
+ uint32_t CommutationSource)
{
/* Check the parameters */
assert_param(IS_TIM_COMMUTATION_EVENT_INSTANCE(htim->Instance));
@@ -1521,7 +1522,8 @@ HAL_StatusTypeDef HAL_TIMEx_ConfigCommutEvent(TIM_HandleTypeDef *htim, uint32_t
* @arg TIM_COMMUTATION_SOFTWARE: Commutation source is set by software using the COMG bit
* @retval HAL status
*/
-HAL_StatusTypeDef HAL_TIMEx_ConfigCommutEvent_IT(TIM_HandleTypeDef *htim, uint32_t InputTrigger, uint32_t CommutationSource)
+HAL_StatusTypeDef HAL_TIMEx_ConfigCommutEvent_IT(TIM_HandleTypeDef *htim, uint32_t InputTrigger,
+ uint32_t CommutationSource)
{
/* Check the parameters */
assert_param(IS_TIM_COMMUTATION_EVENT_INSTANCE(htim->Instance));
@@ -1577,7 +1579,8 @@ HAL_StatusTypeDef HAL_TIMEx_ConfigCommutEvent_IT(TIM_HandleTypeDef *htim, uint32
* @arg TIM_COMMUTATION_SOFTWARE: Commutation source is set by software using the COMG bit
* @retval HAL status
*/
-HAL_StatusTypeDef HAL_TIMEx_ConfigCommutEvent_DMA(TIM_HandleTypeDef *htim, uint32_t InputTrigger, uint32_t CommutationSource)
+HAL_StatusTypeDef HAL_TIMEx_ConfigCommutEvent_DMA(TIM_HandleTypeDef *htim, uint32_t InputTrigger,
+ uint32_t CommutationSource)
{
/* Check the parameters */
assert_param(IS_TIM_COMMUTATION_EVENT_INSTANCE(htim->Instance));
@@ -1632,7 +1635,7 @@ HAL_StatusTypeDef HAL_TIMEx_MasterConfigSynchronization(TIM_HandleTypeDef *htim,
uint32_t tmpsmcr;
/* Check the parameters */
- assert_param(IS_TIM_SYNCHRO_INSTANCE(htim->Instance));
+ assert_param(IS_TIM_MASTER_INSTANCE(htim->Instance));
assert_param(IS_TIM_TRGO_SOURCE(sMasterConfig->MasterOutputTrigger));
assert_param(IS_TIM_MSM_STATE(sMasterConfig->MasterSlaveMode));
@@ -1665,16 +1668,19 @@ HAL_StatusTypeDef HAL_TIMEx_MasterConfigSynchronization(TIM_HandleTypeDef *htim,
/* Select the TRGO source */
tmpcr2 |= sMasterConfig->MasterOutputTrigger;
- /* Reset the MSM Bit */
- tmpsmcr &= ~TIM_SMCR_MSM;
- /* Set master mode */
- tmpsmcr |= sMasterConfig->MasterSlaveMode;
-
/* Update TIMx CR2 */
htim->Instance->CR2 = tmpcr2;
- /* Update TIMx SMCR */
- htim->Instance->SMCR = tmpsmcr;
+ if (IS_TIM_SLAVE_INSTANCE(htim->Instance))
+ {
+ /* Reset the MSM Bit */
+ tmpsmcr &= ~TIM_SMCR_MSM;
+ /* Set master mode */
+ tmpsmcr |= sMasterConfig->MasterSlaveMode;
+
+ /* Update TIMx SMCR */
+ htim->Instance->SMCR = tmpsmcr;
+ }
/* Change the htim state */
htim->State = HAL_TIM_STATE_READY;
@@ -1690,6 +1696,9 @@ HAL_StatusTypeDef HAL_TIMEx_MasterConfigSynchronization(TIM_HandleTypeDef *htim,
* @param htim TIM handle
* @param sBreakDeadTimeConfig pointer to a TIM_ConfigBreakDeadConfigTypeDef structure that
* contains the BDTR Register configuration information for the TIM peripheral.
+ * @note Interrupts can be generated when an active level is detected on the
+ * break input, the break 2 input or the system break input. Break
+ * interrupt can be enabled by calling the @ref __HAL_TIM_ENABLE_IT macro.
* @retval HAL status
*/
HAL_StatusTypeDef HAL_TIMEx_ConfigBreakDeadTime(TIM_HandleTypeDef *htim,
@@ -1763,10 +1772,10 @@ HAL_StatusTypeDef HAL_TIMEx_ConfigBreakInput(TIM_HandleTypeDef *htim,
{
uint32_t tmporx;
- uint32_t bkin_enable_mask = 0U;
- uint32_t bkin_polarity_mask = 0U;
- uint32_t bkin_enable_bitpos = 0U;
- uint32_t bkin_polarity_bitpos = 0U;
+ uint32_t bkin_enable_mask;
+ uint32_t bkin_polarity_mask;
+ uint32_t bkin_enable_bitpos;
+ uint32_t bkin_polarity_bitpos;
/* Check the parameters */
assert_param(IS_TIM_BREAK_INSTANCE(htim->Instance));
@@ -1800,11 +1809,19 @@ HAL_StatusTypeDef HAL_TIMEx_ConfigBreakInput(TIM_HandleTypeDef *htim,
{
bkin_enable_mask = TIM1_AF1_BKDF1BKE;
bkin_enable_bitpos = 8;
+ bkin_polarity_mask = 0U;
+ bkin_polarity_bitpos = 0U;
break;
}
default:
+ {
+ bkin_enable_mask = 0U;
+ bkin_polarity_mask = 0U;
+ bkin_enable_bitpos = 0U;
+ bkin_polarity_bitpos = 0U;
break;
+ }
}
switch (BreakInput)
@@ -2054,7 +2071,7 @@ HAL_TIM_StateTypeDef HAL_TIMEx_HallSensor_GetState(TIM_HandleTypeDef *htim)
*/
/* Private functions ---------------------------------------------------------*/
-/** @defgroup TIMEx_Private_Functions TIM Extended Private Functions
+/** @defgroup TIMEx_Private_Functions TIMEx Private Functions
* @{
*/
diff --git a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_Keil/Boot/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_ll_gpio.c b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_Keil/Boot/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_ll_gpio.c
index 987e5bef..0f04752c 100644
--- a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_Keil/Boot/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_ll_gpio.c
+++ b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_Keil/Boot/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_ll_gpio.c
@@ -220,9 +220,6 @@ ErrorStatus LL_GPIO_Init(GPIO_TypeDef *GPIOx, LL_GPIO_InitTypeDef *GPIO_InitStru
if (currentpin)
{
- /* Pin Mode configuration */
- LL_GPIO_SetPinMode(GPIOx, currentpin, GPIO_InitStruct->Mode);
-
if ((GPIO_InitStruct->Mode == LL_GPIO_MODE_OUTPUT) || (GPIO_InitStruct->Mode == LL_GPIO_MODE_ALTERNATE))
{
/* Check Speed mode parameters */
@@ -230,6 +227,12 @@ ErrorStatus LL_GPIO_Init(GPIO_TypeDef *GPIOx, LL_GPIO_InitTypeDef *GPIO_InitStru
/* Speed mode configuration */
LL_GPIO_SetPinSpeed(GPIOx, currentpin, GPIO_InitStruct->Speed);
+
+ /* Check Output mode parameters */
+ assert_param(IS_LL_GPIO_OUTPUT_TYPE(GPIO_InitStruct->OutputType));
+
+ /* Output mode configuration*/
+ LL_GPIO_SetPinOutputType(GPIOx, GPIO_InitStruct->Pin, GPIO_InitStruct->OutputType);
}
/* Pull-up Pull down resistor configuration*/
@@ -250,19 +253,11 @@ ErrorStatus LL_GPIO_Init(GPIO_TypeDef *GPIOx, LL_GPIO_InitTypeDef *GPIO_InitStru
LL_GPIO_SetAFPin_8_15(GPIOx, currentpin, GPIO_InitStruct->Alternate);
}
}
+ /* Pin Mode configuration */
+ LL_GPIO_SetPinMode(GPIOx, currentpin, GPIO_InitStruct->Mode);
}
pinpos++;
}
-
- if ((GPIO_InitStruct->Mode == LL_GPIO_MODE_OUTPUT) || (GPIO_InitStruct->Mode == LL_GPIO_MODE_ALTERNATE))
- {
- /* Check Output mode parameters */
- assert_param(IS_LL_GPIO_OUTPUT_TYPE(GPIO_InitStruct->OutputType));
-
- /* Output mode configuration*/
- LL_GPIO_SetPinOutputType(GPIOx, GPIO_InitStruct->Pin, GPIO_InitStruct->OutputType);
-
- }
return (SUCCESS);
}
diff --git a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_Keil/Boot/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_ll_rcc.c b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_Keil/Boot/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_ll_rcc.c
index 0197818f..588d0bb5 100644
--- a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_Keil/Boot/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_ll_rcc.c
+++ b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_Keil/Boot/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_ll_rcc.c
@@ -163,7 +163,7 @@ uint32_t RCC_PLLI2S_GetFreqDomain_SPDIFRX(void);
*/
ErrorStatus LL_RCC_DeInit(void)
{
- uint32_t vl_mask = 0xFFFFFFFFU;
+ __IO uint32_t vl_mask;
/* Set HSION bit */
LL_RCC_HSI_Enable();
@@ -175,10 +175,13 @@ ErrorStatus LL_RCC_DeInit(void)
/* Reset CFGR register */
LL_RCC_WriteReg(CFGR, 0x00000000U);
+ /* Read CR register */
+ vl_mask = LL_RCC_ReadReg(CR);
+
/* Reset HSEON, HSEBYP, PLLON, CSSON, PLLI2SON and PLLSAION bits */
CLEAR_BIT(vl_mask, (RCC_CR_HSEON | RCC_CR_HSEBYP | RCC_CR_PLLON | RCC_CR_CSSON | RCC_CR_PLLSAION | RCC_CR_PLLI2SON));
- /* Write new mask in CR register */
+ /* Write new value in CR register */
LL_RCC_WriteReg(CR, vl_mask);
/* Set HSITRIM bits to the reset value*/
diff --git a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_Keil/Boot/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_ll_usart.c b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_Keil/Boot/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_ll_usart.c
index 2f82ef49..b3db0e6a 100644
--- a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_Keil/Boot/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_ll_usart.c
+++ b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_Keil/Boot/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_ll_usart.c
@@ -22,11 +22,11 @@
#include "stm32f7xx_ll_usart.h"
#include "stm32f7xx_ll_rcc.h"
#include "stm32f7xx_ll_bus.h"
-#ifdef USE_FULL_ASSERT
+#ifdef USE_FULL_ASSERT
#include "stm32_assert.h"
#else
#define assert_param(expr) ((void)0U)
-#endif
+#endif /* USE_FULL_ASSERT */
/** @addtogroup STM32F7xx_LL_Driver
* @{
@@ -41,14 +41,6 @@
/* Private types -------------------------------------------------------------*/
/* Private variables ---------------------------------------------------------*/
/* Private constants ---------------------------------------------------------*/
-/** @addtogroup USART_LL_Private_Constants
- * @{
- */
-
-/**
- * @}
- */
-
/* Private macros ------------------------------------------------------------*/
/** @addtogroup USART_LL_Private_Macros
* @{
@@ -65,42 +57,42 @@
#define IS_LL_USART_BRR_MAX(__VALUE__) ((__VALUE__) <= 0x0000FFFFU)
#define IS_LL_USART_DIRECTION(__VALUE__) (((__VALUE__) == LL_USART_DIRECTION_NONE) \
- || ((__VALUE__) == LL_USART_DIRECTION_RX) \
- || ((__VALUE__) == LL_USART_DIRECTION_TX) \
- || ((__VALUE__) == LL_USART_DIRECTION_TX_RX))
+ || ((__VALUE__) == LL_USART_DIRECTION_RX) \
+ || ((__VALUE__) == LL_USART_DIRECTION_TX) \
+ || ((__VALUE__) == LL_USART_DIRECTION_TX_RX))
#define IS_LL_USART_PARITY(__VALUE__) (((__VALUE__) == LL_USART_PARITY_NONE) \
- || ((__VALUE__) == LL_USART_PARITY_EVEN) \
- || ((__VALUE__) == LL_USART_PARITY_ODD))
+ || ((__VALUE__) == LL_USART_PARITY_EVEN) \
+ || ((__VALUE__) == LL_USART_PARITY_ODD))
#define IS_LL_USART_DATAWIDTH(__VALUE__) (((__VALUE__) == LL_USART_DATAWIDTH_7B) \
- || ((__VALUE__) == LL_USART_DATAWIDTH_8B) \
- || ((__VALUE__) == LL_USART_DATAWIDTH_9B))
+ || ((__VALUE__) == LL_USART_DATAWIDTH_8B) \
+ || ((__VALUE__) == LL_USART_DATAWIDTH_9B))
#define IS_LL_USART_OVERSAMPLING(__VALUE__) (((__VALUE__) == LL_USART_OVERSAMPLING_16) \
- || ((__VALUE__) == LL_USART_OVERSAMPLING_8))
+ || ((__VALUE__) == LL_USART_OVERSAMPLING_8))
#define IS_LL_USART_LASTBITCLKOUTPUT(__VALUE__) (((__VALUE__) == LL_USART_LASTCLKPULSE_NO_OUTPUT) \
- || ((__VALUE__) == LL_USART_LASTCLKPULSE_OUTPUT))
+ || ((__VALUE__) == LL_USART_LASTCLKPULSE_OUTPUT))
#define IS_LL_USART_CLOCKPHASE(__VALUE__) (((__VALUE__) == LL_USART_PHASE_1EDGE) \
- || ((__VALUE__) == LL_USART_PHASE_2EDGE))
+ || ((__VALUE__) == LL_USART_PHASE_2EDGE))
#define IS_LL_USART_CLOCKPOLARITY(__VALUE__) (((__VALUE__) == LL_USART_POLARITY_LOW) \
- || ((__VALUE__) == LL_USART_POLARITY_HIGH))
+ || ((__VALUE__) == LL_USART_POLARITY_HIGH))
#define IS_LL_USART_CLOCKOUTPUT(__VALUE__) (((__VALUE__) == LL_USART_CLOCK_DISABLE) \
- || ((__VALUE__) == LL_USART_CLOCK_ENABLE))
+ || ((__VALUE__) == LL_USART_CLOCK_ENABLE))
#define IS_LL_USART_STOPBITS(__VALUE__) (((__VALUE__) == LL_USART_STOPBITS_0_5) \
- || ((__VALUE__) == LL_USART_STOPBITS_1) \
- || ((__VALUE__) == LL_USART_STOPBITS_1_5) \
- || ((__VALUE__) == LL_USART_STOPBITS_2))
+ || ((__VALUE__) == LL_USART_STOPBITS_1) \
+ || ((__VALUE__) == LL_USART_STOPBITS_1_5) \
+ || ((__VALUE__) == LL_USART_STOPBITS_2))
#define IS_LL_USART_HWCONTROL(__VALUE__) (((__VALUE__) == LL_USART_HWCONTROL_NONE) \
- || ((__VALUE__) == LL_USART_HWCONTROL_RTS) \
- || ((__VALUE__) == LL_USART_HWCONTROL_CTS) \
- || ((__VALUE__) == LL_USART_HWCONTROL_RTS_CTS))
+ || ((__VALUE__) == LL_USART_HWCONTROL_RTS) \
+ || ((__VALUE__) == LL_USART_HWCONTROL_CTS) \
+ || ((__VALUE__) == LL_USART_HWCONTROL_RTS_CTS))
/**
* @}
diff --git a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_Keil/Boot/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_ll_usb.c b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_Keil/Boot/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_ll_usb.c
index ece23086..8d9dbb24 100644
--- a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_Keil/Boot/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_ll_usb.c
+++ b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_Keil/Boot/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_ll_usb.c
@@ -94,6 +94,11 @@ HAL_StatusTypeDef USB_CoreInit(USB_OTG_GlobalTypeDef *USBx, USB_OTG_CfgTypeDef c
/* Init The ULPI Interface */
USBx->GUSBCFG &= ~(USB_OTG_GUSBCFG_TSDPS | USB_OTG_GUSBCFG_ULPIFSLS | USB_OTG_GUSBCFG_PHYSEL);
+#if defined(STM32F722xx) || defined(STM32F723xx) || defined(STM32F730xx) || defined(STM32F732xx) || defined(STM32F733xx)
+ /* Select ULPI Interface */
+ USBx->GUSBCFG |= USB_OTG_GUSBCFG_ULPI_UTMI_SEL;
+#endif /* defined(STM32F722xx) || defined(STM32F723xx) || defined(STM32F730xx) || defined(STM32F732xx) || defined(STM32F733xx) */
+
/* Select vbus source */
USBx->GUSBCFG &= ~(USB_OTG_GUSBCFG_ULPIEVBUSD | USB_OTG_GUSBCFG_ULPIEVBUSI);
if (cfg.use_external_vbus == 1U)
@@ -115,7 +120,7 @@ HAL_StatusTypeDef USB_CoreInit(USB_OTG_GlobalTypeDef *USBx, USB_OTG_CfgTypeDef c
USBx->GUSBCFG &= ~(USB_OTG_GUSBCFG_ULPIEVBUSD | USB_OTG_GUSBCFG_ULPIEVBUSI);
/* Select UTMI Interace */
- USBx->GUSBCFG &= ~ USB_OTG_GUSBCFG_ULPI_UTMI_SEL;
+ USBx->GUSBCFG &= ~USB_OTG_GUSBCFG_ULPI_UTMI_SEL;
USBx->GCCFG |= USB_OTG_GCCFG_PHYHSEN;
/* Enables control of a High Speed USB PHY */
@@ -158,10 +163,6 @@ HAL_StatusTypeDef USB_CoreInit(USB_OTG_GlobalTypeDef *USBx, USB_OTG_CfgTypeDef c
* @brief Set the USB turnaround time
* @param USBx USB Instance
* @param hclk: AHB clock frequency
- * @param speed device speed
- * This parameter can be one of these values:
- * @arg PCD_SPEED_HIGH: High speed mode
- * @arg PCD_SPEED_FULL: Full speed mode
* @retval USB turnaround time In PHY Clocks number
*/
HAL_StatusTypeDef USB_SetTurnaroundTime(USB_OTG_GlobalTypeDef *USBx,
@@ -173,7 +174,7 @@ HAL_StatusTypeDef USB_SetTurnaroundTime(USB_OTG_GlobalTypeDef *USBx,
used by application. In the low AHB frequency range it is used to stretch enough the USB response
time to IN tokens, the USB turnaround time, so to compensate for the longer AHB read access
latency to the Data FIFO */
- if (speed == PCD_SPEED_FULL)
+ if (speed == USBD_FS_SPEED)
{
if ((hclk >= 14200000U) && (hclk < 15000000U))
{
@@ -226,7 +227,7 @@ HAL_StatusTypeDef USB_SetTurnaroundTime(USB_OTG_GlobalTypeDef *USBx,
UsbTrd = 0x6U;
}
}
- else if (speed == PCD_SPEED_HIGH)
+ else if (speed == USBD_HS_SPEED)
{
UsbTrd = USBD_HS_TRDT_VALUE;
}
@@ -318,6 +319,8 @@ HAL_StatusTypeDef USB_DevInit(USB_OTG_GlobalTypeDef *USBx, USB_OTG_CfgTypeDef cf
/* VBUS Sensing setup */
if (cfg.vbus_sensing_enable == 0U)
{
+ USBx_DEVICE->DCTL |= USB_OTG_DCTL_SDIS;
+
/* Deactivate VBUS Sensing B */
USBx->GCCFG &= ~USB_OTG_GCCFG_VBDEN;
@@ -339,33 +342,33 @@ HAL_StatusTypeDef USB_DevInit(USB_OTG_GlobalTypeDef *USBx, USB_OTG_CfgTypeDef cf
if (cfg.phy_itface == USB_OTG_ULPI_PHY)
{
- if (cfg.speed == USB_OTG_SPEED_HIGH)
+ if (cfg.speed == USBD_HS_SPEED)
{
- /* Set High speed phy */
+ /* Set Core speed to High speed mode */
(void)USB_SetDevSpeed(USBx, USB_OTG_SPEED_HIGH);
}
else
{
- /* set High speed phy in Full speed mode */
+ /* Set Core speed to Full speed mode */
(void)USB_SetDevSpeed(USBx, USB_OTG_SPEED_HIGH_IN_FULL);
}
}
else if (cfg.phy_itface == USB_OTG_HS_EMBEDDED_PHY)
{
- if (cfg.speed == USB_OTG_SPEED_HIGH)
+ if (cfg.speed == USBD_HS_SPEED)
{
- /* Set High speed phy */
+ /* Set Core speed to High speed mode */
(void)USB_SetDevSpeed(USBx, USB_OTG_SPEED_HIGH);
}
else
{
- /* set High speed phy in Full speed mode */
+ /* Set Core speed to Full speed mode */
(void)USB_SetDevSpeed(USBx, USB_OTG_SPEED_HIGH_IN_FULL);
}
}
else
{
- /* Set Full speed phy */
+ /* Set Core speed to Full speed mode */
(void)USB_SetDevSpeed(USBx, USB_OTG_SPEED_FULL);
}
@@ -431,17 +434,6 @@ HAL_StatusTypeDef USB_DevInit(USB_OTG_GlobalTypeDef *USBx, USB_OTG_CfgTypeDef cf
USBx_DEVICE->DIEPMSK &= ~(USB_OTG_DIEPMSK_TXFURM);
- if (cfg.dma_enable == 1U)
- {
- /*Set threshold parameters */
- USBx_DEVICE->DTHRCTL = USB_OTG_DTHRCTL_TXTHRLEN_6 |
- USB_OTG_DTHRCTL_RXTHRLEN_6;
-
- USBx_DEVICE->DTHRCTL |= USB_OTG_DTHRCTL_RXTHREN |
- USB_OTG_DTHRCTL_ISOTHREN |
- USB_OTG_DTHRCTL_NONISOTHREN;
- }
-
/* Disable all interrupts. */
USBx->GINTMSK = 0U;
@@ -557,16 +549,16 @@ uint8_t USB_GetDevSpeed(USB_OTG_GlobalTypeDef *USBx)
if (DevEnumSpeed == DSTS_ENUMSPD_HS_PHY_30MHZ_OR_60MHZ)
{
- speed = PCD_SPEED_HIGH;
+ speed = USBD_HS_SPEED;
}
else if ((DevEnumSpeed == DSTS_ENUMSPD_FS_PHY_30MHZ_OR_60MHZ) ||
(DevEnumSpeed == DSTS_ENUMSPD_FS_PHY_48MHZ))
{
- speed = PCD_SPEED_FULL;
+ speed = USBD_FS_SPEED;
}
else
{
- speed = 0U;
+ speed = 0xFU;
}
return speed;
@@ -663,6 +655,12 @@ HAL_StatusTypeDef USB_DeactivateEndpoint(USB_OTG_GlobalTypeDef *USBx, USB_OTG_EP
/* Read DEPCTLn register */
if (ep->is_in == 1U)
{
+ if ((USBx_INEP(epnum)->DIEPCTL & USB_OTG_DIEPCTL_EPENA) == USB_OTG_DIEPCTL_EPENA)
+ {
+ USBx_INEP(epnum)->DIEPCTL |= USB_OTG_DIEPCTL_SNAK;
+ USBx_INEP(epnum)->DIEPCTL |= USB_OTG_DIEPCTL_EPDIS;
+ }
+
USBx_DEVICE->DEACHMSK &= ~(USB_OTG_DAINTMSK_IEPM & (uint32_t)(1UL << (ep->num & EP_ADDR_MSK)));
USBx_DEVICE->DAINTMSK &= ~(USB_OTG_DAINTMSK_IEPM & (uint32_t)(1UL << (ep->num & EP_ADDR_MSK)));
USBx_INEP(epnum)->DIEPCTL &= ~(USB_OTG_DIEPCTL_USBAEP |
@@ -673,6 +671,12 @@ HAL_StatusTypeDef USB_DeactivateEndpoint(USB_OTG_GlobalTypeDef *USBx, USB_OTG_EP
}
else
{
+ if ((USBx_OUTEP(epnum)->DOEPCTL & USB_OTG_DOEPCTL_EPENA) == USB_OTG_DOEPCTL_EPENA)
+ {
+ USBx_OUTEP(epnum)->DOEPCTL |= USB_OTG_DOEPCTL_SNAK;
+ USBx_OUTEP(epnum)->DOEPCTL |= USB_OTG_DOEPCTL_EPDIS;
+ }
+
USBx_DEVICE->DEACHMSK &= ~(USB_OTG_DAINTMSK_OEPM & ((uint32_t)(1UL << (ep->num & EP_ADDR_MSK)) << 16));
USBx_DEVICE->DAINTMSK &= ~(USB_OTG_DAINTMSK_OEPM & ((uint32_t)(1UL << (ep->num & EP_ADDR_MSK)) << 16));
USBx_OUTEP(epnum)->DOEPCTL &= ~(USB_OTG_DOEPCTL_USBAEP |
@@ -698,11 +702,23 @@ HAL_StatusTypeDef USB_DeactivateDedicatedEndpoint(USB_OTG_GlobalTypeDef *USBx, U
/* Read DEPCTLn register */
if (ep->is_in == 1U)
{
+ if ((USBx_INEP(epnum)->DIEPCTL & USB_OTG_DIEPCTL_EPENA) == USB_OTG_DIEPCTL_EPENA)
+ {
+ USBx_INEP(epnum)->DIEPCTL |= USB_OTG_DIEPCTL_SNAK;
+ USBx_INEP(epnum)->DIEPCTL |= USB_OTG_DIEPCTL_EPDIS;
+ }
+
USBx_INEP(epnum)->DIEPCTL &= ~ USB_OTG_DIEPCTL_USBAEP;
USBx_DEVICE->DAINTMSK &= ~(USB_OTG_DAINTMSK_IEPM & (uint32_t)(1UL << (ep->num & EP_ADDR_MSK)));
}
else
{
+ if ((USBx_OUTEP(epnum)->DOEPCTL & USB_OTG_DOEPCTL_EPENA) == USB_OTG_DOEPCTL_EPENA)
+ {
+ USBx_OUTEP(epnum)->DOEPCTL |= USB_OTG_DOEPCTL_SNAK;
+ USBx_OUTEP(epnum)->DOEPCTL |= USB_OTG_DOEPCTL_EPDIS;
+ }
+
USBx_OUTEP(epnum)->DOEPCTL &= ~USB_OTG_DOEPCTL_USBAEP;
USBx_DEVICE->DAINTMSK &= ~(USB_OTG_DAINTMSK_OEPM & ((uint32_t)(1UL << (ep->num & EP_ADDR_MSK)) << 16));
}
@@ -761,9 +777,27 @@ HAL_StatusTypeDef USB_EPStartXfer(USB_OTG_GlobalTypeDef *USBx, USB_OTG_EPTypeDef
{
USBx_INEP(epnum)->DIEPDMA = (uint32_t)(ep->dma_addr);
}
+
+ if (ep->type == EP_TYPE_ISOC)
+ {
+ if ((USBx_DEVICE->DSTS & (1U << 8)) == 0U)
+ {
+ USBx_INEP(epnum)->DIEPCTL |= USB_OTG_DIEPCTL_SODDFRM;
+ }
+ else
+ {
+ USBx_INEP(epnum)->DIEPCTL |= USB_OTG_DIEPCTL_SD0PID_SEVNFRM;
+ }
+ }
+
+ /* EP enable, IN data in FIFO */
+ USBx_INEP(epnum)->DIEPCTL |= (USB_OTG_DIEPCTL_CNAK | USB_OTG_DIEPCTL_EPENA);
}
else
{
+ /* EP enable, IN data in FIFO */
+ USBx_INEP(epnum)->DIEPCTL |= (USB_OTG_DIEPCTL_CNAK | USB_OTG_DIEPCTL_EPENA);
+
if (ep->type != EP_TYPE_ISOC)
{
/* Enable the Tx FIFO Empty Interrupt for this EP */
@@ -772,27 +806,20 @@ HAL_StatusTypeDef USB_EPStartXfer(USB_OTG_GlobalTypeDef *USBx, USB_OTG_EPTypeDef
USBx_DEVICE->DIEPEMPMSK |= 1UL << (ep->num & EP_ADDR_MSK);
}
}
- }
-
- if (ep->type == EP_TYPE_ISOC)
- {
- if ((USBx_DEVICE->DSTS & (1U << 8)) == 0U)
- {
- USBx_INEP(epnum)->DIEPCTL |= USB_OTG_DIEPCTL_SODDFRM;
- }
else
{
- USBx_INEP(epnum)->DIEPCTL |= USB_OTG_DIEPCTL_SD0PID_SEVNFRM;
+ if ((USBx_DEVICE->DSTS & (1U << 8)) == 0U)
+ {
+ USBx_INEP(epnum)->DIEPCTL |= USB_OTG_DIEPCTL_SODDFRM;
+ }
+ else
+ {
+ USBx_INEP(epnum)->DIEPCTL |= USB_OTG_DIEPCTL_SD0PID_SEVNFRM;
+ }
+
+ (void)USB_WritePacket(USBx, ep->xfer_buff, ep->num, (uint16_t)ep->xfer_len, dma);
}
}
-
- /* EP enable, IN data in FIFO */
- USBx_INEP(epnum)->DIEPCTL |= (USB_OTG_DIEPCTL_CNAK | USB_OTG_DIEPCTL_EPENA);
-
- if (ep->type == EP_TYPE_ISOC)
- {
- (void)USB_WritePacket(USBx, ep->xfer_buff, ep->num, (uint16_t)ep->xfer_len, dma);
- }
}
else /* OUT endpoint */
{
@@ -890,18 +917,21 @@ HAL_StatusTypeDef USB_EP0StartXfer(USB_OTG_GlobalTypeDef *USBx, USB_OTG_EPTypeDe
{
USBx_INEP(epnum)->DIEPDMA = (uint32_t)(ep->dma_addr);
}
+
+ /* EP enable, IN data in FIFO */
+ USBx_INEP(epnum)->DIEPCTL |= (USB_OTG_DIEPCTL_CNAK | USB_OTG_DIEPCTL_EPENA);
}
else
{
+ /* EP enable, IN data in FIFO */
+ USBx_INEP(epnum)->DIEPCTL |= (USB_OTG_DIEPCTL_CNAK | USB_OTG_DIEPCTL_EPENA);
+
/* Enable the Tx FIFO Empty Interrupt for this EP */
if (ep->xfer_len > 0U)
{
USBx_DEVICE->DIEPEMPMSK |= 1UL << (ep->num & EP_ADDR_MSK);
}
}
-
- /* EP enable, IN data in FIFO */
- USBx_INEP(epnum)->DIEPCTL |= (USB_OTG_DIEPCTL_CNAK | USB_OTG_DIEPCTL_EPENA);
}
else /* OUT endpoint */
{
@@ -959,7 +989,7 @@ HAL_StatusTypeDef USB_WritePacket(USB_OTG_GlobalTypeDef *USBx, uint8_t *src, uin
count32b = ((uint32_t)len + 3U) / 4U;
for (i = 0U; i < count32b; i++)
{
- USBx_DFIFO((uint32_t)ch_ep_num) = *((__packed uint32_t *)pSrc);
+ USBx_DFIFO((uint32_t)ch_ep_num) = __UNALIGNED_UINT32_READ(pSrc);
pSrc++;
}
}
@@ -968,15 +998,10 @@ HAL_StatusTypeDef USB_WritePacket(USB_OTG_GlobalTypeDef *USBx, uint8_t *src, uin
}
/**
- * @brief USB_ReadPacket : read a packet from the Tx FIFO associated
- * with the EP/channel
+ * @brief USB_ReadPacket : read a packet from the RX FIFO
* @param USBx Selected device
* @param dest source pointer
* @param len Number of bytes to read
- * @param dma USB dma enabled or disabled
- * This parameter can be one of these values:
- * 0 : DMA feature not used
- * 1 : DMA feature used
* @retval pointer to destination buffer
*/
void *USB_ReadPacket(USB_OTG_GlobalTypeDef *USBx, uint8_t *dest, uint16_t len)
@@ -988,7 +1013,7 @@ void *USB_ReadPacket(USB_OTG_GlobalTypeDef *USBx, uint8_t *dest, uint16_t len)
for (i = 0U; i < count32b; i++)
{
- *(__packed uint32_t *)pDest = USBx_DFIFO(0U);
+ __UNALIGNED_UINT32_WRITE(pDest, USBx_DFIFO(0U));
pDest++;
}
@@ -1260,13 +1285,9 @@ HAL_StatusTypeDef USB_ActivateSetup(USB_OTG_GlobalTypeDef *USBx)
{
uint32_t USBx_BASE = (uint32_t)USBx;
- /* Set the MPS of the IN EP based on the enumeration speed */
+ /* Set the MPS of the IN EP0 to 64 bytes */
USBx_INEP(0U)->DIEPCTL &= ~USB_OTG_DIEPCTL_MPSIZ;
- if ((USBx_DEVICE->DSTS & USB_OTG_DSTS_ENUMSPD) == DSTS_ENUMSPD_LS_PHY_6MHZ)
- {
- USBx_INEP(0U)->DIEPCTL |= 3U;
- }
USBx_DEVICE->DCTL |= USB_OTG_DCTL_CGINAK;
return HAL_OK;
@@ -1433,7 +1454,7 @@ HAL_StatusTypeDef USB_HostInit(USB_OTG_GlobalTypeDef *USBx, USB_OTG_CfgTypeDef c
if ((USBx->CID & (0x1U << 8)) != 0U)
{
- if (cfg.speed == USB_OTG_SPEED_FULL)
+ if (cfg.speed == USBH_FSLS_SPEED)
{
/* Force Device Enumeration to FS/LS mode only */
USBx_HOST->HCFG |= USB_OTG_HCFG_FSLSS;
@@ -1594,9 +1615,9 @@ HAL_StatusTypeDef USB_DriveVbus(USB_OTG_GlobalTypeDef *USBx, uint8_t state)
* @param USBx Selected device
* @retval speed : Host speed
* This parameter can be one of these values:
- * @arg USB_OTG_SPEED_HIGH: High speed mode
- * @arg USB_OTG_SPEED_FULL: Full speed mode
- * @arg USB_OTG_SPEED_LOW: Low speed mode
+ * @arg HCD_SPEED_HIGH: High speed mode
+ * @arg HCD_SPEED_FULL: Full speed mode
+ * @arg HCD_SPEED_LOW: Low speed mode
*/
uint32_t USB_GetHostSpeed(USB_OTG_GlobalTypeDef *USBx)
{
@@ -1774,7 +1795,7 @@ HAL_StatusTypeDef USB_HC_StartXfer(USB_OTG_GlobalTypeDef *USBx, USB_OTG_HCTypeDe
uint16_t num_packets;
uint16_t max_hc_pkt_count = 256U;
- if (((USBx->CID & (0x1U << 8)) != 0U) && (hc->speed == USB_OTG_SPEED_HIGH))
+ if (((USBx->CID & (0x1U << 8)) != 0U) && (hc->speed == USBH_HS_SPEED))
{
if ((dma == 0U) && (hc->do_ping == 1U))
{
@@ -2002,7 +2023,6 @@ HAL_StatusTypeDef USB_StopHost(USB_OTG_GlobalTypeDef *USBx)
uint32_t value;
uint32_t i;
-
(void)USB_DisableGlobalInt(USBx);
/* Flush FIFO */
@@ -2041,6 +2061,7 @@ HAL_StatusTypeDef USB_StopHost(USB_OTG_GlobalTypeDef *USBx)
/* Clear any pending Host interrupts */
USBx_HOST->HAINT = 0xFFFFFFFFU;
USBx->GINTSTS = 0xFFFFFFFFU;
+
(void)USB_EnableGlobalInt(USBx);
return HAL_OK;
diff --git a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_Keil/Boot/lib/STM32_USB_Device_Library/Core/Inc/usbd_core.h b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_Keil/Boot/lib/STM32_USB_Device_Library/Core/Inc/usbd_core.h
index 31ec3b02..988ba1ff 100644
--- a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_Keil/Boot/lib/STM32_USB_Device_Library/Core/Inc/usbd_core.h
+++ b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_Keil/Boot/lib/STM32_USB_Device_Library/Core/Inc/usbd_core.h
@@ -12,7 +12,7 @@
* This software component is licensed by ST under Ultimate Liberty license
* SLA0044, the "License"; You may not use this file except in compliance with
* the License. You may obtain a copy of the License at:
- * http://www.st.com/SLA0044
+ * www.st.com/SLA0044
*
******************************************************************************
*/
@@ -22,7 +22,7 @@
#define __USBD_CORE_H
#ifdef __cplusplus
- extern "C" {
+extern "C" {
#endif
/* Includes ------------------------------------------------------------------*/
@@ -84,58 +84,55 @@
*/
USBD_StatusTypeDef USBD_Init(USBD_HandleTypeDef *pdev, USBD_DescriptorsTypeDef *pdesc, uint8_t id);
USBD_StatusTypeDef USBD_DeInit(USBD_HandleTypeDef *pdev);
-USBD_StatusTypeDef USBD_Start (USBD_HandleTypeDef *pdev);
-USBD_StatusTypeDef USBD_Stop (USBD_HandleTypeDef *pdev);
+USBD_StatusTypeDef USBD_Start(USBD_HandleTypeDef *pdev);
+USBD_StatusTypeDef USBD_Stop(USBD_HandleTypeDef *pdev);
USBD_StatusTypeDef USBD_RegisterClass(USBD_HandleTypeDef *pdev, USBD_ClassTypeDef *pclass);
-USBD_StatusTypeDef USBD_RunTestMode (USBD_HandleTypeDef *pdev);
-USBD_StatusTypeDef USBD_SetClassConfig(USBD_HandleTypeDef *pdev, uint8_t cfgidx);
-USBD_StatusTypeDef USBD_ClrClassConfig(USBD_HandleTypeDef *pdev, uint8_t cfgidx);
+USBD_StatusTypeDef USBD_RunTestMode(USBD_HandleTypeDef *pdev);
+USBD_StatusTypeDef USBD_SetClassConfig(USBD_HandleTypeDef *pdev, uint8_t cfgidx);
+USBD_StatusTypeDef USBD_ClrClassConfig(USBD_HandleTypeDef *pdev, uint8_t cfgidx);
USBD_StatusTypeDef USBD_LL_SetupStage(USBD_HandleTypeDef *pdev, uint8_t *psetup);
-USBD_StatusTypeDef USBD_LL_DataOutStage(USBD_HandleTypeDef *pdev , uint8_t epnum, uint8_t *pdata);
-USBD_StatusTypeDef USBD_LL_DataInStage(USBD_HandleTypeDef *pdev , uint8_t epnum, uint8_t *pdata);
+USBD_StatusTypeDef USBD_LL_DataOutStage(USBD_HandleTypeDef *pdev, uint8_t epnum, uint8_t *pdata);
+USBD_StatusTypeDef USBD_LL_DataInStage(USBD_HandleTypeDef *pdev, uint8_t epnum, uint8_t *pdata);
-USBD_StatusTypeDef USBD_LL_Reset(USBD_HandleTypeDef *pdev);
-USBD_StatusTypeDef USBD_LL_SetSpeed(USBD_HandleTypeDef *pdev, USBD_SpeedTypeDef speed);
-USBD_StatusTypeDef USBD_LL_Suspend(USBD_HandleTypeDef *pdev);
-USBD_StatusTypeDef USBD_LL_Resume(USBD_HandleTypeDef *pdev);
+USBD_StatusTypeDef USBD_LL_Reset(USBD_HandleTypeDef *pdev);
+USBD_StatusTypeDef USBD_LL_SetSpeed(USBD_HandleTypeDef *pdev, USBD_SpeedTypeDef speed);
+USBD_StatusTypeDef USBD_LL_Suspend(USBD_HandleTypeDef *pdev);
+USBD_StatusTypeDef USBD_LL_Resume(USBD_HandleTypeDef *pdev);
USBD_StatusTypeDef USBD_LL_SOF(USBD_HandleTypeDef *pdev);
-USBD_StatusTypeDef USBD_LL_IsoINIncomplete(USBD_HandleTypeDef *pdev, uint8_t epnum);
-USBD_StatusTypeDef USBD_LL_IsoOUTIncomplete(USBD_HandleTypeDef *pdev, uint8_t epnum);
+USBD_StatusTypeDef USBD_LL_IsoINIncomplete(USBD_HandleTypeDef *pdev, uint8_t epnum);
+USBD_StatusTypeDef USBD_LL_IsoOUTIncomplete(USBD_HandleTypeDef *pdev, uint8_t epnum);
-USBD_StatusTypeDef USBD_LL_DevConnected(USBD_HandleTypeDef *pdev);
-USBD_StatusTypeDef USBD_LL_DevDisconnected(USBD_HandleTypeDef *pdev);
+USBD_StatusTypeDef USBD_LL_DevConnected(USBD_HandleTypeDef *pdev);
+USBD_StatusTypeDef USBD_LL_DevDisconnected(USBD_HandleTypeDef *pdev);
/* USBD Low Level Driver */
-USBD_StatusTypeDef USBD_LL_Init (USBD_HandleTypeDef *pdev);
-USBD_StatusTypeDef USBD_LL_DeInit (USBD_HandleTypeDef *pdev);
-USBD_StatusTypeDef USBD_LL_Start(USBD_HandleTypeDef *pdev);
-USBD_StatusTypeDef USBD_LL_Stop (USBD_HandleTypeDef *pdev);
-USBD_StatusTypeDef USBD_LL_OpenEP (USBD_HandleTypeDef *pdev,
- uint8_t ep_addr,
- uint8_t ep_type,
- uint16_t ep_mps);
+USBD_StatusTypeDef USBD_LL_Init(USBD_HandleTypeDef *pdev);
+USBD_StatusTypeDef USBD_LL_DeInit(USBD_HandleTypeDef *pdev);
+USBD_StatusTypeDef USBD_LL_Start(USBD_HandleTypeDef *pdev);
+USBD_StatusTypeDef USBD_LL_Stop(USBD_HandleTypeDef *pdev);
-USBD_StatusTypeDef USBD_LL_CloseEP (USBD_HandleTypeDef *pdev, uint8_t ep_addr);
-USBD_StatusTypeDef USBD_LL_FlushEP (USBD_HandleTypeDef *pdev, uint8_t ep_addr);
-USBD_StatusTypeDef USBD_LL_StallEP (USBD_HandleTypeDef *pdev, uint8_t ep_addr);
-USBD_StatusTypeDef USBD_LL_ClearStallEP (USBD_HandleTypeDef *pdev, uint8_t ep_addr);
-uint8_t USBD_LL_IsStallEP (USBD_HandleTypeDef *pdev, uint8_t ep_addr);
-USBD_StatusTypeDef USBD_LL_SetUSBAddress (USBD_HandleTypeDef *pdev, uint8_t dev_addr);
-USBD_StatusTypeDef USBD_LL_Transmit (USBD_HandleTypeDef *pdev,
- uint8_t ep_addr,
- uint8_t *pbuf,
- uint16_t size);
+USBD_StatusTypeDef USBD_LL_OpenEP(USBD_HandleTypeDef *pdev, uint8_t ep_addr,
+ uint8_t ep_type, uint16_t ep_mps);
-USBD_StatusTypeDef USBD_LL_PrepareReceive(USBD_HandleTypeDef *pdev,
- uint8_t ep_addr,
- uint8_t *pbuf,
- uint16_t size);
+USBD_StatusTypeDef USBD_LL_CloseEP(USBD_HandleTypeDef *pdev, uint8_t ep_addr);
+USBD_StatusTypeDef USBD_LL_FlushEP(USBD_HandleTypeDef *pdev, uint8_t ep_addr);
+USBD_StatusTypeDef USBD_LL_StallEP(USBD_HandleTypeDef *pdev, uint8_t ep_addr);
+USBD_StatusTypeDef USBD_LL_ClearStallEP(USBD_HandleTypeDef *pdev, uint8_t ep_addr);
+USBD_StatusTypeDef USBD_LL_SetUSBAddress(USBD_HandleTypeDef *pdev, uint8_t dev_addr);
-uint32_t USBD_LL_GetRxDataSize (USBD_HandleTypeDef *pdev, uint8_t ep_addr);
-void USBD_LL_Delay (uint32_t Delay);
+USBD_StatusTypeDef USBD_LL_Transmit(USBD_HandleTypeDef *pdev, uint8_t ep_addr,
+ uint8_t *pbuf, uint32_t size);
+
+USBD_StatusTypeDef USBD_LL_PrepareReceive(USBD_HandleTypeDef *pdev, uint8_t ep_addr,
+ uint8_t *pbuf, uint32_t size);
+
+uint8_t USBD_LL_IsStallEP(USBD_HandleTypeDef *pdev, uint8_t ep_addr);
+uint32_t USBD_LL_GetRxDataSize(USBD_HandleTypeDef *pdev, uint8_t ep_addr);
+
+void USBD_LL_Delay(uint32_t Delay);
/**
* @}
diff --git a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_Keil/Boot/lib/STM32_USB_Device_Library/Core/Inc/usbd_ctlreq.h b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_Keil/Boot/lib/STM32_USB_Device_Library/Core/Inc/usbd_ctlreq.h
index 9fa2873a..a4bfc44b 100644
--- a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_Keil/Boot/lib/STM32_USB_Device_Library/Core/Inc/usbd_ctlreq.h
+++ b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_Keil/Boot/lib/STM32_USB_Device_Library/Core/Inc/usbd_ctlreq.h
@@ -12,7 +12,7 @@
* This software component is licensed by ST under Ultimate Liberty license
* SLA0044, the "License"; You may not use this file except in compliance with
* the License. You may obtain a copy of the License at:
- * http://www.st.com/SLA0044
+ * www.st.com/SLA0044
*
******************************************************************************
*/
@@ -22,7 +22,7 @@
#define __USB_REQUEST_H
#ifdef __cplusplus
- extern "C" {
+extern "C" {
#endif
/* Includes ------------------------------------------------------------------*/
@@ -73,16 +73,14 @@
* @{
*/
-USBD_StatusTypeDef USBD_StdDevReq (USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req);
-USBD_StatusTypeDef USBD_StdItfReq (USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req);
-USBD_StatusTypeDef USBD_StdEPReq (USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req);
+USBD_StatusTypeDef USBD_StdDevReq(USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req);
+USBD_StatusTypeDef USBD_StdItfReq(USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req);
+USBD_StatusTypeDef USBD_StdEPReq(USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req);
+void USBD_CtlError(USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req);
+void USBD_ParseSetupRequest(USBD_SetupReqTypedef *req, uint8_t *pdata);
+void USBD_GetString(uint8_t *desc, uint8_t *unicode, uint16_t *len);
-void USBD_CtlError (USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req);
-
-void USBD_ParseSetupRequest (USBD_SetupReqTypedef *req, uint8_t *pdata);
-
-void USBD_GetString (uint8_t *desc, uint8_t *unicode, uint16_t *len);
/**
* @}
*/
diff --git a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_Keil/Boot/lib/STM32_USB_Device_Library/Core/Inc/usbd_def.h b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_Keil/Boot/lib/STM32_USB_Device_Library/Core/Inc/usbd_def.h
index b1e7968d..8219140f 100644
--- a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_Keil/Boot/lib/STM32_USB_Device_Library/Core/Inc/usbd_def.h
+++ b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_Keil/Boot/lib/STM32_USB_Device_Library/Core/Inc/usbd_def.h
@@ -12,7 +12,7 @@
* This software component is licensed by ST under Ultimate Liberty license
* SLA0044, the "License"; You may not use this file except in compliance with
* the License. You may obtain a copy of the License at:
- * http://www.st.com/SLA0044
+ * www.st.com/SLA0044
*
******************************************************************************
*/
@@ -22,7 +22,7 @@
#define __USBD_DEF_H
#ifdef __cplusplus
- extern "C" {
+extern "C" {
#endif
/* Includes ------------------------------------------------------------------*/
@@ -61,9 +61,13 @@
#define USBD_SELF_POWERED 1U
#endif /*USBD_SELF_POWERED */
-#ifndef USBD_SUPPORT_USER_STRING
-#define USBD_SUPPORT_USER_STRING 0U
-#endif /* USBD_SUPPORT_USER_STRING */
+#ifndef USBD_SUPPORT_USER_STRING_DESC
+#define USBD_SUPPORT_USER_STRING_DESC 0U
+#endif /* USBD_SUPPORT_USER_STRING_DESC */
+
+#ifndef USBD_CLASS_USER_STRING_DESC
+#define USBD_CLASS_USER_STRING_DESC 0U
+#endif /* USBD_CLASS_USER_STRING_DESC */
#define USB_LEN_DEV_QUALIFIER_DESC 0x0AU
#define USB_LEN_DEV_DESC 0x12U
@@ -158,37 +162,58 @@
typedef struct usb_setup_req
{
+ uint8_t bmRequest;
+ uint8_t bRequest;
+ uint16_t wValue;
+ uint16_t wIndex;
+ uint16_t wLength;
+} USBD_SetupReqTypedef;
+
+typedef struct
+{
+ uint8_t bLength;
+ uint8_t bDescriptorType;
+ uint8_t wDescriptorLengthLow;
+ uint8_t wDescriptorLengthHigh;
+ uint8_t bNumInterfaces;
+ uint8_t bConfigurationValue;
+ uint8_t iConfiguration;
+ uint8_t bmAttributes;
+ uint8_t bMaxPower;
+} USBD_ConfigDescTypedef;
+
+typedef struct
+{
+ uint8_t bLength;
+ uint8_t bDescriptorType;
+ uint16_t wTotalLength;
+ uint8_t bNumDeviceCaps;
+} USBD_BosDescTypedef;
- uint8_t bmRequest;
- uint8_t bRequest;
- uint16_t wValue;
- uint16_t wIndex;
- uint16_t wLength;
-}USBD_SetupReqTypedef;
struct _USBD_HandleTypeDef;
typedef struct _Device_cb
{
- uint8_t (*Init) (struct _USBD_HandleTypeDef *pdev , uint8_t cfgidx);
- uint8_t (*DeInit) (struct _USBD_HandleTypeDef *pdev , uint8_t cfgidx);
- /* Control Endpoints*/
- uint8_t (*Setup) (struct _USBD_HandleTypeDef *pdev , USBD_SetupReqTypedef *req);
- uint8_t (*EP0_TxSent) (struct _USBD_HandleTypeDef *pdev );
- uint8_t (*EP0_RxReady) (struct _USBD_HandleTypeDef *pdev );
+ uint8_t (*Init)(struct _USBD_HandleTypeDef *pdev, uint8_t cfgidx);
+ uint8_t (*DeInit)(struct _USBD_HandleTypeDef *pdev, uint8_t cfgidx);
+ /* Control Endpoints*/
+ uint8_t (*Setup)(struct _USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req);
+ uint8_t (*EP0_TxSent)(struct _USBD_HandleTypeDef *pdev);
+ uint8_t (*EP0_RxReady)(struct _USBD_HandleTypeDef *pdev);
/* Class Specific Endpoints*/
- uint8_t (*DataIn) (struct _USBD_HandleTypeDef *pdev , uint8_t epnum);
- uint8_t (*DataOut) (struct _USBD_HandleTypeDef *pdev , uint8_t epnum);
- uint8_t (*SOF) (struct _USBD_HandleTypeDef *pdev);
- uint8_t (*IsoINIncomplete) (struct _USBD_HandleTypeDef *pdev , uint8_t epnum);
- uint8_t (*IsoOUTIncomplete) (struct _USBD_HandleTypeDef *pdev , uint8_t epnum);
+ uint8_t (*DataIn)(struct _USBD_HandleTypeDef *pdev, uint8_t epnum);
+ uint8_t (*DataOut)(struct _USBD_HandleTypeDef *pdev, uint8_t epnum);
+ uint8_t (*SOF)(struct _USBD_HandleTypeDef *pdev);
+ uint8_t (*IsoINIncomplete)(struct _USBD_HandleTypeDef *pdev, uint8_t epnum);
+ uint8_t (*IsoOUTIncomplete)(struct _USBD_HandleTypeDef *pdev, uint8_t epnum);
uint8_t *(*GetHSConfigDescriptor)(uint16_t *length);
uint8_t *(*GetFSConfigDescriptor)(uint16_t *length);
uint8_t *(*GetOtherSpeedConfigDescriptor)(uint16_t *length);
uint8_t *(*GetDeviceQualifierDescriptor)(uint16_t *length);
-#if (USBD_SUPPORT_USER_STRING == 1U)
- uint8_t *(*GetUsrStrDescriptor)(struct _USBD_HandleTypeDef *pdev ,uint8_t index, uint16_t *length);
+#if (USBD_SUPPORT_USER_STRING_DESC == 1U)
+ uint8_t *(*GetUsrStrDescriptor)(struct _USBD_HandleTypeDef *pdev, uint8_t index, uint16_t *length);
#endif
} USBD_ClassTypeDef;
@@ -199,38 +224,44 @@ typedef enum
USBD_SPEED_HIGH = 0U,
USBD_SPEED_FULL = 1U,
USBD_SPEED_LOW = 2U,
-}USBD_SpeedTypeDef;
+} USBD_SpeedTypeDef;
/* Following USB Device status */
-typedef enum {
- USBD_OK = 0U,
+typedef enum
+{
+ USBD_OK = 0U,
USBD_BUSY,
+ USBD_EMEM,
USBD_FAIL,
-}USBD_StatusTypeDef;
+} USBD_StatusTypeDef;
/* USB Device descriptors structure */
typedef struct
{
- uint8_t *(*GetDeviceDescriptor)( USBD_SpeedTypeDef speed , uint16_t *length);
- uint8_t *(*GetLangIDStrDescriptor)( USBD_SpeedTypeDef speed , uint16_t *length);
- uint8_t *(*GetManufacturerStrDescriptor)( USBD_SpeedTypeDef speed , uint16_t *length);
- uint8_t *(*GetProductStrDescriptor)( USBD_SpeedTypeDef speed , uint16_t *length);
- uint8_t *(*GetSerialStrDescriptor)( USBD_SpeedTypeDef speed , uint16_t *length);
- uint8_t *(*GetConfigurationStrDescriptor)( USBD_SpeedTypeDef speed , uint16_t *length);
- uint8_t *(*GetInterfaceStrDescriptor)( USBD_SpeedTypeDef speed , uint16_t *length);
-#if (USBD_LPM_ENABLED == 1U)
- uint8_t *(*GetBOSDescriptor)( USBD_SpeedTypeDef speed , uint16_t *length);
+ uint8_t *(*GetDeviceDescriptor)(USBD_SpeedTypeDef speed, uint16_t *length);
+ uint8_t *(*GetLangIDStrDescriptor)(USBD_SpeedTypeDef speed, uint16_t *length);
+ uint8_t *(*GetManufacturerStrDescriptor)(USBD_SpeedTypeDef speed, uint16_t *length);
+ uint8_t *(*GetProductStrDescriptor)(USBD_SpeedTypeDef speed, uint16_t *length);
+ uint8_t *(*GetSerialStrDescriptor)(USBD_SpeedTypeDef speed, uint16_t *length);
+ uint8_t *(*GetConfigurationStrDescriptor)(USBD_SpeedTypeDef speed, uint16_t *length);
+ uint8_t *(*GetInterfaceStrDescriptor)(USBD_SpeedTypeDef speed, uint16_t *length);
+#if (USBD_CLASS_USER_STRING_DESC == 1)
+ uint8_t *(*GetUserStrDescriptor)(USBD_SpeedTypeDef speed, uint8_t idx, uint16_t *length);
+#endif
+#if ((USBD_LPM_ENABLED == 1U) || (USBD_CLASS_BOS_ENABLED == 1))
+ uint8_t *(*GetBOSDescriptor)(USBD_SpeedTypeDef speed, uint16_t *length);
#endif
} USBD_DescriptorsTypeDef;
/* USB Device handle structure */
typedef struct
{
- uint32_t status;
- uint32_t is_used;
- uint32_t total_length;
- uint32_t rem_length;
- uint32_t maxpacket;
+ uint32_t status;
+ uint32_t total_length;
+ uint32_t rem_length;
+ uint32_t maxpacket;
+ uint16_t is_used;
+ uint16_t bInterval;
} USBD_EndpointTypeDef;
/* USB Device handle structure */
@@ -241,8 +272,8 @@ typedef struct _USBD_HandleTypeDef
uint32_t dev_default_config;
uint32_t dev_config_status;
USBD_SpeedTypeDef dev_speed;
- USBD_EndpointTypeDef ep_in[15];
- USBD_EndpointTypeDef ep_out[15];
+ USBD_EndpointTypeDef ep_in[16];
+ USBD_EndpointTypeDef ep_out[16];
uint32_t ep0_state;
uint32_t ep0_data_len;
uint8_t dev_state;
@@ -251,6 +282,7 @@ typedef struct _USBD_HandleTypeDef
uint8_t dev_connection_status;
uint8_t dev_test_mode;
uint32_t dev_remote_wakeup;
+ uint8_t ConfIdx;
USBD_SetupReqTypedef request;
USBD_DescriptorsTypeDef *pDesc;
@@ -258,6 +290,8 @@ typedef struct _USBD_HandleTypeDef
void *pClassData;
void *pUserData;
void *pData;
+ void *pBosDesc;
+ void *pConfDesc;
} USBD_HandleTypeDef;
/**
@@ -269,40 +303,57 @@ typedef struct _USBD_HandleTypeDef
/** @defgroup USBD_DEF_Exported_Macros
* @{
*/
-#define SWAPBYTE(addr) (((uint16_t)(*((uint8_t *)(addr)))) + \
- (((uint16_t)(*(((uint8_t *)(addr)) + 1U))) << 8U))
+__STATIC_INLINE uint16_t SWAPBYTE(uint8_t *addr)
+{
+ uint16_t _SwapVal, _Byte1, _Byte2;
+ uint8_t *_pbuff = addr;
-#define LOBYTE(x) ((uint8_t)(x & 0x00FFU))
-#define HIBYTE(x) ((uint8_t)((x & 0xFF00U) >> 8U))
+ _Byte1 = *(uint8_t *)_pbuff;
+ _pbuff++;
+ _Byte2 = *(uint8_t *)_pbuff;
+
+ _SwapVal = (_Byte2 << 8) | _Byte1;
+
+ return _SwapVal;
+}
+
+#define LOBYTE(x) ((uint8_t)((x) & 0x00FFU))
+#define HIBYTE(x) ((uint8_t)(((x) & 0xFF00U) >> 8U))
#define MIN(a, b) (((a) < (b)) ? (a) : (b))
#define MAX(a, b) (((a) > (b)) ? (a) : (b))
#if defined ( __GNUC__ )
- #ifndef __weak
- #define __weak __attribute__((weak))
- #endif /* __weak */
- #ifndef __packed
- #define __packed __attribute__((__packed__))
- #endif /* __packed */
+#ifndef __weak
+#define __weak __attribute__((weak))
+#endif /* __weak */
+#ifndef __packed
+#define __packed __attribute__((__packed__))
+#endif /* __packed */
#endif /* __GNUC__ */
/* In HS mode and when the DMA is used, all variables and data structures dealing
with the DMA during the transaction process should be 4-bytes aligned */
-#if defined (__GNUC__) /* GNU Compiler */
- #define __ALIGN_END __attribute__ ((aligned (4)))
- #define __ALIGN_BEGIN
+#if defined ( __GNUC__ ) && !defined (__CC_ARM) /* GNU Compiler */
+#ifndef __ALIGN_END
+#define __ALIGN_END __attribute__ ((aligned (4U)))
+#endif /* __ALIGN_END */
+#ifndef __ALIGN_BEGIN
+#define __ALIGN_BEGIN
+#endif /* __ALIGN_BEGIN */
#else
- #define __ALIGN_END
- #if defined (__CC_ARM) /* ARM Compiler */
- #define __ALIGN_BEGIN __align(4)
- #elif defined (__ICCARM__) /* IAR Compiler */
- #define __ALIGN_BEGIN
- #elif defined (__TASKING__) /* TASKING Compiler */
- #define __ALIGN_BEGIN __align(4)
- #endif /* __CC_ARM */
+#ifndef __ALIGN_END
+#define __ALIGN_END
+#endif /* __ALIGN_END */
+#ifndef __ALIGN_BEGIN
+#if defined (__CC_ARM) /* ARM Compiler */
+#define __ALIGN_BEGIN __align(4U)
+#elif defined (__ICCARM__) /* IAR Compiler */
+#define __ALIGN_BEGIN
+#endif /* __CC_ARM */
+#endif /* __ALIGN_BEGIN */
#endif /* __GNUC__ */
diff --git a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_Keil/Boot/lib/STM32_USB_Device_Library/Core/Inc/usbd_ioreq.h b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_Keil/Boot/lib/STM32_USB_Device_Library/Core/Inc/usbd_ioreq.h
index 0552e00f..8f077c79 100644
--- a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_Keil/Boot/lib/STM32_USB_Device_Library/Core/Inc/usbd_ioreq.h
+++ b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_Keil/Boot/lib/STM32_USB_Device_Library/Core/Inc/usbd_ioreq.h
@@ -12,7 +12,7 @@
* This software component is licensed by ST under Ultimate Liberty license
* SLA0044, the "License"; You may not use this file except in compliance with
* the License. You may obtain a copy of the License at:
- * http://www.st.com/SLA0044
+ * www.st.com/SLA0044
*
******************************************************************************
*/
@@ -22,7 +22,7 @@
#define __USBD_IOREQ_H
#ifdef __cplusplus
- extern "C" {
+extern "C" {
#endif
/* Includes ------------------------------------------------------------------*/
@@ -77,27 +77,22 @@
* @{
*/
-USBD_StatusTypeDef USBD_CtlSendData (USBD_HandleTypeDef *pdev,
- uint8_t *pbuf,
- uint16_t len);
+USBD_StatusTypeDef USBD_CtlSendData(USBD_HandleTypeDef *pdev,
+ uint8_t *pbuf, uint32_t len);
-USBD_StatusTypeDef USBD_CtlContinueSendData (USBD_HandleTypeDef *pdev,
- uint8_t *pbuf,
- uint16_t len);
+USBD_StatusTypeDef USBD_CtlContinueSendData(USBD_HandleTypeDef *pdev,
+ uint8_t *pbuf, uint32_t len);
-USBD_StatusTypeDef USBD_CtlPrepareRx (USBD_HandleTypeDef *pdev,
- uint8_t *pbuf,
- uint16_t len);
+USBD_StatusTypeDef USBD_CtlPrepareRx(USBD_HandleTypeDef *pdev,
+ uint8_t *pbuf, uint32_t len);
-USBD_StatusTypeDef USBD_CtlContinueRx (USBD_HandleTypeDef *pdev,
- uint8_t *pbuf,
- uint16_t len);
+USBD_StatusTypeDef USBD_CtlContinueRx(USBD_HandleTypeDef *pdev,
+ uint8_t *pbuf, uint32_t len);
-USBD_StatusTypeDef USBD_CtlSendStatus (USBD_HandleTypeDef *pdev);
+USBD_StatusTypeDef USBD_CtlSendStatus(USBD_HandleTypeDef *pdev);
+USBD_StatusTypeDef USBD_CtlReceiveStatus(USBD_HandleTypeDef *pdev);
-USBD_StatusTypeDef USBD_CtlReceiveStatus (USBD_HandleTypeDef *pdev);
-
-uint32_t USBD_GetRxCount (USBD_HandleTypeDef *pdev, uint8_t ep_addr);
+uint32_t USBD_GetRxCount(USBD_HandleTypeDef *pdev, uint8_t ep_addr);
/**
* @}
diff --git a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_Keil/Boot/lib/STM32_USB_Device_Library/Core/Src/usbd_core.c b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_Keil/Boot/lib/STM32_USB_Device_Library/Core/Src/usbd_core.c
index 1cc9b19f..e3db03fd 100644
--- a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_Keil/Boot/lib/STM32_USB_Device_Library/Core/Src/usbd_core.c
+++ b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_Keil/Boot/lib/STM32_USB_Device_Library/Core/Src/usbd_core.c
@@ -12,7 +12,7 @@
* This software component is licensed by ST under Ultimate Liberty license
* SLA0044, the "License"; You may not use this file except in compliance with
* the License. You may obtain a copy of the License at:
- * http://www.st.com/SLA0044
+ * www.st.com/SLA0044
*
******************************************************************************
*/
@@ -33,6 +33,7 @@
/** @defgroup USBD_CORE_Private_TypesDefinitions
* @{
*/
+
/**
* @}
*/
@@ -50,13 +51,12 @@
/** @defgroup USBD_CORE_Private_Macros
* @{
*/
+
/**
* @}
*/
-
-
/** @defgroup USBD_CORE_Private_FunctionPrototypes
* @{
*/
@@ -73,6 +73,7 @@
* @}
*/
+
/** @defgroup USBD_CORE_Private_Functions
* @{
*/
@@ -85,10 +86,13 @@
* @param id: Low level core index
* @retval None
*/
-USBD_StatusTypeDef USBD_Init(USBD_HandleTypeDef *pdev, USBD_DescriptorsTypeDef *pdesc, uint8_t id)
+USBD_StatusTypeDef USBD_Init(USBD_HandleTypeDef *pdev,
+ USBD_DescriptorsTypeDef *pdesc, uint8_t id)
{
+ USBD_StatusTypeDef ret;
+
/* Check whether the USB Host handle is valid */
- if(pdev == NULL)
+ if (pdev == NULL)
{
#if (USBD_DEBUG_LEVEL > 1U)
USBD_ErrLog("Invalid Device handle");
@@ -96,25 +100,31 @@ USBD_StatusTypeDef USBD_Init(USBD_HandleTypeDef *pdev, USBD_DescriptorsTypeDef *
return USBD_FAIL;
}
- /* Unlink previous class*/
- if(pdev->pClass != NULL)
+ /* Unlink previous class */
+ if (pdev->pClass != NULL)
{
pdev->pClass = NULL;
}
+ if (pdev->pConfDesc != NULL)
+ {
+ pdev->pConfDesc = NULL;
+ }
+
/* Assign USBD Descriptors */
- if(pdesc != NULL)
+ if (pdesc != NULL)
{
pdev->pDesc = pdesc;
}
/* Set Device initial State */
- pdev->dev_state = USBD_STATE_DEFAULT;
+ pdev->dev_state = USBD_STATE_DEFAULT;
pdev->id = id;
- /* Initialize low level driver */
- USBD_LL_Init(pdev);
- return USBD_OK;
+ /* Initialize low level driver */
+ ret = USBD_LL_Init(pdev);
+
+ return ret;
}
/**
@@ -125,19 +135,34 @@ USBD_StatusTypeDef USBD_Init(USBD_HandleTypeDef *pdev, USBD_DescriptorsTypeDef *
*/
USBD_StatusTypeDef USBD_DeInit(USBD_HandleTypeDef *pdev)
{
+ USBD_StatusTypeDef ret;
+
/* Set Default State */
- pdev->dev_state = USBD_STATE_DEFAULT;
+ pdev->dev_state = USBD_STATE_DEFAULT;
/* Free Class Resources */
- pdev->pClass->DeInit(pdev, (uint8_t)pdev->dev_config);
+ if (pdev->pClass != NULL)
+ {
+ pdev->pClass->DeInit(pdev, (uint8_t)pdev->dev_config);
+ }
- /* Stop the low level driver */
- USBD_LL_Stop(pdev);
+ if (pdev->pConfDesc != NULL)
+ {
+ pdev->pConfDesc = NULL;
+ }
+
+ /* Stop the low level driver */
+ ret = USBD_LL_Stop(pdev);
+
+ if (ret != USBD_OK)
+ {
+ return ret;
+ }
/* Initialize low level driver */
- USBD_LL_DeInit(pdev);
+ ret = USBD_LL_DeInit(pdev);
- return USBD_OK;
+ return ret;
}
/**
@@ -147,24 +172,30 @@ USBD_StatusTypeDef USBD_DeInit(USBD_HandleTypeDef *pdev)
* @param pclass: Class handle
* @retval USBD Status
*/
-USBD_StatusTypeDef USBD_RegisterClass(USBD_HandleTypeDef *pdev, USBD_ClassTypeDef *pclass)
+USBD_StatusTypeDef USBD_RegisterClass(USBD_HandleTypeDef *pdev, USBD_ClassTypeDef *pclass)
{
- USBD_StatusTypeDef status = USBD_OK;
- if(pclass != 0)
- {
- /* link the class to the USB Device handle */
- pdev->pClass = pclass;
- status = USBD_OK;
- }
- else
+ uint16_t len = 0U;
+
+ if (pclass == NULL)
{
#if (USBD_DEBUG_LEVEL > 1U)
USBD_ErrLog("Invalid Class handle");
#endif
- status = USBD_FAIL;
+ return USBD_FAIL;
}
- return status;
+ /* link the class to the USB Device handle */
+ pdev->pClass = pclass;
+
+ /* Get Device Configuration Descriptor */
+#ifdef USE_USB_FS
+ pdev->pConfDesc = (void *)pdev->pClass->GetFSConfigDescriptor(&len);
+#else /* USE_USB_HS */
+ pdev->pConfDesc = (void *)pdev->pClass->GetHSConfigDescriptor(&len);
+#endif /* USE_USB_FS */
+
+
+ return USBD_OK;
}
/**
@@ -173,13 +204,10 @@ USBD_StatusTypeDef USBD_RegisterClass(USBD_HandleTypeDef *pdev, USBD_ClassTypeD
* @param pdev: Device Handle
* @retval USBD Status
*/
-USBD_StatusTypeDef USBD_Start (USBD_HandleTypeDef *pdev)
+USBD_StatusTypeDef USBD_Start(USBD_HandleTypeDef *pdev)
{
-
/* Start the low level driver */
- USBD_LL_Start(pdev);
-
- return USBD_OK;
+ return USBD_LL_Start(pdev);
}
/**
@@ -188,15 +216,25 @@ USBD_StatusTypeDef USBD_Start (USBD_HandleTypeDef *pdev)
* @param pdev: Device Handle
* @retval USBD Status
*/
-USBD_StatusTypeDef USBD_Stop (USBD_HandleTypeDef *pdev)
+USBD_StatusTypeDef USBD_Stop(USBD_HandleTypeDef *pdev)
{
+ USBD_StatusTypeDef ret;
+
/* Free Class Resources */
- pdev->pClass->DeInit(pdev, (uint8_t)pdev->dev_config);
+ if (pdev->pClass != NULL)
+ {
+ pdev->pClass->DeInit(pdev, (uint8_t)pdev->dev_config);
+ }
- /* Stop the low level driver */
- USBD_LL_Stop(pdev);
+ if (pdev->pConfDesc != NULL)
+ {
+ pdev->pConfDesc = NULL;
+ }
- return USBD_OK;
+ /* Stop the low level driver */
+ ret = USBD_LL_Stop(pdev);
+
+ return ret;
}
/**
@@ -205,7 +243,7 @@ USBD_StatusTypeDef USBD_Stop (USBD_HandleTypeDef *pdev)
* @param pdev: device instance
* @retval status
*/
-USBD_StatusTypeDef USBD_RunTestMode (USBD_HandleTypeDef *pdev)
+USBD_StatusTypeDef USBD_RunTestMode(USBD_HandleTypeDef *pdev)
{
/* Prevent unused argument compilation warning */
UNUSED(pdev);
@@ -221,17 +259,14 @@ USBD_StatusTypeDef USBD_RunTestMode (USBD_HandleTypeDef *pdev)
* @retval status
*/
-USBD_StatusTypeDef USBD_SetClassConfig(USBD_HandleTypeDef *pdev, uint8_t cfgidx)
+USBD_StatusTypeDef USBD_SetClassConfig(USBD_HandleTypeDef *pdev, uint8_t cfgidx)
{
- USBD_StatusTypeDef ret = USBD_FAIL;
+ USBD_StatusTypeDef ret = USBD_FAIL;
- if(pdev->pClass != NULL)
+ if (pdev->pClass != NULL)
{
- /* Set configuration and Start the Class*/
- if(pdev->pClass->Init(pdev, cfgidx) == 0U)
- {
- ret = USBD_OK;
- }
+ /* Set configuration and Start the Class */
+ ret = (USBD_StatusTypeDef)pdev->pClass->Init(pdev, cfgidx);
}
return ret;
@@ -244,10 +279,14 @@ USBD_StatusTypeDef USBD_SetClassConfig(USBD_HandleTypeDef *pdev, uint8_t cfgidx
* @param cfgidx: configuration index
* @retval status: USBD_StatusTypeDef
*/
-USBD_StatusTypeDef USBD_ClrClassConfig(USBD_HandleTypeDef *pdev, uint8_t cfgidx)
+USBD_StatusTypeDef USBD_ClrClassConfig(USBD_HandleTypeDef *pdev, uint8_t cfgidx)
{
- /* Clear configuration and De-initialize the Class process*/
- pdev->pClass->DeInit(pdev, cfgidx);
+ /* Clear configuration and De-initialize the Class process */
+ if (pdev->pClass != NULL)
+ {
+ pdev->pClass->DeInit(pdev, cfgidx);
+ }
+
return USBD_OK;
}
@@ -260,6 +299,8 @@ USBD_StatusTypeDef USBD_ClrClassConfig(USBD_HandleTypeDef *pdev, uint8_t cfgidx
*/
USBD_StatusTypeDef USBD_LL_SetupStage(USBD_HandleTypeDef *pdev, uint8_t *psetup)
{
+ USBD_StatusTypeDef ret;
+
USBD_ParseSetupRequest(&pdev->request, psetup);
pdev->ep0_state = USBD_EP0_SETUP;
@@ -268,24 +309,24 @@ USBD_StatusTypeDef USBD_LL_SetupStage(USBD_HandleTypeDef *pdev, uint8_t *psetup)
switch (pdev->request.bmRequest & 0x1FU)
{
- case USB_REQ_RECIPIENT_DEVICE:
- USBD_StdDevReq (pdev, &pdev->request);
- break;
+ case USB_REQ_RECIPIENT_DEVICE:
+ ret = USBD_StdDevReq(pdev, &pdev->request);
+ break;
- case USB_REQ_RECIPIENT_INTERFACE:
- USBD_StdItfReq(pdev, &pdev->request);
- break;
+ case USB_REQ_RECIPIENT_INTERFACE:
+ ret = USBD_StdItfReq(pdev, &pdev->request);
+ break;
- case USB_REQ_RECIPIENT_ENDPOINT:
- USBD_StdEPReq(pdev, &pdev->request);
- break;
+ case USB_REQ_RECIPIENT_ENDPOINT:
+ ret = USBD_StdEPReq(pdev, &pdev->request);
+ break;
- default:
- USBD_LL_StallEP(pdev, (pdev->request.bmRequest & 0x80U));
- break;
+ default:
+ ret = USBD_LL_StallEP(pdev, (pdev->request.bmRequest & 0x80U));
+ break;
}
- return USBD_OK;
+ return ret;
}
/**
@@ -298,48 +339,54 @@ USBD_StatusTypeDef USBD_LL_SetupStage(USBD_HandleTypeDef *pdev, uint8_t *psetup)
USBD_StatusTypeDef USBD_LL_DataOutStage(USBD_HandleTypeDef *pdev,
uint8_t epnum, uint8_t *pdata)
{
- USBD_EndpointTypeDef *pep;
+ USBD_EndpointTypeDef *pep;
+ USBD_StatusTypeDef ret;
- if(epnum == 0U)
+ if (epnum == 0U)
{
pep = &pdev->ep_out[0];
- if ( pdev->ep0_state == USBD_EP0_DATA_OUT)
+ if (pdev->ep0_state == USBD_EP0_DATA_OUT)
{
- if(pep->rem_length > pep->maxpacket)
+ if (pep->rem_length > pep->maxpacket)
{
- pep->rem_length -= pep->maxpacket;
+ pep->rem_length -= pep->maxpacket;
- USBD_CtlContinueRx (pdev,
- pdata,
- (uint16_t)MIN(pep->rem_length, pep->maxpacket));
+ (void)USBD_CtlContinueRx(pdev, pdata, MIN(pep->rem_length, pep->maxpacket));
}
else
{
- if((pdev->pClass->EP0_RxReady != NULL)&&
- (pdev->dev_state == USBD_STATE_CONFIGURED))
+ if ((pdev->pClass->EP0_RxReady != NULL) &&
+ (pdev->dev_state == USBD_STATE_CONFIGURED))
{
pdev->pClass->EP0_RxReady(pdev);
}
- USBD_CtlSendStatus(pdev);
+ (void)USBD_CtlSendStatus(pdev);
}
}
else
{
+#if 0
if (pdev->ep0_state == USBD_EP0_STATUS_OUT)
{
/*
* STATUS PHASE completed, update ep0_state to idle
*/
pdev->ep0_state = USBD_EP0_IDLE;
- USBD_LL_StallEP(pdev, 0U);
+ (void)USBD_LL_StallEP(pdev, 0U);
}
+#endif
}
}
- else if((pdev->pClass->DataOut != NULL) &&
- (pdev->dev_state == USBD_STATE_CONFIGURED))
+ else if ((pdev->pClass->DataOut != NULL) &&
+ (pdev->dev_state == USBD_STATE_CONFIGURED))
{
- pdev->pClass->DataOut(pdev, epnum);
+ ret = (USBD_StatusTypeDef)pdev->pClass->DataOut(pdev, epnum);
+
+ if (ret != USBD_OK)
+ {
+ return ret;
+ }
}
else
{
@@ -357,69 +404,78 @@ USBD_StatusTypeDef USBD_LL_DataOutStage(USBD_HandleTypeDef *pdev,
* @param epnum: endpoint index
* @retval status
*/
-USBD_StatusTypeDef USBD_LL_DataInStage(USBD_HandleTypeDef *pdev, uint8_t epnum,
- uint8_t *pdata)
+USBD_StatusTypeDef USBD_LL_DataInStage(USBD_HandleTypeDef *pdev,
+ uint8_t epnum, uint8_t *pdata)
{
USBD_EndpointTypeDef *pep;
+ USBD_StatusTypeDef ret;
- if(epnum == 0U)
+ if (epnum == 0U)
{
pep = &pdev->ep_in[0];
- if ( pdev->ep0_state == USBD_EP0_DATA_IN)
+ if (pdev->ep0_state == USBD_EP0_DATA_IN)
{
- if(pep->rem_length > pep->maxpacket)
+ if (pep->rem_length > pep->maxpacket)
{
pep->rem_length -= pep->maxpacket;
- USBD_CtlContinueSendData (pdev, pdata, (uint16_t)pep->rem_length);
+ (void)USBD_CtlContinueSendData(pdev, pdata, pep->rem_length);
/* Prepare endpoint for premature end of transfer */
- USBD_LL_PrepareReceive (pdev, 0U, NULL, 0U);
+ (void)USBD_LL_PrepareReceive(pdev, 0U, NULL, 0U);
}
else
- { /* last packet is MPS multiple, so send ZLP packet */
- if((pep->total_length % pep->maxpacket == 0U) &&
- (pep->total_length >= pep->maxpacket) &&
- (pep->total_length < pdev->ep0_data_len))
+ {
+ /* last packet is MPS multiple, so send ZLP packet */
+ if ((pep->maxpacket == pep->rem_length) &&
+ (pep->total_length >= pep->maxpacket) &&
+ (pep->total_length < pdev->ep0_data_len))
{
- USBD_CtlContinueSendData(pdev, NULL, 0U);
+ (void)USBD_CtlContinueSendData(pdev, NULL, 0U);
pdev->ep0_data_len = 0U;
/* Prepare endpoint for premature end of transfer */
- USBD_LL_PrepareReceive (pdev, 0U, NULL, 0U);
+ (void)USBD_LL_PrepareReceive(pdev, 0U, NULL, 0U);
}
else
{
- if((pdev->pClass->EP0_TxSent != NULL)&&
- (pdev->dev_state == USBD_STATE_CONFIGURED))
+ if ((pdev->pClass->EP0_TxSent != NULL) &&
+ (pdev->dev_state == USBD_STATE_CONFIGURED))
{
pdev->pClass->EP0_TxSent(pdev);
}
- USBD_LL_StallEP(pdev, 0x80U);
- USBD_CtlReceiveStatus(pdev);
+ (void)USBD_LL_StallEP(pdev, 0x80U);
+ (void)USBD_CtlReceiveStatus(pdev);
}
}
}
else
{
+#if 0
if ((pdev->ep0_state == USBD_EP0_STATUS_IN) ||
(pdev->ep0_state == USBD_EP0_IDLE))
{
- USBD_LL_StallEP(pdev, 0x80U);
+ (void)USBD_LL_StallEP(pdev, 0x80U);
}
+#endif
}
if (pdev->dev_test_mode == 1U)
{
- USBD_RunTestMode(pdev);
+ (void)USBD_RunTestMode(pdev);
pdev->dev_test_mode = 0U;
}
}
- else if((pdev->pClass->DataIn != NULL) &&
- (pdev->dev_state == USBD_STATE_CONFIGURED))
+ else if ((pdev->pClass->DataIn != NULL) &&
+ (pdev->dev_state == USBD_STATE_CONFIGURED))
{
- pdev->pClass->DataIn(pdev, epnum);
+ ret = (USBD_StatusTypeDef)pdev->pClass->DataIn(pdev, epnum);
+
+ if (ret != USBD_OK)
+ {
+ return ret;
+ }
}
else
{
@@ -437,29 +493,30 @@ USBD_StatusTypeDef USBD_LL_DataInStage(USBD_HandleTypeDef *pdev, uint8_t epnum,
* @retval status
*/
-USBD_StatusTypeDef USBD_LL_Reset(USBD_HandleTypeDef *pdev)
+USBD_StatusTypeDef USBD_LL_Reset(USBD_HandleTypeDef *pdev)
{
- /* Open EP0 OUT */
- USBD_LL_OpenEP(pdev, 0x00U, USBD_EP_TYPE_CTRL, USB_MAX_EP0_SIZE);
+ /* Upon Reset call user call back */
+ pdev->dev_state = USBD_STATE_DEFAULT;
+ pdev->ep0_state = USBD_EP0_IDLE;
+ pdev->dev_config = 0U;
+ pdev->dev_remote_wakeup = 0U;
+
+ if (pdev->pClassData != NULL)
+ {
+ pdev->pClass->DeInit(pdev, (uint8_t)pdev->dev_config);
+ }
+
+ /* Open EP0 OUT */
+ (void)USBD_LL_OpenEP(pdev, 0x00U, USBD_EP_TYPE_CTRL, USB_MAX_EP0_SIZE);
pdev->ep_out[0x00U & 0xFU].is_used = 1U;
pdev->ep_out[0].maxpacket = USB_MAX_EP0_SIZE;
/* Open EP0 IN */
- USBD_LL_OpenEP(pdev, 0x80U, USBD_EP_TYPE_CTRL, USB_MAX_EP0_SIZE);
+ (void)USBD_LL_OpenEP(pdev, 0x80U, USBD_EP_TYPE_CTRL, USB_MAX_EP0_SIZE);
pdev->ep_in[0x80U & 0xFU].is_used = 1U;
pdev->ep_in[0].maxpacket = USB_MAX_EP0_SIZE;
- /* Upon Reset call user call back */
- pdev->dev_state = USBD_STATE_DEFAULT;
- pdev->ep0_state = USBD_EP0_IDLE;
- pdev->dev_config= 0U;
- pdev->dev_remote_wakeup = 0U;
-
- if (pdev->pClassData)
- {
- pdev->pClass->DeInit(pdev, (uint8_t)pdev->dev_config);
- }
return USBD_OK;
}
@@ -470,9 +527,11 @@ USBD_StatusTypeDef USBD_LL_Reset(USBD_HandleTypeDef *pdev)
* @param pdev: device instance
* @retval status
*/
-USBD_StatusTypeDef USBD_LL_SetSpeed(USBD_HandleTypeDef *pdev, USBD_SpeedTypeDef speed)
+USBD_StatusTypeDef USBD_LL_SetSpeed(USBD_HandleTypeDef *pdev,
+ USBD_SpeedTypeDef speed)
{
pdev->dev_speed = speed;
+
return USBD_OK;
}
@@ -483,10 +542,11 @@ USBD_StatusTypeDef USBD_LL_SetSpeed(USBD_HandleTypeDef *pdev, USBD_SpeedTypeDef
* @retval status
*/
-USBD_StatusTypeDef USBD_LL_Suspend(USBD_HandleTypeDef *pdev)
+USBD_StatusTypeDef USBD_LL_Suspend(USBD_HandleTypeDef *pdev)
{
- pdev->dev_old_state = pdev->dev_state;
- pdev->dev_state = USBD_STATE_SUSPENDED;
+ pdev->dev_old_state = pdev->dev_state;
+ pdev->dev_state = USBD_STATE_SUSPENDED;
+
return USBD_OK;
}
@@ -497,9 +557,13 @@ USBD_StatusTypeDef USBD_LL_Suspend(USBD_HandleTypeDef *pdev)
* @retval status
*/
-USBD_StatusTypeDef USBD_LL_Resume(USBD_HandleTypeDef *pdev)
+USBD_StatusTypeDef USBD_LL_Resume(USBD_HandleTypeDef *pdev)
{
- pdev->dev_state = pdev->dev_old_state;
+ if (pdev->dev_state == USBD_STATE_SUSPENDED)
+ {
+ pdev->dev_state = pdev->dev_old_state;
+ }
+
return USBD_OK;
}
@@ -510,15 +574,16 @@ USBD_StatusTypeDef USBD_LL_Resume(USBD_HandleTypeDef *pdev)
* @retval status
*/
-USBD_StatusTypeDef USBD_LL_SOF(USBD_HandleTypeDef *pdev)
+USBD_StatusTypeDef USBD_LL_SOF(USBD_HandleTypeDef *pdev)
{
- if(pdev->dev_state == USBD_STATE_CONFIGURED)
+ if (pdev->dev_state == USBD_STATE_CONFIGURED)
{
- if(pdev->pClass->SOF != NULL)
+ if (pdev->pClass->SOF != NULL)
{
pdev->pClass->SOF(pdev);
}
}
+
return USBD_OK;
}
@@ -528,7 +593,8 @@ USBD_StatusTypeDef USBD_LL_SOF(USBD_HandleTypeDef *pdev)
* @param pdev: device instance
* @retval status
*/
-USBD_StatusTypeDef USBD_LL_IsoINIncomplete(USBD_HandleTypeDef *pdev, uint8_t epnum)
+USBD_StatusTypeDef USBD_LL_IsoINIncomplete(USBD_HandleTypeDef *pdev,
+ uint8_t epnum)
{
/* Prevent unused arguments compilation warning */
UNUSED(pdev);
@@ -543,7 +609,8 @@ USBD_StatusTypeDef USBD_LL_IsoINIncomplete(USBD_HandleTypeDef *pdev, uint8_t ep
* @param pdev: device instance
* @retval status
*/
-USBD_StatusTypeDef USBD_LL_IsoOUTIncomplete(USBD_HandleTypeDef *pdev, uint8_t epnum)
+USBD_StatusTypeDef USBD_LL_IsoOUTIncomplete(USBD_HandleTypeDef *pdev,
+ uint8_t epnum)
{
/* Prevent unused arguments compilation warning */
UNUSED(pdev);
@@ -558,7 +625,7 @@ USBD_StatusTypeDef USBD_LL_IsoOUTIncomplete(USBD_HandleTypeDef *pdev, uint8_t e
* @param pdev: device instance
* @retval status
*/
-USBD_StatusTypeDef USBD_LL_DevConnected(USBD_HandleTypeDef *pdev)
+USBD_StatusTypeDef USBD_LL_DevConnected(USBD_HandleTypeDef *pdev)
{
/* Prevent unused argument compilation warning */
UNUSED(pdev);
@@ -572,11 +639,15 @@ USBD_StatusTypeDef USBD_LL_DevConnected(USBD_HandleTypeDef *pdev)
* @param pdev: device instance
* @retval status
*/
-USBD_StatusTypeDef USBD_LL_DevDisconnected(USBD_HandleTypeDef *pdev)
+USBD_StatusTypeDef USBD_LL_DevDisconnected(USBD_HandleTypeDef *pdev)
{
/* Free Class Resources */
pdev->dev_state = USBD_STATE_DEFAULT;
- pdev->pClass->DeInit(pdev, (uint8_t)pdev->dev_config);
+
+ if (pdev->pClass != NULL)
+ {
+ pdev->pClass->DeInit(pdev, (uint8_t)pdev->dev_config);
+ }
return USBD_OK;
}
diff --git a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_Keil/Boot/lib/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.c b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_Keil/Boot/lib/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.c
index c3e7ecbe..c51f3497 100644
--- a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_Keil/Boot/lib/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.c
+++ b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_Keil/Boot/lib/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.c
@@ -12,7 +12,7 @@
* This software component is licensed by ST under Ultimate Liberty license
* SLA0044, the "License"; You may not use this file except in compliance with
* the License. You may obtain a copy of the License at:
- * http://www.st.com/SLA0044
+ * www.st.com/SLA0044
*
******************************************************************************
*/
@@ -35,6 +35,7 @@
/** @defgroup USBD_REQ_Private_TypesDefinitions
* @{
*/
+
/**
* @}
*/
@@ -52,6 +53,7 @@
/** @defgroup USBD_REQ_Private_Macros
* @{
*/
+
/**
* @}
*/
@@ -60,6 +62,7 @@
/** @defgroup USBD_REQ_Private_Variables
* @{
*/
+
/**
* @}
*/
@@ -68,27 +71,13 @@
/** @defgroup USBD_REQ_Private_FunctionPrototypes
* @{
*/
-static void USBD_GetDescriptor(USBD_HandleTypeDef *pdev ,
- USBD_SetupReqTypedef *req);
-
-static void USBD_SetAddress(USBD_HandleTypeDef *pdev ,
- USBD_SetupReqTypedef *req);
-
-static void USBD_SetConfig(USBD_HandleTypeDef *pdev ,
- USBD_SetupReqTypedef *req);
-
-static void USBD_GetConfig(USBD_HandleTypeDef *pdev ,
- USBD_SetupReqTypedef *req);
-
-static void USBD_GetStatus(USBD_HandleTypeDef *pdev ,
- USBD_SetupReqTypedef *req);
-
-static void USBD_SetFeature(USBD_HandleTypeDef *pdev ,
- USBD_SetupReqTypedef *req);
-
-static void USBD_ClrFeature(USBD_HandleTypeDef *pdev ,
- USBD_SetupReqTypedef *req);
-
+static void USBD_GetDescriptor(USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req);
+static void USBD_SetAddress(USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req);
+static USBD_StatusTypeDef USBD_SetConfig(USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req);
+static void USBD_GetConfig(USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req);
+static void USBD_GetStatus(USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req);
+static void USBD_SetFeature(USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req);
+static void USBD_ClrFeature(USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req);
static uint8_t USBD_GetLen(uint8_t *buf);
/**
@@ -108,7 +97,7 @@ static uint8_t USBD_GetLen(uint8_t *buf);
* @param req: usb request
* @retval status
*/
-USBD_StatusTypeDef USBD_StdDevReq (USBD_HandleTypeDef *pdev , USBD_SetupReqTypedef *req)
+USBD_StatusTypeDef USBD_StdDevReq(USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req)
{
USBD_StatusTypeDef ret = USBD_OK;
@@ -116,41 +105,38 @@ USBD_StatusTypeDef USBD_StdDevReq (USBD_HandleTypeDef *pdev , USBD_SetupReqType
{
case USB_REQ_TYPE_CLASS:
case USB_REQ_TYPE_VENDOR:
- pdev->pClass->Setup(pdev, req);
+ ret = (USBD_StatusTypeDef)pdev->pClass->Setup(pdev, req);
break;
case USB_REQ_TYPE_STANDARD:
-
switch (req->bRequest)
{
case USB_REQ_GET_DESCRIPTOR:
-
- USBD_GetDescriptor (pdev, req);
+ USBD_GetDescriptor(pdev, req);
break;
case USB_REQ_SET_ADDRESS:
- USBD_SetAddress (pdev, req);
+ USBD_SetAddress(pdev, req);
break;
case USB_REQ_SET_CONFIGURATION:
- USBD_SetConfig (pdev, req);
+ ret = USBD_SetConfig(pdev, req);
break;
case USB_REQ_GET_CONFIGURATION:
- USBD_GetConfig (pdev, req);
+ USBD_GetConfig(pdev, req);
break;
case USB_REQ_GET_STATUS:
- USBD_GetStatus (pdev, req);
+ USBD_GetStatus(pdev, req);
break;
-
case USB_REQ_SET_FEATURE:
- USBD_SetFeature (pdev, req);
+ USBD_SetFeature(pdev, req);
break;
case USB_REQ_CLEAR_FEATURE:
- USBD_ClrFeature (pdev, req);
+ USBD_ClrFeature(pdev, req);
break;
default:
@@ -174,7 +160,7 @@ USBD_StatusTypeDef USBD_StdDevReq (USBD_HandleTypeDef *pdev , USBD_SetupReqType
* @param req: usb request
* @retval status
*/
-USBD_StatusTypeDef USBD_StdItfReq (USBD_HandleTypeDef *pdev , USBD_SetupReqTypedef *req)
+USBD_StatusTypeDef USBD_StdItfReq(USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req)
{
USBD_StatusTypeDef ret = USBD_OK;
@@ -191,11 +177,11 @@ USBD_StatusTypeDef USBD_StdItfReq (USBD_HandleTypeDef *pdev , USBD_SetupReqType
if (LOBYTE(req->wIndex) <= USBD_MAX_NUM_INTERFACES)
{
- ret = (USBD_StatusTypeDef)pdev->pClass->Setup (pdev, req);
+ ret = (USBD_StatusTypeDef)pdev->pClass->Setup(pdev, req);
if ((req->wLength == 0U) && (ret == USBD_OK))
{
- USBD_CtlSendStatus(pdev);
+ (void)USBD_CtlSendStatus(pdev);
}
}
else
@@ -215,7 +201,7 @@ USBD_StatusTypeDef USBD_StdItfReq (USBD_HandleTypeDef *pdev , USBD_SetupReqType
break;
}
- return USBD_OK;
+ return ret;
}
/**
@@ -225,43 +211,31 @@ USBD_StatusTypeDef USBD_StdItfReq (USBD_HandleTypeDef *pdev , USBD_SetupReqType
* @param req: usb request
* @retval status
*/
-USBD_StatusTypeDef USBD_StdEPReq (USBD_HandleTypeDef *pdev , USBD_SetupReqTypedef *req)
+USBD_StatusTypeDef USBD_StdEPReq(USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req)
{
-
- uint8_t ep_addr;
+ USBD_EndpointTypeDef *pep;
+ uint8_t ep_addr;
USBD_StatusTypeDef ret = USBD_OK;
- USBD_EndpointTypeDef *pep;
- ep_addr = LOBYTE(req->wIndex);
+ ep_addr = LOBYTE(req->wIndex);
switch (req->bmRequest & USB_REQ_TYPE_MASK)
{
-
case USB_REQ_TYPE_CLASS:
case USB_REQ_TYPE_VENDOR:
- pdev->pClass->Setup (pdev, req);
+ ret = (USBD_StatusTypeDef)pdev->pClass->Setup(pdev, req);
break;
case USB_REQ_TYPE_STANDARD:
- /* Check if it is a class request */
- if ((req->bmRequest & 0x60U) == 0x20U)
- {
- ret = (USBD_StatusTypeDef)pdev->pClass->Setup (pdev, req);
-
- return ret;
- }
-
switch (req->bRequest)
{
-
- case USB_REQ_SET_FEATURE :
-
+ case USB_REQ_SET_FEATURE:
switch (pdev->dev_state)
{
case USBD_STATE_ADDRESSED:
if ((ep_addr != 0x00U) && (ep_addr != 0x80U))
{
- USBD_LL_StallEP(pdev, ep_addr);
- USBD_LL_StallEP(pdev, 0x80U);
+ (void)USBD_LL_StallEP(pdev, ep_addr);
+ (void)USBD_LL_StallEP(pdev, 0x80U);
}
else
{
@@ -274,10 +248,10 @@ USBD_StatusTypeDef USBD_StdEPReq (USBD_HandleTypeDef *pdev , USBD_SetupReqTyped
{
if ((ep_addr != 0x00U) && (ep_addr != 0x80U) && (req->wLength == 0x00U))
{
- USBD_LL_StallEP(pdev, ep_addr);
+ (void)USBD_LL_StallEP(pdev, ep_addr);
}
}
- USBD_CtlSendStatus(pdev);
+ (void)USBD_CtlSendStatus(pdev);
break;
@@ -287,15 +261,15 @@ USBD_StatusTypeDef USBD_StdEPReq (USBD_HandleTypeDef *pdev , USBD_SetupReqTyped
}
break;
- case USB_REQ_CLEAR_FEATURE :
+ case USB_REQ_CLEAR_FEATURE:
switch (pdev->dev_state)
{
case USBD_STATE_ADDRESSED:
if ((ep_addr != 0x00U) && (ep_addr != 0x80U))
{
- USBD_LL_StallEP(pdev, ep_addr);
- USBD_LL_StallEP(pdev, 0x80U);
+ (void)USBD_LL_StallEP(pdev, ep_addr);
+ (void)USBD_LL_StallEP(pdev, 0x80U);
}
else
{
@@ -308,9 +282,10 @@ USBD_StatusTypeDef USBD_StdEPReq (USBD_HandleTypeDef *pdev , USBD_SetupReqTyped
{
if ((ep_addr & 0x7FU) != 0x00U)
{
- USBD_LL_ClearStallEP(pdev, ep_addr);
+ (void)USBD_LL_ClearStallEP(pdev, ep_addr);
}
- USBD_CtlSendStatus(pdev);
+ (void)USBD_CtlSendStatus(pdev);
+ (USBD_StatusTypeDef)pdev->pClass->Setup(pdev, req);
}
break;
@@ -329,16 +304,16 @@ USBD_StatusTypeDef USBD_StdEPReq (USBD_HandleTypeDef *pdev , USBD_SetupReqTyped
USBD_CtlError(pdev, req);
break;
}
- pep = ((ep_addr & 0x80U) == 0x80U) ? &pdev->ep_in[ep_addr & 0x7FU]:\
- &pdev->ep_out[ep_addr & 0x7FU];
+ pep = ((ep_addr & 0x80U) == 0x80U) ? &pdev->ep_in[ep_addr & 0x7FU] : \
+ &pdev->ep_out[ep_addr & 0x7FU];
- pep->status = 0x0000U;
+ pep->status = 0x0000U;
- USBD_CtlSendData (pdev, (uint8_t *)(void *)&pep->status, 2U);
- break;
+ (void)USBD_CtlSendData(pdev, (uint8_t *)&pep->status, 2U);
+ break;
case USBD_STATE_CONFIGURED:
- if((ep_addr & 0x80U) == 0x80U)
+ if ((ep_addr & 0x80U) == 0x80U)
{
if (pdev->ep_in[ep_addr & 0xFU].is_used == 0U)
{
@@ -355,14 +330,14 @@ USBD_StatusTypeDef USBD_StdEPReq (USBD_HandleTypeDef *pdev , USBD_SetupReqTyped
}
}
- pep = ((ep_addr & 0x80U) == 0x80U) ? &pdev->ep_in[ep_addr & 0x7FU]:\
- &pdev->ep_out[ep_addr & 0x7FU];
+ pep = ((ep_addr & 0x80U) == 0x80U) ? &pdev->ep_in[ep_addr & 0x7FU] : \
+ &pdev->ep_out[ep_addr & 0x7FU];
if ((ep_addr == 0x00U) || (ep_addr == 0x80U))
{
pep->status = 0x0000U;
}
- else if(USBD_LL_IsStallEP(pdev, ep_addr))
+ else if (USBD_LL_IsStallEP(pdev, ep_addr) != 0U)
{
pep->status = 0x0001U;
}
@@ -371,7 +346,7 @@ USBD_StatusTypeDef USBD_StdEPReq (USBD_HandleTypeDef *pdev , USBD_SetupReqTyped
pep->status = 0x0000U;
}
- USBD_CtlSendData (pdev, (uint8_t *)(void *)&pep->status, 2U);
+ (void)USBD_CtlSendData(pdev, (uint8_t *)&pep->status, 2U);
break;
default:
@@ -393,6 +368,8 @@ USBD_StatusTypeDef USBD_StdEPReq (USBD_HandleTypeDef *pdev , USBD_SetupReqTyped
return ret;
}
+
+
/**
* @brief USBD_GetDescriptor
* Handle Get Descriptor requests
@@ -400,18 +377,25 @@ USBD_StatusTypeDef USBD_StdEPReq (USBD_HandleTypeDef *pdev , USBD_SetupReqTyped
* @param req: usb request
* @retval status
*/
-static void USBD_GetDescriptor(USBD_HandleTypeDef *pdev ,
- USBD_SetupReqTypedef *req)
+static void USBD_GetDescriptor(USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req)
{
- uint16_t len;
- uint8_t *pbuf;
-
+ uint16_t len = 0U;
+ uint8_t *pbuf = NULL;
+ uint8_t err = 0U;
switch (req->wValue >> 8)
{
-#if (USBD_LPM_ENABLED == 1U)
+#if ((USBD_LPM_ENABLED == 1U) || (USBD_CLASS_BOS_ENABLED == 1U))
case USB_DESC_TYPE_BOS:
- pbuf = pdev->pDesc->GetBOSDescriptor(pdev->dev_speed, &len);
+ if (pdev->pDesc->GetBOSDescriptor != NULL)
+ {
+ pbuf = pdev->pDesc->GetBOSDescriptor(pdev->dev_speed, &len);
+ }
+ else
+ {
+ USBD_CtlError(pdev, req);
+ err++;
+ }
break;
#endif
case USB_DESC_TYPE_DEVICE:
@@ -419,14 +403,14 @@ static void USBD_GetDescriptor(USBD_HandleTypeDef *pdev ,
break;
case USB_DESC_TYPE_CONFIGURATION:
- if(pdev->dev_speed == USBD_SPEED_HIGH )
+ if (pdev->dev_speed == USBD_SPEED_HIGH)
{
- pbuf = (uint8_t *)pdev->pClass->GetHSConfigDescriptor(&len);
+ pbuf = pdev->pClass->GetHSConfigDescriptor(&len);
pbuf[1] = USB_DESC_TYPE_CONFIGURATION;
}
else
{
- pbuf = (uint8_t *)pdev->pClass->GetFSConfigDescriptor(&len);
+ pbuf = pdev->pClass->GetFSConfigDescriptor(&len);
pbuf[1] = USB_DESC_TYPE_CONFIGURATION;
}
break;
@@ -435,81 +419,159 @@ static void USBD_GetDescriptor(USBD_HandleTypeDef *pdev ,
switch ((uint8_t)(req->wValue))
{
case USBD_IDX_LANGID_STR:
- pbuf = pdev->pDesc->GetLangIDStrDescriptor(pdev->dev_speed, &len);
+ if (pdev->pDesc->GetLangIDStrDescriptor != NULL)
+ {
+ pbuf = pdev->pDesc->GetLangIDStrDescriptor(pdev->dev_speed, &len);
+ }
+ else
+ {
+ USBD_CtlError(pdev, req);
+ err++;
+ }
break;
case USBD_IDX_MFC_STR:
- pbuf = pdev->pDesc->GetManufacturerStrDescriptor(pdev->dev_speed, &len);
+ if (pdev->pDesc->GetManufacturerStrDescriptor != NULL)
+ {
+ pbuf = pdev->pDesc->GetManufacturerStrDescriptor(pdev->dev_speed, &len);
+ }
+ else
+ {
+ USBD_CtlError(pdev, req);
+ err++;
+ }
break;
case USBD_IDX_PRODUCT_STR:
- pbuf = pdev->pDesc->GetProductStrDescriptor(pdev->dev_speed, &len);
+ if (pdev->pDesc->GetProductStrDescriptor != NULL)
+ {
+ pbuf = pdev->pDesc->GetProductStrDescriptor(pdev->dev_speed, &len);
+ }
+ else
+ {
+ USBD_CtlError(pdev, req);
+ err++;
+ }
break;
case USBD_IDX_SERIAL_STR:
- pbuf = pdev->pDesc->GetSerialStrDescriptor(pdev->dev_speed, &len);
+ if (pdev->pDesc->GetSerialStrDescriptor != NULL)
+ {
+ pbuf = pdev->pDesc->GetSerialStrDescriptor(pdev->dev_speed, &len);
+ }
+ else
+ {
+ USBD_CtlError(pdev, req);
+ err++;
+ }
break;
case USBD_IDX_CONFIG_STR:
- pbuf = pdev->pDesc->GetConfigurationStrDescriptor(pdev->dev_speed, &len);
+ if (pdev->pDesc->GetConfigurationStrDescriptor != NULL)
+ {
+ pbuf = pdev->pDesc->GetConfigurationStrDescriptor(pdev->dev_speed, &len);
+ }
+ else
+ {
+ USBD_CtlError(pdev, req);
+ err++;
+ }
break;
case USBD_IDX_INTERFACE_STR:
- pbuf = pdev->pDesc->GetInterfaceStrDescriptor(pdev->dev_speed, &len);
+ if (pdev->pDesc->GetInterfaceStrDescriptor != NULL)
+ {
+ pbuf = pdev->pDesc->GetInterfaceStrDescriptor(pdev->dev_speed, &len);
+ }
+ else
+ {
+ USBD_CtlError(pdev, req);
+ err++;
+ }
break;
default:
-#if (USBD_SUPPORT_USER_STRING == 1U)
- pbuf = pdev->pClass->GetUsrStrDescriptor(pdev, (req->wValue) , &len);
- break;
+#if (USBD_SUPPORT_USER_STRING_DESC == 1U)
+ if (pdev->pClass->GetUsrStrDescriptor != NULL)
+ {
+ pbuf = pdev->pClass->GetUsrStrDescriptor(pdev, (req->wValue), &len);
+ }
+ else
+ {
+ USBD_CtlError(pdev, req);
+ err++;
+ }
+#elif (USBD_CLASS_USER_STRING_DESC == 1U)
+ if (pdev->pDesc->GetUserStrDescriptor != NULL)
+ {
+ pbuf = pdev->pDesc->GetUserStrDescriptor(pdev->dev_speed, (req->wValue), &len);
+ }
+ else
+ {
+ USBD_CtlError(pdev, req);
+ err++;
+ }
#else
- USBD_CtlError(pdev , req);
- return;
+ USBD_CtlError(pdev, req);
+ err++;
#endif
+ break;
}
break;
- case USB_DESC_TYPE_DEVICE_QUALIFIER:
- if(pdev->dev_speed == USBD_SPEED_HIGH)
+ case USB_DESC_TYPE_DEVICE_QUALIFIER:
+ if (pdev->dev_speed == USBD_SPEED_HIGH)
{
- pbuf = (uint8_t *)pdev->pClass->GetDeviceQualifierDescriptor(&len);
- break;
+ pbuf = pdev->pClass->GetDeviceQualifierDescriptor(&len);
}
else
{
- USBD_CtlError(pdev , req);
- return;
+ USBD_CtlError(pdev, req);
+ err++;
}
+ break;
case USB_DESC_TYPE_OTHER_SPEED_CONFIGURATION:
- if(pdev->dev_speed == USBD_SPEED_HIGH )
+ if (pdev->dev_speed == USBD_SPEED_HIGH)
{
- pbuf = (uint8_t *)pdev->pClass->GetOtherSpeedConfigDescriptor(&len);
+ pbuf = pdev->pClass->GetOtherSpeedConfigDescriptor(&len);
pbuf[1] = USB_DESC_TYPE_OTHER_SPEED_CONFIGURATION;
- break;
}
else
{
- USBD_CtlError(pdev , req);
- return;
+ USBD_CtlError(pdev, req);
+ err++;
}
+ break;
default:
- USBD_CtlError(pdev , req);
+ USBD_CtlError(pdev, req);
+ err++;
+ break;
+ }
+
+ if (err != 0U)
+ {
return;
}
-
- if((len != 0U) && (req->wLength != 0U))
+ else
{
-
- len = MIN(len, req->wLength);
-
- USBD_CtlSendData (pdev, pbuf, len);
- }
-
- if(req->wLength == 0U)
- {
- USBD_CtlSendStatus(pdev);
+ if (req->wLength != 0U)
+ {
+ if (len != 0U)
+ {
+ len = MIN(len, req->wLength);
+ (void)USBD_CtlSendData(pdev, pbuf, len);
+ }
+ else
+ {
+ USBD_CtlError(pdev, req);
+ }
+ }
+ else
+ {
+ (void)USBD_CtlSendStatus(pdev);
+ }
}
}
@@ -520,8 +582,7 @@ static void USBD_GetDescriptor(USBD_HandleTypeDef *pdev ,
* @param req: usb request
* @retval status
*/
-static void USBD_SetAddress(USBD_HandleTypeDef *pdev ,
- USBD_SetupReqTypedef *req)
+static void USBD_SetAddress(USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req)
{
uint8_t dev_addr;
@@ -531,13 +592,13 @@ static void USBD_SetAddress(USBD_HandleTypeDef *pdev ,
if (pdev->dev_state == USBD_STATE_CONFIGURED)
{
- USBD_CtlError(pdev , req);
+ USBD_CtlError(pdev, req);
}
else
{
pdev->dev_address = dev_addr;
- USBD_LL_SetUSBAddress(pdev, dev_addr);
- USBD_CtlSendStatus(pdev);
+ (void)USBD_LL_SetUSBAddress(pdev, dev_addr);
+ (void)USBD_CtlSendStatus(pdev);
if (dev_addr != 0U)
{
@@ -562,8 +623,9 @@ static void USBD_SetAddress(USBD_HandleTypeDef *pdev ,
* @param req: usb request
* @retval status
*/
-static void USBD_SetConfig(USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req)
+static USBD_StatusTypeDef USBD_SetConfig(USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req)
{
+ USBD_StatusTypeDef ret = USBD_OK;
static uint8_t cfgidx;
cfgidx = (uint8_t)(req->wValue);
@@ -571,63 +633,77 @@ static void USBD_SetConfig(USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req)
if (cfgidx > USBD_MAX_NUM_CONFIGURATION)
{
USBD_CtlError(pdev, req);
+ return USBD_FAIL;
}
- else
+
+ switch (pdev->dev_state)
{
- switch (pdev->dev_state)
+ case USBD_STATE_ADDRESSED:
+ if (cfgidx != 0U)
{
- case USBD_STATE_ADDRESSED:
- if (cfgidx)
+ pdev->dev_config = cfgidx;
+
+ ret = USBD_SetClassConfig(pdev, cfgidx);
+
+ if (ret != USBD_OK)
{
- pdev->dev_config = cfgidx;
+ USBD_CtlError(pdev, req);
+ }
+ else
+ {
+ (void)USBD_CtlSendStatus(pdev);
pdev->dev_state = USBD_STATE_CONFIGURED;
- if(USBD_SetClassConfig(pdev, cfgidx) == USBD_FAIL)
- {
- USBD_CtlError(pdev, req);
- return;
- }
- USBD_CtlSendStatus(pdev);
}
- else
- {
- USBD_CtlSendStatus(pdev);
- }
- break;
-
- case USBD_STATE_CONFIGURED:
- if (cfgidx == 0U)
- {
- pdev->dev_state = USBD_STATE_ADDRESSED;
- pdev->dev_config = cfgidx;
- USBD_ClrClassConfig(pdev, cfgidx);
- USBD_CtlSendStatus(pdev);
- }
- else if (cfgidx != pdev->dev_config)
- {
- /* Clear old configuration */
- USBD_ClrClassConfig(pdev, (uint8_t)pdev->dev_config);
-
- /* set new configuration */
- pdev->dev_config = cfgidx;
- if(USBD_SetClassConfig(pdev, cfgidx) == USBD_FAIL)
- {
- USBD_CtlError(pdev, req);
- return;
- }
- USBD_CtlSendStatus(pdev);
- }
- else
- {
- USBD_CtlSendStatus(pdev);
- }
- break;
-
- default:
- USBD_CtlError(pdev, req);
- USBD_ClrClassConfig(pdev, cfgidx);
- break;
}
+ else
+ {
+ (void)USBD_CtlSendStatus(pdev);
+ }
+ break;
+
+ case USBD_STATE_CONFIGURED:
+ if (cfgidx == 0U)
+ {
+ pdev->dev_state = USBD_STATE_ADDRESSED;
+ pdev->dev_config = cfgidx;
+ (void)USBD_ClrClassConfig(pdev, cfgidx);
+ (void)USBD_CtlSendStatus(pdev);
+ }
+ else if (cfgidx != pdev->dev_config)
+ {
+ /* Clear old configuration */
+ (void)USBD_ClrClassConfig(pdev, (uint8_t)pdev->dev_config);
+
+ /* set new configuration */
+ pdev->dev_config = cfgidx;
+
+ ret = USBD_SetClassConfig(pdev, cfgidx);
+
+ if (ret != USBD_OK)
+ {
+ USBD_CtlError(pdev, req);
+ (void)USBD_ClrClassConfig(pdev, (uint8_t)pdev->dev_config);
+ pdev->dev_state = USBD_STATE_ADDRESSED;
+ }
+ else
+ {
+ (void)USBD_CtlSendStatus(pdev);
+ }
+ }
+ else
+ {
+ (void)USBD_CtlSendStatus(pdev);
+ }
+ break;
+
+ default:
+ USBD_CtlError(pdev, req);
+ (void)USBD_ClrClassConfig(pdev, cfgidx);
+ ret = USBD_FAIL;
+ break;
}
+
+ return ret;
}
/**
@@ -641,7 +717,7 @@ static void USBD_GetConfig(USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req)
{
if (req->wLength != 1U)
{
- USBD_CtlError(pdev , req);
+ USBD_CtlError(pdev, req);
}
else
{
@@ -650,15 +726,15 @@ static void USBD_GetConfig(USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req)
case USBD_STATE_DEFAULT:
case USBD_STATE_ADDRESSED:
pdev->dev_default_config = 0U;
- USBD_CtlSendData (pdev, (uint8_t *)(void *)&pdev->dev_default_config, 1U);
+ (void)USBD_CtlSendData(pdev, (uint8_t *)&pdev->dev_default_config, 1U);
break;
case USBD_STATE_CONFIGURED:
- USBD_CtlSendData (pdev, (uint8_t *)(void *)&pdev->dev_config, 1U);
+ (void)USBD_CtlSendData(pdev, (uint8_t *)&pdev->dev_config, 1U);
break;
default:
- USBD_CtlError(pdev , req);
+ USBD_CtlError(pdev, req);
break;
}
}
@@ -678,28 +754,28 @@ static void USBD_GetStatus(USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req)
case USBD_STATE_DEFAULT:
case USBD_STATE_ADDRESSED:
case USBD_STATE_CONFIGURED:
- if(req->wLength != 0x2U)
+ if (req->wLength != 0x2U)
{
USBD_CtlError(pdev, req);
break;
}
-#if ( USBD_SELF_POWERED == 1U)
+#if (USBD_SELF_POWERED == 1U)
pdev->dev_config_status = USB_CONFIG_SELF_POWERED;
#else
pdev->dev_config_status = 0U;
#endif
- if (pdev->dev_remote_wakeup)
+ if (pdev->dev_remote_wakeup != 0U)
{
pdev->dev_config_status |= USB_CONFIG_REMOTE_WAKEUP;
}
- USBD_CtlSendData (pdev, (uint8_t *)(void *)&pdev->dev_config_status, 2U);
+ (void)USBD_CtlSendData(pdev, (uint8_t *)&pdev->dev_config_status, 2U);
break;
- default :
- USBD_CtlError(pdev , req);
+ default:
+ USBD_CtlError(pdev, req);
break;
}
}
@@ -712,16 +788,13 @@ static void USBD_GetStatus(USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req)
* @param req: usb request
* @retval status
*/
-static void USBD_SetFeature(USBD_HandleTypeDef *pdev ,
- USBD_SetupReqTypedef *req)
+static void USBD_SetFeature(USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req)
{
-
if (req->wValue == USB_FEATURE_REMOTE_WAKEUP)
{
pdev->dev_remote_wakeup = 1U;
- USBD_CtlSendStatus(pdev);
+ (void)USBD_CtlSendStatus(pdev);
}
-
}
@@ -732,24 +805,23 @@ static void USBD_SetFeature(USBD_HandleTypeDef *pdev ,
* @param req: usb request
* @retval status
*/
-static void USBD_ClrFeature(USBD_HandleTypeDef *pdev ,
- USBD_SetupReqTypedef *req)
+static void USBD_ClrFeature(USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req)
{
switch (pdev->dev_state)
{
- case USBD_STATE_DEFAULT:
- case USBD_STATE_ADDRESSED:
- case USBD_STATE_CONFIGURED:
- if (req->wValue == USB_FEATURE_REMOTE_WAKEUP)
- {
- pdev->dev_remote_wakeup = 0U;
- USBD_CtlSendStatus(pdev);
- }
- break;
+ case USBD_STATE_DEFAULT:
+ case USBD_STATE_ADDRESSED:
+ case USBD_STATE_CONFIGURED:
+ if (req->wValue == USB_FEATURE_REMOTE_WAKEUP)
+ {
+ pdev->dev_remote_wakeup = 0U;
+ (void)USBD_CtlSendStatus(pdev);
+ }
+ break;
- default :
- USBD_CtlError(pdev , req);
- break;
+ default:
+ USBD_CtlError(pdev, req);
+ break;
}
}
@@ -763,12 +835,23 @@ static void USBD_ClrFeature(USBD_HandleTypeDef *pdev ,
void USBD_ParseSetupRequest(USBD_SetupReqTypedef *req, uint8_t *pdata)
{
- req->bmRequest = *(uint8_t *) (pdata);
- req->bRequest = *(uint8_t *) (pdata + 1);
- req->wValue = SWAPBYTE (pdata + 2);
- req->wIndex = SWAPBYTE (pdata + 4);
- req->wLength = SWAPBYTE (pdata + 6);
+ uint8_t *pbuff = pdata;
+ req->bmRequest = *(uint8_t *)(pbuff);
+
+ pbuff++;
+ req->bRequest = *(uint8_t *)(pbuff);
+
+ pbuff++;
+ req->wValue = SWAPBYTE(pbuff);
+
+ pbuff++;
+ pbuff++;
+ req->wIndex = SWAPBYTE(pbuff);
+
+ pbuff++;
+ pbuff++;
+ req->wLength = SWAPBYTE(pbuff);
}
/**
@@ -779,11 +862,12 @@ void USBD_ParseSetupRequest(USBD_SetupReqTypedef *req, uint8_t *pdata)
* @retval None
*/
-void USBD_CtlError( USBD_HandleTypeDef *pdev ,
- USBD_SetupReqTypedef *req)
+void USBD_CtlError(USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req)
{
- USBD_LL_StallEP(pdev , 0x80U);
- USBD_LL_StallEP(pdev , 0U);
+ UNUSED(req);
+
+ (void)USBD_LL_StallEP(pdev, 0x80U);
+ (void)USBD_LL_StallEP(pdev, 0U);
}
@@ -798,18 +882,29 @@ void USBD_CtlError( USBD_HandleTypeDef *pdev ,
void USBD_GetString(uint8_t *desc, uint8_t *unicode, uint16_t *len)
{
uint8_t idx = 0U;
+ uint8_t *pdesc;
- if (desc != NULL)
+ if (desc == NULL)
{
- *len = (uint16_t)USBD_GetLen(desc) * 2U + 2U;
- unicode[idx++] = *(uint8_t *)(void *)len;
- unicode[idx++] = USB_DESC_TYPE_STRING;
+ return;
+ }
- while (*desc != '\0')
- {
- unicode[idx++] = *desc++;
- unicode[idx++] = 0U;
- }
+ pdesc = desc;
+ *len = ((uint16_t)USBD_GetLen(pdesc) * 2U) + 2U;
+
+ unicode[idx] = *(uint8_t *)len;
+ idx++;
+ unicode[idx] = USB_DESC_TYPE_STRING;
+ idx++;
+
+ while (*pdesc != (uint8_t)'\0')
+ {
+ unicode[idx] = *pdesc;
+ pdesc++;
+ idx++;
+
+ unicode[idx] = 0U;
+ idx++;
}
}
@@ -821,15 +916,16 @@ void USBD_GetString(uint8_t *desc, uint8_t *unicode, uint16_t *len)
*/
static uint8_t USBD_GetLen(uint8_t *buf)
{
- uint8_t len = 0U;
+ uint8_t len = 0U;
+ uint8_t *pbuff = buf;
- while (*buf != '\0')
- {
- len++;
- buf++;
- }
+ while (*pbuff != (uint8_t)'\0')
+ {
+ len++;
+ pbuff++;
+ }
- return len;
+ return len;
}
/**
* @}
diff --git a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_Keil/Boot/lib/STM32_USB_Device_Library/Core/Src/usbd_ioreq.c b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_Keil/Boot/lib/STM32_USB_Device_Library/Core/Src/usbd_ioreq.c
index 5600c370..4d5c8efe 100644
--- a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_Keil/Boot/lib/STM32_USB_Device_Library/Core/Src/usbd_ioreq.c
+++ b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_Keil/Boot/lib/STM32_USB_Device_Library/Core/Src/usbd_ioreq.c
@@ -12,7 +12,7 @@
* This software component is licensed by ST under Ultimate Liberty license
* SLA0044, the "License"; You may not use this file except in compliance with
* the License. You may obtain a copy of the License at:
- * http://www.st.com/SLA0044
+ * www.st.com/SLA0044
*
******************************************************************************
*/
@@ -84,16 +84,16 @@
* @param len: length of data to be sent
* @retval status
*/
-USBD_StatusTypeDef USBD_CtlSendData (USBD_HandleTypeDef *pdev, uint8_t *pbuf,
- uint16_t len)
+USBD_StatusTypeDef USBD_CtlSendData(USBD_HandleTypeDef *pdev,
+ uint8_t *pbuf, uint32_t len)
{
/* Set EP0 State */
pdev->ep0_state = USBD_EP0_DATA_IN;
pdev->ep_in[0].total_length = len;
- pdev->ep_in[0].rem_length = len;
+ pdev->ep_in[0].rem_length = len;
- /* Start the transfer */
- USBD_LL_Transmit (pdev, 0x00U, pbuf, len);
+ /* Start the transfer */
+ (void)USBD_LL_Transmit(pdev, 0x00U, pbuf, len);
return USBD_OK;
}
@@ -106,11 +106,11 @@ USBD_StatusTypeDef USBD_CtlSendData (USBD_HandleTypeDef *pdev, uint8_t *pbuf,
* @param len: length of data to be sent
* @retval status
*/
-USBD_StatusTypeDef USBD_CtlContinueSendData (USBD_HandleTypeDef *pdev,
- uint8_t *pbuf, uint16_t len)
+USBD_StatusTypeDef USBD_CtlContinueSendData(USBD_HandleTypeDef *pdev,
+ uint8_t *pbuf, uint32_t len)
{
- /* Start the next transfer */
- USBD_LL_Transmit (pdev, 0x00U, pbuf, len);
+ /* Start the next transfer */
+ (void)USBD_LL_Transmit(pdev, 0x00U, pbuf, len);
return USBD_OK;
}
@@ -123,16 +123,16 @@ USBD_StatusTypeDef USBD_CtlContinueSendData (USBD_HandleTypeDef *pdev,
* @param len: length of data to be received
* @retval status
*/
-USBD_StatusTypeDef USBD_CtlPrepareRx (USBD_HandleTypeDef *pdev, uint8_t *pbuf,
- uint16_t len)
+USBD_StatusTypeDef USBD_CtlPrepareRx(USBD_HandleTypeDef *pdev,
+ uint8_t *pbuf, uint32_t len)
{
/* Set EP0 State */
pdev->ep0_state = USBD_EP0_DATA_OUT;
pdev->ep_out[0].total_length = len;
- pdev->ep_out[0].rem_length = len;
+ pdev->ep_out[0].rem_length = len;
/* Start the transfer */
- USBD_LL_PrepareReceive (pdev, 0U, pbuf, len);
+ (void)USBD_LL_PrepareReceive(pdev, 0U, pbuf, len);
return USBD_OK;
}
@@ -145,10 +145,10 @@ USBD_StatusTypeDef USBD_CtlPrepareRx (USBD_HandleTypeDef *pdev, uint8_t *pbuf,
* @param len: length of data to be received
* @retval status
*/
-USBD_StatusTypeDef USBD_CtlContinueRx (USBD_HandleTypeDef *pdev, uint8_t *pbuf,
- uint16_t len)
+USBD_StatusTypeDef USBD_CtlContinueRx(USBD_HandleTypeDef *pdev,
+ uint8_t *pbuf, uint32_t len)
{
- USBD_LL_PrepareReceive(pdev, 0U, pbuf, len);
+ (void)USBD_LL_PrepareReceive(pdev, 0U, pbuf, len);
return USBD_OK;
}
@@ -159,13 +159,13 @@ USBD_StatusTypeDef USBD_CtlContinueRx (USBD_HandleTypeDef *pdev, uint8_t *pbuf,
* @param pdev: device instance
* @retval status
*/
-USBD_StatusTypeDef USBD_CtlSendStatus (USBD_HandleTypeDef *pdev)
+USBD_StatusTypeDef USBD_CtlSendStatus(USBD_HandleTypeDef *pdev)
{
/* Set EP0 State */
pdev->ep0_state = USBD_EP0_STATUS_IN;
/* Start the transfer */
- USBD_LL_Transmit(pdev, 0x00U, NULL, 0U);
+ (void)USBD_LL_Transmit(pdev, 0x00U, NULL, 0U);
return USBD_OK;
}
@@ -176,13 +176,13 @@ USBD_StatusTypeDef USBD_CtlSendStatus (USBD_HandleTypeDef *pdev)
* @param pdev: device instance
* @retval status
*/
-USBD_StatusTypeDef USBD_CtlReceiveStatus (USBD_HandleTypeDef *pdev)
+USBD_StatusTypeDef USBD_CtlReceiveStatus(USBD_HandleTypeDef *pdev)
{
/* Set EP0 State */
pdev->ep0_state = USBD_EP0_STATUS_OUT;
- /* Start the transfer */
- USBD_LL_PrepareReceive (pdev, 0U, NULL, 0U);
+ /* Start the transfer */
+ (void)USBD_LL_PrepareReceive(pdev, 0U, NULL, 0U);
return USBD_OK;
}
@@ -194,7 +194,7 @@ USBD_StatusTypeDef USBD_CtlReceiveStatus (USBD_HandleTypeDef *pdev)
* @param ep_addr: endpoint address
* @retval Rx Data blength
*/
-uint32_t USBD_GetRxCount (USBD_HandleTypeDef *pdev, uint8_t ep_addr)
+uint32_t USBD_GetRxCount(USBD_HandleTypeDef *pdev, uint8_t ep_addr)
{
return USBD_LL_GetRxDataSize(pdev, ep_addr);
}
diff --git a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_Keil/Boot/lib/system_stm32f7xx.c b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_Keil/Boot/lib/system_stm32f7xx.c
index cb4e5662..7282bc83 100644
--- a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_Keil/Boot/lib/system_stm32f7xx.c
+++ b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_Keil/Boot/lib/system_stm32f7xx.c
@@ -1,278 +1,244 @@
-/**
- ******************************************************************************
- * @file system_stm32f7xx.c
- * @author MCD Application Team
- * @brief CMSIS Cortex-M7 Device Peripheral Access Layer System Source File.
- *
- * This file provides two functions and one global variable to be called from
- * user application:
- * - SystemInit(): This function is called at startup just after reset and
- * before branch to main program. This call is made inside
- * the "startup_stm32f7xx.s" file.
- *
- * - SystemCoreClock variable: Contains the core clock (HCLK), it can be used
- * by the user application to setup the SysTick
- * timer or configure other parameters.
- *
- * - SystemCoreClockUpdate(): Updates the variable SystemCoreClock and must
- * be called whenever the core clock is changed
- * during program execution.
- *
- *
- ******************************************************************************
- * @attention
- *
- * © COPYRIGHT 2016 STMicroelectronics
- *
- * Redistribution and use in source and binary forms, with or without modification,
- * are permitted provided that the following conditions are met:
- * 1. Redistributions of source code must retain the above copyright notice,
- * this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright notice,
- * this list of conditions and the following disclaimer in the documentation
- * and/or other materials provided with the distribution.
- * 3. Neither the name of STMicroelectronics nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
- * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
- * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- ******************************************************************************
- */
-
-/** @addtogroup CMSIS
- * @{
- */
-
-/** @addtogroup stm32f7xx_system
- * @{
- */
-
-/** @addtogroup STM32F7xx_System_Private_Includes
- * @{
- */
-
-#include "stm32f7xx.h"
-
-#if !defined (HSE_VALUE)
- #define HSE_VALUE ((uint32_t)25000000) /*!< Default value of the External oscillator in Hz */
-#endif /* HSE_VALUE */
-
-#if !defined (HSI_VALUE)
- #define HSI_VALUE ((uint32_t)16000000) /*!< Value of the Internal oscillator in Hz*/
-#endif /* HSI_VALUE */
-
-/**
- * @}
- */
-
-/** @addtogroup STM32F7xx_System_Private_TypesDefinitions
- * @{
- */
-
-/**
- * @}
- */
-
-/** @addtogroup STM32F7xx_System_Private_Defines
- * @{
- */
-
-/************************* Miscellaneous Configuration ************************/
-
-/*!< Uncomment the following line if you need to relocate your vector Table in
- Internal SRAM. */
-/* #define VECT_TAB_SRAM */
-#define VECT_TAB_OFFSET 0x00 /*!< Vector Table base offset field.
- This value must be a multiple of 0x200. */
-/******************************************************************************/
-
-/**
- * @}
- */
-
-/** @addtogroup STM32F7xx_System_Private_Macros
- * @{
- */
-
-/**
- * @}
- */
-
-/** @addtogroup STM32F7xx_System_Private_Variables
- * @{
- */
-
- /* This variable is updated in three ways:
- 1) by calling CMSIS function SystemCoreClockUpdate()
- 2) by calling HAL API function HAL_RCC_GetHCLKFreq()
- 3) each time HAL_RCC_ClockConfig() is called to configure the system clock frequency
- Note: If you use this function to configure the system clock; then there
- is no need to call the 2 first functions listed above, since SystemCoreClock
- variable is updated automatically.
- */
- uint32_t SystemCoreClock = 16000000;
- const uint8_t AHBPrescTable[16] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 6, 7, 8, 9};
- const uint8_t APBPrescTable[8] = {0, 0, 0, 0, 1, 2, 3, 4};
-
-/**
- * @}
- */
-
-/** @addtogroup STM32F7xx_System_Private_FunctionPrototypes
- * @{
- */
-
-/**
- * @}
- */
-
-/** @addtogroup STM32F7xx_System_Private_Functions
- * @{
- */
-
-/**
- * @brief Setup the microcontroller system
- * Initialize the Embedded Flash Interface, the PLL and update the
- * SystemFrequency variable.
- * @param None
- * @retval None
- */
-void SystemInit(void)
-{
- /* FPU settings ------------------------------------------------------------*/
- #if (__FPU_PRESENT == 1) && (__FPU_USED == 1)
- SCB->CPACR |= ((3UL << 10*2)|(3UL << 11*2)); /* set CP10 and CP11 Full Access */
- #endif
- /* Reset the RCC clock configuration to the default reset state ------------*/
- /* Set HSION bit */
- RCC->CR |= (uint32_t)0x00000001;
-
- /* Reset CFGR register */
- RCC->CFGR = 0x00000000;
-
- /* Reset HSEON, CSSON and PLLON bits */
- RCC->CR &= (uint32_t)0xFEF6FFFF;
-
- /* Reset PLLCFGR register */
- RCC->PLLCFGR = 0x24003010;
-
- /* Reset HSEBYP bit */
- RCC->CR &= (uint32_t)0xFFFBFFFF;
-
- /* Disable all interrupts */
- RCC->CIR = 0x00000000;
-
- /* Configure the Vector Table location add offset address ------------------*/
-#ifdef VECT_TAB_SRAM
- SCB->VTOR = RAMDTCM_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAM */
-#else
- SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal FLASH */
-#endif
-}
-
-/**
- * @brief Update SystemCoreClock variable according to Clock Register Values.
- * The SystemCoreClock variable contains the core clock (HCLK), it can
- * be used by the user application to setup the SysTick timer or configure
- * other parameters.
- *
- * @note Each time the core clock (HCLK) changes, this function must be called
- * to update SystemCoreClock variable value. Otherwise, any configuration
- * based on this variable will be incorrect.
- *
- * @note - The system frequency computed by this function is not the real
- * frequency in the chip. It is calculated based on the predefined
- * constant and the selected clock source:
- *
- * - If SYSCLK source is HSI, SystemCoreClock will contain the HSI_VALUE(*)
- *
- * - If SYSCLK source is HSE, SystemCoreClock will contain the HSE_VALUE(**)
- *
- * - If SYSCLK source is PLL, SystemCoreClock will contain the HSE_VALUE(**)
- * or HSI_VALUE(*) multiplied/divided by the PLL factors.
- *
- * (*) HSI_VALUE is a constant defined in stm32f7xx_hal_conf.h file (default value
- * 16 MHz) but the real value may vary depending on the variations
- * in voltage and temperature.
- *
- * (**) HSE_VALUE is a constant defined in stm32f7xx_hal_conf.h file (default value
- * 25 MHz), user has to ensure that HSE_VALUE is same as the real
- * frequency of the crystal used. Otherwise, this function may
- * have wrong result.
- *
- * - The result of this function could be not correct when using fractional
- * value for HSE crystal.
- *
- * @param None
- * @retval None
- */
-void SystemCoreClockUpdate(void)
-{
- uint32_t tmp = 0, pllvco = 0, pllp = 2, pllsource = 0, pllm = 2;
-
- /* Get SYSCLK source -------------------------------------------------------*/
- tmp = RCC->CFGR & RCC_CFGR_SWS;
-
- switch (tmp)
- {
- case 0x00: /* HSI used as system clock source */
- SystemCoreClock = HSI_VALUE;
- break;
- case 0x04: /* HSE used as system clock source */
- SystemCoreClock = HSE_VALUE;
- break;
- case 0x08: /* PLL used as system clock source */
-
- /* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N
- SYSCLK = PLL_VCO / PLL_P
- */
- pllsource = (RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC) >> 22;
- pllm = RCC->PLLCFGR & RCC_PLLCFGR_PLLM;
-
- if (pllsource != 0)
- {
- /* HSE used as PLL clock source */
- pllvco = (HSE_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6);
- }
- else
- {
- /* HSI used as PLL clock source */
- pllvco = (HSI_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6);
- }
-
- pllp = (((RCC->PLLCFGR & RCC_PLLCFGR_PLLP) >>16) + 1 ) *2;
- SystemCoreClock = pllvco/pllp;
- break;
- default:
- SystemCoreClock = HSI_VALUE;
- break;
- }
- /* Compute HCLK frequency --------------------------------------------------*/
- /* Get HCLK prescaler */
- tmp = AHBPrescTable[((RCC->CFGR & RCC_CFGR_HPRE) >> 4)];
- /* HCLK frequency */
- SystemCoreClock >>= tmp;
-}
-
-/**
- * @}
- */
-
-/**
- * @}
- */
-
-/**
- * @}
- */
-/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
+/**
+ ******************************************************************************
+ * @file system_stm32f7xx.c
+ * @author MCD Application Team
+ * @brief CMSIS Cortex-M7 Device Peripheral Access Layer System Source File.
+ *
+ * This file provides two functions and one global variable to be called from
+ * user application:
+ * - SystemInit(): This function is called at startup just after reset and
+ * before branch to main program. This call is made inside
+ * the "startup_stm32f7xx.s" file.
+ *
+ * - SystemCoreClock variable: Contains the core clock (HCLK), it can be used
+ * by the user application to setup the SysTick
+ * timer or configure other parameters.
+ *
+ * - SystemCoreClockUpdate(): Updates the variable SystemCoreClock and must
+ * be called whenever the core clock is changed
+ * during program execution.
+ *
+ *
+ ******************************************************************************
+ * @attention
+ *
+ * © Copyright (c) 2016 STMicroelectronics.
+ * All rights reserved.
+ *
+ * This software component is licensed by ST under BSD 3-Clause license,
+ * the "License"; You may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at:
+ * opensource.org/licenses/BSD-3-Clause
+ *
+ ******************************************************************************
+ */
+
+/** @addtogroup CMSIS
+ * @{
+ */
+
+/** @addtogroup stm32f7xx_system
+ * @{
+ */
+
+/** @addtogroup STM32F7xx_System_Private_Includes
+ * @{
+ */
+
+#include "stm32f7xx.h"
+
+#if !defined (HSE_VALUE)
+ #define HSE_VALUE ((uint32_t)25000000) /*!< Default value of the External oscillator in Hz */
+#endif /* HSE_VALUE */
+
+#if !defined (HSI_VALUE)
+ #define HSI_VALUE ((uint32_t)16000000) /*!< Value of the Internal oscillator in Hz*/
+#endif /* HSI_VALUE */
+
+/**
+ * @}
+ */
+
+/** @addtogroup STM32F7xx_System_Private_TypesDefinitions
+ * @{
+ */
+
+/**
+ * @}
+ */
+
+/** @addtogroup STM32F7xx_System_Private_Defines
+ * @{
+ */
+
+/************************* Miscellaneous Configuration ************************/
+
+/*!< Uncomment the following line if you need to relocate your vector Table in
+ Internal SRAM. */
+/* #define VECT_TAB_SRAM */
+#define VECT_TAB_OFFSET 0x00 /*!< Vector Table base offset field.
+ This value must be a multiple of 0x200. */
+/******************************************************************************/
+
+/**
+ * @}
+ */
+
+/** @addtogroup STM32F7xx_System_Private_Macros
+ * @{
+ */
+
+/**
+ * @}
+ */
+
+/** @addtogroup STM32F7xx_System_Private_Variables
+ * @{
+ */
+
+ /* This variable is updated in three ways:
+ 1) by calling CMSIS function SystemCoreClockUpdate()
+ 2) by calling HAL API function HAL_RCC_GetHCLKFreq()
+ 3) each time HAL_RCC_ClockConfig() is called to configure the system clock frequency
+ Note: If you use this function to configure the system clock; then there
+ is no need to call the 2 first functions listed above, since SystemCoreClock
+ variable is updated automatically.
+ */
+ uint32_t SystemCoreClock = 16000000;
+ const uint8_t AHBPrescTable[16] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 6, 7, 8, 9};
+ const uint8_t APBPrescTable[8] = {0, 0, 0, 0, 1, 2, 3, 4};
+
+/**
+ * @}
+ */
+
+/** @addtogroup STM32F7xx_System_Private_FunctionPrototypes
+ * @{
+ */
+
+/**
+ * @}
+ */
+
+/** @addtogroup STM32F7xx_System_Private_Functions
+ * @{
+ */
+
+/**
+ * @brief Setup the microcontroller system
+ * Initialize the Embedded Flash Interface, the PLL and update the
+ * SystemFrequency variable.
+ * @param None
+ * @retval None
+ */
+void SystemInit(void)
+{
+ /* FPU settings ------------------------------------------------------------*/
+#if (__FPU_PRESENT == 1) && (__FPU_USED == 1)
+ SCB->CPACR |= ((3UL << 10*2)|(3UL << 11*2)); /* set CP10 and CP11 Full Access */
+#endif
+
+ /* Configure the Vector Table location add offset address ------------------*/
+#ifdef VECT_TAB_SRAM
+ SCB->VTOR = RAMDTCM_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAM */
+#else
+ SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal FLASH */
+#endif
+}
+
+/**
+ * @brief Update SystemCoreClock variable according to Clock Register Values.
+ * The SystemCoreClock variable contains the core clock (HCLK), it can
+ * be used by the user application to setup the SysTick timer or configure
+ * other parameters.
+ *
+ * @note Each time the core clock (HCLK) changes, this function must be called
+ * to update SystemCoreClock variable value. Otherwise, any configuration
+ * based on this variable will be incorrect.
+ *
+ * @note - The system frequency computed by this function is not the real
+ * frequency in the chip. It is calculated based on the predefined
+ * constant and the selected clock source:
+ *
+ * - If SYSCLK source is HSI, SystemCoreClock will contain the HSI_VALUE(*)
+ *
+ * - If SYSCLK source is HSE, SystemCoreClock will contain the HSE_VALUE(**)
+ *
+ * - If SYSCLK source is PLL, SystemCoreClock will contain the HSE_VALUE(**)
+ * or HSI_VALUE(*) multiplied/divided by the PLL factors.
+ *
+ * (*) HSI_VALUE is a constant defined in stm32f7xx_hal_conf.h file (default value
+ * 16 MHz) but the real value may vary depending on the variations
+ * in voltage and temperature.
+ *
+ * (**) HSE_VALUE is a constant defined in stm32f7xx_hal_conf.h file (default value
+ * 25 MHz), user has to ensure that HSE_VALUE is same as the real
+ * frequency of the crystal used. Otherwise, this function may
+ * have wrong result.
+ *
+ * - The result of this function could be not correct when using fractional
+ * value for HSE crystal.
+ *
+ * @param None
+ * @retval None
+ */
+void SystemCoreClockUpdate(void)
+{
+ uint32_t tmp = 0, pllvco = 0, pllp = 2, pllsource = 0, pllm = 2;
+
+ /* Get SYSCLK source -------------------------------------------------------*/
+ tmp = RCC->CFGR & RCC_CFGR_SWS;
+
+ switch (tmp)
+ {
+ case 0x00: /* HSI used as system clock source */
+ SystemCoreClock = HSI_VALUE;
+ break;
+ case 0x04: /* HSE used as system clock source */
+ SystemCoreClock = HSE_VALUE;
+ break;
+ case 0x08: /* PLL used as system clock source */
+
+ /* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N
+ SYSCLK = PLL_VCO / PLL_P
+ */
+ pllsource = (RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC) >> 22;
+ pllm = RCC->PLLCFGR & RCC_PLLCFGR_PLLM;
+
+ if (pllsource != 0)
+ {
+ /* HSE used as PLL clock source */
+ pllvco = (HSE_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6);
+ }
+ else
+ {
+ /* HSI used as PLL clock source */
+ pllvco = (HSI_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6);
+ }
+
+ pllp = (((RCC->PLLCFGR & RCC_PLLCFGR_PLLP) >>16) + 1 ) *2;
+ SystemCoreClock = pllvco/pllp;
+ break;
+ default:
+ SystemCoreClock = HSI_VALUE;
+ break;
+ }
+ /* Compute HCLK frequency --------------------------------------------------*/
+ /* Get HCLK prescaler */
+ tmp = AHBPrescTable[((RCC->CFGR & RCC_CFGR_HPRE) >> 4)];
+ /* HCLK frequency */
+ SystemCoreClock >>= tmp;
+}
+
+/**
+ * @}
+ */
+
+/**
+ * @}
+ */
+
+/**
+ * @}
+ */
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff --git a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_Keil/Boot/usbd_conf.c b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_Keil/Boot/usbd_conf.c
index 2c7b2f09..6738d157 100644
--- a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_Keil/Boot/usbd_conf.c
+++ b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_Keil/Boot/usbd_conf.c
@@ -504,7 +504,7 @@ USBD_StatusTypeDef USBD_LL_SetUSBAddress(USBD_HandleTypeDef *pdev, uint8_t dev_a
* @param size: Data size
* @retval USBD status
*/
-USBD_StatusTypeDef USBD_LL_Transmit(USBD_HandleTypeDef *pdev, uint8_t ep_addr, uint8_t *pbuf, uint16_t size)
+USBD_StatusTypeDef USBD_LL_Transmit(USBD_HandleTypeDef *pdev, uint8_t ep_addr, uint8_t *pbuf, uint32_t size)
{
HAL_StatusTypeDef hal_status = HAL_OK;
USBD_StatusTypeDef usb_status = USBD_OK;
@@ -524,7 +524,7 @@ USBD_StatusTypeDef USBD_LL_Transmit(USBD_HandleTypeDef *pdev, uint8_t ep_addr, u
* @param size: Data size
* @retval USBD status
*/
-USBD_StatusTypeDef USBD_LL_PrepareReceive(USBD_HandleTypeDef *pdev, uint8_t ep_addr, uint8_t *pbuf, uint16_t size)
+USBD_StatusTypeDef USBD_LL_PrepareReceive(USBD_HandleTypeDef *pdev, uint8_t ep_addr, uint8_t *pbuf, uint32_t size)
{
HAL_StatusTypeDef hal_status = HAL_OK;
USBD_StatusTypeDef usb_status = USBD_OK;
diff --git a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_Keil/Boot/usbd_conf.h b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_Keil/Boot/usbd_conf.h
index 457df6b8..13647fbd 100644
--- a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_Keil/Boot/usbd_conf.h
+++ b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_Keil/Boot/usbd_conf.h
@@ -68,8 +68,6 @@
/*---------- -----------*/
#define USBD_MAX_STR_DESC_SIZ 512U
/*---------- -----------*/
-#define USBD_SUPPORT_USER_STRING 0U
-/*---------- -----------*/
#define USBD_DEBUG_LEVEL 0U
/*---------- -----------*/
#define USBD_LPM_ENABLED 0U
@@ -81,6 +79,9 @@
#define DEVICE_FS 0
#define DEVICE_HS 1
+/* Inform USB core that a full speed device is used. */
+#define USE_USB_FS
+
/**
* @}
*/
diff --git a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_Keil/Boot/usbd_desc.c b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_Keil/Boot/usbd_desc.c
index c26b821d..344676bb 100644
--- a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_Keil/Boot/usbd_desc.c
+++ b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_Keil/Boot/usbd_desc.c
@@ -123,11 +123,6 @@ uint8_t * USBD_FS_ProductStrDescriptor(USBD_SpeedTypeDef speed, uint16_t *length
uint8_t * USBD_FS_SerialStrDescriptor(USBD_SpeedTypeDef speed, uint16_t *length);
uint8_t * USBD_FS_ConfigStrDescriptor(USBD_SpeedTypeDef speed, uint16_t *length);
uint8_t * USBD_FS_InterfaceStrDescriptor(USBD_SpeedTypeDef speed, uint16_t *length);
-
-#ifdef USBD_SUPPORT_USER_STRING_DESC
-uint8_t * USBD_FS_USRStringDesc(USBD_SpeedTypeDef speed, uint8_t idx, uint16_t *length);
-#endif /* USBD_SUPPORT_USER_STRING_DESC */
-
#if (USBD_LPM_ENABLED == 1)
uint8_t * USBD_FS_USR_BOSDescriptor(USBD_SpeedTypeDef speed, uint16_t *length);
#endif /* (USBD_LPM_ENABLED == 1) */
@@ -328,7 +323,9 @@ uint8_t * USBD_FS_SerialStrDescriptor(USBD_SpeedTypeDef speed, uint16_t *length)
/* Update the serial number string descriptor with the data from the unique
* ID */
Get_SerialNum();
-
+ /* USER CODE BEGIN USBD_FS_SerialStrDescriptor */
+
+ /* USER CODE END USBD_FS_SerialStrDescriptor */
return (uint8_t *) USBD_StringSerial;
}
diff --git a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_Keil/Prog/bin/demoprog_stm32f746.axf b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_Keil/Prog/bin/demoprog_stm32f746.axf
index 323d4f2c..2edb50c5 100644
Binary files a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_Keil/Prog/bin/demoprog_stm32f746.axf and b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_Keil/Prog/bin/demoprog_stm32f746.axf differ
diff --git a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_Keil/Prog/bin/demoprog_stm32f746.srec b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_Keil/Prog/bin/demoprog_stm32f746.srec
index 573f6db2..912fb7fd 100644
--- a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_Keil/Prog/bin/demoprog_stm32f746.srec
+++ b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_Keil/Prog/bin/demoprog_stm32f746.srec
@@ -1,7 +1,7 @@
S31508008000700700206D820008798200087B820008CC
S315080080107D8200087F820008818200080000000037
S315080080200000000000000000000000008382000835
-S31508008030858200080000000087820008C9960008AB
+S315080080308582000800000000878200080D97000866
S315080080408B8200088B8200088B8200088B820008CE
S315080080508B8200088B8200088B8200088B820008BE
S315080080608B8200088B8200088B8200088B820008AE
@@ -30,16 +30,16 @@ S315080081C08B8200088B820008EE11AA5500F002F88F
S315080081D000F03CF80AA090E8000C82448344AAF117
S315080081E00107DA4501D100F031F8AFF2090EBAE815
S315080081F00F0013F0010F18BFFB1A43F001031847CD
-S31508008200041B0000241B0000103A24BF78C878C15C
+S31508008200581B0000781B0000103A24BF78C878C1B4
S31508008210FAD8520724BF30C830C144BF04680C607E
S31508008220704700000023002400250026103A28BFC6
S3150800823078C1FBD8520728BF30C148BF0B607047CA
-S315080082401FB501F03CFD1FBD10B510BD00F0D3F8F9
-S315080082501146FFF7F5FF01F029FD00F0F1F803B428
+S315080082401FB501F066FD1FBD10B510BD00F0D3F8CF
+S315080082501146FFF7F5FF01F053FD00F0F1F803B4FE
S31508008260FFF7F2FF03BC00F0F9F800000A4885465C
S315080082700A4880470A480047FEE7FEE7FEE7FEE7AA
S31508008280FEE7FEE7FEE7FEE7FEE7FEE705480649E6
-S31508008290064A074B704700007007002075970008CC
+S31508008290064A074B7047000070070020B997000888
S315080082A0CD810008700100207007002070030020AF
S315080082B07003002053EA020C00F069802DE9F04BA8
S315080082C04FF00006002B1FBFB3FA83F503FA05F437
@@ -80,29 +80,29 @@ S315080084E00AAB0BAA0CA94FF4FA7000F097F81B48D0
S315080084F0194901600476447684760125C5760477A1
S3150800850044778460C4609DF82C10491E09040161F3
S315080085109DF82810491E09054161BDF830104160D3
-S3150800852000F0C0F90594069407954CF6E0400090D3
+S3150800852000F0C1F90594069407954CF6E0400090D2
S3150800853001944FF6E0700290042003900494089585
S315080085400E2009906946054800F0A2F8034800F095
-S3150800855053FA0DB030BD000000640040E40000206E
+S3150800855054FA0DB030BD000000640040E40000206D
S3150800856010B500F00BF8BDE81040FFF791BF10B545
S3150800857000F03EF8BDE81040FFF7ACBF70B51A4CE6
S3150800858000251A4E607800280ED020783044401C0A
-S3150800859001F08CF8012817D001F016F961686431EA
-S315080085A0884200D9657070BD104801F07FF801282F
-S315080085B0F9D13078401E3F28F5D801F005F96060FA
+S3150800859001F0AEF8012817D001F01CF961686431C2
+S315080085A0884200D9657070BD104801F0A1F801280D
+S315080085B0F9D13078401E3F28F5D801F00BF96060F4
S315080085C001206070257070BD2078401CC0B22070F4
S315080085D031788142F7D165707178FF29F3D1022885
S315080085E0F1D1FFF743FF0000000000202000002023
S315080085F00948084901604FF46141416000218160E2
S31508008600C16001610C2242618161C16101624162FE
-S3150800861000F05FBF00480040640000202DE9F047E5
-S315080086200746884691469A4600F0ECFC4FF47A7164
+S3150800861000F081BF00480040640000202DE9F047C3
+S315080086200746884691469A4600F0EAFC4FF47A7166
S31508008630B0FBF1F6002415484FF4806100EB4403C3
S3150800864010F814205B78D5186D1C7D43B6FBF5F23F
S3150800865005FB12629AB9B6FBF5F295B2A8F8005076
S315080086606D1E8D420BD210F8141089F8001000EB1D
S31508008670440040788AF800000120BDE8F087641CB1
-S31508008680E4B2122CDAD30020F7E70000C89C0008F1
+S31508008680E4B2122CDAD30020F7E700001C9D00089C
S3150800869010B590F82020012A07D0022A05D0416A91
S315080086A041F480214162012010BD3C4800F500706C
S315080086B0026842F001020260026822F47C520260FB
@@ -122,349 +122,354 @@ S31508008780D0F81C121143C0F81C12D0F8001221F0C0
S315080087900101C0F80012002010BD0000006400406E
S315080087A030B590F82040012C07D0022C05D0416A3C
S315080087B041F480214162012030BD21B10468246959
-S315080087C0A4075ED003E00468E468A40753D00568EC
+S315080087C0A4075FD003E00468E468A40754D00568EA
S315080087D04FF4D87404EB01142D5905F0040595607F
-S315080087E0002D54D005682D59ED08556005682C599B
-S315080087F0C4F34004D46005684FF4DA7404EB01143A
-S315080088002D5905F00F05156105682D59C5F307257E
-S31508008810956105682C59240C546104684FF4DC7280
-S3150800882002EB0112A4581C700468A458240A5C7050
-S315080088300468A458240C9C700468A258120EDA70B6
-S3150800884004684FF4DE7202EB0112A4581C71046826
-S31508008850A458240A5C710468A458240C9C71046802
-S31508008860A258120EDA71B9B10068016941F0200107
-S315080088700161002030BD416A41F4001141620120C6
-S3150800888030BD416A41F400114162012030BD0568DE
-S315080088902D596D0D1560A9E70068C16841F02001E2
-S315080088A0C160E6E770B50446002C03D094F82000B2
-S315080088B010B104E0012070BD204600F09CF8206845
-S315080088C0016821F00201016000F0BAF905460526A3
-S315080088D00CE000F0B5F9401B0A2807D9606A40F495
-S315080088E00030606284F82060012070BD206840680E
-S315080088F08007EED42068016841F00101016000F0AC
-S315080089009FF905460CE000F09BF9401B0A2807D999
-S31508008910606A40F40030606284F82060012070BD0F
-S3150800892020684068C007EED0207E01283FD0206826
-S31508008930016821F080010160607E01283DD0206831
-S31508008940016821F040010160A07E01283BD0206823
-S31508008950016821F020010160E07E012839D02068F5
-S31508008960016841F010010160207F012837D0206896
-S31508008970016821F008010160607F012835D0206870
-S31508008980016821F004010160D4E902010843D4E931
-S315080089900412114308436168491E08432168C861E7
-S315080089A000206062012084F82000002070BD206845
-S315080089B0016841F080010160BEE72068016841F066
-S315080089C040010160C0E72068016841F020010160AC
-S315080089D0C2E72068016821F010010160C4E7206839
-S315080089E0016841F008010160C6E72068016841F0A6
-S315080089F004010160C8E7704770B5044694F8200082
-S31508008A00012805D0606A40F400206062012070BD2C
-S31508008A10022084F820002068016821F00101016025
-S31508008A2000F00EF905460DE000F00AF9401B0A2889
-S31508008A3008D9606A40F400306062052084F8200096
-S31508008A40012070BD20684068C007EDD1606270BD26
-S31508008A502DE9F84F0022DFF8A491DFF8A0814FF046
-S31508008A60010E09F108094FF00F0C09F1040A0EFA74
-S31508008A7002F60B683340B34271D14C68022C01D020
-S31508008A80122C11D1D40800EB84073D6A5407E40E72
-S31508008A900CFA04FB25EA0B05D1F810B00BFA04FB17
-S31508008AA04BEA050BC7F820B0076854000325A54014
-S31508008AB0AF4391F804B00BF0030B0BFA04FB4BEA37
-S31508008AC0070BC0F800B04F68012F05D0022F03D05E
-S31508008AD0112F01D0122F11D18768AF43D1F80CB0EE
-S31508008AE00BFA04FB4BEA070BC0F808B04768B74314
-S31508008AF00E79C6F3001696403E434660C668AE43F6
-S31508008B008D68A5403543C5604C68E4006FD53C4C7C
-S31508008B10256845F480452560246804F4804400945B
-S31508008B20384C22F003052544D5F808789407260F13
-S31508008B300CFA06F4A743344CA04201D100242EE0D7
-S31508008B40324CA04201D1012429E0314CA04201D186
-S31508008B50022424E02F4CA04202D103241FE046E061
-S31508008B602D4CA04201D1042419E02C4CA04201D17D
-S31508008B70052414E02A4CA04201D106240FE0294C12
-S31508008B80A04201D107240AE0274CA04201D10824BB
-S31508008B9005E0264CA04201D1092400E00A24B4408D
-S31508008BA03C43C5F80848D8F800409C434D68ED0397
-S31508008BB000D51C43C8F80040104D2D1D2C689C4359
-S31508008BC04E68B60300D51C432C60D9F800409C4378
-S31508008BD04D68ED0200D51C43C9F80040DAF800409C
-S31508008BE09C434D68AD0200D51C43CAF80040521C90
-S31508008BF0102AFFF43CAFBDE8F88F0000003C0140A6
-S31508008C00443802400030014000000240000402409F
-S31508008C1000080240000C0240001002400014024006
-S31508008C2000180240001C02400020024000240240B6
-S31508008C30002A01D0816170470904816170470000EC
-S31508008C4001488068704700001400002002488168C7
-S31508008C5002781144816070471400002010B5032083
-S31508008C6000F0D8F8002000F005F800F025F80020FC
-S31508008C7010BD000070B504460D4D4FF47A71287882
-S31508008C80B1FBF0F00B490968B1FBF0F000F009FC04
-S31508008C9008B1012070BD102C07D200222146501EB3
-S31508008CA000F098F86C60002070BD012070BD0000CF
-S31508008CB014000020100000202DE9F04186B042483B
-S31508008CC0016841F080510160016801F0805100910E
-S31508008CD0011D0A6842F480420A60096801F480416D
-S31508008CE00091394910390A6842F002020A600A6896
-S31508008CF002F0020200920A6842F008020A60096855
-S31508008D0001F008010091016841F4802101600168C1
-S31508008D1001F480210091016841F00071016000684A
-S31508008D2000F000700090032000F074F800226FF045
-S31508008D300B00114600F04EF800226FF00A001146AB
-S31508008D4000F048F800226FF00900114600F042F8DA
-S31508008D500022501F114600F03DF80022101F114650
-S31508008D6000F038F80022901E114600F033F8002271
-S31508008D70501E114600F02EF8802001900120029026
-S31508008D8000240394049401A9DFF840804046FFF7C5
-S31508008D905FFE4FF440770197022602960394032557
-S31508008DA004950720059001A90948FFF751FE019788
-S31508008DB00296039404950920059001A94046FFF7F9
-S31508008DC047FE06B0BDE8F081403802400004024084
-S31508008DD0000C0240F0B40D460D4B1B68C3F302238A
-S31508008DE0C3F10704042C00D90424191D072901D24C
-S31508008DF0002300E0DB1E012606FA04F1491E29407D
-S31508008E0099409E40761E16403143F0BC00F03EBFA6
-S31508008E100CED00E000F00701054A10684FF6FF0365
-S31508008E20184040EA012003490843106070470000D3
-S31508008E300CED00E00000FA05F8B51948016841F0A4
-S31508008E4080510160006800F080500090154C206841
-S31508008E5040F480302060FFF7F3FE05464FF47A763B
-S31508008E6006E0FFF7EDFE401BB04201D90320F8BD2E
-S31508008E706068C003F5D5206840F400302060FFF72D
-S31508008E80DFFE054606E0FFF7DBFE401BB04201D9D0
-S31508008E900320F8BD60688003F5D50020F8BD000002
-S31508008EA040380240007000402DE9F04704460D4660
-S31508008EB0002C17D0DFF83081D8F8000000F00F003A
-S31508008EC0A84211D2D8F8000020F00F002843C8F8AD
-S31508008ED00000D8F8000000F00F00A84204D00120D6
-S31508008EE0BDE8F0870120FBE72068404E810712D5D0
-S31508008EF0400703D5306840F4E0503060207800071A
-S31508008F0003D5306840F4604030603068A16820F0CE
-S31508008F10F000084330602078C0072ED033496068D7
-S31508008F200839012806D0022809D0096889070BD410
-S31508008F300120D5E70968890306D40120D0E7096826
-S31508008F40890101D40120CBE7316821F003010143EF
-S31508008F503160FFF775FE074641F2883906E0FFF7EC
-S31508008F606FFEC01B484501D90320B9E73068616820
-S31508008F7000F00C00B0EB810FF1D1D8F8000000F03A
-S31508008F800F00A8420ED9D8F8000020F00F00284399
-S31508008F90C8F80000D8F8000000F00F00A84201D079
-S31508008FA001209DE72078400705D53068E16820F460
-S31508008FB0E050084330602078000706D530682169FC
-S31508008FC020F4604040EAC100306000F03BF83168A8
-S31508008FD0074AC1F30311515CC840064908600020DE
-S31508008FE0FFF748FE00207BE7003C024008380240B5
-S31508008FF0EC9C00081000002001480068704700003B
-S315080090001000002000B5FFF7F7FF04490968044A75
-S31508009010C1F38221515CC84000BD000008380240F7
-S31508009020FC9C000800B5FFF7E7FF04490968044AF5
-S31508009030C1F34231515CC84000BD00000838024007
-S31508009040FC9C000810B51748006810F00C0116487B
-S3150800905016D04310042912D0082911D1114C241F07
-S31508009060216801F03F02216849020AD52068C0F349
-S315080090708810A0FB03010023FFF71CF909E0184636
-S3150800908010BD21680023C1F38811A1FB0001FFF779
-S3150800909011F92168C1F30141491C4900B0FBF1F0FF
-S315080090A010BD0000083802400024F4002DE9F84FEE
-S315080090B004464FF00008002C15D02078DFF8BC9342
-S315080090C0A9F10407C007A7F1040560D0D9F8000084
-S315080090D0C0F3810001280CD0D9F80000C0F3810044
-S315080090E0022803D00CE00120BDE8F88F386840025A
-S315080090F006D5286880034AD5606870BB0120F3E767
-S315080091006068B0F5803F11D0A8B1B0F5A02F1BD08C
-S31508009110286820F480302860286820F48020286099
-S31508009120606830B3FFF78CFD06461EE0286840F4F9
-S3150800913080302860F4E7286820F4803028602868A2
-S3150800914020F480202860EBE7286840F48020286017
-S31508009150286840F480302860E2E718E0FFF770FDE1
-S31508009160801B642801D90320BEE728688003F5D54B
-S315080091700DE0FFF765FD064606E0FFF761FD801B7B
-S31508009180642801D90320AFE728688003F5D420783E
-S3150800919080074BD5D9F8000010F00C0F08D0D9F885
-S315080091A00000C0F38100022812D1386840020FD4AB
-S315080091B02868800704D5E068012801D0012093E7D4
-S315080091C02868216920F0F80040EAC10028602DE0EF
-S315080091D0E068C8B1286840F001002860FFF730FD54
-S315080091E0064606E0FFF72CFD801B022801D903205E
-S315080091F07AE728688007F5D52868216920F0F800FD
-S3150800920040EAC100286011E0286820F001002860C3
-S31508009210FFF716FD064606E0FFF712FD801B02283B
-S3150800922001D9032060E728688007F5D4207800076D
-S3150800923030D5DFF848A260690AF16C0AA8B1DAF8F5
-S31508009240000040F00100CAF80000FFF7F9FC0646E6
-S3150800925006E0FFF7F5FC801B022801D9032043E747
-S31508009260DAF800008007F4D514E0DAF8000020F0F8
-S315080092700100CAF80000FFF7E3FC064606E0FFF720
-S31508009280DFFC801B022801D903202DE7DAF800004D
-S315080092908007F4D42078400775D5DFF8E0A10AF1F5
-S315080092A0380ADAF80000C0000CD4DAF8000040F0FA
-S315080092B08050CAF80000DAF8000000F080500090EC
-S315080092C04FF00108DFF8B8B1DBF80000C00514D488
-S315080092D0DBF8000040F48070CBF80000FFF7B0FC24
-S315080092E0064606E0FFF7ACFC801B642801D903207C
-S315080092F0FAE6DBF80000C005F4D5DFF880B1A0680F
-S315080093000BF1680B012814D0D0B1052825D0DBF85D
-S31508009310000020F00100CBF80000DBF8000020F088
-S315080093200400CBF80000A06870B3FFF789FC064676
-S315080093302BE0DBF8000040F00100CBF80000F2E774
-S31508009340DBF8000020F00100CBF80000DBF8000095
-S3150800935020F00400CBF80000E5E7DBF8000040F059
-S315080093600400CBF80000DBF8000040F00100CBF861
-S315080093700000D8E7FFF764FC811B41F28830814280
-S3150800938003D90320B0E61FE004E0DBF800008007FD
-S31508009390F0D510E0FFF754FC064608E0FFF750FC4E
-S315080093A0811B41F28830814201D903209CE6DBF813
-S315080093B000008007F2D4B8F1010F05D1DAF80000F1
-S315080093C020F08050CAF80000A069E8B3D9F8001068
-S315080093D0C1F3810102294FD0022807D0286820F05E
-S315080093E080702860FFF72CFC044640E0286820F0CF
-S315080093F080702860FFF724FC064606E0FFF720FC8D
-S31508009400801B022801D903206EE628688001F5D45E
-S31508009410D4E90701A26A4FF0FF330843616A03EBF8
-S315080094205202890141EA0241084394F82C1040EAA5
-S31508009430016040F000503860286840F0807028606D
-S31508009440FFF7FEFB044607E014E0FFF7F9FB001BF5
-S31508009450022801D9032047E628688001F5D509E0E6
-S31508009460FFF7EEFB001B022801D903203CE628681B
-S315080094708001F5D4002037E6012035E60838024099
-S315080094800070004004284FF0E02104D0086920F05D
-S31508009490040008617047086940F0040008617047D5
-S315080094A0704710B5401EB0F1807F01D3012010BD72
-S315080094B04FF0E02460610F21601700F0E7FB002001
-S315080094C0A06107202061002010BD10B5FFF7E8FF56
-S315080094D010BD10B50446002C02D0606F10B107E02D
-S315080094E0012010BD002084F87000204600F027F8FF
-S315080094F0242060672068016821F001010160204688
-S3150800950000F0FAF9012818D0606A10B1204600F078
-S3150800951070F92068416821F49041416020688168AB
-S3150800952021F02A0181602068016841F0010101608B
-S315080095302046BDE8104000F0C0B9012010BD7047B4
-S315080095402DE9F84F04460E4615469946A06F202881
-S3150800955002D00220BDE8F88FFEB1F5B194F870008C
-S3150800956001281CD0012084F870004FF00008C4F8C8
-S315080095707C802220A067FFF763FB8246A4F8585038
-S31508009580A4F85A50FF21A0684FF4805398420DD191
-S31508009590226932B1A4F85C100FE00120DAE7022054
-S315080095A0D8E740F2FF11A4F85C1006E07F2268B104
-S315080095B0B0F1805F12D0A4F85C80B4F85C70984271
-S315080095C001D1206998B13546002628E0256915B1EC
-S315080095D0A4F85C20F1E7A4F85C10EEE7216919B15C
-S315080095E03F21A4F85C10E8E7A4F85C20E5E700252D
-S315080095F015E00022534620212046CDF8009000F0C1
-S315080096000DFB08B10320A5E79DB12068406A3840E4
-S3150800961005F8010BB4F85A00401EA4F85A00B4F82D
-S315080096205A000028E5D12020A06784F87080002021
-S3150800963090E72068406A384026F8020BEAE710B53A
-S3150800964000F01CFBFFF70AFB00F046F800F0BEF836
-S31508009650BDE81040AFF30080002202488021FFF7E2
-S31508009660E7BA00000004024070B500F0ADF8044601
-S315080096700C4D6868201AB0F5FA7F0AD328780A4B89
-S3150800968040B100202870002218468021FFF7D0FA42
-S315080096906C6070BD01202870012218468021FFF7F2
-S315080096A0C7FAF5E7080000200004024010B50023B9
-S315080096B0014604480122FFF743FF08B1002010BD08
-S315080096C0012010BD6400002010B5FFF7BFFABDE801
-S315080096D01040FFF7FABE000010B592B0302106A878
-S315080096E0FEF75FFE142101A8FEF75BFE1F4801681E
-S315080096F041F080510160006800F0805000901C48DD
-S31508009700016841F440410160006800F4404000905F
-S31508009710012006904FF4A020079002240C946005BF
-S315080097200D9008200E904FF4D8700F901094119455
-S3150800973006A8FFF7BBFC00B1FEE7FFF77DFB00B10B
-S31508009740FEE70F2001900294002003904FF4A050EA
-S3150800975004904FF480500590072101A8FFF7A4FB59
-S31508009760002800D0FEE712B010BD000040380240C5
-S31508009770007000401048016841F4700101600F480C
-S31508009780016841F0010101600C4A002108321160AC
-S3150800979002680B4B1A400260031D0A4A1A600268E7
-S315080097A022F48022026005480C30016058060249FE
-S315080097B0803908607047000088ED00E000380240F4
-S315080097C0FFFFF6FE10300024FFF73ABA10B5FFF790
-S315080097D013FC4FF47A71B0FBF1F0FFF762FE042038
-S315080097E0FFF750FE0022BDE81040501E1146FFF755
-S315080097F0F1BA90F82410C90706D001684A68836A46
-S3150800980022F400321A434A6090F82410890706D5D4
-S3150800981001684A68C36A22F480321A434A6090F89B
-S315080098202410490706D501684A68036B22F480228A
-S315080098301A434A6090F82410090706D501684A6851
-S31508009840436B22F400421A434A6090F82410C90672
-S3150800985006D501688A68836B22F480521A438A60A7
-S3150800986090F82410890606D501688A68C36B22F425
-S3150800987000521A438A6090F82410490611D50168E7
-S315080098804A68036C22F480121A434A60016CB1F5E7
-S31508009890801F06D101684A68436C22F4C0021A4345
-S315080098A04A6090F82410090606D501684A68806C53
-S315080098B022F4002202434A60704738B50446002560
-S315080098C0E567FFF7BDF903462068006800070BD572
-S315080098D06FF07E400090002220464FF4001100F001
-S315080098E09DF908B1032038BD20206067A06784F879
-S315080098F07050002038BD000070B5044600200025D1
-S31508009900A2682169E3690A43616919430A43216820
-S315080099100B68B64E334013430B6021684A68E36808
-S3150800992022F440521A434A60A169226A0A4321680E
-S315080099308B6823F4306313438B60AD4E4FF40042BB
-S315080099402168AC4BB14213D1196811F0030107D055
-S31508009950012909D0022905D0032907D01021B4E02E
-S315080099600121B2E00221B0E00421AEE00821ACE01A
-S31508009970A14EB14213D1196811F00C0107D0042980
-S3150800998009D0082905D00C2907D010219DE000210F
-S315080099909BE0022199E0042197E0082195E0974E83
-S315080099A0B14213D1196811F0300107D0102909D036
-S315080099B0202905D0302907D0102186E0002184E02F
-S315080099C0022182E0042180E008217EE08C4EB1422B
-S315080099D013D1196811F0C00107D0402909D0802990
-S315080099E005D0C02907D010216FE000216DE00221C3
-S315080099F06BE0042169E0082167E0824EB14216D186
-S31508009A00196811F440710AD0B1F5807F0BD0B1F511
-S31508009A10007F06D0B1F5407F07D0102155E0002120
-S31508009A2053E0022151E004214FE008214DE0764E33
-S31508009A30B14216D1196811F440610AD0B1F5806FA8
-S31508009A400BD0B1F5006F06D0B1F5406F07D01021E5
-S31508009A503BE0012139E0022137E0042135E0082105
-S31508009A6033E06A4EB14216D1196811F440510AD052
-S31508009A70B1F5805F0BD0B1F5005F06D0B1F5405F58
-S31508009A8007D0102121E000211FE002211DE004215A
-S31508009A901BE0082119E05E4EB14215D1196811F490
-S31508009AA0404109D0B1F5804F0AD0914206D0B1F5B0
-S31508009AB0404F07D0102108E0002106E0022104E00B
-S31508009AC0042102E0082100E01021E3694FF6EF7651
-S31508009AD0934247D1092935D2DFE801F0050F193439
-S31508009AE0213434342B00FFF78DFA4100606801EB0E
-S31508009AF05001B1FBF0F080B225E0FFF793FA410080
-S31508009B00606801EB5001B1FBF0F080B21BE06068C1
-S31508009B10404901EB5001B1FBF0F080B213E0FFF7CA
-S31508009B2091FA4100606801EB5001B1FBF0F080B298
-S31508009B3009E060684FF4803101EB5001B1FBF0F0A9
-S31508009B4080B200E00125A0F11001B14208D84FF615
-S31508009B50F0710140C0F3420001432068C16040E053
-S31508009B6001253EE0092933D2DFE801F0050F193255
-S31508009B70213232322B00FFF745FA0146606801EBC5
-S31508009B805001B1FBF0F080B223E0FFF74BFA014633
-S31508009B90606801EB5001B1FBF0F080B219E0606833
-S31508009BA01D4901EB5001B1FBF0F080B211E0FFF75F
-S31508009BB049FA0146606801EB5001B1FBF0F080B24A
-S31508009BC007E0606802EB5001B1FBF0F080B200E0FC
-S31508009BD00125A0F11001B14202D82168C86000E051
-S31508009BE00125002020666066284670BDF369FFEFF0
-S31508009BF000100140903802400044004000480040F0
-S31508009C00004C00400050004000140140007800401D
-S31508009C10007C00400048E8010024F4002DE9F041EA
-S31508009C2004460E4617469846069D08E0681C06D068
-S31508009C30FFF706F8A0EB0800A8420BD855B1206834
-S31508009C40C06936EA000017D00020B842EED00020DE
-S31508009C50BDE8F0812068016821F4D07101602068B0
-S31508009C60816821F00101816020206067A0670020DB
-S31508009C7084F870000320EBE70120E6E70249014873
-S31508009C80086070470080000808ED00E00907090E23
-S31508009C90002804DB00F1E02080F80014704700F08B
-S31508009CA00F0000F1E02080F8141D7047FFF7C7FC8D
-S31508009CB0FEF75DFCFFF7D8FCFEF752FCFAE74FF01B
-S31508009CC04070E1EE100A7047050206020603070314
-S31508009CD00803090309040A040B040C040C050D0502
-S31508009CE00E050F050F0610061007100800000000E5
-S31508009CF0000000000102030406070809000000002E
-S31508009D0001020304249D0008000000202000000032
-S31508009D1008820008449D0008200000205007000023
-S31508009D202482000800000000000000000000000077
-S31508009D30000000000024F4000100000010000000EC
-S30908009D400000000011
+S315080087E0F5B305682D59ED08556005682C5904F050
+S315080087F00204D46005684FF4DA7404EB01142D59A9
+S3150800880005F00F05156105682D59C5F3072595610E
+S3150800881005682C59240C546104684FF4DC7202EB89
+S315080088200112A4581C700468A458240A5C700468D1
+S31508008830A458240C9C700468A258120EDA700468B6
+S315080088404FF4DE7202EB0112A4581C710468A45896
+S31508008850240A5C710468A458240C9C71046800E01E
+S3150800886016E0A258120EDA71B9B10068016941F032
+S3150800887020010161002030BD416A41F400114162C6
+S31508008880012030BD416A41F400114162012030BD2A
+S3150800889005682D596D0D1560A7E70068C16841F098
+S315080088A02001C160E6E770B50446002C03D094F8B1
+S315080088B0200010B104E0012070BD204600F09CF8AD
+S315080088C02068016821F00201016000F0B3F905464D
+S315080088D005260CE000F0AEF9401B0A2807D9606AA5
+S315080088E040F40030606284F82060012070BD206882
+S315080088F040688007EED42068016841F001010160F4
+S3150800890000F098F905460CE000F094F9401B0A2897
+S3150800891007D9606A40F40030606284F8206001205C
+S3150800892070BD20684068C007EED0207E01283FD081
+S315080089302068016821F080010160607E01283DD031
+S315080089402068016821F040010160A07E01283BD023
+S315080089502068016821F020010160E07E012839D0F5
+S315080089602068016841F010010160207F012837D096
+S315080089702068016821F008010160607F012835D070
+S315080089802068016821F004010160D4E90201084366
+S31508008990D4E90412114308436168491E0843216853
+S315080089A0C86100206062012084F82000002070BDA4
+S315080089B02068016841F080010160BEE7206801680F
+S315080089C041F040010160C0E72068016841F02001DC
+S315080089D00160C2E72068016821F010010160C4E760
+S315080089E02068016841F008010160C6E7206801684F
+S315080089F041F004010160C8E7704770B5044694F871
+S31508008A002000012805D0606A40F400206062012039
+S31508008A1070BD022084F820002068016821F0010159
+S31508008A20016000F007F905460DE000F003F9401B68
+S31508008A300A2808D9606A40F400306062052084F884
+S31508008A402000012070BD20684068C007EDD1606233
+S31508008A5070BD00002DE9F84F0022DFF894A14FF011
+S31508008A6003084FF00F090AF1040B012595400B681E
+S31508008A702B40AB4272D14C68012C05D0022C03D096
+S31508008A80112C01D0122C10D18668540008FA04F76C
+S31508008A90BE43CF68A740374387604668AE430C7924
+S31508008AA0C4F30014944034434460C468570008FA79
+S31508008AB007F5AC438E68BE402643C6604C68022C58
+S31508008AC001D0122C12D1D40800EB840CDCF82060FB
+S31508008AD05407E40E09FA04FE26EA0E06D1F810E059
+S31508008AE00EFA04FE4EEA060ECCF820E00468AC4303
+S31508008AF00D7905F00305BD40254305604C68E40083
+S31508008B006FD53C4C256845F480452560246804F4F7
+S31508008B1080440094384C22F003052E19D6F80878BC
+S31508008B209407250F09FA05F4A743344CA04201D14E
+S31508008B3000242EE0324CA04201D1012429E0314C18
+S31508008B40A04201D1022424E02F4CA04201D10324E3
+S31508008B501FE02E4CA04202D104241AE041E02C4C1E
+S31508008B60A04201D1052414E02A4CA04201D10624D2
+S31508008B700FE0294CA04201D107240AE0274CA04265
+S31508008B8001D1082405E0264CA04201D1092400E0C1
+S31508008B900A24AC403C43C6F80848DAF800409C432F
+S31508008BA04D68ED0300D51C43CAF80040DBF80040C9
+S31508008BB09C434D68AD0300D51C43CBF800400C4DD3
+S31508008BC008352C689C434E68F60200D51C432C6079
+S31508008BD0074D0C352C689C434E68B60200D51C43DD
+S31508008BE02C60521C102AFFF440AFBDE8F88F000035
+S31508008BF0003C014044380240003001400000024079
+S31508008C000004024000080240000C02400010024026
+S31508008C100014024000180240001C024000200240D6
+S31508008C2000240240002A01D081617047090481614D
+S31508008C307047000001488068704700001400002053
+S31508008C400248816802781144816070471400002048
+S31508008C5010B5032000F0D8F8002000F005F800F061
+S31508008C6025F8002010BD000070B504460D4D4FF4E0
+S31508008C707A712878B1FBF0F00B490968B1FBF0F07E
+S31508008C8000F031FC08B1012070BD102C07D200227B
+S31508008C902146501E00F098F86C60002070BD012037
+S31508008CA070BD000014000020100000202DE9F041DE
+S31508008CB086B04248016841F080510160016801F0C0
+S31508008CC080510091011D0A6842F480420A600968D1
+S31508008CD001F480410091394910390A6842F00202CC
+S31508008CE00A600A6802F0020200920A6842F0080264
+S31508008CF00A60096801F008010091016841F48021C1
+S31508008D000160016801F480210091016841F0007159
+S31508008D100160006800F000700090032000F074F80D
+S31508008D2000226FF00B00114600F04EF800226FF09B
+S31508008D300A00114600F048F800226FF009001146B3
+S31508008D4000F042F80022501F114600F03DF80022BC
+S31508008D50101F114600F038F80022901E114600F048
+S31508008D6033F80022501E114600F02EF8802001909C
+S31508008D700120029000240394049401A9DFF840809E
+S31508008D804046FFF767FE4FF44077019702260296A2
+S31508008D900394032504950720059001A90948FFF7C0
+S31508008DA059FE01970296039404950920059001A996
+S31508008DB04046FFF74FFE06B0BDE8F0814038024056
+S31508008DC000040240000C0240F0B40D460D4B1B682F
+S31508008DD0C3F30223C3F10704042C00D90424191D84
+S31508008DE0072901D2002300E0DB1E012606FA04F15A
+S31508008DF0491E294099409E40761E16403143F0BCD4
+S31508008E0000F06EBF0CED00E000F00701054A10689F
+S31508008E104FF6FF03184040EA012003490843106053
+S31508008E20704700000CED00E00000FA05F8B5194897
+S31508008E30016841F080510160006800F080500090A0
+S31508008E40154C206840F480302060FFF7F3FE054695
+S31508008E504FF47A7606E0FFF7EDFE401BB04201D9E3
+S31508008E600320F8BD6068C003F5D5206840F40030DB
+S31508008E702060FFF7DFFE054606E0FFF7DBFE401B36
+S31508008E80B04201D90320F8BD60688003F5D50020FB
+S31508008E90F8BD000040380240007000402DE9F04758
+S31508008EA004460D46002C17D0DFF83481D8F80000A8
+S31508008EB000F00F00A84211D2D8F8000020F00F00E9
+S31508008EC02843C8F80000D8F8000000F00F00A842B0
+S31508008ED004D00120BDE8F0870120FBE72068414E59
+S31508008EE0810712D5400703D5306840F4E05030605A
+S31508008EF02078000703D5306840F460403060306859
+S31508008F00A16820F0F000084330602078C0072ED012
+S31508008F10344960680839012806D0022809D009684A
+S31508008F2089070BD40120D5E70968890306D40120EF
+S31508008F30D0E70968890101D40120CBE7316821F01F
+S31508008F40030101433160FFF775FE074641F2883990
+S31508008F5006E0FFF76FFEC01B484501D90320B9E7B5
+S31508008F603068616800F00C00B0EB810FF1D1D8F8D9
+S31508008F70000000F00F00A8420ED9D8F8000020F033
+S31508008F800F002843C8F80000D8F8000000F00F00CA
+S31508008F90A84201D001209DE72078400705D5306812
+S31508008FA0E16820F4E050084330602078000706D5D1
+S31508008FB03068216920F4604040EAC100306000F062
+S31508008FC03FF83168084AC1F30311515CC8400749A4
+S31508008FD0086007480068FFF747FE00207AE70000A8
+S31508008FE0003C024008380240409D0008100000205E
+S31508008FF01800002001480068704700001000002093
+S3150800900000B5FFF7F7FF04490968044AC1F382214E
+S31508009010515CC84000BD000008380240509D000859
+S3150800902000B5FFF7E7FF04490968044AC1F342316E
+S31508009030515CC84000BD000008380240509D000839
+S3150800904010B51748006810F00C01164816D04310E2
+S31508009050042912D0082911D1114C241F216801F0C6
+S315080090603F02216849020AD52068C0F38810A0FB90
+S3150800907003010023FFF71EF909E0184610BD216811
+S315080090800023C1F38811A1FB0001FFF713F921683A
+S31508009090C1F30141491C4900B0FBF1F010BD0000C5
+S315080090A0083802400024F4002DE9F84F04464FF032
+S315080090B00008002C15D02078DFF80494A9F10407DD
+S315080090C0C007A7F1040560D0D9F80000C0F38100F5
+S315080090D001280CD0D9F80000C0F38100022803D07B
+S315080090E00CE00120BDE8F88F3868400206D52868EC
+S315080090F080034AD5606870BB0120F3E76068B0F565
+S31508009100803F11D0A8B1B0F5A02F1BD0286820F455
+S3150800911080302860286820F480202860606830B392
+S31508009120FFF788FD06461EE0286840F48030286070
+S31508009130F4E7286820F480302860286820F4802026
+S315080091402860EBE7286840F480202860286840F407
+S3150800915080302860E2E718E0FFF76CFD801B642882
+S3150800916001D90320BEE728688003F5D50DE0FFF78F
+S3150800917061FD064606E0FFF75DFD801B642801D900
+S315080091800320AFE728688003F5D4207880074BD5FD
+S31508009190D9F8000010F00C0F08D0D9F80000C0F379
+S315080091A08100022812D1386840020FD42868800747
+S315080091B004D5E068012801D0012093E728682169D1
+S315080091C020F0F80040EAC10028602DE0E068C8B148
+S315080091D0286840F001002860FFF72CFD064606E0E7
+S315080091E0FFF728FD801B022801D903207AE72868A3
+S315080091F08007F5D52868216920F0F80040EAC10003
+S31508009200286011E0286820F001002860FFF712FDA9
+S31508009210064606E0FFF70EFD801B022801D903204B
+S3150800922060E728688007F5D42078000730D5DFF88E
+S3150800923090A260690AF16C0AA8B1DAF8000040F059
+S315080092400100CAF80000FFF7F5FC064606E0FFF73E
+S31508009250F1FC801B022801D9032043E7DAF8000055
+S315080092608007F4D514E0DAF8000020F00100CAF807
+S315080092700000FFF7DFFC064606E0FFF7DBFC801B75
+S31508009280022801D903202DE7DAF800008007F4D474
+S315080092902078400775D5DFF828A20AF1380ADAF8E7
+S315080092A00000C0000CD4DAF8000040F08050CAF87C
+S315080092B00000DAF8000000F0805000904FF0010836
+S315080092C0DFF800B2DBF80000C00514D4DBF80000B4
+S315080092D040F48070CBF80000FFF7ACFC064606E0C9
+S315080092E0FFF7A8FC801B642801D90320FAE6DBF8FF
+S315080092F00000C005F4D5DFF8C8B1A0680BF1680B0B
+S31508009300012814D0D0B1052825D0DBF8000020F0BC
+S315080093100100CBF80000DBF8000020F00400CBF8D1
+S315080093200000A06870B3FFF785FC06462BE0DBF863
+S31508009330000040F00100CBF80000F2E7DBF800007F
+S3150800934020F00100CBF80000DBF8000020F0040054
+S31508009350CBF80000E5E7DBF8000040F00400CBF8A6
+S315080093600000DBF8000040F00100CBF80000D8E769
+S31508009370FFF760FC811B41F28830814203D9032044
+S31508009380B0E61FE004E0DBF800008007F0D510E047
+S31508009390FFF750FC064608E0FFF74CFC811B41F23C
+S315080093A08830814201D903209CE6DBF8000080075B
+S315080093B0F2D4B8F1010F05D1DAF8000020F0805098
+S315080093C0CAF80000A169E9B3D9F800004FF0FF38E0
+S315080093D0C0F3810002284CD0022907D0286820F063
+S315080093E080702860FFF726FC04463EE0286820F0D7
+S315080093F080702860FFF71EFC064606E0FFF71AFC99
+S31508009400801B022801D903206CE628688001F5D460
+S31508009410D4E90701A26A0843616A08EB5202890186
+S3150800942041EA0241084394F82C1040EA016040F0F2
+S3150800943000503860286840F080702860FFF7FAFB13
+S31508009440044607E03AE0FFF7F5FB001B022801D9BE
+S31508009450032047E628688001F5D52FE0FFF7EAFBE9
+S31508009460001B022801D903203CE628688001F5D4B0
+S3150800947024E0386801291FD0E26900F4800191428E
+S315080094801AD1226A00F03F01914215D1626A47F665
+S31508009490C0710140B1EB821F0ED1A26A00F44031BF
+S315080094A008EB5202B1EB024F06D194F82C1000F0EB
+S315080094B07060B0EB016F01D0012013E6002011E6C1
+S315080094C0083802400070004004284FF0E02104D01C
+S315080094D0086920F0040008617047086940F0040034
+S315080094E008617047704710B5401EB0F1807F01D300
+S315080094F0012010BD4FF0E02460610F21601700F0D5
+S31508009500EFFB0020A06107202061002010BD10B5E8
+S31508009510FFF7E8FF10BD10B50446002C02D0606FB7
+S3150800952010B107E0012010BD002084F87000204625
+S3150800953000F027F8242060672068016821F00101FF
+S315080095400160204600F0DEF9012818D0606A10B1E3
+S31508009550204600F054F92068416821F490414160A2
+S315080095602068816821F02A0181602068016841F03D
+S31508009570010101602046BDE8104000F0A4B90120B1
+S3150800958010BD70472DE9F84F04460E461546984615
+S31508009590A06F202802D00220BDE8F88FFEB1F5B1F1
+S315080095A094F8700001281CD0012084F870004FF050
+S315080095B0000AC4F87CA02220A067FFF73BFB81467F
+S315080095C0A4F85850A4F85A50FF21A0684FF48053C5
+S315080095D098420DD1226932B1A4F85C100FE001203F
+S315080095E0DAE70220D8E740F2FF11A4F85C1006E09B
+S315080095F07F2278B1B0F1805F14D0A4F85CA0B4F8EB
+S315080096005C70984201D12069A8B13546002684F8D5
+S3150800961070A028E0256915B1A4F85C20EFE7A4F846
+S315080096205C10ECE7216919B13F21A4F85C10E6E764
+S31508009630A4F85C20E3E70025E9E700224B46202151
+S315080096402046CDF8008000F0EFFA08B10320A3E722
+S315080096508DB12068406A384005F8010BB4F85A0005
+S31508009660401EA4F85A00B4F85A000028E5D1202074
+S31508009670A067002090E72068406A384026F8020B69
+S31508009680ECE710B500F024FBFFF7E2FA00F046F825
+S3150800969000F0A2F8BDE81040AFF3008000220248AF
+S315080096A08021FFF7BFBA00000004024070B500F041
+S315080096B091F804460C4D6868201AB0F5FA7F0AD36B
+S315080096C028780A4B40B100202870002218468021CD
+S315080096D0FFF7A8FA6C6070BD0120287001221846B1
+S315080096E08021FFF79FFAF5E70800002000040240F2
+S315080096F010B50023014604480122FFF743FF08B1CD
+S31508009700002010BD012010BD6400002010B5FFF731
+S3150800971097FABDE81040FFF7FABE000010B592B000
+S31508009720302106A8FEF73DFE142101A8FEF739FEF2
+S315080097301F48016841F080510160006800F08050C0
+S3150800974000901C48016841F440410160006800F43B
+S3150800975040400090012006904FF4A0200790022474
+S315080097600C9460050D9008200E904FF4D8700F9059
+S315080097701094119406A8FFF797FC00B1FEE7FFF7CF
+S3150800978055FB00B1FEE70F200190029400200390DC
+S315080097904FF4A05004904FF480500590072101A87B
+S315080097A0FFF77CFB002800D0FEE712B010BD0000D2
+S315080097B040380240007000400548016841F47001D5
+S315080097C0016003494FF00060803908607047000067
+S315080097D088ED00E0FFF72EBA10B5FFF70BFC4FF443
+S315080097E07A71B0FBF1F0FFF77EFE0420FFF76CFEFE
+S315080097F00022BDE81040501E1146FFF7E5BA90F862
+S315080098002410C90706D001684A68836A22F4003220
+S315080098101A434A6090F82410890706D501684A68F1
+S31508009820C36A22F480321A434A6090F82410490722
+S3150800983006D501684A68036B22F480221A434A60F7
+S3150800984090F82410090706D501684A68436B22F484
+S3150800985000421A434A6090F82410C90606D50168E2
+S315080098608A68836B22F480521A438A6090F824101F
+S31508009870890606D501688A68C36B22F400521A4322
+S315080098808A6090F82410490611D501684A68036C65
+S3150800989022F480121A434A60016CB1F5801F06D182
+S315080098A001684A68436C22F4C0021A434A6090F879
+S315080098B02410090606D501684A68806C22F400223D
+S315080098C002434A60704738B504460025E567FFF746
+S315080098D0B1F903462068006800070BD56FF07E4093
+S315080098E00090002220464FF4001100F09DF908B1BF
+S315080098F0032038BD20206067A06784F870500020D8
+S3150800990038BD000070B5044600200025A26821690C
+S31508009910E3690A43616919430A4321680B68B64E2D
+S31508009920334013430B6021684A68E36822F44052C7
+S315080099301A434A60A169226A0A4321688B6823F49C
+S31508009940306313438B60AD4E4FF400422168AC4B35
+S31508009950B14213D1196811F0030107D0012909D0C2
+S31508009960022905D0032907D01021B4E00121B2E06D
+S315080099700221B0E00421AEE00821ACE0A14EB142DC
+S3150800998013D1196811F00C0107D0042909D0082948
+S3150800999005D00C2907D010219DE000219BE002216B
+S315080099A099E0042197E0082195E0974EB14213D13A
+S315080099B0196811F0300107D0102909D0202905D0DF
+S315080099C0302907D0102186E0002184E0022182E0B8
+S315080099D0042180E008217EE08C4EB14213D119683B
+S315080099E011F0C00107D0402909D0802905D0C02927
+S315080099F007D010216FE000216DE002216BE0042101
+S31508009A0069E0082167E0824EB14216D1196811F45F
+S31508009A1040710AD0B1F5807F0BD0B1F5007F06D032
+S31508009A20B1F5407F07D0102155E0002153E002210F
+S31508009A3051E004214FE008214DE0764EB14216D19F
+S31508009A40196811F440610AD0B1F5806F0BD0B1F5F1
+S31508009A50006F06D0B1F5406F07D010213BE0012119
+S31508009A6039E0022137E0042135E0082133E06A4E67
+S31508009A70B14216D1196811F440510AD0B1F5805F88
+S31508009A800BD0B1F5005F06D0B1F5405F07D01021C5
+S31508009A9021E000211FE002211DE004211BE008212E
+S31508009AA019E05E4EB14215D1196811F4404109D04A
+S31508009AB0B1F5804F0AD0914206D0B1F5404F07D094
+S31508009AC0102108E0002106E0022104E0042102E05A
+S31508009AD0082100E01021E3694FF6EF76934247D15B
+S31508009AE0092935D2DFE801F0050F19342134343459
+S31508009AF02B00FFF785FA4100606801EB5001B1FBC6
+S31508009B00F0F080B225E0FFF78BFA4100606801EBC0
+S31508009B105001B1FBF0F080B21BE06068404901EBF0
+S31508009B205001B1FBF0F080B213E0FFF789FA41006B
+S31508009B30606801EB5001B1FBF0F080B209E06068A3
+S31508009B404FF4803101EB5001B1FBF0F080B200E038
+S31508009B500125A0F11001B14208D84FF6F071014075
+S31508009B60C0F3420001432068C16040E001253EE0A1
+S31508009B70092933D2DFE801F0050F193221323232D2
+S31508009B802B00FFF73DFA0146606801EB5001B1FB77
+S31508009B90F0F080B223E0FFF743FA0146606801EB74
+S31508009BA05001B1FBF0F080B219E060681D4901EB85
+S31508009BB05001B1FBF0F080B211E0FFF741FA01461F
+S31508009BC0606801EB5001B1FBF0F080B207E0606815
+S31508009BD002EB5001B1FBF0F080B200E00125A0F1E4
+S31508009BE01001B14202D82168C86000E001250020B2
+S31508009BF020666066284670BDF369FFEF00100140D5
+S31508009C00903802400044004000480040004C0040A4
+S31508009C10005000400014014000780040007C0040DD
+S31508009C200048E8010024F4002DE9F04704460E46F2
+S31508009C3017469846089D4FF0000A4FF020093BE06A
+S31508009C40681C39D0FEF7F6FFA0EB0800A84221D819
+S31508009C5005B32068016849072ED5C069C0430005C9
+S31508009C602AD421684FF4006008622068016821F44C
+S31508009C70D07101602068816821F001018160C4F813
+S31508009C807490C4F87890C4F87C9084F870A0032087
+S31508009C90BDE8F0872068016821F4D071016020686A
+S31508009CA0816821F001018160C4F87490C4F8789045
+S31508009CB084F870A00320EBE72068C06936EA000044
+S31508009CC004D00020B842BBD00020E1E70120F9E724
+S31508009CD002490148086070470080000808ED00E066
+S31508009CE00907090E002804DB00F1E02080F80014BB
+S31508009CF0704700F00F0000F1E02080F8141D70474F
+S31508009D00FFF7BFFCFEF733FCFFF7D0FCFEF728FC95
+S31508009D10FAE74FF04070E1EE100A704705020602B6
+S31508009D20060307030803090309040A040B040C04C1
+S31508009D300C050D050E050F050F0610061007100871
+S31508009D4000000000000000000102030406070809DD
+S31508009D500000000001020304789D000800000020AE
+S31508009D602000000008820008989D000820000020B6
+S31508009D7050070000248200080000000000000000D0
+S31508009D8000000000000000000024F40001000000AC
+S30D08009D901000000000000000AD
S705080081CDA4
diff --git a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_Keil/Prog/lib/CMSIS/Device/ST/STM32F7xx/Include/stm32f746xx.h b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_Keil/Prog/lib/CMSIS/Device/ST/STM32F7xx/Include/stm32f746xx.h
index 5de6c6e1..2c47d3f0 100644
--- a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_Keil/Prog/lib/CMSIS/Device/ST/STM32F7xx/Include/stm32f746xx.h
+++ b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_Keil/Prog/lib/CMSIS/Device/ST/STM32F7xx/Include/stm32f746xx.h
@@ -12,29 +12,13 @@
******************************************************************************
* @attention
*
- * © COPYRIGHT(c) 2016 STMicroelectronics
+ * © Copyright (c) 2016 STMicroelectronics.
+ * All rights reserved.
*
- * Redistribution and use in source and binary forms, with or without modification,
- * are permitted provided that the following conditions are met:
- * 1. Redistributions of source code must retain the above copyright notice,
- * this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright notice,
- * this list of conditions and the following disclaimer in the documentation
- * and/or other materials provided with the distribution.
- * 3. Neither the name of STMicroelectronics nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
- * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
- * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ * This software component is licensed by ST under BSD 3-Clause license,
+ * the "License"; You may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at:
+ * opensource.org/licenses/BSD-3-Clause
*
******************************************************************************
*/
@@ -1433,28 +1417,32 @@ typedef struct
/* Analog to Digital Converter */
/* */
/******************************************************************************/
+#define VREFINT_CAL_ADDR_CMSIS ((uint16_t*) (0x1FF0F44A)) /*!© COPYRIGHT(c) 2016 STMicroelectronics
+ * © Copyright (c) 2016 STMicroelectronics.
+ * All rights reserved.
*
- * Redistribution and use in source and binary forms, with or without modification,
- * are permitted provided that the following conditions are met:
- * 1. Redistributions of source code must retain the above copyright notice,
- * this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright notice,
- * this list of conditions and the following disclaimer in the documentation
- * and/or other materials provided with the distribution.
- * 3. Neither the name of STMicroelectronics nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
- * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
- * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ * This software component is licensed by ST under BSD 3-Clause license,
+ * the "License"; You may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at:
+ * opensource.org/licenses/BSD-3-Clause
*
******************************************************************************
*/
@@ -72,10 +56,10 @@
/* Uncomment the line below according to the target STM32 device used in your
application
*/
-#if !defined (STM32F756xx) && !defined (STM32F746xx) && !defined (STM32F745xx) && !defined (STM32F767xx) && \
- !defined (STM32F769xx) && !defined (STM32F777xx) && !defined (STM32F779xx) && !defined (STM32F722xx) && \
- !defined (STM32F723xx) && !defined (STM32F732xx) && !defined (STM32F733xx) && !defined (STM32F730xx) && \
- !defined (STM32F750xx)
+#if !defined (STM32F756xx) && !defined (STM32F746xx) && !defined (STM32F745xx) && !defined (STM32F765xx) && \
+ !defined (STM32F767xx) && !defined (STM32F769xx) && !defined (STM32F777xx) && !defined (STM32F779xx) && \
+ !defined (STM32F722xx) && !defined (STM32F723xx) && !defined (STM32F732xx) && !defined (STM32F733xx) && \
+ !defined (STM32F730xx) && !defined (STM32F750xx)
/* #define STM32F756xx */ /*!< STM32F756VG, STM32F756ZG, STM32F756ZG, STM32F756IG, STM32F756BG,
STM32F756NG Devices */
@@ -113,11 +97,11 @@
#endif /* USE_HAL_DRIVER */
/**
- * @brief CMSIS Device version number V1.2.4
+ * @brief CMSIS Device version number V1.2.5
*/
#define __STM32F7_CMSIS_VERSION_MAIN (0x01) /*!< [31:24] main version */
#define __STM32F7_CMSIS_VERSION_SUB1 (0x02) /*!< [23:16] sub1 version */
-#define __STM32F7_CMSIS_VERSION_SUB2 (0x04) /*!< [15:8] sub2 version */
+#define __STM32F7_CMSIS_VERSION_SUB2 (0x05) /*!< [15:8] sub2 version */
#define __STM32F7_CMSIS_VERSION_RC (0x00) /*!< [7:0] release candidate */
#define __STM32F7_CMSIS_VERSION ((__STM32F7_CMSIS_VERSION_MAIN << 24)\
|(__STM32F7_CMSIS_VERSION_SUB1 << 16)\
diff --git a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_Keil/Prog/lib/STM32F7xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_Keil/Prog/lib/STM32F7xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h
index 13b68bc2..2d265fb6 100644
--- a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_Keil/Prog/lib/STM32F7xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h
+++ b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_Keil/Prog/lib/STM32F7xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h
@@ -7,7 +7,7 @@
******************************************************************************
* @attention
*
- * © Copyright (c) 2018 STMicroelectronics.
+ * © Copyright (c) 2019 STMicroelectronics.
* All rights reserved.
*
* This software component is licensed by ST under BSD 3-Clause license,
@@ -236,6 +236,16 @@
#define DAC_WAVEGENERATION_NOISE DAC_WAVE_NOISE
#define DAC_WAVEGENERATION_TRIANGLE DAC_WAVE_TRIANGLE
+#if defined(STM32G4) || defined(STM32H7)
+#define DAC_CHIPCONNECT_DISABLE DAC_CHIPCONNECT_EXTERNAL
+#define DAC_CHIPCONNECT_ENABLE DAC_CHIPCONNECT_INTERNAL
+#endif
+
+#if defined(STM32L1) || defined(STM32L4) || defined(STM32G0) || defined(STM32L5) || defined(STM32H7) || defined(STM32F4)
+#define HAL_DAC_MSP_INIT_CB_ID HAL_DAC_MSPINIT_CB_ID
+#define HAL_DAC_MSP_DEINIT_CB_ID HAL_DAC_MSPDEINIT_CB_ID
+#endif
+
/**
* @}
*/
@@ -296,8 +306,17 @@
#define HAL_DMAMUX_REQUEST_GEN_FALLING HAL_DMAMUX_REQ_GEN_FALLING
#define HAL_DMAMUX_REQUEST_GEN_RISING_FALLING HAL_DMAMUX_REQ_GEN_RISING_FALLING
+#if defined(STM32L4R5xx) || defined(STM32L4R9xx) || defined(STM32L4R9xx) || defined(STM32L4S5xx) || defined(STM32L4S7xx) || defined(STM32L4S9xx)
+#define DMA_REQUEST_DCMI_PSSI DMA_REQUEST_DCMI
+#endif
+
#endif /* STM32L4 */
+#if defined(STM32G0)
+#define DMA_REQUEST_DAC1_CHANNEL1 DMA_REQUEST_DAC1_CH1
+#define DMA_REQUEST_DAC1_CHANNEL2 DMA_REQUEST_DAC1_CH2
+#endif
+
#if defined(STM32H7)
#define DMA_REQUEST_DAC1 DMA_REQUEST_DAC1_CH1
@@ -355,6 +374,9 @@
#define DFSDM_FILTER_EXT_TRIG_LPTIM2 DFSDM_FILTER_EXT_TRIG_LPTIM2_OUT
#define DFSDM_FILTER_EXT_TRIG_LPTIM3 DFSDM_FILTER_EXT_TRIG_LPTIM3_OUT
+#define DAC_TRIGGER_LP1_OUT DAC_TRIGGER_LPTIM1_OUT
+#define DAC_TRIGGER_LP2_OUT DAC_TRIGGER_LPTIM2_OUT
+
#endif /* STM32H7 */
/**
@@ -450,7 +472,9 @@
#define FLASH_FLAG_SNECCE_BANK2RR FLASH_FLAG_SNECCERR_BANK2
#define FLASH_FLAG_DBECCE_BANK2RR FLASH_FLAG_DBECCERR_BANK2
#define FLASH_FLAG_STRBER_BANK2R FLASH_FLAG_STRBERR_BANK2
-#endif
+#define FLASH_FLAG_WDW FLASH_FLAG_WBNE
+#define OB_WRP_SECTOR_All OB_WRP_SECTOR_ALL
+#endif /* STM32H7 */
/**
* @}
@@ -486,6 +510,13 @@
#define HAL_SYSCFG_FASTMODEPLUS_I2C1 I2C_FASTMODEPLUS_I2C1
#define HAL_SYSCFG_FASTMODEPLUS_I2C2 I2C_FASTMODEPLUS_I2C2
#define HAL_SYSCFG_FASTMODEPLUS_I2C3 I2C_FASTMODEPLUS_I2C3
+#if defined(STM32G4)
+
+#define HAL_SYSCFG_EnableIOAnalogSwitchBooster HAL_SYSCFG_EnableIOSwitchBooster
+#define HAL_SYSCFG_DisableIOAnalogSwitchBooster HAL_SYSCFG_DisableIOSwitchBooster
+#define HAL_SYSCFG_EnableIOAnalogSwitchVDD HAL_SYSCFG_EnableIOSwitchVDD
+#define HAL_SYSCFG_DisableIOAnalogSwitchVDD HAL_SYSCFG_DisableIOSwitchVDD
+#endif /* STM32G4 */
/**
* @}
*/
@@ -494,7 +525,7 @@
/** @defgroup LL_FMC_Aliased_Defines LL FMC Aliased Defines maintained for compatibility purpose
* @{
*/
-#if defined(STM32L4) || defined(STM32F7) || defined(STM32H7)
+#if defined(STM32L4) || defined(STM32F7) || defined(STM32H7) || defined(STM32G4)
#define FMC_NAND_PCC_WAIT_FEATURE_DISABLE FMC_NAND_WAIT_FEATURE_DISABLE
#define FMC_NAND_PCC_WAIT_FEATURE_ENABLE FMC_NAND_WAIT_FEATURE_ENABLE
#define FMC_NAND_PCC_MEM_BUS_WIDTH_8 FMC_NAND_MEM_BUS_WIDTH_8
@@ -547,18 +578,25 @@
#define GPIO_AF9_SDIO2 GPIO_AF9_SDMMC2
#define GPIO_AF10_SDIO2 GPIO_AF10_SDMMC2
#define GPIO_AF11_SDIO2 GPIO_AF11_SDMMC2
-#endif
+
+#if defined (STM32H743xx) || defined (STM32H753xx) || defined (STM32H750xx) || defined (STM32H742xx) || \
+ defined (STM32H745xx) || defined (STM32H755xx) || defined (STM32H747xx) || defined (STM32H757xx)
+#define GPIO_AF10_OTG2_HS GPIO_AF10_OTG2_FS
+#define GPIO_AF10_OTG1_FS GPIO_AF10_OTG1_HS
+#define GPIO_AF12_OTG2_FS GPIO_AF12_OTG1_FS
+#endif /*STM32H743xx || STM32H753xx || STM32H750xx || STM32H742xx || STM32H745xx || STM32H755xx || STM32H747xx || STM32H757xx */
+#endif /* STM32H7 */
#define GPIO_AF0_LPTIM GPIO_AF0_LPTIM1
#define GPIO_AF1_LPTIM GPIO_AF1_LPTIM1
#define GPIO_AF2_LPTIM GPIO_AF2_LPTIM1
-#if defined(STM32L0) || defined(STM32L4) || defined(STM32F4) || defined(STM32F2) || defined(STM32F7) || defined(STM32H7)
+#if defined(STM32L0) || defined(STM32L4) || defined(STM32F4) || defined(STM32F2) || defined(STM32F7) || defined(STM32G4) || defined(STM32H7)
#define GPIO_SPEED_LOW GPIO_SPEED_FREQ_LOW
#define GPIO_SPEED_MEDIUM GPIO_SPEED_FREQ_MEDIUM
#define GPIO_SPEED_FAST GPIO_SPEED_FREQ_HIGH
#define GPIO_SPEED_HIGH GPIO_SPEED_FREQ_VERY_HIGH
-#endif /* STM32L0 || STM32L4 || STM32F4 || STM32F2 || STM32F7 || STM32H7*/
+#endif /* STM32L0 || STM32L4 || STM32F4 || STM32F2 || STM32F7 || STM32G4 || STM32H7*/
#if defined(STM32L1)
#define GPIO_SPEED_VERY_LOW GPIO_SPEED_FREQ_LOW
@@ -599,6 +637,185 @@
#define __HAL_HRTIM_GetClockPrescaler __HAL_HRTIM_GETCLOCKPRESCALER
#define __HAL_HRTIM_SetCompare __HAL_HRTIM_SETCOMPARE
#define __HAL_HRTIM_GetCompare __HAL_HRTIM_GETCOMPARE
+
+#if defined(STM32G4)
+#define HAL_HRTIM_ExternalEventCounterConfig HAL_HRTIM_ExtEventCounterConfig
+#define HAL_HRTIM_ExternalEventCounterEnable HAL_HRTIM_ExtEventCounterEnable
+#define HAL_HRTIM_ExternalEventCounterDisable HAL_HRTIM_ExtEventCounterDisable
+#define HAL_HRTIM_ExternalEventCounterReset HAL_HRTIM_ExtEventCounterReset
+#endif /* STM32G4 */
+
+#if defined(STM32H7)
+#define HRTIM_OUTPUTSET_TIMAEV1_TIMBCMP1 HRTIM_OUTPUTSET_TIMEV_1
+#define HRTIM_OUTPUTSET_TIMAEV2_TIMBCMP2 HRTIM_OUTPUTSET_TIMEV_2
+#define HRTIM_OUTPUTSET_TIMAEV3_TIMCCMP2 HRTIM_OUTPUTSET_TIMEV_3
+#define HRTIM_OUTPUTSET_TIMAEV4_TIMCCMP3 HRTIM_OUTPUTSET_TIMEV_4
+#define HRTIM_OUTPUTSET_TIMAEV5_TIMDCMP1 HRTIM_OUTPUTSET_TIMEV_5
+#define HRTIM_OUTPUTSET_TIMAEV6_TIMDCMP2 HRTIM_OUTPUTSET_TIMEV_6
+#define HRTIM_OUTPUTSET_TIMAEV7_TIMECMP3 HRTIM_OUTPUTSET_TIMEV_7
+#define HRTIM_OUTPUTSET_TIMAEV8_TIMECMP4 HRTIM_OUTPUTSET_TIMEV_8
+#define HRTIM_OUTPUTSET_TIMAEV9_TIMFCMP4 HRTIM_OUTPUTSET_TIMEV_9
+#define HRTIM_OUTPUTSET_TIMBEV1_TIMACMP1 HRTIM_OUTPUTSET_TIMEV_1
+#define HRTIM_OUTPUTSET_TIMBEV2_TIMACMP2 HRTIM_OUTPUTSET_TIMEV_2
+#define HRTIM_OUTPUTSET_TIMBEV3_TIMCCMP3 HRTIM_OUTPUTSET_TIMEV_3
+#define HRTIM_OUTPUTSET_TIMBEV4_TIMCCMP4 HRTIM_OUTPUTSET_TIMEV_4
+#define HRTIM_OUTPUTSET_TIMBEV5_TIMDCMP3 HRTIM_OUTPUTSET_TIMEV_5
+#define HRTIM_OUTPUTSET_TIMBEV6_TIMDCMP4 HRTIM_OUTPUTSET_TIMEV_6
+#define HRTIM_OUTPUTSET_TIMBEV7_TIMECMP1 HRTIM_OUTPUTSET_TIMEV_7
+#define HRTIM_OUTPUTSET_TIMBEV8_TIMECMP2 HRTIM_OUTPUTSET_TIMEV_8
+#define HRTIM_OUTPUTSET_TIMBEV9_TIMFCMP3 HRTIM_OUTPUTSET_TIMEV_9
+#define HRTIM_OUTPUTSET_TIMCEV1_TIMACMP1 HRTIM_OUTPUTSET_TIMEV_1
+#define HRTIM_OUTPUTSET_TIMCEV2_TIMACMP2 HRTIM_OUTPUTSET_TIMEV_2
+#define HRTIM_OUTPUTSET_TIMCEV3_TIMBCMP2 HRTIM_OUTPUTSET_TIMEV_3
+#define HRTIM_OUTPUTSET_TIMCEV4_TIMBCMP3 HRTIM_OUTPUTSET_TIMEV_4
+#define HRTIM_OUTPUTSET_TIMCEV5_TIMDCMP2 HRTIM_OUTPUTSET_TIMEV_5
+#define HRTIM_OUTPUTSET_TIMCEV6_TIMDCMP4 HRTIM_OUTPUTSET_TIMEV_6
+#define HRTIM_OUTPUTSET_TIMCEV7_TIMECMP3 HRTIM_OUTPUTSET_TIMEV_7
+#define HRTIM_OUTPUTSET_TIMCEV8_TIMECMP4 HRTIM_OUTPUTSET_TIMEV_8
+#define HRTIM_OUTPUTSET_TIMCEV9_TIMFCMP2 HRTIM_OUTPUTSET_TIMEV_9
+#define HRTIM_OUTPUTSET_TIMDEV1_TIMACMP1 HRTIM_OUTPUTSET_TIMEV_1
+#define HRTIM_OUTPUTSET_TIMDEV2_TIMACMP4 HRTIM_OUTPUTSET_TIMEV_2
+#define HRTIM_OUTPUTSET_TIMDEV3_TIMBCMP2 HRTIM_OUTPUTSET_TIMEV_3
+#define HRTIM_OUTPUTSET_TIMDEV4_TIMBCMP4 HRTIM_OUTPUTSET_TIMEV_4
+#define HRTIM_OUTPUTSET_TIMDEV5_TIMCCMP4 HRTIM_OUTPUTSET_TIMEV_5
+#define HRTIM_OUTPUTSET_TIMDEV6_TIMECMP1 HRTIM_OUTPUTSET_TIMEV_6
+#define HRTIM_OUTPUTSET_TIMDEV7_TIMECMP4 HRTIM_OUTPUTSET_TIMEV_7
+#define HRTIM_OUTPUTSET_TIMDEV8_TIMFCMP1 HRTIM_OUTPUTSET_TIMEV_8
+#define HRTIM_OUTPUTSET_TIMDEV9_TIMFCMP3 HRTIM_OUTPUTSET_TIMEV_9
+#define HRTIM_OUTPUTSET_TIMEEV1_TIMACMP4 HRTIM_OUTPUTSET_TIMEV_1
+#define HRTIM_OUTPUTSET_TIMEEV2_TIMBCMP3 HRTIM_OUTPUTSET_TIMEV_2
+#define HRTIM_OUTPUTSET_TIMEEV3_TIMBCMP4 HRTIM_OUTPUTSET_TIMEV_3
+#define HRTIM_OUTPUTSET_TIMEEV4_TIMCCMP1 HRTIM_OUTPUTSET_TIMEV_4
+#define HRTIM_OUTPUTSET_TIMEEV5_TIMDCMP2 HRTIM_OUTPUTSET_TIMEV_5
+#define HRTIM_OUTPUTSET_TIMEEV6_TIMDCMP1 HRTIM_OUTPUTSET_TIMEV_6
+#define HRTIM_OUTPUTSET_TIMEEV7_TIMDCMP2 HRTIM_OUTPUTSET_TIMEV_7
+#define HRTIM_OUTPUTSET_TIMEEV8_TIMFCMP3 HRTIM_OUTPUTSET_TIMEV_8
+#define HRTIM_OUTPUTSET_TIMEEV9_TIMFCMP4 HRTIM_OUTPUTSET_TIMEV_9
+#define HRTIM_OUTPUTSET_TIMFEV1_TIMACMP3 HRTIM_OUTPUTSET_TIMEV_1
+#define HRTIM_OUTPUTSET_TIMFEV2_TIMBCMP1 HRTIM_OUTPUTSET_TIMEV_2
+#define HRTIM_OUTPUTSET_TIMFEV3_TIMBCMP4 HRTIM_OUTPUTSET_TIMEV_3
+#define HRTIM_OUTPUTSET_TIMFEV4_TIMCCMP1 HRTIM_OUTPUTSET_TIMEV_4
+#define HRTIM_OUTPUTSET_TIMFEV5_TIMCCMP4 HRTIM_OUTPUTSET_TIMEV_5
+#define HRTIM_OUTPUTSET_TIMFEV6_TIMDCMP3 HRTIM_OUTPUTSET_TIMEV_6
+#define HRTIM_OUTPUTSET_TIMFEV7_TIMDCMP4 HRTIM_OUTPUTSET_TIMEV_7
+#define HRTIM_OUTPUTSET_TIMFEV8_TIMECMP2 HRTIM_OUTPUTSET_TIMEV_8
+#define HRTIM_OUTPUTSET_TIMFEV9_TIMECMP3 HRTIM_OUTPUTSET_TIMEV_9
+
+#define HRTIM_OUTPUTRESET_TIMAEV1_TIMBCMP1 HRTIM_OUTPUTSET_TIMEV_1
+#define HRTIM_OUTPUTRESET_TIMAEV2_TIMBCMP2 HRTIM_OUTPUTSET_TIMEV_2
+#define HRTIM_OUTPUTRESET_TIMAEV3_TIMCCMP2 HRTIM_OUTPUTSET_TIMEV_3
+#define HRTIM_OUTPUTRESET_TIMAEV4_TIMCCMP3 HRTIM_OUTPUTSET_TIMEV_4
+#define HRTIM_OUTPUTRESET_TIMAEV5_TIMDCMP1 HRTIM_OUTPUTSET_TIMEV_5
+#define HRTIM_OUTPUTRESET_TIMAEV6_TIMDCMP2 HRTIM_OUTPUTSET_TIMEV_6
+#define HRTIM_OUTPUTRESET_TIMAEV7_TIMECMP3 HRTIM_OUTPUTSET_TIMEV_7
+#define HRTIM_OUTPUTRESET_TIMAEV8_TIMECMP4 HRTIM_OUTPUTSET_TIMEV_8
+#define HRTIM_OUTPUTRESET_TIMAEV9_TIMFCMP4 HRTIM_OUTPUTSET_TIMEV_9
+#define HRTIM_OUTPUTRESET_TIMBEV1_TIMACMP1 HRTIM_OUTPUTSET_TIMEV_1
+#define HRTIM_OUTPUTRESET_TIMBEV2_TIMACMP2 HRTIM_OUTPUTSET_TIMEV_2
+#define HRTIM_OUTPUTRESET_TIMBEV3_TIMCCMP3 HRTIM_OUTPUTSET_TIMEV_3
+#define HRTIM_OUTPUTRESET_TIMBEV4_TIMCCMP4 HRTIM_OUTPUTSET_TIMEV_4
+#define HRTIM_OUTPUTRESET_TIMBEV5_TIMDCMP3 HRTIM_OUTPUTSET_TIMEV_5
+#define HRTIM_OUTPUTRESET_TIMBEV6_TIMDCMP4 HRTIM_OUTPUTSET_TIMEV_6
+#define HRTIM_OUTPUTRESET_TIMBEV7_TIMECMP1 HRTIM_OUTPUTSET_TIMEV_7
+#define HRTIM_OUTPUTRESET_TIMBEV8_TIMECMP2 HRTIM_OUTPUTSET_TIMEV_8
+#define HRTIM_OUTPUTRESET_TIMBEV9_TIMFCMP3 HRTIM_OUTPUTSET_TIMEV_9
+#define HRTIM_OUTPUTRESET_TIMCEV1_TIMACMP1 HRTIM_OUTPUTSET_TIMEV_1
+#define HRTIM_OUTPUTRESET_TIMCEV2_TIMACMP2 HRTIM_OUTPUTSET_TIMEV_2
+#define HRTIM_OUTPUTRESET_TIMCEV3_TIMBCMP2 HRTIM_OUTPUTSET_TIMEV_3
+#define HRTIM_OUTPUTRESET_TIMCEV4_TIMBCMP3 HRTIM_OUTPUTSET_TIMEV_4
+#define HRTIM_OUTPUTRESET_TIMCEV5_TIMDCMP2 HRTIM_OUTPUTSET_TIMEV_5
+#define HRTIM_OUTPUTRESET_TIMCEV6_TIMDCMP4 HRTIM_OUTPUTSET_TIMEV_6
+#define HRTIM_OUTPUTRESET_TIMCEV7_TIMECMP3 HRTIM_OUTPUTSET_TIMEV_7
+#define HRTIM_OUTPUTRESET_TIMCEV8_TIMECMP4 HRTIM_OUTPUTSET_TIMEV_8
+#define HRTIM_OUTPUTRESET_TIMCEV9_TIMFCMP2 HRTIM_OUTPUTSET_TIMEV_9
+#define HRTIM_OUTPUTRESET_TIMDEV1_TIMACMP1 HRTIM_OUTPUTSET_TIMEV_1
+#define HRTIM_OUTPUTRESET_TIMDEV2_TIMACMP4 HRTIM_OUTPUTSET_TIMEV_2
+#define HRTIM_OUTPUTRESET_TIMDEV3_TIMBCMP2 HRTIM_OUTPUTSET_TIMEV_3
+#define HRTIM_OUTPUTRESET_TIMDEV4_TIMBCMP4 HRTIM_OUTPUTSET_TIMEV_4
+#define HRTIM_OUTPUTRESET_TIMDEV5_TIMCCMP4 HRTIM_OUTPUTSET_TIMEV_5
+#define HRTIM_OUTPUTRESET_TIMDEV6_TIMECMP1 HRTIM_OUTPUTSET_TIMEV_6
+#define HRTIM_OUTPUTRESET_TIMDEV7_TIMECMP4 HRTIM_OUTPUTSET_TIMEV_7
+#define HRTIM_OUTPUTRESET_TIMDEV8_TIMFCMP1 HRTIM_OUTPUTSET_TIMEV_8
+#define HRTIM_OUTPUTRESET_TIMDEV9_TIMFCMP3 HRTIM_OUTPUTSET_TIMEV_9
+#define HRTIM_OUTPUTRESET_TIMEEV1_TIMACMP4 HRTIM_OUTPUTSET_TIMEV_1
+#define HRTIM_OUTPUTRESET_TIMEEV2_TIMBCMP3 HRTIM_OUTPUTSET_TIMEV_2
+#define HRTIM_OUTPUTRESET_TIMEEV3_TIMBCMP4 HRTIM_OUTPUTSET_TIMEV_3
+#define HRTIM_OUTPUTRESET_TIMEEV4_TIMCCMP1 HRTIM_OUTPUTSET_TIMEV_4
+#define HRTIM_OUTPUTRESET_TIMEEV5_TIMDCMP2 HRTIM_OUTPUTSET_TIMEV_5
+#define HRTIM_OUTPUTRESET_TIMEEV6_TIMDCMP1 HRTIM_OUTPUTSET_TIMEV_6
+#define HRTIM_OUTPUTRESET_TIMEEV7_TIMDCMP2 HRTIM_OUTPUTSET_TIMEV_7
+#define HRTIM_OUTPUTRESET_TIMEEV8_TIMFCMP3 HRTIM_OUTPUTSET_TIMEV_8
+#define HRTIM_OUTPUTRESET_TIMEEV9_TIMFCMP4 HRTIM_OUTPUTSET_TIMEV_9
+#define HRTIM_OUTPUTRESET_TIMFEV1_TIMACMP3 HRTIM_OUTPUTSET_TIMEV_1
+#define HRTIM_OUTPUTRESET_TIMFEV2_TIMBCMP1 HRTIM_OUTPUTSET_TIMEV_2
+#define HRTIM_OUTPUTRESET_TIMFEV3_TIMBCMP4 HRTIM_OUTPUTSET_TIMEV_3
+#define HRTIM_OUTPUTRESET_TIMFEV4_TIMCCMP1 HRTIM_OUTPUTSET_TIMEV_4
+#define HRTIM_OUTPUTRESET_TIMFEV5_TIMCCMP4 HRTIM_OUTPUTSET_TIMEV_5
+#define HRTIM_OUTPUTRESET_TIMFEV6_TIMDCMP3 HRTIM_OUTPUTSET_TIMEV_6
+#define HRTIM_OUTPUTRESET_TIMFEV7_TIMDCMP4 HRTIM_OUTPUTSET_TIMEV_7
+#define HRTIM_OUTPUTRESET_TIMFEV8_TIMECMP2 HRTIM_OUTPUTSET_TIMEV_8
+#define HRTIM_OUTPUTRESET_TIMFEV9_TIMECMP3 HRTIM_OUTPUTSET_TIMEV_9
+#endif /* STM32H7 */
+
+#if defined(STM32F3)
+/** @brief Constants defining available sources associated to external events.
+ */
+#define HRTIM_EVENTSRC_1 (0x00000000U)
+#define HRTIM_EVENTSRC_2 (HRTIM_EECR1_EE1SRC_0)
+#define HRTIM_EVENTSRC_3 (HRTIM_EECR1_EE1SRC_1)
+#define HRTIM_EVENTSRC_4 (HRTIM_EECR1_EE1SRC_1 | HRTIM_EECR1_EE1SRC_0)
+
+/** @brief Constants defining the events that can be selected to configure the
+ * set/reset crossbar of a timer output
+ */
+#define HRTIM_OUTPUTSET_TIMEV_1 (HRTIM_SET1R_TIMEVNT1)
+#define HRTIM_OUTPUTSET_TIMEV_2 (HRTIM_SET1R_TIMEVNT2)
+#define HRTIM_OUTPUTSET_TIMEV_3 (HRTIM_SET1R_TIMEVNT3)
+#define HRTIM_OUTPUTSET_TIMEV_4 (HRTIM_SET1R_TIMEVNT4)
+#define HRTIM_OUTPUTSET_TIMEV_5 (HRTIM_SET1R_TIMEVNT5)
+#define HRTIM_OUTPUTSET_TIMEV_6 (HRTIM_SET1R_TIMEVNT6)
+#define HRTIM_OUTPUTSET_TIMEV_7 (HRTIM_SET1R_TIMEVNT7)
+#define HRTIM_OUTPUTSET_TIMEV_8 (HRTIM_SET1R_TIMEVNT8)
+#define HRTIM_OUTPUTSET_TIMEV_9 (HRTIM_SET1R_TIMEVNT9)
+
+#define HRTIM_OUTPUTRESET_TIMEV_1 (HRTIM_RST1R_TIMEVNT1)
+#define HRTIM_OUTPUTRESET_TIMEV_2 (HRTIM_RST1R_TIMEVNT2)
+#define HRTIM_OUTPUTRESET_TIMEV_3 (HRTIM_RST1R_TIMEVNT3)
+#define HRTIM_OUTPUTRESET_TIMEV_4 (HRTIM_RST1R_TIMEVNT4)
+#define HRTIM_OUTPUTRESET_TIMEV_5 (HRTIM_RST1R_TIMEVNT5)
+#define HRTIM_OUTPUTRESET_TIMEV_6 (HRTIM_RST1R_TIMEVNT6)
+#define HRTIM_OUTPUTRESET_TIMEV_7 (HRTIM_RST1R_TIMEVNT7)
+#define HRTIM_OUTPUTRESET_TIMEV_8 (HRTIM_RST1R_TIMEVNT8)
+#define HRTIM_OUTPUTRESET_TIMEV_9 (HRTIM_RST1R_TIMEVNT9)
+
+/** @brief Constants defining the event filtering applied to external events
+ * by a timer
+ */
+#define HRTIM_TIMEVENTFILTER_NONE (0x00000000U)
+#define HRTIM_TIMEVENTFILTER_BLANKINGCMP1 (HRTIM_EEFR1_EE1FLTR_0)
+#define HRTIM_TIMEVENTFILTER_BLANKINGCMP2 (HRTIM_EEFR1_EE1FLTR_1)
+#define HRTIM_TIMEVENTFILTER_BLANKINGCMP3 (HRTIM_EEFR1_EE1FLTR_1 | HRTIM_EEFR1_EE1FLTR_0)
+#define HRTIM_TIMEVENTFILTER_BLANKINGCMP4 (HRTIM_EEFR1_EE1FLTR_2)
+#define HRTIM_TIMEVENTFILTER_BLANKINGFLTR1 (HRTIM_EEFR1_EE1FLTR_2 | HRTIM_EEFR1_EE1FLTR_0)
+#define HRTIM_TIMEVENTFILTER_BLANKINGFLTR2 (HRTIM_EEFR1_EE1FLTR_2 | HRTIM_EEFR1_EE1FLTR_1)
+#define HRTIM_TIMEVENTFILTER_BLANKINGFLTR3 (HRTIM_EEFR1_EE1FLTR_2 | HRTIM_EEFR1_EE1FLTR_1 | HRTIM_EEFR1_EE1FLTR_0)
+#define HRTIM_TIMEVENTFILTER_BLANKINGFLTR4 (HRTIM_EEFR1_EE1FLTR_3)
+#define HRTIM_TIMEVENTFILTER_BLANKINGFLTR5 (HRTIM_EEFR1_EE1FLTR_3 | HRTIM_EEFR1_EE1FLTR_0)
+#define HRTIM_TIMEVENTFILTER_BLANKINGFLTR6 (HRTIM_EEFR1_EE1FLTR_3 | HRTIM_EEFR1_EE1FLTR_1)
+#define HRTIM_TIMEVENTFILTER_BLANKINGFLTR7 (HRTIM_EEFR1_EE1FLTR_3 | HRTIM_EEFR1_EE1FLTR_1 | HRTIM_EEFR1_EE1FLTR_0)
+#define HRTIM_TIMEVENTFILTER_BLANKINGFLTR8 (HRTIM_EEFR1_EE1FLTR_3 | HRTIM_EEFR1_EE1FLTR_2)
+#define HRTIM_TIMEVENTFILTER_WINDOWINGCMP2 (HRTIM_EEFR1_EE1FLTR_3 | HRTIM_EEFR1_EE1FLTR_2 | HRTIM_EEFR1_EE1FLTR_0)
+#define HRTIM_TIMEVENTFILTER_WINDOWINGCMP3 (HRTIM_EEFR1_EE1FLTR_3 | HRTIM_EEFR1_EE1FLTR_2 | HRTIM_EEFR1_EE1FLTR_1)
+#define HRTIM_TIMEVENTFILTER_WINDOWINGTIM (HRTIM_EEFR1_EE1FLTR_3 | HRTIM_EEFR1_EE1FLTR_2 | HRTIM_EEFR1_EE1FLTR_1 | HRTIM_EEFR1_EE1FLTR_0)
+
+/** @brief Constants defining the DLL calibration periods (in micro seconds)
+ */
+#define HRTIM_CALIBRATIONRATE_7300 0x00000000U
+#define HRTIM_CALIBRATIONRATE_910 (HRTIM_DLLCR_CALRTE_0)
+#define HRTIM_CALIBRATIONRATE_114 (HRTIM_DLLCR_CALRTE_1)
+#define HRTIM_CALIBRATIONRATE_14 (HRTIM_DLLCR_CALRTE_1 | HRTIM_DLLCR_CALRTE_0)
+
+#endif /* STM32F3 */
/**
* @}
*/
@@ -738,6 +955,12 @@
#define OPAMP_PGACONNECT_VM0 OPAMP_PGA_CONNECT_INVERTINGINPUT_IO0
#define OPAMP_PGACONNECT_VM1 OPAMP_PGA_CONNECT_INVERTINGINPUT_IO1
+#if defined(STM32L1) || defined(STM32L4) || defined(STM32L5) || defined(STM32H7)
+#define HAL_OPAMP_MSP_INIT_CB_ID HAL_OPAMP_MSPINIT_CB_ID
+#define HAL_OPAMP_MSP_DEINIT_CB_ID HAL_OPAMP_MSPDEINIT_CB_ID
+#endif
+
+
/**
* @}
*/
@@ -753,7 +976,6 @@
#define I2S_FLAG_TXE I2S_FLAG_TXP
#define I2S_FLAG_RXNE I2S_FLAG_RXP
- #define I2S_FLAG_FRE I2S_FLAG_TIFRE
#endif
#if defined(STM32F7)
@@ -824,6 +1046,16 @@
#define RTC_TAMPERPIN_PA0 RTC_TAMPERPIN_POS1
#define RTC_TAMPERPIN_PI8 RTC_TAMPERPIN_POS1
+#if defined(STM32H7)
+#define RTC_TAMPCR_TAMPXE RTC_TAMPER_X
+#define RTC_TAMPCR_TAMPXIE RTC_TAMPER_X_INTERRUPT
+
+#define RTC_TAMPER1_INTERRUPT RTC_IT_TAMP1
+#define RTC_TAMPER2_INTERRUPT RTC_IT_TAMP2
+#define RTC_TAMPER3_INTERRUPT RTC_IT_TAMP3
+#define RTC_ALL_TAMPER_INTERRUPT RTC_IT_TAMPALL
+#endif /* STM32H7 */
+
/**
* @}
*/
@@ -971,6 +1203,24 @@
#define IS_TIM_HALL_INTERFACE_INSTANCE IS_TIM_HALL_SENSOR_INTERFACE_INSTANCE
#endif
+#if defined(STM32H7)
+#define TIM_TIM1_ETR_COMP1_OUT TIM_TIM1_ETR_COMP1
+#define TIM_TIM1_ETR_COMP2_OUT TIM_TIM1_ETR_COMP2
+#define TIM_TIM8_ETR_COMP1_OUT TIM_TIM8_ETR_COMP1
+#define TIM_TIM8_ETR_COMP2_OUT TIM_TIM8_ETR_COMP2
+#define TIM_TIM2_ETR_COMP1_OUT TIM_TIM2_ETR_COMP1
+#define TIM_TIM2_ETR_COMP2_OUT TIM_TIM2_ETR_COMP2
+#define TIM_TIM3_ETR_COMP1_OUT TIM_TIM3_ETR_COMP1
+#define TIM_TIM1_TI1_COMP1_OUT TIM_TIM1_TI1_COMP1
+#define TIM_TIM8_TI1_COMP2_OUT TIM_TIM8_TI1_COMP2
+#define TIM_TIM2_TI4_COMP1_OUT TIM_TIM2_TI4_COMP1
+#define TIM_TIM2_TI4_COMP2_OUT TIM_TIM2_TI4_COMP2
+#define TIM_TIM2_TI4_COMP1COMP2_OUT TIM_TIM2_TI4_COMP1_COMP2
+#define TIM_TIM3_TI1_COMP1_OUT TIM_TIM3_TI1_COMP1
+#define TIM_TIM3_TI1_COMP2_OUT TIM_TIM3_TI1_COMP2
+#define TIM_TIM3_TI1_COMP1COMP2_OUT TIM_TIM3_TI1_COMP1_COMP2
+#endif
+
/**
* @}
*/
@@ -1199,6 +1449,30 @@
#define HASH_HMACKeyType_ShortKey HASH_HMAC_KEYTYPE_SHORTKEY
#define HASH_HMACKeyType_LongKey HASH_HMAC_KEYTYPE_LONGKEY
+
+#if defined(STM32L4) || defined(STM32F4) || defined(STM32F7) || defined(STM32H7)
+
+#define HAL_HASH_MD5_Accumulate HAL_HASH_MD5_Accmlt
+#define HAL_HASH_MD5_Accumulate_End HAL_HASH_MD5_Accmlt_End
+#define HAL_HASH_MD5_Accumulate_IT HAL_HASH_MD5_Accmlt_IT
+#define HAL_HASH_MD5_Accumulate_End_IT HAL_HASH_MD5_Accmlt_End_IT
+
+#define HAL_HASH_SHA1_Accumulate HAL_HASH_SHA1_Accmlt
+#define HAL_HASH_SHA1_Accumulate_End HAL_HASH_SHA1_Accmlt_End
+#define HAL_HASH_SHA1_Accumulate_IT HAL_HASH_SHA1_Accmlt_IT
+#define HAL_HASH_SHA1_Accumulate_End_IT HAL_HASH_SHA1_Accmlt_End_IT
+
+#define HAL_HASHEx_SHA224_Accumulate HAL_HASHEx_SHA224_Accmlt
+#define HAL_HASHEx_SHA224_Accumulate_End HAL_HASHEx_SHA224_Accmlt_End
+#define HAL_HASHEx_SHA224_Accumulate_IT HAL_HASHEx_SHA224_Accmlt_IT
+#define HAL_HASHEx_SHA224_Accumulate_End_IT HAL_HASHEx_SHA224_Accmlt_End_IT
+
+#define HAL_HASHEx_SHA256_Accumulate HAL_HASHEx_SHA256_Accmlt
+#define HAL_HASHEx_SHA256_Accumulate_End HAL_HASHEx_SHA256_Accmlt_End
+#define HAL_HASHEx_SHA256_Accumulate_IT HAL_HASHEx_SHA256_Accmlt_IT
+#define HAL_HASHEx_SHA256_Accumulate_End_IT HAL_HASHEx_SHA256_Accmlt_End_IT
+
+#endif /* STM32L4 || STM32F4 || STM32F7 || STM32H7 */
/**
* @}
*/
@@ -1221,6 +1495,13 @@
#endif
#define HAL_ADC_EnableBuffer_Cmd(cmd) (((cmd)==ENABLE) ? HAL_ADCEx_EnableVREFINT() : HAL_ADCEx_DisableVREFINT())
#define HAL_ADC_EnableBufferSensor_Cmd(cmd) (((cmd)==ENABLE) ? HAL_ADCEx_EnableVREFINTTempSensor() : HAL_ADCEx_DisableVREFINTTempSensor())
+#if defined(STM32H7A3xx) || defined(STM32H7B3xx) || defined(STM32H7B0xx) || defined(STM32H7A3xxQ) || defined(STM32H7B3xxQ) || defined(STM32H7B0xxQ)
+#define HAL_EnableSRDomainDBGStopMode HAL_EnableDomain3DBGStopMode
+#define HAL_DisableSRDomainDBGStopMode HAL_DisableDomain3DBGStopMode
+#define HAL_EnableSRDomainDBGStandbyMode HAL_EnableDomain3DBGStandbyMode
+#define HAL_DisableSRDomainDBGStandbyMode HAL_DisableDomain3DBGStandbyMode
+#endif /* STM32H7A3xx || STM32H7B3xx || STM32H7B0xx || STM32H7A3xxQ || STM32H7B3xxQ || STM32H7B0xxQ */
+
/**
* @}
*/
@@ -1250,16 +1531,18 @@
#define HAL_I2CFastModePlusConfig(SYSCFG_I2CFastModePlus, cmd) (((cmd)==ENABLE)? HAL_I2CEx_EnableFastModePlus(SYSCFG_I2CFastModePlus): HAL_I2CEx_DisableFastModePlus(SYSCFG_I2CFastModePlus))
-#if defined(STM32H7) || defined(STM32WB) || defined(STM32G0) || defined(STM32F4) || defined(STM32F7)
+#if defined(STM32H7) || defined(STM32WB) || defined(STM32G0) || defined(STM32F0) || defined(STM32F1) || defined(STM32F2) || defined(STM32F3) || defined(STM32F4) || defined(STM32F7) || defined(STM32L0) || defined(STM32L4) || defined(STM32L5) || defined(STM32G4)
#define HAL_I2C_Master_Sequential_Transmit_IT HAL_I2C_Master_Seq_Transmit_IT
#define HAL_I2C_Master_Sequential_Receive_IT HAL_I2C_Master_Seq_Receive_IT
#define HAL_I2C_Slave_Sequential_Transmit_IT HAL_I2C_Slave_Seq_Transmit_IT
#define HAL_I2C_Slave_Sequential_Receive_IT HAL_I2C_Slave_Seq_Receive_IT
+#endif /* STM32H7 || STM32WB || STM32G0 || STM32F0 || STM32F1 || STM32F2 || STM32F3 || STM32F4 || STM32F7 || STM32L0 || STM32L4 || STM32L5 || STM32G4 */
+#if defined(STM32H7) || defined(STM32WB) || defined(STM32G0) || defined(STM32F4) || defined(STM32F7) || defined(STM32L0) || defined(STM32L4) || defined(STM32L5) || defined(STM32G4)
#define HAL_I2C_Master_Sequential_Transmit_DMA HAL_I2C_Master_Seq_Transmit_DMA
#define HAL_I2C_Master_Sequential_Receive_DMA HAL_I2C_Master_Seq_Receive_DMA
#define HAL_I2C_Slave_Sequential_Transmit_DMA HAL_I2C_Slave_Seq_Transmit_DMA
#define HAL_I2C_Slave_Sequential_Receive_DMA HAL_I2C_Slave_Seq_Receive_DMA
-#endif /* STM32H7 || STM32WB || STM32G0 || STM32F4 || STM32F7 */
+#endif /* STM32H7 || STM32WB || STM32G0 || STM32F4 || STM32F7 || STM32L0 || STM32L4 || STM32L5 || STM32G4 */
#if defined(STM32F4)
#define HAL_FMPI2C_Master_Sequential_Transmit_IT HAL_FMPI2C_Master_Seq_Transmit_IT
@@ -1278,6 +1561,13 @@
/** @defgroup HAL_PWR_Aliased HAL PWR Aliased maintained for legacy purpose
* @{
*/
+
+#if defined(STM32G0)
+#define HAL_PWR_ConfigPVD HAL_PWREx_ConfigPVD
+#define HAL_PWR_EnablePVD HAL_PWREx_EnablePVD
+#define HAL_PWR_DisablePVD HAL_PWREx_DisablePVD
+#define HAL_PWR_PVD_IRQHandler HAL_PWREx_PVD_IRQHandler
+#endif
#define HAL_PWR_PVDConfig HAL_PWR_ConfigPVD
#define HAL_PWR_DisableBkUpReg HAL_PWREx_DisableBkUpReg
#define HAL_PWR_DisableFlashPowerDown HAL_PWREx_DisableFlashPowerDown
@@ -1350,14 +1640,14 @@
#define HAL_TIM_DMAError TIM_DMAError
#define HAL_TIM_DMACaptureCplt TIM_DMACaptureCplt
#define HAL_TIMEx_DMACommutationCplt TIMEx_DMACommutationCplt
-#if defined(STM32H7) || defined(STM32G0) || defined(STM32F7) || defined(STM32F4) || defined(STM32L0)
+#if defined(STM32H7) || defined(STM32G0) || defined(STM32F0) || defined(STM32F1) || defined(STM32F2) || defined(STM32F3) || defined(STM32F4) || defined(STM32F7) || defined(STM32L0) || defined(STM32L4)
#define HAL_TIM_SlaveConfigSynchronization HAL_TIM_SlaveConfigSynchro
#define HAL_TIM_SlaveConfigSynchronization_IT HAL_TIM_SlaveConfigSynchro_IT
#define HAL_TIMEx_CommutationCallback HAL_TIMEx_CommutCallback
#define HAL_TIMEx_ConfigCommutationEvent HAL_TIMEx_ConfigCommutEvent
#define HAL_TIMEx_ConfigCommutationEvent_IT HAL_TIMEx_ConfigCommutEvent_IT
#define HAL_TIMEx_ConfigCommutationEvent_DMA HAL_TIMEx_ConfigCommutEvent_DMA
-#endif /* STM32H7 || STM32G0 || STM32F7 || STM32F4 || STM32L0 */
+#endif /* STM32H7 || STM32G0 || STM32F0 || STM32F1 || STM32F2 || STM32F3 || STM32F4 || STM32F7 || STM32L0 */
/**
* @}
*/
@@ -2476,12 +2766,28 @@
#define __USB_OTG_FS_CLK_DISABLE __HAL_RCC_USB_OTG_FS_CLK_DISABLE
#define __USB_OTG_FS_CLK_ENABLE __HAL_RCC_USB_OTG_FS_CLK_ENABLE
#define __USB_RELEASE_RESET __HAL_RCC_USB_RELEASE_RESET
+
+#if defined(STM32H7)
+#define __HAL_RCC_WWDG_CLK_DISABLE __HAL_RCC_WWDG1_CLK_DISABLE
+#define __HAL_RCC_WWDG_CLK_ENABLE __HAL_RCC_WWDG1_CLK_ENABLE
+#define __HAL_RCC_WWDG_CLK_SLEEP_DISABLE __HAL_RCC_WWDG1_CLK_SLEEP_DISABLE
+#define __HAL_RCC_WWDG_CLK_SLEEP_ENABLE __HAL_RCC_WWDG1_CLK_SLEEP_ENABLE
+
+#define __HAL_RCC_WWDG_FORCE_RESET ((void)0U) /* Not available on the STM32H7*/
+#define __HAL_RCC_WWDG_RELEASE_RESET ((void)0U) /* Not available on the STM32H7*/
+
+
+#define __HAL_RCC_WWDG_IS_CLK_ENABLED __HAL_RCC_WWDG1_IS_CLK_ENABLED
+#define __HAL_RCC_WWDG_IS_CLK_DISABLED __HAL_RCC_WWDG1_IS_CLK_DISABLED
+#endif
+
#define __WWDG_CLK_DISABLE __HAL_RCC_WWDG_CLK_DISABLE
#define __WWDG_CLK_ENABLE __HAL_RCC_WWDG_CLK_ENABLE
#define __WWDG_CLK_SLEEP_DISABLE __HAL_RCC_WWDG_CLK_SLEEP_DISABLE
#define __WWDG_CLK_SLEEP_ENABLE __HAL_RCC_WWDG_CLK_SLEEP_ENABLE
#define __WWDG_FORCE_RESET __HAL_RCC_WWDG_FORCE_RESET
#define __WWDG_RELEASE_RESET __HAL_RCC_WWDG_RELEASE_RESET
+
#define __TIM21_CLK_ENABLE __HAL_RCC_TIM21_CLK_ENABLE
#define __TIM21_CLK_DISABLE __HAL_RCC_TIM21_CLK_DISABLE
#define __TIM21_FORCE_RESET __HAL_RCC_TIM21_FORCE_RESET
@@ -2814,6 +3120,15 @@
#define __WWDG_IS_CLK_ENABLED __HAL_RCC_WWDG_IS_CLK_ENABLED
#define __WWDG_IS_CLK_DISABLED __HAL_RCC_WWDG_IS_CLK_DISABLED
+#if defined(STM32L1)
+#define __HAL_RCC_CRYP_CLK_DISABLE __HAL_RCC_AES_CLK_DISABLE
+#define __HAL_RCC_CRYP_CLK_ENABLE __HAL_RCC_AES_CLK_ENABLE
+#define __HAL_RCC_CRYP_CLK_SLEEP_DISABLE __HAL_RCC_AES_CLK_SLEEP_DISABLE
+#define __HAL_RCC_CRYP_CLK_SLEEP_ENABLE __HAL_RCC_AES_CLK_SLEEP_ENABLE
+#define __HAL_RCC_CRYP_FORCE_RESET __HAL_RCC_AES_FORCE_RESET
+#define __HAL_RCC_CRYP_RELEASE_RESET __HAL_RCC_AES_RELEASE_RESET
+#endif /* STM32L1 */
+
#if defined(STM32F4)
#define __HAL_RCC_SDMMC1_FORCE_RESET __HAL_RCC_SDIO_FORCE_RESET
#define __HAL_RCC_SDMMC1_RELEASE_RESET __HAL_RCC_SDIO_RELEASE_RESET
@@ -2930,7 +3245,7 @@
#if defined(STM32L4)
#define RCC_RTCCLKSOURCE_NO_CLK RCC_RTCCLKSOURCE_NONE
-#elif defined(STM32WB) || defined(STM32G0)
+#elif defined(STM32WB) || defined(STM32G0) || defined(STM32G4) || defined(STM32L5)
#else
#define RCC_RTCCLKSOURCE_NONE RCC_RTCCLKSOURCE_NO_CLK
#endif
@@ -3058,7 +3373,7 @@
/** @defgroup HAL_RTC_Aliased_Macros HAL RTC Aliased Macros maintained for legacy purpose
* @{
*/
-#if defined (STM32G0) || defined (STM32L412xx) || defined (STM32L422xx) || defined (STM32L4P5xx) || defined (STM32L4Q5xx)
+#if defined (STM32G0) || defined (STM32L5) || defined (STM32L412xx) || defined (STM32L422xx) || defined (STM32L4P5xx) || defined (STM32L4Q5xx) || defined (STM32G4)
#else
#define __HAL_RTC_CLEAR_FLAG __HAL_RTC_EXTI_CLEAR_FLAG
#endif
@@ -3174,14 +3489,14 @@
#define SDIO_IRQHandler SDMMC1_IRQHandler
#endif
-#if defined(STM32F7) || defined(STM32F4) || defined(STM32F2)
+#if defined(STM32F7) || defined(STM32F4) || defined(STM32F2) || defined(STM32L4) || defined(STM32H7)
#define HAL_SD_CardCIDTypedef HAL_SD_CardCIDTypeDef
#define HAL_SD_CardCSDTypedef HAL_SD_CardCSDTypeDef
#define HAL_SD_CardStatusTypedef HAL_SD_CardStatusTypeDef
#define HAL_SD_CardStateTypedef HAL_SD_CardStateTypeDef
#endif
-#if defined(STM32H7)
+#if defined(STM32H7) || defined(STM32L5)
#define HAL_MMCEx_Read_DMADoubleBuffer0CpltCallback HAL_MMCEx_Read_DMADoubleBuf0CpltCallback
#define HAL_MMCEx_Read_DMADoubleBuffer1CpltCallback HAL_MMCEx_Read_DMADoubleBuf1CpltCallback
#define HAL_MMCEx_Write_DMADoubleBuffer0CpltCallback HAL_MMCEx_Write_DMADoubleBuf0CpltCallback
@@ -3421,18 +3736,28 @@
/** @defgroup HAL_HRTIM_Aliased_Functions HAL HRTIM Aliased Functions maintained for legacy purpose
* @{
*/
-#if defined (STM32H7) || defined (STM32F3)
-#define HAL_HRTIM_WaveformCounterStart_IT HAL_HRTIM_WaveformCountStart_IT
-#define HAL_HRTIM_WaveformCounterStart_DMA HAL_HRTIM_WaveformCountStart_DMA
-#define HAL_HRTIM_WaveformCounterStart HAL_HRTIM_WaveformCountStart
-#define HAL_HRTIM_WaveformCounterStop_IT HAL_HRTIM_WaveformCountStop_IT
-#define HAL_HRTIM_WaveformCounterStop_DMA HAL_HRTIM_WaveformCountStop_DMA
-#define HAL_HRTIM_WaveformCounterStop HAL_HRTIM_WaveformCountStop
+#if defined (STM32H7) || defined (STM32G4) || defined (STM32F3)
+#define HAL_HRTIM_WaveformCounterStart_IT HAL_HRTIM_WaveformCountStart_IT
+#define HAL_HRTIM_WaveformCounterStart_DMA HAL_HRTIM_WaveformCountStart_DMA
+#define HAL_HRTIM_WaveformCounterStart HAL_HRTIM_WaveformCountStart
+#define HAL_HRTIM_WaveformCounterStop_IT HAL_HRTIM_WaveformCountStop_IT
+#define HAL_HRTIM_WaveformCounterStop_DMA HAL_HRTIM_WaveformCountStop_DMA
+#define HAL_HRTIM_WaveformCounterStop HAL_HRTIM_WaveformCountStop
#endif
/**
* @}
*/
+/** @defgroup HAL_QSPI_Aliased_Macros HAL QSPI Aliased Macros maintained for legacy purpose
+ * @{
+ */
+#if defined (STM32L4) || defined (STM32F4) || defined (STM32F7)
+#define HAL_QPSI_TIMEOUT_DEFAULT_VALUE HAL_QSPI_TIMEOUT_DEFAULT_VALUE
+#endif /* STM32L4 || STM32F4 || STM32F7 */
+/**
+ * @}
+ */
+
/** @defgroup HAL_PPP_Aliased_Macros HAL PPP Aliased Macros maintained for legacy purpose
* @{
*/
diff --git a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_Keil/Prog/lib/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_exti.h b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_Keil/Prog/lib/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_exti.h
index bf82a38e..c9f137c1 100644
--- a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_Keil/Prog/lib/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_exti.h
+++ b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_Keil/Prog/lib/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_exti.h
@@ -18,8 +18,8 @@
*/
/* Define to prevent recursive inclusion -------------------------------------*/
-#ifndef __STM32F7xx_HAL_EXTI_H
-#define __STM32F7xx_HAL_EXTI_H
+#ifndef STM32F7xx_HAL_EXTI_H
+#define STM32F7xx_HAL_EXTI_H
#ifdef __cplusplus
extern "C" {
@@ -38,14 +38,13 @@ extern "C" {
*/
/* Exported types ------------------------------------------------------------*/
+
/** @defgroup EXTI_Exported_Types EXTI Exported Types
* @{
*/
typedef enum
{
- HAL_EXTI_COMMON_CB_ID = 0x00U,
- HAL_EXTI_RISING_CB_ID = 0x01U,
- HAL_EXTI_FALLING_CB_ID = 0x02U,
+ HAL_EXTI_COMMON_CB_ID = 0x00U
} EXTI_CallbackIDTypeDef;
/**
@@ -68,6 +67,9 @@ typedef struct
This parameter can be a combination of @ref EXTI_Mode */
uint32_t Trigger; /*!< The Exti Trigger to be configured. This parameter
can be a value of @ref EXTI_Trigger */
+ uint32_t GPIOSel; /*!< The Exti GPIO multiplexer selection to be configured.
+ This parameter is only possible for line 0 to 15. It
+ can be a value of @ref EXTI_GPIOSel */
} EXTI_ConfigTypeDef;
/**
@@ -82,48 +84,36 @@ typedef struct
/** @defgroup EXTI_Line EXTI Line
* @{
*/
-#define EXTI_LINE_0 EXTI_IMR_IM0 /*!< External interrupt line 0 */
-#define EXTI_LINE_1 EXTI_IMR_IM1 /*!< External interrupt line 1 */
-#define EXTI_LINE_2 EXTI_IMR_IM2 /*!< External interrupt line 2 */
-#define EXTI_LINE_3 EXTI_IMR_IM3 /*!< External interrupt line 3 */
-#define EXTI_LINE_4 EXTI_IMR_IM4 /*!< External interrupt line 4 */
-#define EXTI_LINE_5 EXTI_IMR_IM5 /*!< External interrupt line 5 */
-#define EXTI_LINE_6 EXTI_IMR_IM6 /*!< External interrupt line 6 */
-#define EXTI_LINE_7 EXTI_IMR_IM7 /*!< External interrupt line 7 */
-#define EXTI_LINE_8 EXTI_IMR_IM8 /*!< External interrupt line 8 */
-#define EXTI_LINE_9 EXTI_IMR_IM9 /*!< External interrupt line 9 */
-#define EXTI_LINE_10 EXTI_IMR_IM10 /*!< External interrupt line 10 */
-#define EXTI_LINE_11 EXTI_IMR_IM11 /*!< External interrupt line 11 */
-#define EXTI_LINE_12 EXTI_IMR_IM12 /*!< External interrupt line 12 */
-#define EXTI_LINE_13 EXTI_IMR_IM13 /*!< External interrupt line 13 */
-#define EXTI_LINE_14 EXTI_IMR_IM14 /*!< External interrupt line 14 */
-#define EXTI_LINE_15 EXTI_IMR_IM15 /*!< External interrupt line 15 */
-#if defined(EXTI_IMR_IM16)
-#define EXTI_LINE_16 EXTI_IMR_IM16 /*!< External interrupt line 16 Connected to the PVD Output */
-#endif /* EXTI_IMR_IM16 */
-#if defined(EXTI_IMR_IM17)
-#define EXTI_LINE_17 EXTI_IMR_IM17 /*!< External interrupt line 17 Connected to the RTC Alarm event */
-#endif /* EXTI_IMR_IM17 */
-#if defined(EXTI_IMR_IM18)
-#define EXTI_LINE_18 EXTI_IMR_IM18 /*!< External interrupt line 18 Connected to the USB OTG FS Wakeup from suspend event */
-#endif /* EXTI_IMR_IM18 */
-#if defined(EXTI_IMR_IM19)
-#define EXTI_LINE_19 EXTI_IMR_IM19 /*!< External interrupt line 19 Connected to the Ethernet Wakeup event */
-#endif /* EXTI_IMR_IM19 */
-#if defined(EXTI_IMR_IM20)
-#define EXTI_LINE_20 EXTI_IMR_IM20 /*!< External interrupt line 20 Connected to the USB OTG HS (configured in FS) Wakeup event */
-#endif /* EXTI_IMR_IM20 */
-#if defined(EXTI_IMR_IM21)
-#define EXTI_LINE_21 EXTI_IMR_IM21 /*!< External interrupt line 21 Connected to the RTC Tamper and Time Stamp events */
-#endif /* EXTI_IMR_IM21 */
-#if defined(EXTI_IMR_IM22)
-#define EXTI_LINE_22 EXTI_IMR_IM22 /*!< External interrupt line 22 Connected to the RTC Wakeup event */
-#endif /* EXTI_IMR_IM22 */
-#if defined(EXTI_IMR_IM23)
-#define EXTI_LINE_23 EXTI_IMR_IM23 /*!< External interrupt line 23 Connected to the LPTIM Wakeup event */
-#endif /* EXTI_IMR_IM23 */
+#define EXTI_LINE_0 (EXTI_GPIO | 0x00u) /*!< External interrupt line 0 */
+#define EXTI_LINE_1 (EXTI_GPIO | 0x01u) /*!< External interrupt line 1 */
+#define EXTI_LINE_2 (EXTI_GPIO | 0x02u) /*!< External interrupt line 2 */
+#define EXTI_LINE_3 (EXTI_GPIO | 0x03u) /*!< External interrupt line 3 */
+#define EXTI_LINE_4 (EXTI_GPIO | 0x04u) /*!< External interrupt line 4 */
+#define EXTI_LINE_5 (EXTI_GPIO | 0x05u) /*!< External interrupt line 5 */
+#define EXTI_LINE_6 (EXTI_GPIO | 0x06u) /*!< External interrupt line 6 */
+#define EXTI_LINE_7 (EXTI_GPIO | 0x07u) /*!< External interrupt line 7 */
+#define EXTI_LINE_8 (EXTI_GPIO | 0x08u) /*!< External interrupt line 8 */
+#define EXTI_LINE_9 (EXTI_GPIO | 0x09u) /*!< External interrupt line 9 */
+#define EXTI_LINE_10 (EXTI_GPIO | 0x0Au) /*!< External interrupt line 10 */
+#define EXTI_LINE_11 (EXTI_GPIO | 0x0Bu) /*!< External interrupt line 11 */
+#define EXTI_LINE_12 (EXTI_GPIO | 0x0Cu) /*!< External interrupt line 12 */
+#define EXTI_LINE_13 (EXTI_GPIO | 0x0Du) /*!< External interrupt line 13 */
+#define EXTI_LINE_14 (EXTI_GPIO | 0x0Eu) /*!< External interrupt line 14 */
+#define EXTI_LINE_15 (EXTI_GPIO | 0x0Fu) /*!< External interrupt line 15 */
+#define EXTI_LINE_16 (EXTI_CONFIG | 0x10u) /*!< External interrupt line 16 Connected to the PVD Output */
+#define EXTI_LINE_17 (EXTI_CONFIG | 0x11u) /*!< External interrupt line 17 Connected to the RTC Alarm event */
+#define EXTI_LINE_18 (EXTI_CONFIG | 0x12u) /*!< External interrupt line 18 Connected to the USB OTG FS Wakeup from suspend event */
+#if defined(ETH)
+#define EXTI_LINE_19 (EXTI_CONFIG | 0x13u) /*!< External interrupt line 19 Connected to the Ethernet Wakeup event */
+#else
+#define EXTI_LINE_19 (EXTI_RESERVED | 0x13u) /*!< No interrupt supported in this line */
+#endif /* ETH */
+#define EXTI_LINE_20 (EXTI_CONFIG | 0x14u) /*!< External interrupt line 20 Connected to the USB OTG HS (configured in FS) Wakeup event */
+#define EXTI_LINE_21 (EXTI_CONFIG | 0x15u) /*!< External interrupt line 21 Connected to the RTC Tamper and Time Stamp events */
+#define EXTI_LINE_22 (EXTI_CONFIG | 0x16u) /*!< External interrupt line 22 Connected to the RTC Wakeup event */
+#define EXTI_LINE_23 (EXTI_CONFIG | 0x17u) /*!< External interrupt line 23 Connected to the LPTIM Wakeup event */
#if defined(EXTI_IMR_IM24)
-#define EXTI_LINE_24 EXTI_IMR_IM24 /*!< External interrupt line 24 Connected to the MDIO Slave global Interrupt Wakeup event */
+#define EXTI_LINE_24 (EXTI_CONFIG | 0x18u) /*!< External interrupt line 24 Connected to the MDIO Slave global Interrupt Wakeup event */
#endif /* EXTI_IMR_IM24 */
/**
* @}
@@ -142,6 +132,7 @@ typedef struct
/** @defgroup EXTI_Trigger EXTI Trigger
* @{
*/
+
#define EXTI_TRIGGER_NONE 0x00000000u
#define EXTI_TRIGGER_RISING 0x00000001u
#define EXTI_TRIGGER_FALLING 0x00000002u
@@ -150,6 +141,24 @@ typedef struct
* @}
*/
+/** @defgroup EXTI_GPIOSel EXTI GPIOSel
+ * @brief
+ * @{
+ */
+#define EXTI_GPIOA 0x00000000u
+#define EXTI_GPIOB 0x00000001u
+#define EXTI_GPIOC 0x00000002u
+#define EXTI_GPIOD 0x00000003u
+#define EXTI_GPIOE 0x00000004u
+#define EXTI_GPIOF 0x00000005u
+#define EXTI_GPIOG 0x00000006u
+#define EXTI_GPIOH 0x00000007u
+#define EXTI_GPIOI 0x00000008u
+#define EXTI_GPIOJ 0x00000009u
+#if defined (GPIOK)
+#define EXTI_GPIOK 0x0000000Au
+#endif /* GPIOK */
+
/**
* @}
*/
@@ -167,6 +176,20 @@ typedef struct
/** @defgroup EXTI_Private_Constants EXTI Private Constants
* @{
*/
+/**
+ * @brief EXTI Line property definition
+ */
+#define EXTI_PROPERTY_SHIFT 24u
+#define EXTI_CONFIG (0x02uL << EXTI_PROPERTY_SHIFT)
+#define EXTI_GPIO ((0x04uL << EXTI_PROPERTY_SHIFT) | EXTI_CONFIG)
+#define EXTI_RESERVED (0x08uL << EXTI_PROPERTY_SHIFT)
+#define EXTI_PROPERTY_MASK (EXTI_CONFIG | EXTI_GPIO)
+
+/**
+ * @brief EXTI bit usage
+ */
+#define EXTI_PIN_MASK 0x0000001Fu
+
/**
* @brief EXTI Mask for interrupt & event mode
*/
@@ -175,12 +198,17 @@ typedef struct
/**
* @brief EXTI Mask for trigger possibilities
*/
-#define EXTI_TRIGGER_MASK (EXTI_TRIGGER_RISING | EXTI_TRIGGER_FALLING | EXTI_TRIGGER_RISING_FALLING)
+#define EXTI_TRIGGER_MASK (EXTI_TRIGGER_RISING | EXTI_TRIGGER_FALLING)
/**
* @brief EXTI Line number
*/
+#if defined(EXTI_IMR_IM24)
#define EXTI_LINE_NB 25u
+#else
+#define EXTI_LINE_NB 24u
+#endif /* EXTI_IMR_IM24 */
+
/**
* @}
@@ -190,16 +218,47 @@ typedef struct
/** @defgroup EXTI_Private_Macros EXTI Private Macros
* @{
*/
-#define IS_EXTI_LINE(__LINE__) ((((__LINE__) & ~EXTI_IMR_IM) == 0x00U) && (__LINE__))
+#define IS_EXTI_LINE(__LINE__) ((((__LINE__) & ~(EXTI_PROPERTY_MASK | EXTI_PIN_MASK)) == 0x00u) && \
+ ((((__LINE__) & EXTI_PROPERTY_MASK) == EXTI_CONFIG) || \
+ (((__LINE__) & EXTI_PROPERTY_MASK) == EXTI_GPIO)) && \
+ (((__LINE__) & EXTI_PIN_MASK) < EXTI_LINE_NB))
-#define IS_EXTI_MODE(__LINE__) ((((__LINE__) & ~EXTI_MODE_MASK) == 0x00U))
+#define IS_EXTI_MODE(__LINE__) ((((__LINE__) & EXTI_MODE_MASK) != 0x00u) && \
+ (((__LINE__) & ~EXTI_MODE_MASK) == 0x00u))
-#define IS_EXTI_TRIGGER(__LINE__) (((__LINE__) & ~EXTI_TRIGGER_MASK) == 0x00U)
+#define IS_EXTI_TRIGGER(__LINE__) (((__LINE__) & ~EXTI_TRIGGER_MASK) == 0x00u)
#define IS_EXTI_PENDING_EDGE(__LINE__) (((__LINE__) == EXTI_TRIGGER_FALLING) || \
((__LINE__) == EXTI_TRIGGER_RISING) || \
((__LINE__) == EXTI_TRIGGER_RISING_FALLING))
+#define IS_EXTI_CONFIG_LINE(__LINE__) (((__LINE__) & EXTI_CONFIG) != 0x00u)
+
+#if defined (GPIOK)
+#define IS_EXTI_GPIO_PORT(__PORT__) (((__PORT__) == EXTI_GPIOA) || \
+ ((__PORT__) == EXTI_GPIOB) || \
+ ((__PORT__) == EXTI_GPIOC) || \
+ ((__PORT__) == EXTI_GPIOD) || \
+ ((__PORT__) == EXTI_GPIOE) || \
+ ((__PORT__) == EXTI_GPIOF) || \
+ ((__PORT__) == EXTI_GPIOG) || \
+ ((__PORT__) == EXTI_GPIOH) || \
+ ((__PORT__) == EXTI_GPIOI) || \
+ ((__PORT__) == EXTI_GPIOJ) || \
+ ((__PORT__) == EXTI_GPIOK))
+#else
+#define IS_EXTI_GPIO_PORT(__PORT__) (((__PORT__) == EXTI_GPIOA) || \
+ ((__PORT__) == EXTI_GPIOB) || \
+ ((__PORT__) == EXTI_GPIOC) || \
+ ((__PORT__) == EXTI_GPIOD) || \
+ ((__PORT__) == EXTI_GPIOE) || \
+ ((__PORT__) == EXTI_GPIOF) || \
+ ((__PORT__) == EXTI_GPIOG) || \
+ ((__PORT__) == EXTI_GPIOH) || \
+ ((__PORT__) == EXTI_GPIOI) || \
+ ((__PORT__) == EXTI_GPIOJ))
+#endif /* GPIOK */
+
#define IS_EXTI_GPIO_PIN(__PIN__) ((__PIN__) < 16U)
/**
* @}
@@ -255,6 +314,6 @@ void HAL_EXTI_GenerateSWI(EXTI_HandleTypeDef *hexti);
}
#endif
-#endif /* __STM32F7xx_HAL_EXTI_H */
+#endif /* STM32F7xx_HAL_EXTI_H */
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff --git a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_Keil/Prog/lib/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_gpio.h b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_Keil/Prog/lib/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_gpio.h
index 3d9de6e2..08e0acb2 100644
--- a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_Keil/Prog/lib/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_gpio.h
+++ b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_Keil/Prog/lib/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_gpio.h
@@ -262,7 +262,7 @@ void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin);
* @{
*/
#define IS_GPIO_PIN_ACTION(ACTION) (((ACTION) == GPIO_PIN_RESET) || ((ACTION) == GPIO_PIN_SET))
-#define IS_GPIO_PIN(__PIN__) ((((__PIN__) & GPIO_PIN_MASK) != (uint32_t)0x00))
+#define IS_GPIO_PIN(__PIN__) ((((uint32_t)(__PIN__) & GPIO_PIN_MASK) != 0x00U))
#define IS_GPIO_MODE(MODE) (((MODE) == GPIO_MODE_INPUT) ||\
((MODE) == GPIO_MODE_OUTPUT_PP) ||\
((MODE) == GPIO_MODE_OUTPUT_OD) ||\
diff --git a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_Keil/Prog/lib/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_i2c_ex.h b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_Keil/Prog/lib/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_i2c_ex.h
index d5d75314..83037894 100644
--- a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_Keil/Prog/lib/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_i2c_ex.h
+++ b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_Keil/Prog/lib/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_i2c_ex.h
@@ -167,6 +167,9 @@ void HAL_I2CEx_DisableFastModePlus(uint32_t ConfigFastModePlus);
(((__CONFIG__) & I2C_FASTMODEPLUS_PB9) == I2C_FASTMODEPLUS_PB9) || \
(((__CONFIG__) & I2C_FASTMODEPLUS_I2C1) == I2C_FASTMODEPLUS_I2C1))
#endif /* SYSCFG_PMC_I2C1_FMP && SYSCFG_PMC_I2C2_FMP && SYSCFG_PMC_I2C3_FMP && SYSCFG_PMC_I2C4_FMP */
+
+
+
/**
* @}
*/
diff --git a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_Keil/Prog/lib/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_tim.h b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_Keil/Prog/lib/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_tim.h
index 6a29ae50..ab067a59 100644
--- a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_Keil/Prog/lib/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_tim.h
+++ b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_Keil/Prog/lib/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_tim.h
@@ -167,7 +167,7 @@ typedef struct
This parameter can be a value of @ref TIM_Encoder_Mode */
uint32_t IC1Polarity; /*!< Specifies the active edge of the input signal.
- This parameter can be a value of @ref TIM_Input_Capture_Polarity */
+ This parameter can be a value of @ref TIM_Encoder_Input_Polarity */
uint32_t IC1Selection; /*!< Specifies the input.
This parameter can be a value of @ref TIM_Input_Capture_Selection */
@@ -179,7 +179,7 @@ typedef struct
This parameter can be a number between Min_Data = 0x0 and Max_Data = 0xF */
uint32_t IC2Polarity; /*!< Specifies the active edge of the input signal.
- This parameter can be a value of @ref TIM_Input_Capture_Polarity */
+ This parameter can be a value of @ref TIM_Encoder_Input_Polarity */
uint32_t IC2Selection; /*!< Specifies the input.
This parameter can be a value of @ref TIM_Input_Capture_Selection */
@@ -235,7 +235,12 @@ typedef struct
uint32_t MasterOutputTrigger2; /*!< Trigger output2 (TRGO2) selection
This parameter can be a value of @ref TIM_Master_Mode_Selection_2 */
uint32_t MasterSlaveMode; /*!< Master/slave mode selection
- This parameter can be a value of @ref TIM_Master_Slave_Mode */
+ This parameter can be a value of @ref TIM_Master_Slave_Mode
+ @note When the Master/slave mode is enabled, the effect of
+ an event on the trigger input (TRGI) is delayed to allow a
+ perfect synchronization between the current timer and its
+ slaves (through TRGO). It is not mandatory in case of timer
+ synchronization mode. */
} TIM_MasterConfigTypeDef;
/**
@@ -518,6 +523,15 @@ typedef void (*pTIM_CallbackTypeDef)(TIM_HandleTypeDef *htim); /*!< pointer to
* @}
*/
+/** @defgroup TIM_Update_Interrupt_Flag_Remap TIM Update Interrupt Flag Remap
+ * @{
+ */
+#define TIM_UIFREMAP_DISABLE 0x00000000U /*!< Update interrupt flag remap disabled */
+#define TIM_UIFREMAP_ENABLE TIM_CR1_UIFREMAP /*!< Update interrupt flag remap enabled */
+/**
+ * @}
+ */
+
/** @defgroup TIM_ClockDivision TIM Clock Division
* @{
*/
@@ -611,6 +625,15 @@ typedef void (*pTIM_CallbackTypeDef)(TIM_HandleTypeDef *htim); /*!< pointer to
* @}
*/
+/** @defgroup TIM_Encoder_Input_Polarity TIM Encoder Input Polarity
+ * @{
+ */
+#define TIM_ENCODERINPUTPOLARITY_RISING TIM_INPUTCHANNELPOLARITY_RISING /*!< Encoder input with rising edge polarity */
+#define TIM_ENCODERINPUTPOLARITY_FALLING TIM_INPUTCHANNELPOLARITY_FALLING /*!< Encoder input with falling edge polarity */
+/**
+ * @}
+ */
+
/** @defgroup TIM_Input_Capture_Selection TIM Input Capture Selection
* @{
*/
@@ -1119,15 +1142,15 @@ typedef void (*pTIM_CallbackTypeDef)(TIM_HandleTypeDef *htim); /*!< pointer to
* @retval None
*/
#define __HAL_TIM_DISABLE(__HANDLE__) \
- do { \
- if (((__HANDLE__)->Instance->CCER & TIM_CCER_CCxE_MASK) == 0UL) \
- { \
- if(((__HANDLE__)->Instance->CCER & TIM_CCER_CCxNE_MASK) == 0UL) \
- { \
- (__HANDLE__)->Instance->CR1 &= ~(TIM_CR1_CEN); \
- } \
- } \
- } while(0)
+ do { \
+ if (((__HANDLE__)->Instance->CCER & TIM_CCER_CCxE_MASK) == 0UL) \
+ { \
+ if(((__HANDLE__)->Instance->CCER & TIM_CCER_CCxNE_MASK) == 0UL) \
+ { \
+ (__HANDLE__)->Instance->CR1 &= ~(TIM_CR1_CEN); \
+ } \
+ } \
+ } while(0)
/**
* @brief Disable the TIM main Output.
@@ -1136,15 +1159,15 @@ typedef void (*pTIM_CallbackTypeDef)(TIM_HandleTypeDef *htim); /*!< pointer to
* @note The Main Output Enable of a timer instance is disabled only if all the CCx and CCxN channels have been disabled
*/
#define __HAL_TIM_MOE_DISABLE(__HANDLE__) \
- do { \
- if (((__HANDLE__)->Instance->CCER & TIM_CCER_CCxE_MASK) == 0UL) \
- { \
- if(((__HANDLE__)->Instance->CCER & TIM_CCER_CCxNE_MASK) == 0UL) \
- { \
- (__HANDLE__)->Instance->BDTR &= ~(TIM_BDTR_MOE); \
- } \
- } \
- } while(0)
+ do { \
+ if (((__HANDLE__)->Instance->CCER & TIM_CCER_CCxE_MASK) == 0UL) \
+ { \
+ if(((__HANDLE__)->Instance->CCER & TIM_CCER_CCxNE_MASK) == 0UL) \
+ { \
+ (__HANDLE__)->Instance->BDTR &= ~(TIM_BDTR_MOE); \
+ } \
+ } \
+ } while(0)
/**
* @brief Disable the TIM main Output.
@@ -1279,7 +1302,8 @@ typedef void (*pTIM_CallbackTypeDef)(TIM_HandleTypeDef *htim); /*!< pointer to
* @arg TIM_IT_BREAK: Break interrupt
* @retval The state of TIM_IT (SET or RESET).
*/
-#define __HAL_TIM_GET_IT_SOURCE(__HANDLE__, __INTERRUPT__) ((((__HANDLE__)->Instance->DIER & (__INTERRUPT__)) == (__INTERRUPT__)) ? SET : RESET)
+#define __HAL_TIM_GET_IT_SOURCE(__HANDLE__, __INTERRUPT__) ((((__HANDLE__)->Instance->DIER & (__INTERRUPT__)) \
+ == (__INTERRUPT__)) ? SET : RESET)
/** @brief Clear the TIM interrupt pending bits.
* @param __HANDLE__ TIM handle
@@ -1297,6 +1321,31 @@ typedef void (*pTIM_CallbackTypeDef)(TIM_HandleTypeDef *htim); /*!< pointer to
*/
#define __HAL_TIM_CLEAR_IT(__HANDLE__, __INTERRUPT__) ((__HANDLE__)->Instance->SR = ~(__INTERRUPT__))
+/**
+ * @brief Force a continuous copy of the update interrupt flag (UIF) into the timer counter register (bit 31).
+ * @note This allows both the counter value and a potential roll-over condition signalled by the UIFCPY flag to be read in an atomic way.
+ * @param __HANDLE__ TIM handle.
+ * @retval None
+mode.
+ */
+#define __HAL_TIM_UIFREMAP_ENABLE(__HANDLE__) (((__HANDLE__)->Instance->CR1 |= TIM_CR1_UIFREMAP))
+
+/**
+ * @brief Disable update interrupt flag (UIF) remapping.
+ * @param __HANDLE__ TIM handle.
+ * @retval None
+mode.
+ */
+#define __HAL_TIM_UIFREMAP_DISABLE(__HANDLE__) (((__HANDLE__)->Instance->CR1 &= ~TIM_CR1_UIFREMAP))
+
+/**
+ * @brief Get update interrupt flag (UIF) copy status.
+ * @param __COUNTER__ Counter value.
+ * @retval The state of UIFCPY (TRUE or FALSE).
+mode.
+ */
+#define __HAL_TIM_GET_UIFCPY(__COUNTER__) (((__COUNTER__) & (TIM_CNT_UIFCPY)) == (TIM_CNT_UIFCPY))
+
/**
* @brief Indicates whether or not the TIM Counter is used as downcounter.
* @param __HANDLE__ TIM handle.
@@ -1316,6 +1365,8 @@ mode.
/**
* @brief Set the TIM Counter Register value on runtime.
+ * Note Please check if the bit 31 of CNT register is used as UIF copy or not, this may affect the counter range in case of 32 bits counter TIM instance.
+ * Bit 31 of CNT can be enabled/disabled using __HAL_TIM_UIFREMAP_ENABLE()/__HAL_TIM_UIFREMAP_DISABLE() macros.
* @param __HANDLE__ TIM handle.
* @param __COUNTER__ specifies the Counter register new value.
* @retval None
@@ -1327,8 +1378,7 @@ mode.
* @param __HANDLE__ TIM handle.
* @retval 16-bit or 32-bit value of the timer counter register (TIMx_CNT)
*/
-#define __HAL_TIM_GET_COUNTER(__HANDLE__) \
- ((__HANDLE__)->Instance->CNT)
+#define __HAL_TIM_GET_COUNTER(__HANDLE__) ((__HANDLE__)->Instance->CNT)
/**
* @brief Set the TIM Autoreload Register value on runtime without calling another time any Init function.
@@ -1337,18 +1387,17 @@ mode.
* @retval None
*/
#define __HAL_TIM_SET_AUTORELOAD(__HANDLE__, __AUTORELOAD__) \
- do{ \
- (__HANDLE__)->Instance->ARR = (__AUTORELOAD__); \
- (__HANDLE__)->Init.Period = (__AUTORELOAD__); \
- } while(0)
+ do{ \
+ (__HANDLE__)->Instance->ARR = (__AUTORELOAD__); \
+ (__HANDLE__)->Init.Period = (__AUTORELOAD__); \
+ } while(0)
/**
* @brief Get the TIM Autoreload Register value on runtime.
* @param __HANDLE__ TIM handle.
* @retval 16-bit or 32-bit value of the timer auto-reload register(TIMx_ARR)
*/
-#define __HAL_TIM_GET_AUTORELOAD(__HANDLE__) \
- ((__HANDLE__)->Instance->ARR)
+#define __HAL_TIM_GET_AUTORELOAD(__HANDLE__) ((__HANDLE__)->Instance->ARR)
/**
* @brief Set the TIM Clock Division value on runtime without calling another time any Init function.
@@ -1361,11 +1410,11 @@ mode.
* @retval None
*/
#define __HAL_TIM_SET_CLOCKDIVISION(__HANDLE__, __CKD__) \
- do{ \
- (__HANDLE__)->Instance->CR1 &= (~TIM_CR1_CKD); \
- (__HANDLE__)->Instance->CR1 |= (__CKD__); \
- (__HANDLE__)->Init.ClockDivision = (__CKD__); \
- } while(0)
+ do{ \
+ (__HANDLE__)->Instance->CR1 &= (~TIM_CR1_CKD); \
+ (__HANDLE__)->Instance->CR1 |= (__CKD__); \
+ (__HANDLE__)->Init.ClockDivision = (__CKD__); \
+ } while(0)
/**
* @brief Get the TIM Clock Division value on runtime.
@@ -1375,8 +1424,7 @@ mode.
* @arg TIM_CLOCKDIVISION_DIV2: tDTS=2*tCK_INT
* @arg TIM_CLOCKDIVISION_DIV4: tDTS=4*tCK_INT
*/
-#define __HAL_TIM_GET_CLOCKDIVISION(__HANDLE__) \
- ((__HANDLE__)->Instance->CR1 & TIM_CR1_CKD)
+#define __HAL_TIM_GET_CLOCKDIVISION(__HANDLE__) ((__HANDLE__)->Instance->CR1 & TIM_CR1_CKD)
/**
* @brief Set the TIM Input Capture prescaler on runtime without calling another time HAL_TIM_IC_ConfigChannel() function.
@@ -1396,10 +1444,10 @@ mode.
* @retval None
*/
#define __HAL_TIM_SET_ICPRESCALER(__HANDLE__, __CHANNEL__, __ICPSC__) \
- do{ \
- TIM_RESET_ICPRESCALERVALUE((__HANDLE__), (__CHANNEL__)); \
- TIM_SET_ICPRESCALERVALUE((__HANDLE__), (__CHANNEL__), (__ICPSC__)); \
- } while(0)
+ do{ \
+ TIM_RESET_ICPRESCALERVALUE((__HANDLE__), (__CHANNEL__)); \
+ TIM_SET_ICPRESCALERVALUE((__HANDLE__), (__CHANNEL__), (__ICPSC__)); \
+ } while(0)
/**
* @brief Get the TIM Input Capture prescaler on runtime.
@@ -1437,12 +1485,12 @@ mode.
* @retval None
*/
#define __HAL_TIM_SET_COMPARE(__HANDLE__, __CHANNEL__, __COMPARE__) \
-(((__CHANNEL__) == TIM_CHANNEL_1) ? ((__HANDLE__)->Instance->CCR1 = (__COMPARE__)) :\
- ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCR2 = (__COMPARE__)) :\
- ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCR3 = (__COMPARE__)) :\
- ((__CHANNEL__) == TIM_CHANNEL_4) ? ((__HANDLE__)->Instance->CCR4 = (__COMPARE__)) :\
- ((__CHANNEL__) == TIM_CHANNEL_5) ? ((__HANDLE__)->Instance->CCR5 = (__COMPARE__)) :\
- ((__HANDLE__)->Instance->CCR6 = (__COMPARE__)))
+ (((__CHANNEL__) == TIM_CHANNEL_1) ? ((__HANDLE__)->Instance->CCR1 = (__COMPARE__)) :\
+ ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCR2 = (__COMPARE__)) :\
+ ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCR3 = (__COMPARE__)) :\
+ ((__CHANNEL__) == TIM_CHANNEL_4) ? ((__HANDLE__)->Instance->CCR4 = (__COMPARE__)) :\
+ ((__CHANNEL__) == TIM_CHANNEL_5) ? ((__HANDLE__)->Instance->CCR5 = (__COMPARE__)) :\
+ ((__HANDLE__)->Instance->CCR6 = (__COMPARE__)))
/**
* @brief Get the TIM Capture Compare Register value on runtime.
@@ -1458,12 +1506,12 @@ mode.
* @retval 16-bit or 32-bit value of the capture/compare register (TIMx_CCRy)
*/
#define __HAL_TIM_GET_COMPARE(__HANDLE__, __CHANNEL__) \
-(((__CHANNEL__) == TIM_CHANNEL_1) ? ((__HANDLE__)->Instance->CCR1) :\
- ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCR2) :\
- ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCR3) :\
- ((__CHANNEL__) == TIM_CHANNEL_4) ? ((__HANDLE__)->Instance->CCR4) :\
- ((__CHANNEL__) == TIM_CHANNEL_5) ? ((__HANDLE__)->Instance->CCR5) :\
- ((__HANDLE__)->Instance->CCR6))
+ (((__CHANNEL__) == TIM_CHANNEL_1) ? ((__HANDLE__)->Instance->CCR1) :\
+ ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCR2) :\
+ ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCR3) :\
+ ((__CHANNEL__) == TIM_CHANNEL_4) ? ((__HANDLE__)->Instance->CCR4) :\
+ ((__CHANNEL__) == TIM_CHANNEL_5) ? ((__HANDLE__)->Instance->CCR5) :\
+ ((__HANDLE__)->Instance->CCR6))
/**
* @brief Set the TIM Output compare preload.
@@ -1479,12 +1527,12 @@ mode.
* @retval None
*/
#define __HAL_TIM_ENABLE_OCxPRELOAD(__HANDLE__, __CHANNEL__) \
- (((__CHANNEL__) == TIM_CHANNEL_1) ? ((__HANDLE__)->Instance->CCMR1 |= TIM_CCMR1_OC1PE) :\
- ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCMR1 |= TIM_CCMR1_OC2PE) :\
- ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCMR2 |= TIM_CCMR2_OC3PE) :\
- ((__CHANNEL__) == TIM_CHANNEL_4) ? ((__HANDLE__)->Instance->CCMR2 |= TIM_CCMR2_OC4PE) :\
- ((__CHANNEL__) == TIM_CHANNEL_5) ? ((__HANDLE__)->Instance->CCMR3 |= TIM_CCMR3_OC5PE) :\
- ((__HANDLE__)->Instance->CCMR3 |= TIM_CCMR3_OC6PE))
+ (((__CHANNEL__) == TIM_CHANNEL_1) ? ((__HANDLE__)->Instance->CCMR1 |= TIM_CCMR1_OC1PE) :\
+ ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCMR1 |= TIM_CCMR1_OC2PE) :\
+ ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCMR2 |= TIM_CCMR2_OC3PE) :\
+ ((__CHANNEL__) == TIM_CHANNEL_4) ? ((__HANDLE__)->Instance->CCMR2 |= TIM_CCMR2_OC4PE) :\
+ ((__CHANNEL__) == TIM_CHANNEL_5) ? ((__HANDLE__)->Instance->CCMR3 |= TIM_CCMR3_OC5PE) :\
+ ((__HANDLE__)->Instance->CCMR3 |= TIM_CCMR3_OC6PE))
/**
* @brief Reset the TIM Output compare preload.
@@ -1500,12 +1548,62 @@ mode.
* @retval None
*/
#define __HAL_TIM_DISABLE_OCxPRELOAD(__HANDLE__, __CHANNEL__) \
- (((__CHANNEL__) == TIM_CHANNEL_1) ? ((__HANDLE__)->Instance->CCMR1 &= (uint16_t)~TIM_CCMR1_OC1PE) :\
- ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCMR1 &= (uint16_t)~TIM_CCMR1_OC2PE) :\
- ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCMR2 &= (uint16_t)~TIM_CCMR2_OC3PE) :\
- ((__CHANNEL__) == TIM_CHANNEL_4) ? ((__HANDLE__)->Instance->CCMR2 &= (uint16_t)~TIM_CCMR2_OC4PE) :\
- ((__CHANNEL__) == TIM_CHANNEL_5) ? ((__HANDLE__)->Instance->CCMR3 &= (uint16_t)~TIM_CCMR3_OC5PE) :\
- ((__HANDLE__)->Instance->CCMR3 &= (uint16_t)~TIM_CCMR3_OC6PE))
+ (((__CHANNEL__) == TIM_CHANNEL_1) ? ((__HANDLE__)->Instance->CCMR1 &= ~TIM_CCMR1_OC1PE) :\
+ ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCMR1 &= ~TIM_CCMR1_OC2PE) :\
+ ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCMR2 &= ~TIM_CCMR2_OC3PE) :\
+ ((__CHANNEL__) == TIM_CHANNEL_4) ? ((__HANDLE__)->Instance->CCMR2 &= ~TIM_CCMR2_OC4PE) :\
+ ((__CHANNEL__) == TIM_CHANNEL_5) ? ((__HANDLE__)->Instance->CCMR3 &= ~TIM_CCMR3_OC5PE) :\
+ ((__HANDLE__)->Instance->CCMR3 &= ~TIM_CCMR3_OC6PE))
+
+/**
+ * @brief Enable fast mode for a given channel.
+ * @param __HANDLE__ TIM handle.
+ * @param __CHANNEL__ TIM Channels to be configured.
+ * This parameter can be one of the following values:
+ * @arg TIM_CHANNEL_1: TIM Channel 1 selected
+ * @arg TIM_CHANNEL_2: TIM Channel 2 selected
+ * @arg TIM_CHANNEL_3: TIM Channel 3 selected
+ * @arg TIM_CHANNEL_4: TIM Channel 4 selected
+ * @arg TIM_CHANNEL_5: TIM Channel 5 selected
+ * @arg TIM_CHANNEL_6: TIM Channel 6 selected
+ * @note When fast mode is enabled an active edge on the trigger input acts
+ * like a compare match on CCx output. Delay to sample the trigger
+ * input and to activate CCx output is reduced to 3 clock cycles.
+ * @note Fast mode acts only if the channel is configured in PWM1 or PWM2 mode.
+ * @retval None
+ */
+#define __HAL_TIM_ENABLE_OCxFAST(__HANDLE__, __CHANNEL__) \
+ (((__CHANNEL__) == TIM_CHANNEL_1) ? ((__HANDLE__)->Instance->CCMR1 |= TIM_CCMR1_OC1FE) :\
+ ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCMR1 |= TIM_CCMR1_OC2FE) :\
+ ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCMR2 |= TIM_CCMR2_OC3FE) :\
+ ((__CHANNEL__) == TIM_CHANNEL_4) ? ((__HANDLE__)->Instance->CCMR2 |= TIM_CCMR2_OC4FE) :\
+ ((__CHANNEL__) == TIM_CHANNEL_5) ? ((__HANDLE__)->Instance->CCMR3 |= TIM_CCMR3_OC5FE) :\
+ ((__HANDLE__)->Instance->CCMR3 |= TIM_CCMR3_OC6FE))
+
+/**
+ * @brief Disable fast mode for a given channel.
+ * @param __HANDLE__ TIM handle.
+ * @param __CHANNEL__ TIM Channels to be configured.
+ * This parameter can be one of the following values:
+ * @arg TIM_CHANNEL_1: TIM Channel 1 selected
+ * @arg TIM_CHANNEL_2: TIM Channel 2 selected
+ * @arg TIM_CHANNEL_3: TIM Channel 3 selected
+ * @arg TIM_CHANNEL_4: TIM Channel 4 selected
+ * @arg TIM_CHANNEL_5: TIM Channel 5 selected
+ * @arg TIM_CHANNEL_6: TIM Channel 6 selected
+ * @note When fast mode is disabled CCx output behaves normally depending
+ * on counter and CCRx values even when the trigger is ON. The minimum
+ * delay to activate CCx output when an active edge occurs on the
+ * trigger input is 5 clock cycles.
+ * @retval None
+ */
+#define __HAL_TIM_DISABLE_OCxFAST(__HANDLE__, __CHANNEL__) \
+ (((__CHANNEL__) == TIM_CHANNEL_1) ? ((__HANDLE__)->Instance->CCMR1 &= ~TIM_CCMR1_OC1FE) :\
+ ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCMR1 &= ~TIM_CCMR1_OC2FE) :\
+ ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCMR2 &= ~TIM_CCMR2_OC3FE) :\
+ ((__CHANNEL__) == TIM_CHANNEL_4) ? ((__HANDLE__)->Instance->CCMR2 &= ~TIM_CCMR2_OC4FE) :\
+ ((__CHANNEL__) == TIM_CHANNEL_5) ? ((__HANDLE__)->Instance->CCMR3 &= ~TIM_CCMR3_OC5FE) :\
+ ((__HANDLE__)->Instance->CCMR3 &= ~TIM_CCMR3_OC6FE))
/**
* @brief Set the Update Request Source (URS) bit of the TIMx_CR1 register.
@@ -1515,8 +1613,7 @@ mode.
* enabled)
* @retval None
*/
-#define __HAL_TIM_URS_ENABLE(__HANDLE__) \
- ((__HANDLE__)->Instance->CR1|= TIM_CR1_URS)
+#define __HAL_TIM_URS_ENABLE(__HANDLE__) ((__HANDLE__)->Instance->CR1|= TIM_CR1_URS)
/**
* @brief Reset the Update Request Source (URS) bit of the TIMx_CR1 register.
@@ -1529,8 +1626,7 @@ mode.
* _ Update generation through the slave mode controller
* @retval None
*/
-#define __HAL_TIM_URS_DISABLE(__HANDLE__) \
- ((__HANDLE__)->Instance->CR1&=~TIM_CR1_URS)
+#define __HAL_TIM_URS_DISABLE(__HANDLE__) ((__HANDLE__)->Instance->CR1&=~TIM_CR1_URS)
/**
* @brief Set the TIM Capture x input polarity on runtime.
@@ -1548,10 +1644,10 @@ mode.
* @retval None
*/
#define __HAL_TIM_SET_CAPTUREPOLARITY(__HANDLE__, __CHANNEL__, __POLARITY__) \
- do{ \
- TIM_RESET_CAPTUREPOLARITY((__HANDLE__), (__CHANNEL__)); \
- TIM_SET_CAPTUREPOLARITY((__HANDLE__), (__CHANNEL__), (__POLARITY__)); \
- }while(0)
+ do{ \
+ TIM_RESET_CAPTUREPOLARITY((__HANDLE__), (__CHANNEL__)); \
+ TIM_SET_CAPTUREPOLARITY((__HANDLE__), (__CHANNEL__), (__POLARITY__)); \
+ }while(0)
/**
* @}
@@ -1579,29 +1675,29 @@ mode.
((__MODE__) == TIM_CLEARINPUTSOURCE_ETR))
#if defined(TIM_AF1_BKINE)&&defined(TIM_AF2_BKINE)
-#define IS_TIM_DMA_BASE(__BASE__) (((__BASE__) == TIM_DMABASE_CR1) || \
- ((__BASE__) == TIM_DMABASE_CR2) || \
- ((__BASE__) == TIM_DMABASE_SMCR) || \
- ((__BASE__) == TIM_DMABASE_DIER) || \
- ((__BASE__) == TIM_DMABASE_SR) || \
- ((__BASE__) == TIM_DMABASE_EGR) || \
- ((__BASE__) == TIM_DMABASE_CCMR1) || \
- ((__BASE__) == TIM_DMABASE_CCMR2) || \
- ((__BASE__) == TIM_DMABASE_CCER) || \
- ((__BASE__) == TIM_DMABASE_CNT) || \
- ((__BASE__) == TIM_DMABASE_PSC) || \
- ((__BASE__) == TIM_DMABASE_ARR) || \
- ((__BASE__) == TIM_DMABASE_RCR) || \
- ((__BASE__) == TIM_DMABASE_CCR1) || \
- ((__BASE__) == TIM_DMABASE_CCR2) || \
- ((__BASE__) == TIM_DMABASE_CCR3) || \
- ((__BASE__) == TIM_DMABASE_CCR4) || \
- ((__BASE__) == TIM_DMABASE_BDTR) || \
- ((__BASE__) == TIM_DMABASE_OR) || \
- ((__BASE__) == TIM_DMABASE_CCMR3) || \
- ((__BASE__) == TIM_DMABASE_CCR5) || \
- ((__BASE__) == TIM_DMABASE_CCR6) || \
- ((__BASE__) == TIM_DMABASE_AF1) || \
+#define IS_TIM_DMA_BASE(__BASE__) (((__BASE__) == TIM_DMABASE_CR1) || \
+ ((__BASE__) == TIM_DMABASE_CR2) || \
+ ((__BASE__) == TIM_DMABASE_SMCR) || \
+ ((__BASE__) == TIM_DMABASE_DIER) || \
+ ((__BASE__) == TIM_DMABASE_SR) || \
+ ((__BASE__) == TIM_DMABASE_EGR) || \
+ ((__BASE__) == TIM_DMABASE_CCMR1) || \
+ ((__BASE__) == TIM_DMABASE_CCMR2) || \
+ ((__BASE__) == TIM_DMABASE_CCER) || \
+ ((__BASE__) == TIM_DMABASE_CNT) || \
+ ((__BASE__) == TIM_DMABASE_PSC) || \
+ ((__BASE__) == TIM_DMABASE_ARR) || \
+ ((__BASE__) == TIM_DMABASE_RCR) || \
+ ((__BASE__) == TIM_DMABASE_CCR1) || \
+ ((__BASE__) == TIM_DMABASE_CCR2) || \
+ ((__BASE__) == TIM_DMABASE_CCR3) || \
+ ((__BASE__) == TIM_DMABASE_CCR4) || \
+ ((__BASE__) == TIM_DMABASE_BDTR) || \
+ ((__BASE__) == TIM_DMABASE_OR) || \
+ ((__BASE__) == TIM_DMABASE_CCMR3) || \
+ ((__BASE__) == TIM_DMABASE_CCR5) || \
+ ((__BASE__) == TIM_DMABASE_CCR6) || \
+ ((__BASE__) == TIM_DMABASE_AF1) || \
((__BASE__) == TIM_DMABASE_AF2))
#else
#define IS_TIM_DMA_BASE(__BASE__) (((__BASE__) == TIM_DMABASE_CR1) || \
@@ -1636,6 +1732,9 @@ mode.
((__MODE__) == TIM_COUNTERMODE_CENTERALIGNED2) || \
((__MODE__) == TIM_COUNTERMODE_CENTERALIGNED3))
+#define IS_TIM_UIFREMAP_MODE(__MODE__) (((__MODE__) == TIM_UIFREMAP_DISABLE) || \
+ ((__MODE__) == TIM_UIFREMAP_ENALE))
+
#define IS_TIM_CLOCKDIVISION_DIV(__DIV__) (((__DIV__) == TIM_CLOCKDIVISION_DIV1) || \
((__DIV__) == TIM_CLOCKDIVISION_DIV2) || \
((__DIV__) == TIM_CLOCKDIVISION_DIV4))
@@ -1658,6 +1757,9 @@ mode.
#define IS_TIM_OCNIDLE_STATE(__STATE__) (((__STATE__) == TIM_OCNIDLESTATE_SET) || \
((__STATE__) == TIM_OCNIDLESTATE_RESET))
+#define IS_TIM_ENCODERINPUT_POLARITY(__POLARITY__) (((__POLARITY__) == TIM_ENCODERINPUTPOLARITY_RISING) || \
+ ((__POLARITY__) == TIM_ENCODERINPUTPOLARITY_FALLING))
+
#define IS_TIM_IC_POLARITY(__POLARITY__) (((__POLARITY__) == TIM_ICPOLARITY_RISING) || \
((__POLARITY__) == TIM_ICPOLARITY_FALLING) || \
((__POLARITY__) == TIM_ICPOLARITY_BOTHEDGE))
@@ -1876,28 +1978,28 @@ mode.
((__TRIGGER__) == TIM_SLAVEMODE_COMBINED_RESETTRIGGER))
#define TIM_SET_ICPRESCALERVALUE(__HANDLE__, __CHANNEL__, __ICPSC__) \
-(((__CHANNEL__) == TIM_CHANNEL_1) ? ((__HANDLE__)->Instance->CCMR1 |= (__ICPSC__)) :\
- ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCMR1 |= ((__ICPSC__) << 8U)) :\
- ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCMR2 |= (__ICPSC__)) :\
- ((__HANDLE__)->Instance->CCMR2 |= ((__ICPSC__) << 8U)))
+ (((__CHANNEL__) == TIM_CHANNEL_1) ? ((__HANDLE__)->Instance->CCMR1 |= (__ICPSC__)) :\
+ ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCMR1 |= ((__ICPSC__) << 8U)) :\
+ ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCMR2 |= (__ICPSC__)) :\
+ ((__HANDLE__)->Instance->CCMR2 |= ((__ICPSC__) << 8U)))
#define TIM_RESET_ICPRESCALERVALUE(__HANDLE__, __CHANNEL__) \
-(((__CHANNEL__) == TIM_CHANNEL_1) ? ((__HANDLE__)->Instance->CCMR1 &= (uint16_t)~TIM_CCMR1_IC1PSC) :\
- ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCMR1 &= (uint16_t)~TIM_CCMR1_IC2PSC) :\
- ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCMR2 &= (uint16_t)~TIM_CCMR2_IC3PSC) :\
- ((__HANDLE__)->Instance->CCMR2 &= (uint16_t)~TIM_CCMR2_IC4PSC))
+ (((__CHANNEL__) == TIM_CHANNEL_1) ? ((__HANDLE__)->Instance->CCMR1 &= ~TIM_CCMR1_IC1PSC) :\
+ ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCMR1 &= ~TIM_CCMR1_IC2PSC) :\
+ ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCMR2 &= ~TIM_CCMR2_IC3PSC) :\
+ ((__HANDLE__)->Instance->CCMR2 &= ~TIM_CCMR2_IC4PSC))
#define TIM_SET_CAPTUREPOLARITY(__HANDLE__, __CHANNEL__, __POLARITY__) \
-(((__CHANNEL__) == TIM_CHANNEL_1) ? ((__HANDLE__)->Instance->CCER |= (__POLARITY__)) :\
- ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCER |= ((__POLARITY__) << 4U)) :\
- ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCER |= ((__POLARITY__) << 8U)) :\
- ((__HANDLE__)->Instance->CCER |= (((__POLARITY__) << 12U))))
+ (((__CHANNEL__) == TIM_CHANNEL_1) ? ((__HANDLE__)->Instance->CCER |= (__POLARITY__)) :\
+ ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCER |= ((__POLARITY__) << 4U)) :\
+ ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCER |= ((__POLARITY__) << 8U)) :\
+ ((__HANDLE__)->Instance->CCER |= (((__POLARITY__) << 12U))))
#define TIM_RESET_CAPTUREPOLARITY(__HANDLE__, __CHANNEL__) \
-(((__CHANNEL__) == TIM_CHANNEL_1) ? ((__HANDLE__)->Instance->CCER &= (uint16_t)~(TIM_CCER_CC1P | TIM_CCER_CC1NP)) :\
- ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCER &= (uint16_t)~(TIM_CCER_CC2P | TIM_CCER_CC2NP)) :\
- ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCER &= (uint16_t)~(TIM_CCER_CC3P | TIM_CCER_CC3NP)) :\
- ((__HANDLE__)->Instance->CCER &= (uint16_t)~(TIM_CCER_CC4P | TIM_CCER_CC4NP)))
+ (((__CHANNEL__) == TIM_CHANNEL_1) ? ((__HANDLE__)->Instance->CCER &= ~(TIM_CCER_CC1P | TIM_CCER_CC1NP)) :\
+ ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCER &= ~(TIM_CCER_CC2P | TIM_CCER_CC2NP)) :\
+ ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCER &= ~(TIM_CCER_CC3P | TIM_CCER_CC3NP)) :\
+ ((__HANDLE__)->Instance->CCER &= ~(TIM_CCER_CC4P | TIM_CCER_CC4NP)))
/**
* @}
@@ -2035,7 +2137,8 @@ HAL_StatusTypeDef HAL_TIM_Encoder_Stop(TIM_HandleTypeDef *htim, uint32_t Channel
HAL_StatusTypeDef HAL_TIM_Encoder_Start_IT(TIM_HandleTypeDef *htim, uint32_t Channel);
HAL_StatusTypeDef HAL_TIM_Encoder_Stop_IT(TIM_HandleTypeDef *htim, uint32_t Channel);
/* Non-Blocking mode: DMA */
-HAL_StatusTypeDef HAL_TIM_Encoder_Start_DMA(TIM_HandleTypeDef *htim, uint32_t Channel, uint32_t *pData1, uint32_t *pData2, uint16_t Length);
+HAL_StatusTypeDef HAL_TIM_Encoder_Start_DMA(TIM_HandleTypeDef *htim, uint32_t Channel, uint32_t *pData1,
+ uint32_t *pData2, uint16_t Length);
HAL_StatusTypeDef HAL_TIM_Encoder_Stop_DMA(TIM_HandleTypeDef *htim, uint32_t Channel);
/**
* @}
@@ -2059,17 +2162,19 @@ void HAL_TIM_IRQHandler(TIM_HandleTypeDef *htim);
HAL_StatusTypeDef HAL_TIM_OC_ConfigChannel(TIM_HandleTypeDef *htim, TIM_OC_InitTypeDef *sConfig, uint32_t Channel);
HAL_StatusTypeDef HAL_TIM_PWM_ConfigChannel(TIM_HandleTypeDef *htim, TIM_OC_InitTypeDef *sConfig, uint32_t Channel);
HAL_StatusTypeDef HAL_TIM_IC_ConfigChannel(TIM_HandleTypeDef *htim, TIM_IC_InitTypeDef *sConfig, uint32_t Channel);
-HAL_StatusTypeDef HAL_TIM_OnePulse_ConfigChannel(TIM_HandleTypeDef *htim, TIM_OnePulse_InitTypeDef *sConfig, uint32_t OutputChannel, uint32_t InputChannel);
-HAL_StatusTypeDef HAL_TIM_ConfigOCrefClear(TIM_HandleTypeDef *htim, TIM_ClearInputConfigTypeDef *sClearInputConfig, uint32_t Channel);
+HAL_StatusTypeDef HAL_TIM_OnePulse_ConfigChannel(TIM_HandleTypeDef *htim, TIM_OnePulse_InitTypeDef *sConfig,
+ uint32_t OutputChannel, uint32_t InputChannel);
+HAL_StatusTypeDef HAL_TIM_ConfigOCrefClear(TIM_HandleTypeDef *htim, TIM_ClearInputConfigTypeDef *sClearInputConfig,
+ uint32_t Channel);
HAL_StatusTypeDef HAL_TIM_ConfigClockSource(TIM_HandleTypeDef *htim, TIM_ClockConfigTypeDef *sClockSourceConfig);
HAL_StatusTypeDef HAL_TIM_ConfigTI1Input(TIM_HandleTypeDef *htim, uint32_t TI1_Selection);
HAL_StatusTypeDef HAL_TIM_SlaveConfigSynchro(TIM_HandleTypeDef *htim, TIM_SlaveConfigTypeDef *sSlaveConfig);
HAL_StatusTypeDef HAL_TIM_SlaveConfigSynchro_IT(TIM_HandleTypeDef *htim, TIM_SlaveConfigTypeDef *sSlaveConfig);
-HAL_StatusTypeDef HAL_TIM_DMABurst_WriteStart(TIM_HandleTypeDef *htim, uint32_t BurstBaseAddress, uint32_t BurstRequestSrc, \
- uint32_t *BurstBuffer, uint32_t BurstLength);
+HAL_StatusTypeDef HAL_TIM_DMABurst_WriteStart(TIM_HandleTypeDef *htim, uint32_t BurstBaseAddress,
+ uint32_t BurstRequestSrc, uint32_t *BurstBuffer, uint32_t BurstLength);
HAL_StatusTypeDef HAL_TIM_DMABurst_WriteStop(TIM_HandleTypeDef *htim, uint32_t BurstRequestSrc);
-HAL_StatusTypeDef HAL_TIM_DMABurst_ReadStart(TIM_HandleTypeDef *htim, uint32_t BurstBaseAddress, uint32_t BurstRequestSrc, \
- uint32_t *BurstBuffer, uint32_t BurstLength);
+HAL_StatusTypeDef HAL_TIM_DMABurst_ReadStart(TIM_HandleTypeDef *htim, uint32_t BurstBaseAddress,
+ uint32_t BurstRequestSrc, uint32_t *BurstBuffer, uint32_t BurstLength);
HAL_StatusTypeDef HAL_TIM_DMABurst_ReadStop(TIM_HandleTypeDef *htim, uint32_t BurstRequestSrc);
HAL_StatusTypeDef HAL_TIM_GenerateEvent(TIM_HandleTypeDef *htim, uint32_t EventSource);
uint32_t HAL_TIM_ReadCapturedValue(TIM_HandleTypeDef *htim, uint32_t Channel);
@@ -2095,7 +2200,8 @@ void HAL_TIM_ErrorCallback(TIM_HandleTypeDef *htim);
/* Callbacks Register/UnRegister functions ***********************************/
#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)
-HAL_StatusTypeDef HAL_TIM_RegisterCallback(TIM_HandleTypeDef *htim, HAL_TIM_CallbackIDTypeDef CallbackID, pTIM_CallbackTypeDef pCallback);
+HAL_StatusTypeDef HAL_TIM_RegisterCallback(TIM_HandleTypeDef *htim, HAL_TIM_CallbackIDTypeDef CallbackID,
+ pTIM_CallbackTypeDef pCallback);
HAL_StatusTypeDef HAL_TIM_UnRegisterCallback(TIM_HandleTypeDef *htim, HAL_TIM_CallbackIDTypeDef CallbackID);
#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */
@@ -2125,8 +2231,8 @@ HAL_TIM_StateTypeDef HAL_TIM_Encoder_GetState(TIM_HandleTypeDef *htim);
/* Private functions----------------------------------------------------------*/
/** @defgroup TIM_Private_Functions TIM Private Functions
-* @{
-*/
+ * @{
+ */
void TIM_Base_SetConfig(TIM_TypeDef *TIMx, TIM_Base_InitTypeDef *Structure);
void TIM_TI1_SetConfig(TIM_TypeDef *TIMx, uint32_t TIM_ICPolarity, uint32_t TIM_ICSelection, uint32_t TIM_ICFilter);
void TIM_OC2_SetConfig(TIM_TypeDef *TIMx, TIM_OC_InitTypeDef *OC_Config);
@@ -2145,8 +2251,8 @@ void TIM_ResetCallback(TIM_HandleTypeDef *htim);
#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */
/**
-* @}
-*/
+ * @}
+ */
/* End of private functions --------------------------------------------------*/
/**
diff --git a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_Keil/Prog/lib/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_tim_ex.h b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_Keil/Prog/lib/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_tim_ex.h
index 598f5c6e..b8d3472e 100644
--- a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_Keil/Prog/lib/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_tim_ex.h
+++ b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_Keil/Prog/lib/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_tim_ex.h
@@ -201,9 +201,9 @@ TIMEx_BreakInputConfigTypeDef;
*/
/** @addtogroup TIMEx_Exported_Functions_Group1 Extended Timer Hall Sensor functions
- * @brief Timer Hall Sensor functions
- * @{
- */
+ * @brief Timer Hall Sensor functions
+ * @{
+ */
/* Timer Hall Sensor functions **********************************************/
HAL_StatusTypeDef HAL_TIMEx_HallSensor_Init(TIM_HandleTypeDef *htim, TIM_HallSensor_InitTypeDef *sConfig);
HAL_StatusTypeDef HAL_TIMEx_HallSensor_DeInit(TIM_HandleTypeDef *htim);
@@ -225,9 +225,9 @@ HAL_StatusTypeDef HAL_TIMEx_HallSensor_Stop_DMA(TIM_HandleTypeDef *htim);
*/
/** @addtogroup TIMEx_Exported_Functions_Group2 Extended Timer Complementary Output Compare functions
- * @brief Timer Complementary Output Compare functions
- * @{
- */
+ * @brief Timer Complementary Output Compare functions
+ * @{
+ */
/* Timer Complementary Output Compare functions *****************************/
/* Blocking mode: Polling */
HAL_StatusTypeDef HAL_TIMEx_OCN_Start(TIM_HandleTypeDef *htim, uint32_t Channel);
@@ -245,9 +245,9 @@ HAL_StatusTypeDef HAL_TIMEx_OCN_Stop_DMA(TIM_HandleTypeDef *htim, uint32_t Chann
*/
/** @addtogroup TIMEx_Exported_Functions_Group3 Extended Timer Complementary PWM functions
- * @brief Timer Complementary PWM functions
- * @{
- */
+ * @brief Timer Complementary PWM functions
+ * @{
+ */
/* Timer Complementary PWM functions ****************************************/
/* Blocking mode: Polling */
HAL_StatusTypeDef HAL_TIMEx_PWMN_Start(TIM_HandleTypeDef *htim, uint32_t Channel);
@@ -264,9 +264,9 @@ HAL_StatusTypeDef HAL_TIMEx_PWMN_Stop_DMA(TIM_HandleTypeDef *htim, uint32_t Chan
*/
/** @addtogroup TIMEx_Exported_Functions_Group4 Extended Timer Complementary One Pulse functions
- * @brief Timer Complementary One Pulse functions
- * @{
- */
+ * @brief Timer Complementary One Pulse functions
+ * @{
+ */
/* Timer Complementary One Pulse functions **********************************/
/* Blocking mode: Polling */
HAL_StatusTypeDef HAL_TIMEx_OnePulseN_Start(TIM_HandleTypeDef *htim, uint32_t OutputChannel);
@@ -280,17 +280,23 @@ HAL_StatusTypeDef HAL_TIMEx_OnePulseN_Stop_IT(TIM_HandleTypeDef *htim, uint32_t
*/
/** @addtogroup TIMEx_Exported_Functions_Group5 Extended Peripheral Control functions
- * @brief Peripheral Control functions
- * @{
- */
+ * @brief Peripheral Control functions
+ * @{
+ */
/* Extended Control functions ************************************************/
-HAL_StatusTypeDef HAL_TIMEx_ConfigCommutEvent(TIM_HandleTypeDef *htim, uint32_t InputTrigger, uint32_t CommutationSource);
-HAL_StatusTypeDef HAL_TIMEx_ConfigCommutEvent_IT(TIM_HandleTypeDef *htim, uint32_t InputTrigger, uint32_t CommutationSource);
-HAL_StatusTypeDef HAL_TIMEx_ConfigCommutEvent_DMA(TIM_HandleTypeDef *htim, uint32_t InputTrigger, uint32_t CommutationSource);
-HAL_StatusTypeDef HAL_TIMEx_MasterConfigSynchronization(TIM_HandleTypeDef *htim, TIM_MasterConfigTypeDef *sMasterConfig);
-HAL_StatusTypeDef HAL_TIMEx_ConfigBreakDeadTime(TIM_HandleTypeDef *htim, TIM_BreakDeadTimeConfigTypeDef *sBreakDeadTimeConfig);
+HAL_StatusTypeDef HAL_TIMEx_ConfigCommutEvent(TIM_HandleTypeDef *htim, uint32_t InputTrigger,
+ uint32_t CommutationSource);
+HAL_StatusTypeDef HAL_TIMEx_ConfigCommutEvent_IT(TIM_HandleTypeDef *htim, uint32_t InputTrigger,
+ uint32_t CommutationSource);
+HAL_StatusTypeDef HAL_TIMEx_ConfigCommutEvent_DMA(TIM_HandleTypeDef *htim, uint32_t InputTrigger,
+ uint32_t CommutationSource);
+HAL_StatusTypeDef HAL_TIMEx_MasterConfigSynchronization(TIM_HandleTypeDef *htim,
+ TIM_MasterConfigTypeDef *sMasterConfig);
+HAL_StatusTypeDef HAL_TIMEx_ConfigBreakDeadTime(TIM_HandleTypeDef *htim,
+ TIM_BreakDeadTimeConfigTypeDef *sBreakDeadTimeConfig);
#if defined(TIM_BREAK_INPUT_SUPPORT)
-HAL_StatusTypeDef HAL_TIMEx_ConfigBreakInput(TIM_HandleTypeDef *htim, uint32_t BreakInput, TIMEx_BreakInputConfigTypeDef *sBreakInputConfig);
+HAL_StatusTypeDef HAL_TIMEx_ConfigBreakInput(TIM_HandleTypeDef *htim, uint32_t BreakInput,
+ TIMEx_BreakInputConfigTypeDef *sBreakInputConfig);
#endif /* TIM_BREAK_INPUT_SUPPORT */
HAL_StatusTypeDef HAL_TIMEx_GroupChannel5(TIM_HandleTypeDef *htim, uint32_t Channels);
HAL_StatusTypeDef HAL_TIMEx_RemapConfig(TIM_HandleTypeDef *htim, uint32_t Remap);
@@ -327,7 +333,7 @@ HAL_TIM_StateTypeDef HAL_TIMEx_HallSensor_GetState(TIM_HandleTypeDef *htim);
/* End of exported functions -------------------------------------------------*/
/* Private functions----------------------------------------------------------*/
-/** @defgroup TIMEx_Private_Functions TIM Extended Private Functions
+/** @addtogroup TIMEx_Private_Functions TIMEx Private Functions
* @{
*/
void TIMEx_DMACommutationCplt(DMA_HandleTypeDef *hdma);
diff --git a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_Keil/Prog/lib/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_uart.h b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_Keil/Prog/lib/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_uart.h
index 4209206e..473ff95e 100644
--- a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_Keil/Prog/lib/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_uart.h
+++ b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_Keil/Prog/lib/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_uart.h
@@ -125,8 +125,6 @@ typedef struct
This parameter can be a value of @ref UART_MSB_First. */
} UART_AdvFeatureInitTypeDef;
-
-
/**
* @brief HAL UART State definition
* @note HAL UART State value is a combination of 2 different substates: gState and RxState (see @ref UART_State_Definition).
@@ -206,10 +204,9 @@ typedef struct __UART_HandleTypeDef
uint16_t Mask; /*!< UART Rx RDR register mask */
+ void (*RxISR)(struct __UART_HandleTypeDef *huart); /*!< Function pointer on Rx IRQ handler */
- void (*RxISR)(struct __UART_HandleTypeDef *huart); /*!< Function pointer on Rx IRQ handler */
-
- void (*TxISR)(struct __UART_HandleTypeDef *huart); /*!< Function pointer on Tx IRQ handler */
+ void (*TxISR)(struct __UART_HandleTypeDef *huart); /*!< Function pointer on Tx IRQ handler */
DMA_HandleTypeDef *hdmatx; /*!< UART Tx DMA Handle parameters */
@@ -313,8 +310,10 @@ typedef void (*pUART_CallbackTypeDef)(UART_HandleTypeDef *huart); /*!< pointer
#define HAL_UART_ERROR_FE ((uint32_t)0x00000004U) /*!< Frame error */
#define HAL_UART_ERROR_ORE ((uint32_t)0x00000008U) /*!< Overrun error */
#define HAL_UART_ERROR_DMA ((uint32_t)0x00000010U) /*!< DMA transfer error */
+#define HAL_UART_ERROR_RTO ((uint32_t)0x00000020U) /*!< Receiver Timeout error */
+
#if (USE_HAL_UART_REGISTER_CALLBACKS == 1)
-#define HAL_UART_ERROR_INVALID_CALLBACK ((uint32_t)0x00000020U) /*!< Invalid Callback error */
+#define HAL_UART_ERROR_INVALID_CALLBACK ((uint32_t)0x00000040U) /*!< Invalid Callback error */
#endif /* USE_HAL_UART_REGISTER_CALLBACKS */
/**
* @}
@@ -400,11 +399,11 @@ typedef void (*pUART_CallbackTypeDef)(UART_HandleTypeDef *huart); /*!< pointer
* @}
*/
-/** @defgroup UART_Receiver_TimeOut UART Receiver TimeOut
+/** @defgroup UART_Receiver_Timeout UART Receiver Timeout
* @{
*/
-#define UART_RECEIVER_TIMEOUT_DISABLE 0x00000000U /*!< UART receiver timeout disable */
-#define UART_RECEIVER_TIMEOUT_ENABLE USART_CR2_RTOEN /*!< UART receiver timeout enable */
+#define UART_RECEIVER_TIMEOUT_DISABLE 0x00000000U /*!< UART Receiver Timeout disable */
+#define UART_RECEIVER_TIMEOUT_ENABLE USART_CR2_RTOEN /*!< UART Receiver Timeout enable */
/**
* @}
*/
@@ -562,6 +561,17 @@ typedef void (*pUART_CallbackTypeDef)(UART_HandleTypeDef *huart); /*!< pointer
/**
* @}
*/
+#if defined(USART_CR1_UESM)
+
+/** @defgroup UART_Stop_Mode_Enable UART Advanced Feature Stop Mode Enable
+ * @{
+ */
+#define UART_ADVFEATURE_STOPMODE_DISABLE 0x00000000U /*!< UART stop mode disable */
+#define UART_ADVFEATURE_STOPMODE_ENABLE USART_CR1_UESM /*!< UART stop mode enable */
+/**
+ * @}
+ */
+#endif /* USART_CR1_UESM */
/** @defgroup UART_Mute_Mode UART Advanced Feature Mute Mode Enable
* @{
@@ -579,6 +589,18 @@ typedef void (*pUART_CallbackTypeDef)(UART_HandleTypeDef *huart); /*!< pointer
/**
* @}
*/
+#if defined(USART_CR1_UESM)
+
+/** @defgroup UART_WakeUp_from_Stop_Selection UART WakeUp From Stop Selection
+ * @{
+ */
+#define UART_WAKEUP_ON_ADDRESS 0x00000000U /*!< UART wake-up on address */
+#define UART_WAKEUP_ON_STARTBIT USART_CR3_WUS_1 /*!< UART wake-up on start bit */
+#define UART_WAKEUP_ON_READDATA_NONEMPTY USART_CR3_WUS /*!< UART wake-up on receive data register not empty or RXFIFO is not empty */
+/**
+ * @}
+ */
+#endif /* USART_CR1_UESM */
/** @defgroup UART_DriverEnable_Polarity UART DriverEnable Polarity
* @{
@@ -626,13 +648,20 @@ typedef void (*pUART_CallbackTypeDef)(UART_HandleTypeDef *huart); /*!< pointer
* - 0xXXXX : Flag mask in the ISR register
* @{
*/
+#if defined(USART_ISR_REACK)
+#define UART_FLAG_REACK USART_ISR_REACK /*!< UART receive enable acknowledge flag */
+#endif /* USART_ISR_REACK */
#define UART_FLAG_TEACK USART_ISR_TEACK /*!< UART transmit enable acknowledge flag */
+#if defined(USART_CR1_UESM)
+#define UART_FLAG_WUF USART_ISR_WUF /*!< UART wake-up from stop mode flag */
+#endif /* USART_CR1_UESM */
#define UART_FLAG_RWU USART_ISR_RWU /*!< UART receiver wake-up from mute mode flag */
#define UART_FLAG_SBKF USART_ISR_SBKF /*!< UART send break flag */
#define UART_FLAG_CMF USART_ISR_CMF /*!< UART character match flag */
#define UART_FLAG_BUSY USART_ISR_BUSY /*!< UART busy flag */
#define UART_FLAG_ABRF USART_ISR_ABRF /*!< UART auto Baud rate flag */
#define UART_FLAG_ABRE USART_ISR_ABRE /*!< UART auto Baud rate error */
+#define UART_FLAG_RTOF USART_ISR_RTOF /*!< UART receiver timeout flag */
#define UART_FLAG_CTS USART_ISR_CTS /*!< UART clear to send flag */
#define UART_FLAG_CTSIF USART_ISR_CTSIF /*!< UART clear to send interrupt flag */
#define UART_FLAG_LBDF USART_ISR_LBDF /*!< UART LIN break detection flag */
@@ -674,6 +703,10 @@ typedef void (*pUART_CallbackTypeDef)(UART_HandleTypeDef *huart); /*!< pointer
#define UART_IT_LBD 0x0846U /*!< UART LIN break detection interruption */
#define UART_IT_CTS 0x096AU /*!< UART CTS interruption */
#define UART_IT_CM 0x112EU /*!< UART character match interruption */
+#if defined(USART_CR1_UESM)
+#define UART_IT_WUF 0x1476U /*!< UART wake-up from stop mode interruption */
+#endif /* USART_CR1_UESM */
+#define UART_IT_RTO 0x0B3AU /*!< UART receiver timeout interruption */
#define UART_IT_ERR 0x0060U /*!< UART error interruption */
@@ -689,13 +722,17 @@ typedef void (*pUART_CallbackTypeDef)(UART_HandleTypeDef *huart); /*!< pointer
*/
#define UART_CLEAR_PEF USART_ICR_PECF /*!< Parity Error Clear Flag */
#define UART_CLEAR_FEF USART_ICR_FECF /*!< Framing Error Clear Flag */
-#define UART_CLEAR_NEF USART_ICR_NCF /*!< Noise Error detected Clear Flag */
+#define UART_CLEAR_NEF USART_ICR_NCF /*!< Noise Error detected Clear Flag */
#define UART_CLEAR_OREF USART_ICR_ORECF /*!< Overrun Error Clear Flag */
#define UART_CLEAR_IDLEF USART_ICR_IDLECF /*!< IDLE line detected Clear Flag */
#define UART_CLEAR_TCF USART_ICR_TCCF /*!< Transmission Complete Clear Flag */
#define UART_CLEAR_LBDF USART_ICR_LBDCF /*!< LIN Break Detection Clear Flag */
#define UART_CLEAR_CTSF USART_ICR_CTSCF /*!< CTS Interrupt Clear Flag */
#define UART_CLEAR_CMF USART_ICR_CMCF /*!< Character Match Clear Flag */
+#if defined(USART_CR1_UESM)
+#define UART_CLEAR_WUF USART_ICR_WUCF /*!< Wake Up from stop mode Clear Flag */
+#endif /* USART_CR1_UESM */
+#define UART_CLEAR_RTOF USART_ICR_RTOCF /*!< UART receiver timeout clear flag */
/**
* @}
*/
@@ -734,9 +771,9 @@ typedef void (*pUART_CallbackTypeDef)(UART_HandleTypeDef *huart); /*!< pointer
*/
#define __HAL_UART_FLUSH_DRREGISTER(__HANDLE__) \
do{ \
- SET_BIT((__HANDLE__)->Instance->RQR, UART_RXDATA_FLUSH_REQUEST); \
- SET_BIT((__HANDLE__)->Instance->RQR, UART_TXDATA_FLUSH_REQUEST); \
- } while(0U)
+ SET_BIT((__HANDLE__)->Instance->RQR, UART_RXDATA_FLUSH_REQUEST); \
+ SET_BIT((__HANDLE__)->Instance->RQR, UART_TXDATA_FLUSH_REQUEST); \
+ } while(0U)
/** @brief Clear the specified UART pending flag.
* @param __HANDLE__ specifies the UART Handle.
@@ -748,9 +785,13 @@ typedef void (*pUART_CallbackTypeDef)(UART_HandleTypeDef *huart); /*!< pointer
* @arg @ref UART_CLEAR_OREF Overrun Error Clear Flag
* @arg @ref UART_CLEAR_IDLEF IDLE line detected Clear Flag
* @arg @ref UART_CLEAR_TCF Transmission Complete Clear Flag
+ * @arg @ref UART_CLEAR_RTOF Receiver Timeout clear flag
* @arg @ref UART_CLEAR_LBDF LIN Break Detection Clear Flag
* @arg @ref UART_CLEAR_CTSF CTS Interrupt Clear Flag
* @arg @ref UART_CLEAR_CMF Character Match Clear Flag
+#if defined(USART_CR1_UESM)
+ * @arg @ref UART_CLEAR_WUF Wake Up from stop mode Clear Flag
+#endif
* @retval None
*/
#define __HAL_UART_CLEAR_FLAG(__HANDLE__, __FLAG__) ((__HANDLE__)->Instance->ICR = (__FLAG__))
@@ -790,7 +831,13 @@ typedef void (*pUART_CallbackTypeDef)(UART_HandleTypeDef *huart); /*!< pointer
* @param __HANDLE__ specifies the UART Handle.
* @param __FLAG__ specifies the flag to check.
* This parameter can be one of the following values:
+#if defined(USART_ISR_REACK)
+ * @arg @ref UART_FLAG_REACK Receive enable acknowledge flag
+#endif
* @arg @ref UART_FLAG_TEACK Transmit enable acknowledge flag
+ #if defined(USART_CR1_UESM)
+ * @arg @ref UART_FLAG_WUF Wake up from stop mode flag
+ #endif
* @arg @ref UART_FLAG_RWU Receiver wake up flag (if the UART in mute mode)
* @arg @ref UART_FLAG_SBKF Send Break flag
* @arg @ref UART_FLAG_CMF Character match flag
@@ -802,6 +849,7 @@ typedef void (*pUART_CallbackTypeDef)(UART_HandleTypeDef *huart); /*!< pointer
* @arg @ref UART_FLAG_TXE Transmit data register empty flag
* @arg @ref UART_FLAG_TC Transmission Complete flag
* @arg @ref UART_FLAG_RXNE Receive data register not empty flag
+ * @arg @ref UART_FLAG_RTOF Receiver Timeout flag
* @arg @ref UART_FLAG_IDLE Idle Line detection flag
* @arg @ref UART_FLAG_ORE Overrun Error flag
* @arg @ref UART_FLAG_NE Noise Error flag
@@ -815,12 +863,16 @@ typedef void (*pUART_CallbackTypeDef)(UART_HandleTypeDef *huart); /*!< pointer
* @param __HANDLE__ specifies the UART Handle.
* @param __INTERRUPT__ specifies the UART interrupt source to enable.
* This parameter can be one of the following values:
+#if defined(USART_CR1_UESM)
+ * @arg @ref UART_IT_WUF Wakeup from stop mode interrupt
+#endif
* @arg @ref UART_IT_CM Character match interrupt
* @arg @ref UART_IT_CTS CTS change interrupt
* @arg @ref UART_IT_LBD LIN Break detection interrupt
* @arg @ref UART_IT_TXE Transmit Data Register empty interrupt
* @arg @ref UART_IT_TC Transmission complete interrupt
* @arg @ref UART_IT_RXNE Receive Data register not empty interrupt
+ * @arg @ref UART_IT_RTO Receive Timeout interrupt
* @arg @ref UART_IT_IDLE Idle line detection interrupt
* @arg @ref UART_IT_PE Parity Error interrupt
* @arg @ref UART_IT_ERR Error interrupt (frame error, noise error, overrun error)
@@ -835,12 +887,16 @@ typedef void (*pUART_CallbackTypeDef)(UART_HandleTypeDef *huart); /*!< pointer
* @param __HANDLE__ specifies the UART Handle.
* @param __INTERRUPT__ specifies the UART interrupt source to disable.
* This parameter can be one of the following values:
+#if defined(USART_CR1_UESM)
+ * @arg @ref UART_IT_WUF Wakeup from stop mode interrupt
+#endif
* @arg @ref UART_IT_CM Character match interrupt
* @arg @ref UART_IT_CTS CTS change interrupt
* @arg @ref UART_IT_LBD LIN Break detection interrupt
* @arg @ref UART_IT_TXE Transmit Data Register empty interrupt
* @arg @ref UART_IT_TC Transmission complete interrupt
* @arg @ref UART_IT_RXNE Receive Data register not empty interrupt
+ * @arg @ref UART_IT_RTO Receive Timeout interrupt
* @arg @ref UART_IT_IDLE Idle line detection interrupt
* @arg @ref UART_IT_PE Parity Error interrupt
* @arg @ref UART_IT_ERR Error interrupt (Frame error, noise error, overrun error)
@@ -854,37 +910,46 @@ typedef void (*pUART_CallbackTypeDef)(UART_HandleTypeDef *huart); /*!< pointer
* @param __HANDLE__ specifies the UART Handle.
* @param __INTERRUPT__ specifies the UART interrupt to check.
* This parameter can be one of the following values:
+#if defined(USART_CR1_UESM)
+ * @arg @ref UART_IT_WUF Wakeup from stop mode interrupt
+#endif
* @arg @ref UART_IT_CM Character match interrupt
* @arg @ref UART_IT_CTS CTS change interrupt
* @arg @ref UART_IT_LBD LIN Break detection interrupt
* @arg @ref UART_IT_TXE Transmit Data Register empty interrupt
* @arg @ref UART_IT_TC Transmission complete interrupt
* @arg @ref UART_IT_RXNE Receive Data register not empty interrupt
+ * @arg @ref UART_IT_RTO Receive Timeout interrupt
* @arg @ref UART_IT_IDLE Idle line detection interrupt
* @arg @ref UART_IT_PE Parity Error interrupt
* @arg @ref UART_IT_ERR Error interrupt (Frame error, noise error, overrun error)
* @retval The new state of __INTERRUPT__ (SET or RESET).
*/
-#define __HAL_UART_GET_IT(__HANDLE__, __INTERRUPT__) ((((__HANDLE__)->Instance->ISR & (1U << ((__INTERRUPT__)>> 8U))) != RESET) ? SET : RESET)
+#define __HAL_UART_GET_IT(__HANDLE__, __INTERRUPT__) ((((__HANDLE__)->Instance->ISR\
+ & (1U << ((__INTERRUPT__)>> 8U))) != RESET) ? SET : RESET)
/** @brief Check whether the specified UART interrupt source is enabled or not.
* @param __HANDLE__ specifies the UART Handle.
* @param __INTERRUPT__ specifies the UART interrupt source to check.
* This parameter can be one of the following values:
+#if defined(USART_CR1_UESM)
+ * @arg @ref UART_IT_WUF Wakeup from stop mode interrupt
+#endif
* @arg @ref UART_IT_CM Character match interrupt
* @arg @ref UART_IT_CTS CTS change interrupt
* @arg @ref UART_IT_LBD LIN Break detection interrupt
* @arg @ref UART_IT_TXE Transmit Data Register empty interrupt
* @arg @ref UART_IT_TC Transmission complete interrupt
* @arg @ref UART_IT_RXNE Receive Data register not empty interrupt
+ * @arg @ref UART_IT_RTO Receive Timeout interrupt
* @arg @ref UART_IT_IDLE Idle line detection interrupt
* @arg @ref UART_IT_PE Parity Error interrupt
* @arg @ref UART_IT_ERR Error interrupt (Frame error, noise error, overrun error)
* @retval The new state of __INTERRUPT__ (SET or RESET).
*/
#define __HAL_UART_GET_IT_SOURCE(__HANDLE__, __INTERRUPT__) ((((((((uint8_t)(__INTERRUPT__)) >> 5U) == 1U) ? (__HANDLE__)->Instance->CR1 : \
- (((((uint8_t)(__INTERRUPT__)) >> 5U) == 2U) ? (__HANDLE__)->Instance->CR2 : \
- (__HANDLE__)->Instance->CR3)) & (1U << (((uint16_t)(__INTERRUPT__)) & UART_IT_MASK))) != RESET) ? SET : RESET)
+ (((((uint8_t)(__INTERRUPT__)) >> 5U) == 2U) ? (__HANDLE__)->Instance->CR2 : \
+ (__HANDLE__)->Instance->CR3)) & (1U << (((uint16_t)(__INTERRUPT__)) & UART_IT_MASK))) != RESET) ? SET : RESET)
/** @brief Clear the specified UART ISR flag, in setting the proper ICR register flag.
* @param __HANDLE__ specifies the UART Handle.
@@ -896,10 +961,14 @@ typedef void (*pUART_CallbackTypeDef)(UART_HandleTypeDef *huart); /*!< pointer
* @arg @ref UART_CLEAR_NEF Noise detected Clear Flag
* @arg @ref UART_CLEAR_OREF Overrun Error Clear Flag
* @arg @ref UART_CLEAR_IDLEF IDLE line detected Clear Flag
+ * @arg @ref UART_CLEAR_RTOF Receiver timeout clear flag
* @arg @ref UART_CLEAR_TCF Transmission Complete Clear Flag
* @arg @ref UART_CLEAR_LBDF LIN Break Detection Clear Flag
* @arg @ref UART_CLEAR_CTSF CTS Interrupt Clear Flag
* @arg @ref UART_CLEAR_CMF Character Match Clear Flag
+ #if defined(USART_CR1_UESM)
+ * @arg @ref UART_CLEAR_WUF Wake Up from stop mode Clear Flag
+#endif
* @retval None
*/
#define __HAL_UART_CLEAR_IT(__HANDLE__, __IT_CLEAR__) ((__HANDLE__)->Instance->ICR = (uint32_t)(__IT_CLEAR__))
@@ -1083,10 +1152,10 @@ typedef void (*pUART_CallbackTypeDef)(UART_HandleTypeDef *huart); /*!< pointer
* @retval SET (__CONTROL__ is valid) or RESET (__CONTROL__ is invalid)
*/
#define IS_UART_HARDWARE_FLOW_CONTROL(__CONTROL__)\
- (((__CONTROL__) == UART_HWCONTROL_NONE) || \
- ((__CONTROL__) == UART_HWCONTROL_RTS) || \
- ((__CONTROL__) == UART_HWCONTROL_CTS) || \
- ((__CONTROL__) == UART_HWCONTROL_RTS_CTS))
+ (((__CONTROL__) == UART_HWCONTROL_NONE) || \
+ ((__CONTROL__) == UART_HWCONTROL_RTS) || \
+ ((__CONTROL__) == UART_HWCONTROL_CTS) || \
+ ((__CONTROL__) == UART_HWCONTROL_RTS_CTS))
/**
* @brief Ensure that UART communication mode is valid.
@@ -1134,8 +1203,15 @@ typedef void (*pUART_CallbackTypeDef)(UART_HandleTypeDef *huart); /*!< pointer
* @param __TIMEOUT__ UART receiver timeout setting.
* @retval SET (__TIMEOUT__ is valid) or RESET (__TIMEOUT__ is invalid)
*/
-#define IS_UART_RECEIVER_TIMEOUT(__TIMEOUT__) (((__TIMEOUT__) == UART_RECEIVER_TIMEOUT_DISABLE) || \
- ((__TIMEOUT__) == UART_RECEIVER_TIMEOUT_ENABLE))
+#define IS_UART_RECEIVER_TIMEOUT(__TIMEOUT__) (((__TIMEOUT__) == UART_RECEIVER_TIMEOUT_DISABLE) || \
+ ((__TIMEOUT__) == UART_RECEIVER_TIMEOUT_ENABLE))
+
+/** @brief Check the receiver timeout value.
+ * @note The maximum UART receiver timeout value is 0xFFFFFF.
+ * @param __TIMEOUTVALUE__ receiver timeout value.
+ * @retval Test result (TRUE or FALSE)
+ */
+#define IS_UART_RECEIVER_TIMEOUT_VALUE(__TIMEOUTVALUE__) ((__TIMEOUTVALUE__) <= 0xFFFFFFU)
/**
* @brief Ensure that UART LIN state is valid.
@@ -1275,6 +1351,16 @@ typedef void (*pUART_CallbackTypeDef)(UART_HandleTypeDef *huart); /*!< pointer
#define IS_UART_ADVFEATURE_MSBFIRST(__MSBFIRST__) (((__MSBFIRST__) == UART_ADVFEATURE_MSBFIRST_DISABLE) || \
((__MSBFIRST__) == UART_ADVFEATURE_MSBFIRST_ENABLE))
+#if defined(USART_CR1_UESM)
+/**
+ * @brief Ensure that UART stop mode state is valid.
+ * @param __STOPMODE__ UART stop mode state.
+ * @retval SET (__STOPMODE__ is valid) or RESET (__STOPMODE__ is invalid)
+ */
+#define IS_UART_ADVFEATURE_STOPMODE(__STOPMODE__) (((__STOPMODE__) == UART_ADVFEATURE_STOPMODE_DISABLE) || \
+ ((__STOPMODE__) == UART_ADVFEATURE_STOPMODE_ENABLE))
+
+#endif /* USART_CR1_UESM */
/**
* @brief Ensure that UART mute mode state is valid.
* @param __MUTE__ UART mute mode state.
@@ -1282,6 +1368,17 @@ typedef void (*pUART_CallbackTypeDef)(UART_HandleTypeDef *huart); /*!< pointer
*/
#define IS_UART_MUTE_MODE(__MUTE__) (((__MUTE__) == UART_ADVFEATURE_MUTEMODE_DISABLE) || \
((__MUTE__) == UART_ADVFEATURE_MUTEMODE_ENABLE))
+#if defined(USART_CR1_UESM)
+
+/**
+ * @brief Ensure that UART wake-up selection is valid.
+ * @param __WAKE__ UART wake-up selection.
+ * @retval SET (__WAKE__ is valid) or RESET (__WAKE__ is invalid)
+ */
+#define IS_UART_WAKEUP_SELECTION(__WAKE__) (((__WAKE__) == UART_WAKEUP_ON_ADDRESS) || \
+ ((__WAKE__) == UART_WAKEUP_ON_STARTBIT) || \
+ ((__WAKE__) == UART_WAKEUP_ON_READDATA_NONEMPTY))
+#endif /* USART_CR1_UESM */
/**
* @brief Ensure that UART driver enable polarity is valid.
@@ -1320,7 +1417,8 @@ void HAL_UART_MspDeInit(UART_HandleTypeDef *huart);
/* Callbacks Register/UnRegister functions ***********************************/
#if (USE_HAL_UART_REGISTER_CALLBACKS == 1)
-HAL_StatusTypeDef HAL_UART_RegisterCallback(UART_HandleTypeDef *huart, HAL_UART_CallbackIDTypeDef CallbackID, pUART_CallbackTypeDef pCallback);
+HAL_StatusTypeDef HAL_UART_RegisterCallback(UART_HandleTypeDef *huart, HAL_UART_CallbackIDTypeDef CallbackID,
+ pUART_CallbackTypeDef pCallback);
HAL_StatusTypeDef HAL_UART_UnRegisterCallback(UART_HandleTypeDef *huart, HAL_UART_CallbackIDTypeDef CallbackID);
#endif /* USE_HAL_UART_REGISTER_CALLBACKS */
@@ -1369,6 +1467,10 @@ void HAL_UART_AbortReceiveCpltCallback(UART_HandleTypeDef *huart);
*/
/* Peripheral Control functions ************************************************/
+void HAL_UART_ReceiverTimeout_Config(UART_HandleTypeDef *huart, uint32_t TimeoutValue);
+HAL_StatusTypeDef HAL_UART_EnableReceiverTimeout(UART_HandleTypeDef *huart);
+HAL_StatusTypeDef HAL_UART_DisableReceiverTimeout(UART_HandleTypeDef *huart);
+
HAL_StatusTypeDef HAL_LIN_SendBreak(UART_HandleTypeDef *huart);
HAL_StatusTypeDef HAL_MultiProcessor_EnableMuteMode(UART_HandleTypeDef *huart);
HAL_StatusTypeDef HAL_MultiProcessor_DisableMuteMode(UART_HandleTypeDef *huart);
@@ -1405,7 +1507,8 @@ void UART_InitCallbacksToDefault(UART_HandleTypeDef *huart);
#endif /* USE_HAL_UART_REGISTER_CALLBACKS */
HAL_StatusTypeDef UART_SetConfig(UART_HandleTypeDef *huart);
HAL_StatusTypeDef UART_CheckIdleState(UART_HandleTypeDef *huart);
-HAL_StatusTypeDef UART_WaitOnFlagUntilTimeout(UART_HandleTypeDef *huart, uint32_t Flag, FlagStatus Status, uint32_t Tickstart, uint32_t Timeout);
+HAL_StatusTypeDef UART_WaitOnFlagUntilTimeout(UART_HandleTypeDef *huart, uint32_t Flag, FlagStatus Status,
+ uint32_t Tickstart, uint32_t Timeout);
void UART_AdvFeatureConfig(UART_HandleTypeDef *huart);
/**
diff --git a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_Keil/Prog/lib/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_uart_ex.h b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_Keil/Prog/lib/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_uart_ex.h
index a5907f57..866a490f 100644
--- a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_Keil/Prog/lib/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_uart_ex.h
+++ b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_Keil/Prog/lib/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_uart_ex.h
@@ -41,7 +41,24 @@ extern "C" {
* @{
*/
+#if defined(USART_CR1_UESM)
+/**
+ * @brief UART wake up from stop mode parameters
+ */
+typedef struct
+{
+ uint32_t WakeUpEvent; /*!< Specifies which event will activate the Wakeup from Stop mode flag (WUF).
+ This parameter can be a value of @ref UART_WakeUp_from_Stop_Selection.
+ If set to UART_WAKEUP_ON_ADDRESS, the two other fields below must
+ be filled up. */
+ uint16_t AddressLength; /*!< Specifies whether the address is 4 or 7-bit long.
+ This parameter can be a value of @ref UARTEx_WakeUp_Address_Length. */
+
+ uint8_t Address; /*!< UART/USART node address (7-bit long max). */
+} UART_WakeUpTypeDef;
+
+#endif /* USART_CR1_UESM */
/**
* @}
*/
@@ -54,9 +71,9 @@ extern "C" {
/** @defgroup UARTEx_Word_Length UARTEx Word Length
* @{
*/
-#define UART_WORDLENGTH_7B USART_CR1_M1 /*!< 7-bit long UART frame */
-#define UART_WORDLENGTH_8B 0x00000000U /*!< 8-bit long UART frame */
-#define UART_WORDLENGTH_9B USART_CR1_M0 /*!< 9-bit long UART frame */
+#define UART_WORDLENGTH_7B USART_CR1_M1 /*!< 7-bit long UART frame */
+#define UART_WORDLENGTH_8B 0x00000000U /*!< 8-bit long UART frame */
+#define UART_WORDLENGTH_9B USART_CR1_M0 /*!< 9-bit long UART frame */
/**
* @}
*/
@@ -64,13 +81,12 @@ extern "C" {
/** @defgroup UARTEx_WakeUp_Address_Length UARTEx WakeUp Address Length
* @{
*/
-#define UART_ADDRESS_DETECT_4B 0x00000000U /*!< 4-bit long wake-up address */
-#define UART_ADDRESS_DETECT_7B USART_CR2_ADDM7 /*!< 7-bit long wake-up address */
+#define UART_ADDRESS_DETECT_4B 0x00000000U /*!< 4-bit long wake-up address */
+#define UART_ADDRESS_DETECT_7B USART_CR2_ADDM7 /*!< 7-bit long wake-up address */
/**
* @}
*/
-
/**
* @}
*/
@@ -86,7 +102,8 @@ extern "C" {
*/
/* Initialization and de-initialization functions ****************************/
-HAL_StatusTypeDef HAL_RS485Ex_Init(UART_HandleTypeDef *huart, uint32_t Polarity, uint32_t AssertionTime, uint32_t DeassertionTime);
+HAL_StatusTypeDef HAL_RS485Ex_Init(UART_HandleTypeDef *huart, uint32_t Polarity, uint32_t AssertionTime,
+ uint32_t DeassertionTime);
/**
* @}
@@ -96,6 +113,10 @@ HAL_StatusTypeDef HAL_RS485Ex_Init(UART_HandleTypeDef *huart, uint32_t Polarity,
* @{
*/
+#if defined(USART_CR1_UESM)
+void HAL_UARTEx_WakeupCallback(UART_HandleTypeDef *huart);
+
+#endif /* USART_CR1_UESM */
/**
* @}
@@ -106,8 +127,20 @@ HAL_StatusTypeDef HAL_RS485Ex_Init(UART_HandleTypeDef *huart, uint32_t Polarity,
*/
/* Peripheral Control functions **********************************************/
+#if defined(USART_CR1_UESM)
+HAL_StatusTypeDef HAL_UARTEx_StopModeWakeUpSourceConfig(UART_HandleTypeDef *huart, UART_WakeUpTypeDef WakeUpSelection);
+HAL_StatusTypeDef HAL_UARTEx_EnableStopMode(UART_HandleTypeDef *huart);
+HAL_StatusTypeDef HAL_UARTEx_DisableStopMode(UART_HandleTypeDef *huart);
+
+#endif/* USART_CR1_UESM */
+#if defined(USART_CR3_UCESM)
+HAL_StatusTypeDef HAL_UARTEx_EnableClockStopMode(UART_HandleTypeDef *huart);
+HAL_StatusTypeDef HAL_UARTEx_DisableClockStopMode(UART_HandleTypeDef *huart);
+
+#endif /* USART_CR3_UCESM */
HAL_StatusTypeDef HAL_MultiProcessorEx_AddressLength_Set(UART_HandleTypeDef *huart, uint32_t AddressLength);
+
/**
* @}
*/
@@ -126,12 +159,12 @@ HAL_StatusTypeDef HAL_MultiProcessorEx_AddressLength_Set(UART_HandleTypeDef *hua
* @param __CLOCKSOURCE__ output variable.
* @retval UART clocking source, written in __CLOCKSOURCE__.
*/
-#define UART_GETCLOCKSOURCE(__HANDLE__,__CLOCKSOURCE__) \
+#define UART_GETCLOCKSOURCE(__HANDLE__,__CLOCKSOURCE__) \
do { \
if((__HANDLE__)->Instance == USART1) \
{ \
- switch(__HAL_RCC_GET_USART1_SOURCE()) \
- { \
+ switch(__HAL_RCC_GET_USART1_SOURCE()) \
+ { \
case RCC_USART1CLKSOURCE_PCLK2: \
(__CLOCKSOURCE__) = UART_CLOCKSOURCE_PCLK2; \
break; \
@@ -147,12 +180,12 @@ HAL_StatusTypeDef HAL_MultiProcessorEx_AddressLength_Set(UART_HandleTypeDef *hua
default: \
(__CLOCKSOURCE__) = UART_CLOCKSOURCE_UNDEFINED; \
break; \
- } \
+ } \
} \
else if((__HANDLE__)->Instance == USART2) \
{ \
- switch(__HAL_RCC_GET_USART2_SOURCE()) \
- { \
+ switch(__HAL_RCC_GET_USART2_SOURCE()) \
+ { \
case RCC_USART2CLKSOURCE_PCLK1: \
(__CLOCKSOURCE__) = UART_CLOCKSOURCE_PCLK1; \
break; \
@@ -168,12 +201,12 @@ HAL_StatusTypeDef HAL_MultiProcessorEx_AddressLength_Set(UART_HandleTypeDef *hua
default: \
(__CLOCKSOURCE__) = UART_CLOCKSOURCE_UNDEFINED; \
break; \
- } \
+ } \
} \
else if((__HANDLE__)->Instance == USART3) \
{ \
- switch(__HAL_RCC_GET_USART3_SOURCE()) \
- { \
+ switch(__HAL_RCC_GET_USART3_SOURCE()) \
+ { \
case RCC_USART3CLKSOURCE_PCLK1: \
(__CLOCKSOURCE__) = UART_CLOCKSOURCE_PCLK1; \
break; \
@@ -189,12 +222,12 @@ HAL_StatusTypeDef HAL_MultiProcessorEx_AddressLength_Set(UART_HandleTypeDef *hua
default: \
(__CLOCKSOURCE__) = UART_CLOCKSOURCE_UNDEFINED; \
break; \
- } \
+ } \
} \
else if((__HANDLE__)->Instance == UART4) \
{ \
- switch(__HAL_RCC_GET_UART4_SOURCE()) \
- { \
+ switch(__HAL_RCC_GET_UART4_SOURCE()) \
+ { \
case RCC_UART4CLKSOURCE_PCLK1: \
(__CLOCKSOURCE__) = UART_CLOCKSOURCE_PCLK1; \
break; \
@@ -210,12 +243,12 @@ HAL_StatusTypeDef HAL_MultiProcessorEx_AddressLength_Set(UART_HandleTypeDef *hua
default: \
(__CLOCKSOURCE__) = UART_CLOCKSOURCE_UNDEFINED; \
break; \
- } \
+ } \
} \
else if ((__HANDLE__)->Instance == UART5) \
{ \
- switch(__HAL_RCC_GET_UART5_SOURCE()) \
- { \
+ switch(__HAL_RCC_GET_UART5_SOURCE()) \
+ { \
case RCC_UART5CLKSOURCE_PCLK1: \
(__CLOCKSOURCE__) = UART_CLOCKSOURCE_PCLK1; \
break; \
@@ -231,12 +264,12 @@ HAL_StatusTypeDef HAL_MultiProcessorEx_AddressLength_Set(UART_HandleTypeDef *hua
default: \
(__CLOCKSOURCE__) = UART_CLOCKSOURCE_UNDEFINED; \
break; \
- } \
+ } \
} \
else if((__HANDLE__)->Instance == USART6) \
{ \
- switch(__HAL_RCC_GET_USART6_SOURCE()) \
- { \
+ switch(__HAL_RCC_GET_USART6_SOURCE()) \
+ { \
case RCC_USART6CLKSOURCE_PCLK2: \
(__CLOCKSOURCE__) = UART_CLOCKSOURCE_PCLK2; \
break; \
@@ -252,12 +285,12 @@ HAL_StatusTypeDef HAL_MultiProcessorEx_AddressLength_Set(UART_HandleTypeDef *hua
default: \
(__CLOCKSOURCE__) = UART_CLOCKSOURCE_UNDEFINED; \
break; \
- } \
+ } \
} \
else if ((__HANDLE__)->Instance == UART7) \
{ \
- switch(__HAL_RCC_GET_UART7_SOURCE()) \
- { \
+ switch(__HAL_RCC_GET_UART7_SOURCE()) \
+ { \
case RCC_UART7CLKSOURCE_PCLK1: \
(__CLOCKSOURCE__) = UART_CLOCKSOURCE_PCLK1; \
break; \
@@ -273,12 +306,12 @@ HAL_StatusTypeDef HAL_MultiProcessorEx_AddressLength_Set(UART_HandleTypeDef *hua
default: \
(__CLOCKSOURCE__) = UART_CLOCKSOURCE_UNDEFINED; \
break; \
- } \
+ } \
} \
else if ((__HANDLE__)->Instance == UART8) \
{ \
- switch(__HAL_RCC_GET_UART8_SOURCE()) \
- { \
+ switch(__HAL_RCC_GET_UART8_SOURCE()) \
+ { \
case RCC_UART8CLKSOURCE_PCLK1: \
(__CLOCKSOURCE__) = UART_CLOCKSOURCE_PCLK1; \
break; \
@@ -294,7 +327,7 @@ HAL_StatusTypeDef HAL_MultiProcessorEx_AddressLength_Set(UART_HandleTypeDef *hua
default: \
(__CLOCKSOURCE__) = UART_CLOCKSOURCE_UNDEFINED; \
break; \
- } \
+ } \
} \
else \
{ \
@@ -313,44 +346,44 @@ HAL_StatusTypeDef HAL_MultiProcessorEx_AddressLength_Set(UART_HandleTypeDef *hua
*/
#define UART_MASK_COMPUTATION(__HANDLE__) \
do { \
- if ((__HANDLE__)->Init.WordLength == UART_WORDLENGTH_9B) \
- { \
- if ((__HANDLE__)->Init.Parity == UART_PARITY_NONE) \
- { \
+ if ((__HANDLE__)->Init.WordLength == UART_WORDLENGTH_9B) \
+ { \
+ if ((__HANDLE__)->Init.Parity == UART_PARITY_NONE) \
+ { \
(__HANDLE__)->Mask = 0x01FFU ; \
- } \
- else \
- { \
+ } \
+ else \
+ { \
(__HANDLE__)->Mask = 0x00FFU ; \
- } \
- } \
- else if ((__HANDLE__)->Init.WordLength == UART_WORDLENGTH_8B) \
- { \
- if ((__HANDLE__)->Init.Parity == UART_PARITY_NONE) \
- { \
+ } \
+ } \
+ else if ((__HANDLE__)->Init.WordLength == UART_WORDLENGTH_8B) \
+ { \
+ if ((__HANDLE__)->Init.Parity == UART_PARITY_NONE) \
+ { \
(__HANDLE__)->Mask = 0x00FFU ; \
- } \
- else \
- { \
+ } \
+ else \
+ { \
(__HANDLE__)->Mask = 0x007FU ; \
- } \
- } \
- else if ((__HANDLE__)->Init.WordLength == UART_WORDLENGTH_7B) \
- { \
- if ((__HANDLE__)->Init.Parity == UART_PARITY_NONE) \
- { \
+ } \
+ } \
+ else if ((__HANDLE__)->Init.WordLength == UART_WORDLENGTH_7B) \
+ { \
+ if ((__HANDLE__)->Init.Parity == UART_PARITY_NONE) \
+ { \
(__HANDLE__)->Mask = 0x007FU ; \
- } \
- else \
- { \
+ } \
+ else \
+ { \
(__HANDLE__)->Mask = 0x003FU ; \
- } \
- } \
- else \
- { \
- (__HANDLE__)->Mask = 0x0000U; \
- } \
-} while(0U)
+ } \
+ } \
+ else \
+ { \
+ (__HANDLE__)->Mask = 0x0000U; \
+ } \
+ } while(0U)
/**
* @brief Ensure that UART frame length is valid.
@@ -369,7 +402,6 @@ HAL_StatusTypeDef HAL_MultiProcessorEx_AddressLength_Set(UART_HandleTypeDef *hua
#define IS_UART_ADDRESSLENGTH_DETECT(__ADDRESS__) (((__ADDRESS__) == UART_ADDRESS_DETECT_4B) || \
((__ADDRESS__) == UART_ADDRESS_DETECT_7B))
-
/**
* @}
*/
diff --git a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_Keil/Prog/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal.c b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_Keil/Prog/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal.c
index 81a39d76..48bbd535 100644
--- a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_Keil/Prog/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal.c
+++ b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_Keil/Prog/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal.c
@@ -50,11 +50,11 @@
* @{
*/
/**
- * @brief STM32F7xx HAL Driver version number V1.2.7
+ * @brief STM32F7xx HAL Driver version number V1.2.8
*/
#define __STM32F7xx_HAL_VERSION_MAIN (0x01) /*!< [31:24] main version */
#define __STM32F7xx_HAL_VERSION_SUB1 (0x02) /*!< [23:16] sub1 version */
-#define __STM32F7xx_HAL_VERSION_SUB2 (0x07) /*!< [15:8] sub2 version */
+#define __STM32F7xx_HAL_VERSION_SUB2 (0x08) /*!< [15:8] sub2 version */
#define __STM32F7xx_HAL_VERSION_RC (0x00) /*!< [7:0] release candidate */
#define __STM32F7xx_HAL_VERSION ((__STM32F7xx_HAL_VERSION_MAIN << 24)\
|(__STM32F7xx_HAL_VERSION_SUB1 << 16)\
@@ -319,14 +319,26 @@ uint32_t HAL_GetTickPrio(void)
HAL_StatusTypeDef HAL_SetTickFreq(HAL_TickFreqTypeDef Freq)
{
HAL_StatusTypeDef status = HAL_OK;
+ HAL_TickFreqTypeDef prevTickFreq;
+
assert_param(IS_TICKFREQ(Freq));
if (uwTickFreq != Freq)
{
+ /* Back up uwTickFreq frequency */
+ prevTickFreq = uwTickFreq;
+
+ /* Update uwTickFreq global variable used by HAL_InitTick() */
uwTickFreq = Freq;
/* Apply the new tick Freq */
status = HAL_InitTick(uwTickPrio);
+
+ if (status != HAL_OK)
+ {
+ /* Restore previous tick frequency */
+ uwTickFreq = prevTickFreq;
+ }
}
return status;
diff --git a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_Keil/Prog/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_can.c b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_Keil/Prog/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_can.c
index 6978c4da..a381dfc4 100644
--- a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_Keil/Prog/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_can.c
+++ b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_Keil/Prog/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_can.c
@@ -1556,7 +1556,7 @@ HAL_StatusTypeDef HAL_CAN_GetRxMessage(CAN_HandleTypeDef *hcan, uint32_t RxFifo,
{
pHeader->ExtId = ((CAN_RI0R_EXID | CAN_RI0R_STID) & hcan->Instance->sFIFOMailBox[RxFifo].RIR) >> CAN_RI0R_EXID_Pos;
}
- pHeader->RTR = (CAN_RI0R_RTR & hcan->Instance->sFIFOMailBox[RxFifo].RIR) >> CAN_RI0R_RTR_Pos;
+ pHeader->RTR = (CAN_RI0R_RTR & hcan->Instance->sFIFOMailBox[RxFifo].RIR);
pHeader->DLC = (CAN_RDT0R_DLC & hcan->Instance->sFIFOMailBox[RxFifo].RDTR) >> CAN_RDT0R_DLC_Pos;
pHeader->FilterMatchIndex = (CAN_RDT0R_FMI & hcan->Instance->sFIFOMailBox[RxFifo].RDTR) >> CAN_RDT0R_FMI_Pos;
pHeader->Timestamp = (CAN_RDT0R_TIME & hcan->Instance->sFIFOMailBox[RxFifo].RDTR) >> CAN_RDT0R_TIME_Pos;
diff --git a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_Keil/Prog/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_exti.c b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_Keil/Prog/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_exti.c
index 07e53536..246f4562 100644
--- a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_Keil/Prog/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_exti.c
+++ b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_Keil/Prog/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_exti.c
@@ -85,7 +85,6 @@
/* Includes ------------------------------------------------------------------*/
#include "stm32f7xx_hal.h"
-#include "stm32f7xx_hal_exti.h"
/** @addtogroup STM32F7xx_HAL_Driver
* @{
@@ -105,7 +104,7 @@
#ifdef HAL_EXTI_MODULE_ENABLED
/* Private typedef -----------------------------------------------------------*/
-/* Private defines ------------------------------------------------------------*/
+/* Private defines -----------------------------------------------------------*/
/** @defgroup EXTI_Private_Constants EXTI Private Constants
* @{
*/
@@ -144,6 +143,8 @@
HAL_StatusTypeDef HAL_EXTI_SetConfigLine(EXTI_HandleTypeDef *hexti, EXTI_ConfigTypeDef *pExtiConfig)
{
uint32_t regval;
+ uint32_t linepos;
+ uint32_t maskline;
/* Check null pointer */
if ((hexti == NULL) || (pExtiConfig == NULL))
@@ -154,37 +155,77 @@ HAL_StatusTypeDef HAL_EXTI_SetConfigLine(EXTI_HandleTypeDef *hexti, EXTI_ConfigT
/* Check parameters */
assert_param(IS_EXTI_LINE(pExtiConfig->Line));
assert_param(IS_EXTI_MODE(pExtiConfig->Mode));
- assert_param(IS_EXTI_TRIGGER(pExtiConfig->Trigger));
-
+
/* Assign line number to handle */
hexti->Line = pExtiConfig->Line;
-
- /* Clear EXTI line configuration */
- EXTI->IMR &= ~pExtiConfig->Line;
- EXTI->EMR &= ~pExtiConfig->Line;
-
- /* Select the Mode for the selected external interrupts */
- regval = (uint32_t)EXTI_BASE;
- regval += pExtiConfig->Mode;
- *(__IO uint32_t *) regval |= pExtiConfig->Line;
-
- /* Clear Rising Falling edge configuration */
- EXTI->RTSR &= ~pExtiConfig->Line;
- EXTI->FTSR &= ~pExtiConfig->Line;
-
- /* Select the trigger for the selected external interrupts */
- if (pExtiConfig->Trigger == EXTI_TRIGGER_RISING_FALLING)
+
+ /* Compute line mask */
+ linepos = (pExtiConfig->Line & EXTI_PIN_MASK);
+ maskline = (1uL << linepos);
+
+ /* Configure triggers for configurable lines */
+ if ((pExtiConfig->Line & EXTI_CONFIG) != 0x00u)
{
- /* Rising Falling edge */
- EXTI->RTSR |= pExtiConfig->Line;
- EXTI->FTSR |= pExtiConfig->Line;
+ assert_param(IS_EXTI_TRIGGER(pExtiConfig->Trigger));
+
+ /* Configure rising trigger */
+ /* Mask or set line */
+ if ((pExtiConfig->Trigger & EXTI_TRIGGER_RISING) != 0x00u)
+ {
+ EXTI->RTSR |= maskline;
+ }
+ else
+ {
+ EXTI->RTSR &= ~maskline;
+ }
+
+ /* Configure falling trigger */
+ /* Mask or set line */
+ if ((pExtiConfig->Trigger & EXTI_TRIGGER_FALLING) != 0x00u)
+ {
+ EXTI->FTSR |= maskline;
+ }
+ else
+ {
+ EXTI->FTSR &= ~maskline;
+ }
+
+
+ /* Configure gpio port selection in case of gpio exti line */
+ if ((pExtiConfig->Line & EXTI_GPIO) == EXTI_GPIO)
+ {
+ assert_param(IS_EXTI_GPIO_PORT(pExtiConfig->GPIOSel));
+ assert_param(IS_EXTI_GPIO_PIN(linepos));
+
+ regval = SYSCFG->EXTICR[linepos >> 2u];
+ regval &= ~(SYSCFG_EXTICR1_EXTI0 << (SYSCFG_EXTICR1_EXTI1_Pos * (linepos & 0x03u)));
+ regval |= (pExtiConfig->GPIOSel << (SYSCFG_EXTICR1_EXTI1_Pos * (linepos & 0x03u)));
+ SYSCFG->EXTICR[linepos >> 2u] = regval;
+ }
+ }
+
+ /* Configure interrupt mode : read current mode */
+ /* Mask or set line */
+ if ((pExtiConfig->Mode & EXTI_MODE_INTERRUPT) != 0x00u)
+ {
+ EXTI->IMR |= maskline;
}
else
{
- regval = (uint32_t)EXTI_BASE;
- regval += pExtiConfig->Trigger;
- *(__IO uint32_t *) regval |= pExtiConfig->Line;
+ EXTI->IMR &= ~maskline;
}
+
+ /* Configure event mode : read current mode */
+ /* Mask or set line */
+ if ((pExtiConfig->Mode & EXTI_MODE_EVENT) != 0x00u)
+ {
+ EXTI->EMR |= maskline;
+ }
+ else
+ {
+ EXTI->EMR &= ~maskline;
+ }
+
return HAL_OK;
}
@@ -196,6 +237,10 @@ HAL_StatusTypeDef HAL_EXTI_SetConfigLine(EXTI_HandleTypeDef *hexti, EXTI_ConfigT
*/
HAL_StatusTypeDef HAL_EXTI_GetConfigLine(EXTI_HandleTypeDef *hexti, EXTI_ConfigTypeDef *pExtiConfig)
{
+ uint32_t regval;
+ uint32_t linepos;
+ uint32_t maskline;
+
/* Check null pointer */
if ((hexti == NULL) || (pExtiConfig == NULL))
{
@@ -208,41 +253,67 @@ HAL_StatusTypeDef HAL_EXTI_GetConfigLine(EXTI_HandleTypeDef *hexti, EXTI_ConfigT
/* Store handle line number to configuration structure */
pExtiConfig->Line = hexti->Line;
- /* Get EXTI mode to configiguration structure */
- if ((EXTI->IMR & hexti->Line) == hexti->Line)
+ /* Compute line mask */
+ linepos = (pExtiConfig->Line & EXTI_PIN_MASK);
+ maskline = (1uL << linepos);
+
+ /* 1] Get core mode : interrupt */
+
+ /* Check if selected line is enable */
+ if ((EXTI->IMR & maskline) != 0x00u)
{
pExtiConfig->Mode = EXTI_MODE_INTERRUPT;
}
- else if ((EXTI->EMR & hexti->Line) == hexti->Line)
- {
- pExtiConfig->Mode = EXTI_MODE_EVENT;
- }
else
{
- /* No MODE selected */
- pExtiConfig->Mode = 0x0Bu;
+ pExtiConfig->Mode = EXTI_MODE_NONE;
}
- /* Get EXTI Trigger to configiguration structure */
- if ((EXTI->RTSR & hexti->Line) == hexti->Line)
+ /* Get event mode */
+ /* Check if selected line is enable */
+ if ((EXTI->EMR & maskline) != 0x00u)
{
- if ((EXTI->FTSR & hexti->Line) == hexti->Line)
- {
- pExtiConfig->Trigger = EXTI_TRIGGER_RISING_FALLING;
- }
- else
+ pExtiConfig->Mode |= EXTI_MODE_EVENT;
+ }
+
+ /* 2] Get trigger for configurable lines : rising */
+ if ((pExtiConfig->Line & EXTI_CONFIG) != 0x00u)
+ {
+ /* Check if configuration of selected line is enable */
+ if ((EXTI->RTSR & maskline) != 0x00u)
{
pExtiConfig->Trigger = EXTI_TRIGGER_RISING;
}
- }
- else if ((EXTI->FTSR & hexti->Line) == hexti->Line)
- {
- pExtiConfig->Trigger = EXTI_TRIGGER_FALLING;
+ else
+ {
+ pExtiConfig->Trigger = EXTI_TRIGGER_NONE;
+ }
+
+ /* Get falling configuration */
+ /* Check if configuration of selected line is enable */
+ if ((EXTI->FTSR & maskline) != 0x00u)
+ {
+ pExtiConfig->Trigger |= EXTI_TRIGGER_FALLING;
+ }
+
+ /* Get Gpio port selection for gpio lines */
+ if ((pExtiConfig->Line & EXTI_GPIO) == EXTI_GPIO)
+ {
+ assert_param(IS_EXTI_GPIO_PIN(linepos));
+
+ regval = SYSCFG->EXTICR[linepos >> 2u];
+ pExtiConfig->GPIOSel = ((regval << (SYSCFG_EXTICR1_EXTI1_Pos * (3uL - (linepos & 0x03u)))) >> 24);
+ }
+ else
+ {
+ pExtiConfig->GPIOSel = 0x00u;
+ }
}
else
{
/* No Trigger selected */
- pExtiConfig->Trigger = 0x00u;
+ pExtiConfig->Trigger = EXTI_TRIGGER_NONE;
+ pExtiConfig->GPIOSel = 0x00u;
}
return HAL_OK;
@@ -255,6 +326,10 @@ HAL_StatusTypeDef HAL_EXTI_GetConfigLine(EXTI_HandleTypeDef *hexti, EXTI_ConfigT
*/
HAL_StatusTypeDef HAL_EXTI_ClearConfigLine(EXTI_HandleTypeDef *hexti)
{
+ uint32_t regval;
+ uint32_t linepos;
+ uint32_t maskline;
+
/* Check null pointer */
if (hexti == NULL)
{
@@ -264,15 +339,32 @@ HAL_StatusTypeDef HAL_EXTI_ClearConfigLine(EXTI_HandleTypeDef *hexti)
/* Check the parameter */
assert_param(IS_EXTI_LINE(hexti->Line));
+ /* compute line mask */
+ linepos = (hexti->Line & EXTI_PIN_MASK);
+ maskline = (1uL << linepos);
+
/* 1] Clear interrupt mode */
- EXTI->IMR = (EXTI->IMR & ~hexti->Line);
+ EXTI->IMR = (EXTI->IMR & ~maskline);
/* 2] Clear event mode */
- EXTI->EMR = (EXTI->EMR & ~hexti->Line);
+ EXTI->EMR = (EXTI->EMR & ~maskline);
- /* 3] Clear triggers */
- EXTI->RTSR = (EXTI->RTSR & ~hexti->Line);
- EXTI->FTSR = (EXTI->FTSR & ~hexti->Line);
+ /* 3] Clear triggers in case of configurable lines */
+ if ((hexti->Line & EXTI_CONFIG) != 0x00u)
+ {
+ EXTI->RTSR = (EXTI->RTSR & ~maskline);
+ EXTI->FTSR = (EXTI->FTSR & ~maskline);
+
+ /* Get Gpio port selection for gpio lines */
+ if ((hexti->Line & EXTI_GPIO) == EXTI_GPIO)
+ {
+ assert_param(IS_EXTI_GPIO_PIN(linepos));
+
+ regval = SYSCFG->EXTICR[linepos >> 2u];
+ regval &= ~(SYSCFG_EXTICR1_EXTI0 << (SYSCFG_EXTICR1_EXTI1_Pos * (linepos & 0x03u)));
+ SYSCFG->EXTICR[linepos >> 2u] = regval;
+ }
+ }
return HAL_OK;
}
@@ -352,17 +444,18 @@ HAL_StatusTypeDef HAL_EXTI_GetHandle(EXTI_HandleTypeDef *hexti, uint32_t ExtiLin
*/
void HAL_EXTI_IRQHandler(EXTI_HandleTypeDef *hexti)
{
- __IO uint32_t *regaddr;
uint32_t regval;
+ uint32_t maskline;
+
+ /* Compute line mask */
+ maskline = (1uL << (hexti->Line & EXTI_PIN_MASK));
/* Get pending bit */
- regaddr = (&EXTI->PR);
- regval = (*regaddr & hexti->Line);
-
+ regval = (EXTI->PR & maskline);
if (regval != 0x00u)
{
/* Clear pending bit */
- *regaddr = hexti->Line;
+ EXTI->PR = maskline;
/* Call callback */
if (hexti->PendingCallback != NULL)
@@ -383,19 +476,21 @@ void HAL_EXTI_IRQHandler(EXTI_HandleTypeDef *hexti)
*/
uint32_t HAL_EXTI_GetPending(EXTI_HandleTypeDef *hexti, uint32_t Edge)
{
- __IO uint32_t *regaddr;
uint32_t regval;
+ uint32_t linepos;
+ uint32_t maskline;
/* Check parameters */
assert_param(IS_EXTI_LINE(hexti->Line));
+ assert_param(IS_EXTI_CONFIG_LINE(hexti->Line));
assert_param(IS_EXTI_PENDING_EDGE(Edge));
- /* Get pending bit */
- regaddr = &EXTI->PR;
+ /* Compute line mask */
+ linepos = (hexti->Line & EXTI_PIN_MASK);
+ maskline = (1uL << linepos);
/* return 1 if bit is set else 0 */
- regval = ((*regaddr & hexti->Line) >> POSITION_VAL(hexti->Line));
-
+ regval = ((EXTI->PR & maskline) >> linepos);
return regval;
}
@@ -410,12 +505,18 @@ uint32_t HAL_EXTI_GetPending(EXTI_HandleTypeDef *hexti, uint32_t Edge)
*/
void HAL_EXTI_ClearPending(EXTI_HandleTypeDef *hexti, uint32_t Edge)
{
+ uint32_t maskline;
+
/* Check parameters */
assert_param(IS_EXTI_LINE(hexti->Line));
+ assert_param(IS_EXTI_CONFIG_LINE(hexti->Line));
assert_param(IS_EXTI_PENDING_EDGE(Edge));
-
+
+ /* Compute line mask */
+ maskline = (1uL << (hexti->Line & EXTI_PIN_MASK));
+
/* Clear Pending bit */
- EXTI->PR = hexti->Line;
+ EXTI->PR = maskline;
}
/**
@@ -425,10 +526,17 @@ void HAL_EXTI_ClearPending(EXTI_HandleTypeDef *hexti, uint32_t Edge)
*/
void HAL_EXTI_GenerateSWI(EXTI_HandleTypeDef *hexti)
{
+ uint32_t maskline;
+
/* Check parameters */
assert_param(IS_EXTI_LINE(hexti->Line));
+ assert_param(IS_EXTI_CONFIG_LINE(hexti->Line));
- EXTI->SWIER = hexti->Line;
+ /* Compute line mask */
+ maskline = (1uL << (hexti->Line & EXTI_PIN_MASK));
+
+ /* Generate Software interrupt */
+ EXTI->SWIER = maskline;
}
/**
diff --git a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_Keil/Prog/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_gpio.c b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_Keil/Prog/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_gpio.c
index ffc617dd..0afa1df1 100644
--- a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_Keil/Prog/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_gpio.c
+++ b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_Keil/Prog/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_gpio.c
@@ -190,25 +190,6 @@ void HAL_GPIO_Init(GPIO_TypeDef *GPIOx, GPIO_InitTypeDef *GPIO_Init)
if(iocurrent == ioposition)
{
/*--------------------- GPIO Mode Configuration ------------------------*/
- /* In case of Alternate function mode selection */
- if((GPIO_Init->Mode == GPIO_MODE_AF_PP) || (GPIO_Init->Mode == GPIO_MODE_AF_OD))
- {
- /* Check the Alternate function parameter */
- assert_param(IS_GPIO_AF(GPIO_Init->Alternate));
-
- /* Configure Alternate function mapped with the current IO */
- temp = GPIOx->AFR[position >> 3];
- temp &= ~((uint32_t)0xF << ((uint32_t)(position & (uint32_t)0x07) * 4)) ;
- temp |= ((uint32_t)(GPIO_Init->Alternate) << (((uint32_t)position & (uint32_t)0x07) * 4));
- GPIOx->AFR[position >> 3] = temp;
- }
-
- /* Configure IO Direction mode (Input, Output, Alternate or Analog) */
- temp = GPIOx->MODER;
- temp &= ~(GPIO_MODER_MODER0 << (position * 2));
- temp |= ((GPIO_Init->Mode & GPIO_MODE) << (position * 2));
- GPIOx->MODER = temp;
-
/* In case of Output or Alternate function mode selection */
if((GPIO_Init->Mode == GPIO_MODE_OUTPUT_PP) || (GPIO_Init->Mode == GPIO_MODE_AF_PP) ||
(GPIO_Init->Mode == GPIO_MODE_OUTPUT_OD) || (GPIO_Init->Mode == GPIO_MODE_AF_OD))
@@ -234,6 +215,25 @@ void HAL_GPIO_Init(GPIO_TypeDef *GPIOx, GPIO_InitTypeDef *GPIO_Init)
temp |= ((GPIO_Init->Pull) << (position * 2));
GPIOx->PUPDR = temp;
+ /* In case of Alternate function mode selection */
+ if((GPIO_Init->Mode == GPIO_MODE_AF_PP) || (GPIO_Init->Mode == GPIO_MODE_AF_OD))
+ {
+ /* Check the Alternate function parameter */
+ assert_param(IS_GPIO_AF(GPIO_Init->Alternate));
+
+ /* Configure Alternate function mapped with the current IO */
+ temp = GPIOx->AFR[position >> 3];
+ temp &= ~((uint32_t)0xF << ((uint32_t)(position & (uint32_t)0x07) * 4)) ;
+ temp |= ((uint32_t)(GPIO_Init->Alternate) << (((uint32_t)position & (uint32_t)0x07) * 4));
+ GPIOx->AFR[position >> 3] = temp;
+ }
+
+ /* Configure IO Direction mode (Input, Output, Alternate or Analog) */
+ temp = GPIOx->MODER;
+ temp &= ~(GPIO_MODER_MODER0 << (position * 2));
+ temp |= ((GPIO_Init->Mode & GPIO_MODE) << (position * 2));
+ GPIOx->MODER = temp;
+
/*--------------------- EXTI Mode Configuration ------------------------*/
/* Configure the External Interrupt or event for the current IO */
if((GPIO_Init->Mode & EXTI_MODE) == EXTI_MODE)
@@ -300,7 +300,7 @@ void HAL_GPIO_DeInit(GPIO_TypeDef *GPIOx, uint32_t GPIO_Pin)
/* Check the parameters */
assert_param(IS_GPIO_ALL_INSTANCE(GPIOx));
-
+
/* Configure the port pins */
for(position = 0; position < GPIO_NUMBER; position++)
{
@@ -316,10 +316,6 @@ void HAL_GPIO_DeInit(GPIO_TypeDef *GPIOx, uint32_t GPIO_Pin)
tmp &= (((uint32_t)0x0F) << (4 * (position & 0x03)));
if(tmp == ((uint32_t)(GPIO_GET_INDEX(GPIOx)) << (4 * (position & 0x03))))
{
- /* Configure the External Interrupt or event for the current IO */
- tmp = ((uint32_t)0x0F) << (4 * (position & 0x03));
- SYSCFG->EXTICR[position >> 2] &= ~tmp;
-
/* Clear EXTI line configuration */
EXTI->IMR &= ~((uint32_t)iocurrent);
EXTI->EMR &= ~((uint32_t)iocurrent);
@@ -327,6 +323,10 @@ void HAL_GPIO_DeInit(GPIO_TypeDef *GPIOx, uint32_t GPIO_Pin)
/* Clear Rising Falling edge configuration */
EXTI->RTSR &= ~((uint32_t)iocurrent);
EXTI->FTSR &= ~((uint32_t)iocurrent);
+
+ /* Configure the External Interrupt or event for the current IO */
+ tmp = ((uint32_t)0x0F) << (4 * (position & 0x03));
+ SYSCFG->EXTICR[position >> 2] &= ~tmp;
}
/*------------------------- GPIO Mode Configuration --------------------*/
/* Configure IO Direction in Input Floating Mode */
@@ -335,14 +335,14 @@ void HAL_GPIO_DeInit(GPIO_TypeDef *GPIOx, uint32_t GPIO_Pin)
/* Configure the default Alternate Function in current IO */
GPIOx->AFR[position >> 3] &= ~((uint32_t)0xF << ((uint32_t)(position & (uint32_t)0x07) * 4)) ;
- /* Configure the default value for IO Speed */
- GPIOx->OSPEEDR &= ~(GPIO_OSPEEDER_OSPEEDR0 << (position * 2));
+ /* Deactivate the Pull-up and Pull-down resistor for the current IO */
+ GPIOx->PUPDR &= ~(GPIO_PUPDR_PUPDR0 << (position * 2));
/* Configure the default value IO Output Type */
GPIOx->OTYPER &= ~(GPIO_OTYPER_OT_0 << position) ;
- /* Deactivate the Pull-up and Pull-down resistor for the current IO */
- GPIOx->PUPDR &= ~(GPIO_PUPDR_PUPDR0 << (position * 2));
+ /* Configure the default value for IO Speed */
+ GPIOx->OSPEEDR &= ~(GPIO_OSPEEDER_OSPEEDR0 << (position * 2));
}
}
}
@@ -431,13 +431,13 @@ void HAL_GPIO_TogglePin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
/* Check the parameters */
assert_param(IS_GPIO_PIN(GPIO_Pin));
- if ((GPIOx->ODR & GPIO_Pin) == GPIO_Pin)
+ if ((GPIOx->ODR & GPIO_Pin) != 0X00u)
{
GPIOx->BSRR = (uint32_t)GPIO_Pin << GPIO_NUMBER;
}
else
{
- GPIOx->BSRR = GPIO_Pin;
+ GPIOx->BSRR = (uint32_t)GPIO_Pin;
}
}
@@ -467,10 +467,11 @@ HAL_StatusTypeDef HAL_GPIO_LockPin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
GPIOx->LCKR = GPIO_Pin;
/* Set LCKx bit(s): LCKK='1' + LCK[15-0] */
GPIOx->LCKR = tmp;
- /* Read LCKK bit*/
+ /* Read LCKR register. This read is mandatory to complete key lock sequence */
tmp = GPIOx->LCKR;
- if((GPIOx->LCKR & GPIO_LCKR_LCKK) != RESET)
+ /* Read again in order to confirm lock is active */
+ if((GPIOx->LCKR & GPIO_LCKR_LCKK) != RESET)
{
return HAL_OK;
}
diff --git a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_Keil/Prog/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_i2c.c b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_Keil/Prog/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_i2c.c
index 775bff23..ef049ec4 100644
--- a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_Keil/Prog/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_i2c.c
+++ b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_Keil/Prog/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_i2c.c
@@ -223,12 +223,12 @@
*** Callback registration ***
=============================================
-
+ [..]
The compilation flag USE_HAL_I2C_REGISTER_CALLBACKS when set to 1
allows the user to configure dynamically the driver callbacks.
Use Functions @ref HAL_I2C_RegisterCallback() or @ref HAL_I2C_RegisterAddrCallback()
to register an interrupt callback.
-
+ [..]
Function @ref HAL_I2C_RegisterCallback() allows to register following callbacks:
(+) MasterTxCpltCallback : callback for Master transmission end of transfer.
(+) MasterRxCpltCallback : callback for Master reception end of transfer.
@@ -243,9 +243,9 @@
(+) MspDeInitCallback : callback for Msp DeInit.
This function takes as parameters the HAL peripheral handle, the Callback ID
and a pointer to the user callback function.
-
+ [..]
For specific callback AddrCallback use dedicated register callbacks : @ref HAL_I2C_RegisterAddrCallback().
-
+ [..]
Use function @ref HAL_I2C_UnRegisterCallback to reset a callback to the default
weak function.
@ref HAL_I2C_UnRegisterCallback takes as parameters the HAL peripheral handle,
@@ -262,9 +262,9 @@
(+) AbortCpltCallback : callback for abort completion process.
(+) MspInitCallback : callback for Msp Init.
(+) MspDeInitCallback : callback for Msp DeInit.
-
+ [..]
For callback AddrCallback use dedicated register callbacks : @ref HAL_I2C_UnRegisterAddrCallback().
-
+ [..]
By default, after the @ref HAL_I2C_Init() and when the state is @ref HAL_I2C_STATE_RESET
all callbacks are set to the corresponding weak functions:
examples @ref HAL_I2C_MasterTxCpltCallback(), @ref HAL_I2C_MasterRxCpltCallback().
@@ -273,7 +273,7 @@
these callbacks are null (not registered beforehand).
If MspInit or MspDeInit are not null, the @ref HAL_I2C_Init()/ @ref HAL_I2C_DeInit()
keep and use the user MspInit/MspDeInit callbacks (registered beforehand) whatever the state.
-
+ [..]
Callbacks can be registered/unregistered in @ref HAL_I2C_STATE_READY state only.
Exception done MspInit/MspDeInit functions that can be registered/unregistered
in @ref HAL_I2C_STATE_READY or @ref HAL_I2C_STATE_RESET state,
@@ -281,7 +281,7 @@
Then, the user first registers the MspInit/MspDeInit user callbacks
using @ref HAL_I2C_RegisterCallback() before calling @ref HAL_I2C_DeInit()
or @ref HAL_I2C_Init() function.
-
+ [..]
When the compilation flag USE_HAL_I2C_REGISTER_CALLBACKS is set to 0 or
not defined, the callback registration feature is not available and all callbacks
are set to the corresponding weak functions.
@@ -4737,6 +4737,13 @@ static HAL_StatusTypeDef I2C_Slave_ISR_IT(struct __I2C_HandleTypeDef *hi2c, uint
/* Process locked */
__HAL_LOCK(hi2c);
+ /* Check if STOPF is set */
+ if ((I2C_CHECK_FLAG(tmpITFlags, I2C_FLAG_STOPF) != RESET) && (I2C_CHECK_IT_SOURCE(ITSources, I2C_IT_STOPI) != RESET))
+ {
+ /* Call I2C Slave complete process */
+ I2C_ITSlaveCplt(hi2c, tmpITFlags);
+ }
+
if ((I2C_CHECK_FLAG(tmpITFlags, I2C_FLAG_AF) != RESET) && (I2C_CHECK_IT_SOURCE(ITSources, I2C_IT_NACKI) != RESET))
{
/* Check that I2C transfer finished */
@@ -4788,9 +4795,6 @@ static HAL_StatusTypeDef I2C_Slave_ISR_IT(struct __I2C_HandleTypeDef *hi2c, uint
{
if (hi2c->XferCount > 0U)
{
- /* Remove RXNE flag on temporary variable as read done */
- tmpITFlags &= ~I2C_FLAG_RXNE;
-
/* Read data from RXDR */
*hi2c->pBuffPtr = (uint8_t)hi2c->Instance->RXDR;
@@ -4844,13 +4848,6 @@ static HAL_StatusTypeDef I2C_Slave_ISR_IT(struct __I2C_HandleTypeDef *hi2c, uint
/* Nothing to do */
}
- /* Check if STOPF is set */
- if ((I2C_CHECK_FLAG(tmpITFlags, I2C_FLAG_STOPF) != RESET) && (I2C_CHECK_IT_SOURCE(ITSources, I2C_IT_STOPI) != RESET))
- {
- /* Call I2C Slave complete process */
- I2C_ITSlaveCplt(hi2c, tmpITFlags);
- }
-
/* Process Unlocked */
__HAL_UNLOCK(hi2c);
@@ -5008,6 +5005,13 @@ static HAL_StatusTypeDef I2C_Slave_ISR_DMA(struct __I2C_HandleTypeDef *hi2c, uin
/* Process locked */
__HAL_LOCK(hi2c);
+ /* Check if STOPF is set */
+ if ((I2C_CHECK_FLAG(ITFlags, I2C_FLAG_STOPF) != RESET) && (I2C_CHECK_IT_SOURCE(ITSources, I2C_IT_STOPI) != RESET))
+ {
+ /* Call I2C Slave complete process */
+ I2C_ITSlaveCplt(hi2c, ITFlags);
+ }
+
if ((I2C_CHECK_FLAG(ITFlags, I2C_FLAG_AF) != RESET) && (I2C_CHECK_IT_SOURCE(ITSources, I2C_IT_NACKI) != RESET))
{
/* Check that I2C transfer finished */
@@ -5092,11 +5096,6 @@ static HAL_StatusTypeDef I2C_Slave_ISR_DMA(struct __I2C_HandleTypeDef *hi2c, uin
{
I2C_ITAddrCplt(hi2c, ITFlags);
}
- else if ((I2C_CHECK_FLAG(ITFlags, I2C_FLAG_STOPF) != RESET) && (I2C_CHECK_IT_SOURCE(ITSources, I2C_IT_STOPI) != RESET))
- {
- /* Call I2C Slave complete process */
- I2C_ITSlaveCplt(hi2c, ITFlags);
- }
else
{
/* Nothing to do */
diff --git a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_Keil/Prog/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_rcc.c b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_Keil/Prog/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_rcc.c
index bf33cff4..d63a6f4e 100644
--- a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_Keil/Prog/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_rcc.c
+++ b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_Keil/Prog/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_rcc.c
@@ -317,7 +317,7 @@ HAL_StatusTypeDef HAL_RCC_DeInit(void)
SystemCoreClock = HSI_VALUE;
/* Adapt Systick interrupt period */
- if(HAL_InitTick(TICK_INT_PRIORITY) != HAL_OK)
+ if (HAL_InitTick(uwTickPrio) != HAL_OK)
{
return HAL_ERROR;
}
@@ -344,10 +344,11 @@ HAL_StatusTypeDef HAL_RCC_DeInit(void)
HAL_StatusTypeDef HAL_RCC_OscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct)
{
uint32_t tickstart;
+ uint32_t pll_config;
FlagStatus pwrclkchanged = RESET;
/* Check Null pointer */
- if(RCC_OscInitStruct == NULL)
+ if (RCC_OscInitStruct == NULL)
{
return HAL_ERROR;
}
@@ -356,15 +357,15 @@ HAL_StatusTypeDef HAL_RCC_OscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct)
assert_param(IS_RCC_OSCILLATORTYPE(RCC_OscInitStruct->OscillatorType));
/*------------------------------- HSE Configuration ------------------------*/
- if(((RCC_OscInitStruct->OscillatorType) & RCC_OSCILLATORTYPE_HSE) == RCC_OSCILLATORTYPE_HSE)
+ if (((RCC_OscInitStruct->OscillatorType) & RCC_OSCILLATORTYPE_HSE) == RCC_OSCILLATORTYPE_HSE)
{
/* Check the parameters */
assert_param(IS_RCC_HSE(RCC_OscInitStruct->HSEState));
/* When the HSE is used as system clock or clock source for PLL, It can not be disabled */
- if((__HAL_RCC_GET_SYSCLK_SOURCE() == RCC_SYSCLKSOURCE_STATUS_HSE)
- || ((__HAL_RCC_GET_SYSCLK_SOURCE() == RCC_SYSCLKSOURCE_STATUS_PLLCLK) && ((RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC) == RCC_PLLCFGR_PLLSRC_HSE)))
+ if ((__HAL_RCC_GET_SYSCLK_SOURCE() == RCC_SYSCLKSOURCE_STATUS_HSE)
+ || ((__HAL_RCC_GET_SYSCLK_SOURCE() == RCC_SYSCLKSOURCE_STATUS_PLLCLK) && ((RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC) == RCC_PLLCFGR_PLLSRC_HSE)))
{
- if((__HAL_RCC_GET_FLAG(RCC_FLAG_HSERDY) != RESET) && (RCC_OscInitStruct->HSEState == RCC_HSE_OFF))
+ if ((__HAL_RCC_GET_FLAG(RCC_FLAG_HSERDY) != RESET) && (RCC_OscInitStruct->HSEState == RCC_HSE_OFF))
{
return HAL_ERROR;
}
@@ -375,15 +376,15 @@ HAL_StatusTypeDef HAL_RCC_OscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct)
__HAL_RCC_HSE_CONFIG(RCC_OscInitStruct->HSEState);
/* Check the HSE State */
- if(RCC_OscInitStruct->HSEState != RCC_HSE_OFF)
+ if (RCC_OscInitStruct->HSEState != RCC_HSE_OFF)
{
/* Get Start Tick*/
tickstart = HAL_GetTick();
/* Wait till HSE is ready */
- while(__HAL_RCC_GET_FLAG(RCC_FLAG_HSERDY) == RESET)
+ while (__HAL_RCC_GET_FLAG(RCC_FLAG_HSERDY) == RESET)
{
- if((HAL_GetTick() - tickstart ) > HSE_TIMEOUT_VALUE)
+ if ((HAL_GetTick() - tickstart) > HSE_TIMEOUT_VALUE)
{
return HAL_TIMEOUT;
}
@@ -395,9 +396,9 @@ HAL_StatusTypeDef HAL_RCC_OscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct)
tickstart = HAL_GetTick();
/* Wait till HSE is bypassed or disabled */
- while(__HAL_RCC_GET_FLAG(RCC_FLAG_HSERDY) != RESET)
+ while (__HAL_RCC_GET_FLAG(RCC_FLAG_HSERDY) != RESET)
{
- if((HAL_GetTick() - tickstart ) > HSE_TIMEOUT_VALUE)
+ if ((HAL_GetTick() - tickstart) > HSE_TIMEOUT_VALUE)
{
return HAL_TIMEOUT;
}
@@ -406,18 +407,18 @@ HAL_StatusTypeDef HAL_RCC_OscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct)
}
}
/*----------------------------- HSI Configuration --------------------------*/
- if(((RCC_OscInitStruct->OscillatorType) & RCC_OSCILLATORTYPE_HSI) == RCC_OSCILLATORTYPE_HSI)
+ if (((RCC_OscInitStruct->OscillatorType) & RCC_OSCILLATORTYPE_HSI) == RCC_OSCILLATORTYPE_HSI)
{
/* Check the parameters */
assert_param(IS_RCC_HSI(RCC_OscInitStruct->HSIState));
assert_param(IS_RCC_CALIBRATION_VALUE(RCC_OscInitStruct->HSICalibrationValue));
/* Check if HSI is used as system clock or as PLL source when PLL is selected as system clock */
- if((__HAL_RCC_GET_SYSCLK_SOURCE() == RCC_SYSCLKSOURCE_STATUS_HSI)
- || ((__HAL_RCC_GET_SYSCLK_SOURCE() == RCC_SYSCLKSOURCE_STATUS_PLLCLK) && ((RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC) == RCC_PLLCFGR_PLLSRC_HSI)))
+ if ((__HAL_RCC_GET_SYSCLK_SOURCE() == RCC_SYSCLKSOURCE_STATUS_HSI)
+ || ((__HAL_RCC_GET_SYSCLK_SOURCE() == RCC_SYSCLKSOURCE_STATUS_PLLCLK) && ((RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC) == RCC_PLLCFGR_PLLSRC_HSI)))
{
/* When HSI is used as system clock it will not disabled */
- if((__HAL_RCC_GET_FLAG(RCC_FLAG_HSIRDY) != RESET) && (RCC_OscInitStruct->HSIState != RCC_HSI_ON))
+ if ((__HAL_RCC_GET_FLAG(RCC_FLAG_HSIRDY) != RESET) && (RCC_OscInitStruct->HSIState != RCC_HSI_ON))
{
return HAL_ERROR;
}
@@ -431,7 +432,7 @@ HAL_StatusTypeDef HAL_RCC_OscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct)
else
{
/* Check the HSI State */
- if((RCC_OscInitStruct->HSIState)!= RCC_HSI_OFF)
+ if ((RCC_OscInitStruct->HSIState) != RCC_HSI_OFF)
{
/* Enable the Internal High Speed oscillator (HSI). */
__HAL_RCC_HSI_ENABLE();
@@ -440,9 +441,9 @@ HAL_StatusTypeDef HAL_RCC_OscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct)
tickstart = HAL_GetTick();
/* Wait till HSI is ready */
- while(__HAL_RCC_GET_FLAG(RCC_FLAG_HSIRDY) == RESET)
+ while (__HAL_RCC_GET_FLAG(RCC_FLAG_HSIRDY) == RESET)
{
- if((HAL_GetTick() - tickstart ) > HSI_TIMEOUT_VALUE)
+ if ((HAL_GetTick() - tickstart) > HSI_TIMEOUT_VALUE)
{
return HAL_TIMEOUT;
}
@@ -460,9 +461,9 @@ HAL_StatusTypeDef HAL_RCC_OscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct)
tickstart = HAL_GetTick();
/* Wait till HSI is ready */
- while(__HAL_RCC_GET_FLAG(RCC_FLAG_HSIRDY) != RESET)
+ while (__HAL_RCC_GET_FLAG(RCC_FLAG_HSIRDY) != RESET)
{
- if((HAL_GetTick() - tickstart ) > HSI_TIMEOUT_VALUE)
+ if ((HAL_GetTick() - tickstart) > HSI_TIMEOUT_VALUE)
{
return HAL_TIMEOUT;
}
@@ -471,13 +472,13 @@ HAL_StatusTypeDef HAL_RCC_OscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct)
}
}
/*------------------------------ LSI Configuration -------------------------*/
- if(((RCC_OscInitStruct->OscillatorType) & RCC_OSCILLATORTYPE_LSI) == RCC_OSCILLATORTYPE_LSI)
+ if (((RCC_OscInitStruct->OscillatorType) & RCC_OSCILLATORTYPE_LSI) == RCC_OSCILLATORTYPE_LSI)
{
/* Check the parameters */
assert_param(IS_RCC_LSI(RCC_OscInitStruct->LSIState));
/* Check the LSI State */
- if((RCC_OscInitStruct->LSIState)!= RCC_LSI_OFF)
+ if ((RCC_OscInitStruct->LSIState) != RCC_LSI_OFF)
{
/* Enable the Internal Low Speed oscillator (LSI). */
__HAL_RCC_LSI_ENABLE();
@@ -486,9 +487,9 @@ HAL_StatusTypeDef HAL_RCC_OscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct)
tickstart = HAL_GetTick();
/* Wait till LSI is ready */
- while(__HAL_RCC_GET_FLAG(RCC_FLAG_LSIRDY) == RESET)
+ while (__HAL_RCC_GET_FLAG(RCC_FLAG_LSIRDY) == RESET)
{
- if((HAL_GetTick() - tickstart ) > LSI_TIMEOUT_VALUE)
+ if ((HAL_GetTick() - tickstart) > LSI_TIMEOUT_VALUE)
{
return HAL_TIMEOUT;
}
@@ -503,9 +504,9 @@ HAL_StatusTypeDef HAL_RCC_OscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct)
tickstart = HAL_GetTick();
/* Wait till LSI is ready */
- while(__HAL_RCC_GET_FLAG(RCC_FLAG_LSIRDY) != RESET)
+ while (__HAL_RCC_GET_FLAG(RCC_FLAG_LSIRDY) != RESET)
{
- if((HAL_GetTick() - tickstart ) > LSI_TIMEOUT_VALUE)
+ if ((HAL_GetTick() - tickstart) > LSI_TIMEOUT_VALUE)
{
return HAL_TIMEOUT;
}
@@ -513,21 +514,21 @@ HAL_StatusTypeDef HAL_RCC_OscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct)
}
}
/*------------------------------ LSE Configuration -------------------------*/
- if(((RCC_OscInitStruct->OscillatorType) & RCC_OSCILLATORTYPE_LSE) == RCC_OSCILLATORTYPE_LSE)
+ if (((RCC_OscInitStruct->OscillatorType) & RCC_OSCILLATORTYPE_LSE) == RCC_OSCILLATORTYPE_LSE)
{
/* Check the parameters */
assert_param(IS_RCC_LSE(RCC_OscInitStruct->LSEState));
/* Update LSE configuration in Backup Domain control register */
/* Requires to enable write access to Backup Domain of necessary */
- if(__HAL_RCC_PWR_IS_CLK_DISABLED())
+ if (__HAL_RCC_PWR_IS_CLK_DISABLED())
{
/* Enable Power Clock*/
__HAL_RCC_PWR_CLK_ENABLE();
pwrclkchanged = SET;
}
- if(HAL_IS_BIT_CLR(PWR->CR1, PWR_CR1_DBP))
+ if (HAL_IS_BIT_CLR(PWR->CR1, PWR_CR1_DBP))
{
/* Enable write access to Backup domain */
PWR->CR1 |= PWR_CR1_DBP;
@@ -535,9 +536,9 @@ HAL_StatusTypeDef HAL_RCC_OscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct)
/* Wait for Backup domain Write protection disable */
tickstart = HAL_GetTick();
- while(HAL_IS_BIT_CLR(PWR->CR1, PWR_CR1_DBP))
+ while (HAL_IS_BIT_CLR(PWR->CR1, PWR_CR1_DBP))
{
- if((HAL_GetTick() - tickstart ) > RCC_DBP_TIMEOUT_VALUE)
+ if ((HAL_GetTick() - tickstart) > RCC_DBP_TIMEOUT_VALUE)
{
return HAL_TIMEOUT;
}
@@ -547,15 +548,15 @@ HAL_StatusTypeDef HAL_RCC_OscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct)
/* Set the new LSE configuration -----------------------------------------*/
__HAL_RCC_LSE_CONFIG(RCC_OscInitStruct->LSEState);
/* Check the LSE State */
- if((RCC_OscInitStruct->LSEState) != RCC_LSE_OFF)
+ if ((RCC_OscInitStruct->LSEState) != RCC_LSE_OFF)
{
/* Get Start Tick*/
tickstart = HAL_GetTick();
/* Wait till LSE is ready */
- while(__HAL_RCC_GET_FLAG(RCC_FLAG_LSERDY) == RESET)
+ while (__HAL_RCC_GET_FLAG(RCC_FLAG_LSERDY) == RESET)
{
- if((HAL_GetTick() - tickstart ) > RCC_LSE_TIMEOUT_VALUE)
+ if ((HAL_GetTick() - tickstart) > RCC_LSE_TIMEOUT_VALUE)
{
return HAL_TIMEOUT;
}
@@ -567,9 +568,9 @@ HAL_StatusTypeDef HAL_RCC_OscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct)
tickstart = HAL_GetTick();
/* Wait till LSE is ready */
- while(__HAL_RCC_GET_FLAG(RCC_FLAG_LSERDY) != RESET)
+ while (__HAL_RCC_GET_FLAG(RCC_FLAG_LSERDY) != RESET)
{
- if((HAL_GetTick() - tickstart ) > RCC_LSE_TIMEOUT_VALUE)
+ if ((HAL_GetTick() - tickstart) > RCC_LSE_TIMEOUT_VALUE)
{
return HAL_TIMEOUT;
}
@@ -577,7 +578,7 @@ HAL_StatusTypeDef HAL_RCC_OscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct)
}
/* Restore clock configuration if changed */
- if(pwrclkchanged == SET)
+ if (pwrclkchanged == SET)
{
__HAL_RCC_PWR_CLK_DISABLE();
}
@@ -588,9 +589,9 @@ HAL_StatusTypeDef HAL_RCC_OscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct)
if ((RCC_OscInitStruct->PLL.PLLState) != RCC_PLL_NONE)
{
/* Check if the PLL is used as system clock or not */
- if(__HAL_RCC_GET_SYSCLK_SOURCE() != RCC_SYSCLKSOURCE_STATUS_PLLCLK)
+ if (__HAL_RCC_GET_SYSCLK_SOURCE() != RCC_SYSCLKSOURCE_STATUS_PLLCLK)
{
- if((RCC_OscInitStruct->PLL.PLLState) == RCC_PLL_ON)
+ if ((RCC_OscInitStruct->PLL.PLLState) == RCC_PLL_ON)
{
/* Check the parameters */
assert_param(IS_RCC_PLLSOURCE(RCC_OscInitStruct->PLL.PLLSource));
@@ -609,9 +610,9 @@ HAL_StatusTypeDef HAL_RCC_OscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct)
tickstart = HAL_GetTick();
/* Wait till PLL is ready */
- while(__HAL_RCC_GET_FLAG(RCC_FLAG_PLLRDY) != RESET)
+ while (__HAL_RCC_GET_FLAG(RCC_FLAG_PLLRDY) != RESET)
{
- if((HAL_GetTick() - tickstart ) > PLL_TIMEOUT_VALUE)
+ if ((HAL_GetTick() - tickstart) > PLL_TIMEOUT_VALUE)
{
return HAL_TIMEOUT;
}
@@ -640,9 +641,9 @@ HAL_StatusTypeDef HAL_RCC_OscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct)
tickstart = HAL_GetTick();
/* Wait till PLL is ready */
- while(__HAL_RCC_GET_FLAG(RCC_FLAG_PLLRDY) == RESET)
+ while (__HAL_RCC_GET_FLAG(RCC_FLAG_PLLRDY) == RESET)
{
- if((HAL_GetTick() - tickstart ) > PLL_TIMEOUT_VALUE)
+ if ((HAL_GetTick() - tickstart) > PLL_TIMEOUT_VALUE)
{
return HAL_TIMEOUT;
}
@@ -657,9 +658,9 @@ HAL_StatusTypeDef HAL_RCC_OscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct)
tickstart = HAL_GetTick();
/* Wait till PLL is ready */
- while(__HAL_RCC_GET_FLAG(RCC_FLAG_PLLRDY) != RESET)
+ while (__HAL_RCC_GET_FLAG(RCC_FLAG_PLLRDY) != RESET)
{
- if((HAL_GetTick() - tickstart ) > PLL_TIMEOUT_VALUE)
+ if ((HAL_GetTick() - tickstart) > PLL_TIMEOUT_VALUE)
{
return HAL_TIMEOUT;
}
@@ -668,7 +669,27 @@ HAL_StatusTypeDef HAL_RCC_OscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct)
}
else
{
- return HAL_ERROR;
+ /* Do not return HAL_ERROR if request repeats the current configuration */
+ pll_config = RCC->PLLCFGR;
+#if defined (RCC_PLLCFGR_PLLR)
+ if (((RCC_OscInitStruct->PLL.PLLState) == RCC_PLL_OFF) ||
+ (READ_BIT(pll_config, RCC_PLLCFGR_PLLSRC) != RCC_OscInitStruct->PLL.PLLSource) ||
+ (READ_BIT(pll_config, RCC_PLLCFGR_PLLM) != RCC_OscInitStruct->PLL.PLLM) ||
+ (READ_BIT(pll_config, RCC_PLLCFGR_PLLN) != (RCC_OscInitStruct->PLL.PLLN << RCC_PLLCFGR_PLLN_Pos)) ||
+ (READ_BIT(pll_config, RCC_PLLCFGR_PLLP) != ((((RCC_OscInitStruct->PLL.PLLP) >> 1U) - 1U) << RCC_PLLCFGR_PLLP_Pos)) ||
+ (READ_BIT(pll_config, RCC_PLLCFGR_PLLQ) != (RCC_OscInitStruct->PLL.PLLQ << RCC_PLLCFGR_PLLQ_Pos)) ||
+ (READ_BIT(pll_config, RCC_PLLCFGR_PLLR) != (RCC_OscInitStruct->PLL.PLLR << RCC_PLLCFGR_PLLR_Pos)))
+#else
+ if (((RCC_OscInitStruct->PLL.PLLState) == RCC_PLL_OFF) ||
+ (READ_BIT(pll_config, RCC_PLLCFGR_PLLSRC) != RCC_OscInitStruct->PLL.PLLSource) ||
+ (READ_BIT(pll_config, RCC_PLLCFGR_PLLM) != RCC_OscInitStruct->PLL.PLLM) ||
+ (READ_BIT(pll_config, RCC_PLLCFGR_PLLN) != (RCC_OscInitStruct->PLL.PLLN << RCC_PLLCFGR_PLLN_Pos)) ||
+ (READ_BIT(pll_config, RCC_PLLCFGR_PLLP) != ((((RCC_OscInitStruct->PLL.PLLP) >> 1U) - 1U) << RCC_PLLCFGR_PLLP_Pos)) ||
+ (READ_BIT(pll_config, RCC_PLLCFGR_PLLQ) != (RCC_OscInitStruct->PLL.PLLQ << RCC_PLLCFGR_PLLQ_Pos)))
+#endif
+ {
+ return HAL_ERROR;
+ }
}
}
return HAL_OK;
@@ -705,7 +726,7 @@ HAL_StatusTypeDef HAL_RCC_ClockConfig(RCC_ClkInitTypeDef *RCC_ClkInitStruct, ui
uint32_t tickstart = 0;
/* Check Null pointer */
- if(RCC_ClkInitStruct == NULL)
+ if (RCC_ClkInitStruct == NULL)
{
return HAL_ERROR;
}
@@ -719,30 +740,30 @@ HAL_StatusTypeDef HAL_RCC_ClockConfig(RCC_ClkInitTypeDef *RCC_ClkInitStruct, ui
(HCLK) and the supply voltage of the device. */
/* Increasing the CPU frequency */
- if(FLatency > __HAL_FLASH_GET_LATENCY())
+ if (FLatency > __HAL_FLASH_GET_LATENCY())
{
/* Program the new number of wait states to the LATENCY bits in the FLASH_ACR register */
__HAL_FLASH_SET_LATENCY(FLatency);
/* Check that the new number of wait states is taken into account to access the Flash
memory by reading the FLASH_ACR register */
- if(__HAL_FLASH_GET_LATENCY() != FLatency)
+ if (__HAL_FLASH_GET_LATENCY() != FLatency)
{
return HAL_ERROR;
}
}
/*-------------------------- HCLK Configuration --------------------------*/
- if(((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_HCLK) == RCC_CLOCKTYPE_HCLK)
+ if (((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_HCLK) == RCC_CLOCKTYPE_HCLK)
{
/* Set the highest APBx dividers in order to ensure that we do not go through
a non-spec phase whatever we decrease or increase HCLK. */
- if(((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_PCLK1) == RCC_CLOCKTYPE_PCLK1)
+ if (((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_PCLK1) == RCC_CLOCKTYPE_PCLK1)
{
MODIFY_REG(RCC->CFGR, RCC_CFGR_PPRE1, RCC_HCLK_DIV16);
}
- if(((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_PCLK2) == RCC_CLOCKTYPE_PCLK2)
+ if (((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_PCLK2) == RCC_CLOCKTYPE_PCLK2)
{
MODIFY_REG(RCC->CFGR, RCC_CFGR_PPRE2, (RCC_HCLK_DIV16 << 3));
}
@@ -753,24 +774,24 @@ HAL_StatusTypeDef HAL_RCC_ClockConfig(RCC_ClkInitTypeDef *RCC_ClkInitStruct, ui
}
/*------------------------- SYSCLK Configuration ---------------------------*/
- if(((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_SYSCLK) == RCC_CLOCKTYPE_SYSCLK)
+ if (((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_SYSCLK) == RCC_CLOCKTYPE_SYSCLK)
{
assert_param(IS_RCC_SYSCLKSOURCE(RCC_ClkInitStruct->SYSCLKSource));
/* HSE is selected as System Clock Source */
- if(RCC_ClkInitStruct->SYSCLKSource == RCC_SYSCLKSOURCE_HSE)
+ if (RCC_ClkInitStruct->SYSCLKSource == RCC_SYSCLKSOURCE_HSE)
{
/* Check the HSE ready flag */
- if(__HAL_RCC_GET_FLAG(RCC_FLAG_HSERDY) == RESET)
+ if (__HAL_RCC_GET_FLAG(RCC_FLAG_HSERDY) == RESET)
{
return HAL_ERROR;
}
}
/* PLL is selected as System Clock Source */
- else if(RCC_ClkInitStruct->SYSCLKSource == RCC_SYSCLKSOURCE_PLLCLK)
+ else if (RCC_ClkInitStruct->SYSCLKSource == RCC_SYSCLKSOURCE_PLLCLK)
{
/* Check the PLL ready flag */
- if(__HAL_RCC_GET_FLAG(RCC_FLAG_PLLRDY) == RESET)
+ if (__HAL_RCC_GET_FLAG(RCC_FLAG_PLLRDY) == RESET)
{
return HAL_ERROR;
}
@@ -779,7 +800,7 @@ HAL_StatusTypeDef HAL_RCC_ClockConfig(RCC_ClkInitTypeDef *RCC_ClkInitStruct, ui
else
{
/* Check the HSI ready flag */
- if(__HAL_RCC_GET_FLAG(RCC_FLAG_HSIRDY) == RESET)
+ if (__HAL_RCC_GET_FLAG(RCC_FLAG_HSIRDY) == RESET)
{
return HAL_ERROR;
}
@@ -800,38 +821,38 @@ HAL_StatusTypeDef HAL_RCC_ClockConfig(RCC_ClkInitTypeDef *RCC_ClkInitStruct, ui
}
/* Decreasing the number of wait states because of lower CPU frequency */
- if(FLatency < __HAL_FLASH_GET_LATENCY())
+ if (FLatency < __HAL_FLASH_GET_LATENCY())
{
/* Program the new number of wait states to the LATENCY bits in the FLASH_ACR register */
__HAL_FLASH_SET_LATENCY(FLatency);
/* Check that the new number of wait states is taken into account to access the Flash
memory by reading the FLASH_ACR register */
- if(__HAL_FLASH_GET_LATENCY() != FLatency)
+ if (__HAL_FLASH_GET_LATENCY() != FLatency)
{
return HAL_ERROR;
}
}
/*-------------------------- PCLK1 Configuration ---------------------------*/
- if(((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_PCLK1) == RCC_CLOCKTYPE_PCLK1)
+ if (((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_PCLK1) == RCC_CLOCKTYPE_PCLK1)
{
assert_param(IS_RCC_PCLK(RCC_ClkInitStruct->APB1CLKDivider));
MODIFY_REG(RCC->CFGR, RCC_CFGR_PPRE1, RCC_ClkInitStruct->APB1CLKDivider);
}
/*-------------------------- PCLK2 Configuration ---------------------------*/
- if(((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_PCLK2) == RCC_CLOCKTYPE_PCLK2)
+ if (((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_PCLK2) == RCC_CLOCKTYPE_PCLK2)
{
assert_param(IS_RCC_PCLK(RCC_ClkInitStruct->APB2CLKDivider));
MODIFY_REG(RCC->CFGR, RCC_CFGR_PPRE2, ((RCC_ClkInitStruct->APB2CLKDivider) << 3));
}
/* Update the SystemCoreClock global variable */
- SystemCoreClock = HAL_RCC_GetSysClockFreq() >> AHBPrescTable[(RCC->CFGR & RCC_CFGR_HPRE)>> RCC_CFGR_HPRE_Pos];
+ SystemCoreClock = HAL_RCC_GetSysClockFreq() >> AHBPrescTable[(RCC->CFGR & RCC_CFGR_HPRE) >> RCC_CFGR_HPRE_Pos];
/* Configure the source of time base considering new system clocks settings*/
- HAL_InitTick (TICK_INT_PRIORITY);
+ HAL_InitTick(uwTickPrio);
return HAL_OK;
}
@@ -888,7 +909,7 @@ void HAL_RCC_MCOConfig(uint32_t RCC_MCOx, uint32_t RCC_MCOSource, uint32_t RCC_M
assert_param(IS_RCC_MCO(RCC_MCOx));
assert_param(IS_RCC_MCODIV(RCC_MCODiv));
/* RCC_MCO1 */
- if(RCC_MCOx == RCC_MCO1)
+ if (RCC_MCOx == RCC_MCO1)
{
assert_param(IS_RCC_MCO1SOURCE(RCC_MCOSource));
@@ -990,7 +1011,7 @@ uint32_t HAL_RCC_GetSysClockFreq(void)
case RCC_SYSCLKSOURCE_STATUS_HSI: /* HSI used as system clock source */
{
sysclockfreq = HSI_VALUE;
- break;
+ break;
}
case RCC_SYSCLKSOURCE_STATUS_HSE: /* HSE used as system clock source */
{
@@ -1005,16 +1026,16 @@ uint32_t HAL_RCC_GetSysClockFreq(void)
if (__HAL_RCC_GET_PLL_OSCSOURCE() != RCC_PLLCFGR_PLLSRC_HSI)
{
/* HSE used as PLL clock source */
- pllvco = (uint32_t) ((((uint64_t) HSE_VALUE * ((uint64_t) ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> RCC_PLLCFGR_PLLN_Pos)))) / (uint64_t)pllm);
+ pllvco = (uint32_t)((((uint64_t) HSE_VALUE * ((uint64_t)((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> RCC_PLLCFGR_PLLN_Pos)))) / (uint64_t)pllm);
}
else
{
/* HSI used as PLL clock source */
- pllvco = (uint32_t) ((((uint64_t) HSI_VALUE * ((uint64_t) ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> RCC_PLLCFGR_PLLN_Pos)))) / (uint64_t)pllm);
+ pllvco = (uint32_t)((((uint64_t) HSI_VALUE * ((uint64_t)((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> RCC_PLLCFGR_PLLN_Pos)))) / (uint64_t)pllm);
}
- pllp = ((((RCC->PLLCFGR & RCC_PLLCFGR_PLLP) >> RCC_PLLCFGR_PLLP_Pos) + 1 ) *2);
+ pllp = ((((RCC->PLLCFGR & RCC_PLLCFGR_PLLP) >> RCC_PLLCFGR_PLLP_Pos) + 1) * 2);
- sysclockfreq = pllvco/pllp;
+ sysclockfreq = pllvco / pllp;
break;
}
default:
@@ -1047,7 +1068,7 @@ uint32_t HAL_RCC_GetHCLKFreq(void)
uint32_t HAL_RCC_GetPCLK1Freq(void)
{
/* Get HCLK source and Compute PCLK1 frequency ---------------------------*/
- return (HAL_RCC_GetHCLKFreq() >> APBPrescTable[(RCC->CFGR & RCC_CFGR_PPRE1)>> RCC_CFGR_PPRE1_Pos]);
+ return (HAL_RCC_GetHCLKFreq() >> APBPrescTable[(RCC->CFGR & RCC_CFGR_PPRE1) >> RCC_CFGR_PPRE1_Pos]);
}
/**
@@ -1059,7 +1080,7 @@ uint32_t HAL_RCC_GetPCLK1Freq(void)
uint32_t HAL_RCC_GetPCLK2Freq(void)
{
/* Get HCLK source and Compute PCLK2 frequency ---------------------------*/
- return (HAL_RCC_GetHCLKFreq()>> APBPrescTable[(RCC->CFGR & RCC_CFGR_PPRE2)>> RCC_CFGR_PPRE2_Pos]);
+ return (HAL_RCC_GetHCLKFreq() >> APBPrescTable[(RCC->CFGR & RCC_CFGR_PPRE2) >> RCC_CFGR_PPRE2_Pos]);
}
/**
@@ -1075,11 +1096,11 @@ void HAL_RCC_GetOscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct)
RCC_OscInitStruct->OscillatorType = RCC_OSCILLATORTYPE_HSE | RCC_OSCILLATORTYPE_HSI | RCC_OSCILLATORTYPE_LSE | RCC_OSCILLATORTYPE_LSI;
/* Get the HSE configuration -----------------------------------------------*/
- if((RCC->CR &RCC_CR_HSEBYP) == RCC_CR_HSEBYP)
+ if ((RCC->CR & RCC_CR_HSEBYP) == RCC_CR_HSEBYP)
{
RCC_OscInitStruct->HSEState = RCC_HSE_BYPASS;
}
- else if((RCC->CR &RCC_CR_HSEON) == RCC_CR_HSEON)
+ else if ((RCC->CR & RCC_CR_HSEON) == RCC_CR_HSEON)
{
RCC_OscInitStruct->HSEState = RCC_HSE_ON;
}
@@ -1089,7 +1110,7 @@ void HAL_RCC_GetOscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct)
}
/* Get the HSI configuration -----------------------------------------------*/
- if((RCC->CR &RCC_CR_HSION) == RCC_CR_HSION)
+ if ((RCC->CR & RCC_CR_HSION) == RCC_CR_HSION)
{
RCC_OscInitStruct->HSIState = RCC_HSI_ON;
}
@@ -1098,14 +1119,14 @@ void HAL_RCC_GetOscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct)
RCC_OscInitStruct->HSIState = RCC_HSI_OFF;
}
- RCC_OscInitStruct->HSICalibrationValue = (uint32_t)((RCC->CR &RCC_CR_HSITRIM) >> RCC_CR_HSITRIM_Pos);
+ RCC_OscInitStruct->HSICalibrationValue = (uint32_t)((RCC->CR & RCC_CR_HSITRIM) >> RCC_CR_HSITRIM_Pos);
/* Get the LSE configuration -----------------------------------------------*/
- if((RCC->BDCR &RCC_BDCR_LSEBYP) == RCC_BDCR_LSEBYP)
+ if ((RCC->BDCR & RCC_BDCR_LSEBYP) == RCC_BDCR_LSEBYP)
{
RCC_OscInitStruct->LSEState = RCC_LSE_BYPASS;
}
- else if((RCC->BDCR &RCC_BDCR_LSEON) == RCC_BDCR_LSEON)
+ else if ((RCC->BDCR & RCC_BDCR_LSEON) == RCC_BDCR_LSEON)
{
RCC_OscInitStruct->LSEState = RCC_LSE_ON;
}
@@ -1115,7 +1136,7 @@ void HAL_RCC_GetOscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct)
}
/* Get the LSI configuration -----------------------------------------------*/
- if((RCC->CSR &RCC_CSR_LSION) == RCC_CSR_LSION)
+ if ((RCC->CSR & RCC_CSR_LSION) == RCC_CSR_LSION)
{
RCC_OscInitStruct->LSIState = RCC_LSI_ON;
}
@@ -1125,7 +1146,7 @@ void HAL_RCC_GetOscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct)
}
/* Get the PLL configuration -----------------------------------------------*/
- if((RCC->CR &RCC_CR_PLLON) == RCC_CR_PLLON)
+ if ((RCC->CR & RCC_CR_PLLON) == RCC_CR_PLLON)
{
RCC_OscInitStruct->PLL.PLLState = RCC_PLL_ON;
}
@@ -1180,7 +1201,7 @@ void HAL_RCC_GetClockConfig(RCC_ClkInitTypeDef *RCC_ClkInitStruct, uint32_t *pF
void HAL_RCC_NMI_IRQHandler(void)
{
/* Check RCC CSSF flag */
- if(__HAL_RCC_GET_IT(RCC_IT_CSS))
+ if (__HAL_RCC_GET_IT(RCC_IT_CSS))
{
/* RCC Clock Security System interrupt user callback */
HAL_RCC_CSSCallback();
diff --git a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_Keil/Prog/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_tim.c b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_Keil/Prog/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_tim.c
index c4676923..29de7d5b 100644
--- a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_Keil/Prog/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_tim.c
+++ b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_Keil/Prog/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_tim.c
@@ -98,18 +98,22 @@
*** Callback registration ***
=============================================
+ [..]
The compilation define USE_HAL_TIM_REGISTER_CALLBACKS when set to 1
allows the user to configure dynamically the driver callbacks.
+ [..]
Use Function @ref HAL_TIM_RegisterCallback() to register a callback.
@ref HAL_TIM_RegisterCallback() takes as parameters the HAL peripheral handle,
the Callback ID and a pointer to the user callback function.
+ [..]
Use function @ref HAL_TIM_UnRegisterCallback() to reset a callback to the default
weak function.
@ref HAL_TIM_UnRegisterCallback takes as parameters the HAL peripheral handle,
and the Callback ID.
+ [..]
These functions allow to register/unregister following callbacks:
(+) Base_MspInitCallback : TIM Base Msp Init Callback.
(+) Base_MspDeInitCallback : TIM Base Msp DeInit Callback.
@@ -140,15 +144,18 @@
(+) BreakCallback : TIM Break Callback.
(+) Break2Callback : TIM Break2 Callback.
+ [..]
By default, after the Init and when the state is HAL_TIM_STATE_RESET
all interrupt callbacks are set to the corresponding weak functions:
examples @ref HAL_TIM_TriggerCallback(), @ref HAL_TIM_ErrorCallback().
+ [..]
Exception done for MspInit and MspDeInit functions that are reset to the legacy weak
functionalities in the Init / DeInit only when these callbacks are null
(not registered beforehand). If not, MspInit or MspDeInit are not null, the Init / DeInit
keep and use the user MspInit / MspDeInit callbacks(registered beforehand)
+ [..]
Callbacks can be registered / unregistered in HAL_TIM_STATE_READY state only.
Exception done MspInit / MspDeInit that can be registered / unregistered
in HAL_TIM_STATE_READY or HAL_TIM_STATE_RESET state,
@@ -156,6 +163,7 @@ all interrupt callbacks are set to the corresponding weak functions:
In that case first register the MspInit/MspDeInit user callbacks
using @ref HAL_TIM_RegisterCallback() before calling DeInit or Init function.
+ [..]
When The compilation define USE_HAL_TIM_REGISTER_CALLBACKS is set to 0 or
not defined, the callback registration feature is not available and all callbacks
are set to the corresponding weak functions.
@@ -216,7 +224,7 @@ static void TIM_DMAPeriodElapsedHalfCplt(DMA_HandleTypeDef *hdma);
static void TIM_DMATriggerCplt(DMA_HandleTypeDef *hdma);
static void TIM_DMATriggerHalfCplt(DMA_HandleTypeDef *hdma);
static HAL_StatusTypeDef TIM_SlaveTimer_SetConfig(TIM_HandleTypeDef *htim,
- TIM_SlaveConfigTypeDef *sSlaveConfig);
+ TIM_SlaveConfigTypeDef *sSlaveConfig);
/**
* @}
*/
@@ -227,8 +235,8 @@ static HAL_StatusTypeDef TIM_SlaveTimer_SetConfig(TIM_HandleTypeDef *htim,
*/
/** @defgroup TIM_Exported_Functions_Group1 TIM Time Base functions
- * @brief Time Base functions
- *
+ * @brief Time Base functions
+ *
@verbatim
==============================================================================
##### Time Base functions #####
@@ -482,11 +490,11 @@ HAL_StatusTypeDef HAL_TIM_Base_Start_DMA(TIM_HandleTypeDef *htim, uint32_t *pDat
/* Check the parameters */
assert_param(IS_TIM_DMA_INSTANCE(htim->Instance));
- if ((htim->State == HAL_TIM_STATE_BUSY))
+ if (htim->State == HAL_TIM_STATE_BUSY)
{
return HAL_BUSY;
}
- else if ((htim->State == HAL_TIM_STATE_READY))
+ else if (htim->State == HAL_TIM_STATE_READY)
{
if ((pData == NULL) && (Length > 0U))
{
@@ -559,8 +567,8 @@ HAL_StatusTypeDef HAL_TIM_Base_Stop_DMA(TIM_HandleTypeDef *htim)
*/
/** @defgroup TIM_Exported_Functions_Group2 TIM Output Compare functions
- * @brief TIM Output Compare functions
- *
+ * @brief TIM Output Compare functions
+ *
@verbatim
==============================================================================
##### TIM Output Compare functions #####
@@ -929,16 +937,16 @@ HAL_StatusTypeDef HAL_TIM_OC_Stop_IT(TIM_HandleTypeDef *htim, uint32_t Channel)
*/
HAL_StatusTypeDef HAL_TIM_OC_Start_DMA(TIM_HandleTypeDef *htim, uint32_t Channel, uint32_t *pData, uint16_t Length)
{
- uint32_t tmpsmcr;
+ uint32_t tmpsmcr;
/* Check the parameters */
assert_param(IS_TIM_CCX_INSTANCE(htim->Instance, Channel));
- if ((htim->State == HAL_TIM_STATE_BUSY))
+ if (htim->State == HAL_TIM_STATE_BUSY)
{
return HAL_BUSY;
}
- else if ((htim->State == HAL_TIM_STATE_READY))
+ else if (htim->State == HAL_TIM_STATE_READY)
{
if ((pData == NULL) && (Length > 0U))
{
@@ -1136,8 +1144,8 @@ HAL_StatusTypeDef HAL_TIM_OC_Stop_DMA(TIM_HandleTypeDef *htim, uint32_t Channel)
*/
/** @defgroup TIM_Exported_Functions_Group3 TIM PWM functions
- * @brief TIM PWM functions
- *
+ * @brief TIM PWM functions
+ *
@verbatim
==============================================================================
##### TIM PWM functions #####
@@ -1513,11 +1521,11 @@ HAL_StatusTypeDef HAL_TIM_PWM_Start_DMA(TIM_HandleTypeDef *htim, uint32_t Channe
/* Check the parameters */
assert_param(IS_TIM_CCX_INSTANCE(htim->Instance, Channel));
- if ((htim->State == HAL_TIM_STATE_BUSY))
+ if (htim->State == HAL_TIM_STATE_BUSY)
{
return HAL_BUSY;
}
- else if ((htim->State == HAL_TIM_STATE_READY))
+ else if (htim->State == HAL_TIM_STATE_READY)
{
if ((pData == NULL) && (Length > 0U))
{
@@ -1714,8 +1722,8 @@ HAL_StatusTypeDef HAL_TIM_PWM_Stop_DMA(TIM_HandleTypeDef *htim, uint32_t Channel
*/
/** @defgroup TIM_Exported_Functions_Group4 TIM Input Capture functions
- * @brief TIM Input Capture functions
- *
+ * @brief TIM Input Capture functions
+ *
@verbatim
==============================================================================
##### TIM Input Capture functions #####
@@ -2061,11 +2069,11 @@ HAL_StatusTypeDef HAL_TIM_IC_Start_DMA(TIM_HandleTypeDef *htim, uint32_t Channel
assert_param(IS_TIM_CCX_INSTANCE(htim->Instance, Channel));
assert_param(IS_TIM_DMA_CC_INSTANCE(htim->Instance));
- if ((htim->State == HAL_TIM_STATE_BUSY))
+ if (htim->State == HAL_TIM_STATE_BUSY)
{
return HAL_BUSY;
}
- else if ((htim->State == HAL_TIM_STATE_READY))
+ else if (htim->State == HAL_TIM_STATE_READY)
{
if ((pData == NULL) && (Length > 0U))
{
@@ -2249,8 +2257,8 @@ HAL_StatusTypeDef HAL_TIM_IC_Stop_DMA(TIM_HandleTypeDef *htim, uint32_t Channel)
*/
/** @defgroup TIM_Exported_Functions_Group5 TIM One Pulse functions
- * @brief TIM One Pulse functions
- *
+ * @brief TIM One Pulse functions
+ *
@verbatim
==============================================================================
##### TIM One Pulse functions #####
@@ -2563,8 +2571,8 @@ HAL_StatusTypeDef HAL_TIM_OnePulse_Stop_IT(TIM_HandleTypeDef *htim, uint32_t Out
*/
/** @defgroup TIM_Exported_Functions_Group6 TIM Encoder functions
- * @brief TIM Encoder functions
- *
+ * @brief TIM Encoder functions
+ *
@verbatim
==============================================================================
##### TIM Encoder functions #####
@@ -2609,15 +2617,15 @@ HAL_StatusTypeDef HAL_TIM_Encoder_Init(TIM_HandleTypeDef *htim, TIM_Encoder_Ini
}
/* Check the parameters */
+ assert_param(IS_TIM_ENCODER_INTERFACE_INSTANCE(htim->Instance));
assert_param(IS_TIM_COUNTER_MODE(htim->Init.CounterMode));
assert_param(IS_TIM_CLOCKDIVISION_DIV(htim->Init.ClockDivision));
assert_param(IS_TIM_AUTORELOAD_PRELOAD(htim->Init.AutoReloadPreload));
- assert_param(IS_TIM_CC2_INSTANCE(htim->Instance));
assert_param(IS_TIM_ENCODER_MODE(sConfig->EncoderMode));
assert_param(IS_TIM_IC_SELECTION(sConfig->IC1Selection));
assert_param(IS_TIM_IC_SELECTION(sConfig->IC2Selection));
- assert_param(IS_TIM_IC_POLARITY(sConfig->IC1Polarity));
- assert_param(IS_TIM_IC_POLARITY(sConfig->IC2Polarity));
+ assert_param(IS_TIM_ENCODERINPUT_POLARITY(sConfig->IC1Polarity));
+ assert_param(IS_TIM_ENCODERINPUT_POLARITY(sConfig->IC2Polarity));
assert_param(IS_TIM_IC_PRESCALER(sConfig->IC1Prescaler));
assert_param(IS_TIM_IC_PRESCALER(sConfig->IC2Prescaler));
assert_param(IS_TIM_IC_FILTER(sConfig->IC1Filter));
@@ -2775,7 +2783,7 @@ __weak void HAL_TIM_Encoder_MspDeInit(TIM_HandleTypeDef *htim)
HAL_StatusTypeDef HAL_TIM_Encoder_Start(TIM_HandleTypeDef *htim, uint32_t Channel)
{
/* Check the parameters */
- assert_param(IS_TIM_CC2_INSTANCE(htim->Instance));
+ assert_param(IS_TIM_ENCODER_INTERFACE_INSTANCE(htim->Instance));
/* Enable the encoder interface channels */
switch (Channel)
@@ -2819,7 +2827,7 @@ HAL_StatusTypeDef HAL_TIM_Encoder_Start(TIM_HandleTypeDef *htim, uint32_t Channe
HAL_StatusTypeDef HAL_TIM_Encoder_Stop(TIM_HandleTypeDef *htim, uint32_t Channel)
{
/* Check the parameters */
- assert_param(IS_TIM_CC2_INSTANCE(htim->Instance));
+ assert_param(IS_TIM_ENCODER_INTERFACE_INSTANCE(htim->Instance));
/* Disable the Input Capture channels 1 and 2
(in the EncoderInterface the two possible channels that can be used are TIM_CHANNEL_1 and TIM_CHANNEL_2) */
@@ -2865,7 +2873,7 @@ HAL_StatusTypeDef HAL_TIM_Encoder_Stop(TIM_HandleTypeDef *htim, uint32_t Channel
HAL_StatusTypeDef HAL_TIM_Encoder_Start_IT(TIM_HandleTypeDef *htim, uint32_t Channel)
{
/* Check the parameters */
- assert_param(IS_TIM_CC2_INSTANCE(htim->Instance));
+ assert_param(IS_TIM_ENCODER_INTERFACE_INSTANCE(htim->Instance));
/* Enable the encoder interface channels */
/* Enable the capture compare Interrupts 1 and/or 2 */
@@ -2915,7 +2923,7 @@ HAL_StatusTypeDef HAL_TIM_Encoder_Start_IT(TIM_HandleTypeDef *htim, uint32_t Cha
HAL_StatusTypeDef HAL_TIM_Encoder_Stop_IT(TIM_HandleTypeDef *htim, uint32_t Channel)
{
/* Check the parameters */
- assert_param(IS_TIM_CC2_INSTANCE(htim->Instance));
+ assert_param(IS_TIM_ENCODER_INTERFACE_INSTANCE(htim->Instance));
/* Disable the Input Capture channels 1 and 2
(in the EncoderInterface the two possible channels that can be used are TIM_CHANNEL_1 and TIM_CHANNEL_2) */
@@ -2966,16 +2974,17 @@ HAL_StatusTypeDef HAL_TIM_Encoder_Stop_IT(TIM_HandleTypeDef *htim, uint32_t Chan
* @param Length The length of data to be transferred from TIM peripheral to memory.
* @retval HAL status
*/
-HAL_StatusTypeDef HAL_TIM_Encoder_Start_DMA(TIM_HandleTypeDef *htim, uint32_t Channel, uint32_t *pData1, uint32_t *pData2, uint16_t Length)
+HAL_StatusTypeDef HAL_TIM_Encoder_Start_DMA(TIM_HandleTypeDef *htim, uint32_t Channel, uint32_t *pData1,
+ uint32_t *pData2, uint16_t Length)
{
/* Check the parameters */
- assert_param(IS_TIM_DMA_CC_INSTANCE(htim->Instance));
+ assert_param(IS_TIM_ENCODER_INTERFACE_INSTANCE(htim->Instance));
- if ((htim->State == HAL_TIM_STATE_BUSY))
+ if (htim->State == HAL_TIM_STATE_BUSY)
{
return HAL_BUSY;
}
- else if ((htim->State == HAL_TIM_STATE_READY))
+ else if (htim->State == HAL_TIM_STATE_READY)
{
if ((((pData1 == NULL) || (pData2 == NULL))) && (Length > 0U))
{
@@ -3103,7 +3112,7 @@ HAL_StatusTypeDef HAL_TIM_Encoder_Start_DMA(TIM_HandleTypeDef *htim, uint32_t Ch
HAL_StatusTypeDef HAL_TIM_Encoder_Stop_DMA(TIM_HandleTypeDef *htim, uint32_t Channel)
{
/* Check the parameters */
- assert_param(IS_TIM_DMA_CC_INSTANCE(htim->Instance));
+ assert_param(IS_TIM_ENCODER_INTERFACE_INSTANCE(htim->Instance));
/* Disable the Input Capture channels 1 and 2
(in the EncoderInterface the two possible channels that can be used are TIM_CHANNEL_1 and TIM_CHANNEL_2) */
@@ -3149,8 +3158,8 @@ HAL_StatusTypeDef HAL_TIM_Encoder_Stop_DMA(TIM_HandleTypeDef *htim, uint32_t Cha
* @}
*/
/** @defgroup TIM_Exported_Functions_Group7 TIM IRQ handler management
- * @brief TIM IRQ handler management
- *
+ * @brief TIM IRQ handler management
+ *
@verbatim
==============================================================================
##### IRQ handler management #####
@@ -3363,8 +3372,8 @@ void HAL_TIM_IRQHandler(TIM_HandleTypeDef *htim)
*/
/** @defgroup TIM_Exported_Functions_Group8 TIM Peripheral Control functions
- * @brief TIM Peripheral Control functions
- *
+ * @brief TIM Peripheral Control functions
+ *
@verbatim
==============================================================================
##### Peripheral Control functions #####
@@ -3738,9 +3747,14 @@ HAL_StatusTypeDef HAL_TIM_PWM_ConfigChannel(TIM_HandleTypeDef *htim,
* This parameter can be one of the following values:
* @arg TIM_CHANNEL_1: TIM Channel 1 selected
* @arg TIM_CHANNEL_2: TIM Channel 2 selected
+ * @note To output a waveform with a minimum delay user can enable the fast
+ * mode by calling the @ref __HAL_TIM_ENABLE_OCxFAST macro. Then CCx
+ * output is forced in response to the edge detection on TIx input,
+ * without taking in account the comparison.
* @retval HAL status
*/
-HAL_StatusTypeDef HAL_TIM_OnePulse_ConfigChannel(TIM_HandleTypeDef *htim, TIM_OnePulse_InitTypeDef *sConfig, uint32_t OutputChannel, uint32_t InputChannel)
+HAL_StatusTypeDef HAL_TIM_OnePulse_ConfigChannel(TIM_HandleTypeDef *htim, TIM_OnePulse_InitTypeDef *sConfig,
+ uint32_t OutputChannel, uint32_t InputChannel)
{
TIM_OC_InitTypeDef temp1;
@@ -3894,11 +3908,11 @@ HAL_StatusTypeDef HAL_TIM_DMABurst_WriteStart(TIM_HandleTypeDef *htim, uint32_t
assert_param(IS_TIM_DMA_SOURCE(BurstRequestSrc));
assert_param(IS_TIM_DMA_LENGTH(BurstLength));
- if ((htim->State == HAL_TIM_STATE_BUSY))
+ if (htim->State == HAL_TIM_STATE_BUSY)
{
return HAL_BUSY;
}
- else if ((htim->State == HAL_TIM_STATE_READY))
+ else if (htim->State == HAL_TIM_STATE_READY)
{
if ((BurstBuffer == NULL) && (BurstLength > 0U))
{
@@ -3941,7 +3955,8 @@ HAL_StatusTypeDef HAL_TIM_DMABurst_WriteStart(TIM_HandleTypeDef *htim, uint32_t
htim->hdma[TIM_DMA_ID_CC1]->XferErrorCallback = TIM_DMAError ;
/* Enable the DMA stream */
- if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC1], (uint32_t)BurstBuffer, (uint32_t)&htim->Instance->DMAR, ((BurstLength) >> 8U) + 1U) != HAL_OK)
+ if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC1], (uint32_t)BurstBuffer,
+ (uint32_t)&htim->Instance->DMAR, ((BurstLength) >> 8U) + 1U) != HAL_OK)
{
return HAL_ERROR;
}
@@ -3957,7 +3972,8 @@ HAL_StatusTypeDef HAL_TIM_DMABurst_WriteStart(TIM_HandleTypeDef *htim, uint32_t
htim->hdma[TIM_DMA_ID_CC2]->XferErrorCallback = TIM_DMAError ;
/* Enable the DMA stream */
- if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC2], (uint32_t)BurstBuffer, (uint32_t)&htim->Instance->DMAR, ((BurstLength) >> 8U) + 1U) != HAL_OK)
+ if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC2], (uint32_t)BurstBuffer,
+ (uint32_t)&htim->Instance->DMAR, ((BurstLength) >> 8U) + 1U) != HAL_OK)
{
return HAL_ERROR;
}
@@ -3973,7 +3989,8 @@ HAL_StatusTypeDef HAL_TIM_DMABurst_WriteStart(TIM_HandleTypeDef *htim, uint32_t
htim->hdma[TIM_DMA_ID_CC3]->XferErrorCallback = TIM_DMAError ;
/* Enable the DMA stream */
- if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC3], (uint32_t)BurstBuffer, (uint32_t)&htim->Instance->DMAR, ((BurstLength) >> 8U) + 1U) != HAL_OK)
+ if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC3], (uint32_t)BurstBuffer,
+ (uint32_t)&htim->Instance->DMAR, ((BurstLength) >> 8U) + 1U) != HAL_OK)
{
return HAL_ERROR;
}
@@ -3989,7 +4006,8 @@ HAL_StatusTypeDef HAL_TIM_DMABurst_WriteStart(TIM_HandleTypeDef *htim, uint32_t
htim->hdma[TIM_DMA_ID_CC4]->XferErrorCallback = TIM_DMAError ;
/* Enable the DMA stream */
- if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC4], (uint32_t)BurstBuffer, (uint32_t)&htim->Instance->DMAR, ((BurstLength) >> 8U) + 1U) != HAL_OK)
+ if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC4], (uint32_t)BurstBuffer,
+ (uint32_t)&htim->Instance->DMAR, ((BurstLength) >> 8U) + 1U) != HAL_OK)
{
return HAL_ERROR;
}
@@ -4005,7 +4023,8 @@ HAL_StatusTypeDef HAL_TIM_DMABurst_WriteStart(TIM_HandleTypeDef *htim, uint32_t
htim->hdma[TIM_DMA_ID_COMMUTATION]->XferErrorCallback = TIM_DMAError ;
/* Enable the DMA stream */
- if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_COMMUTATION], (uint32_t)BurstBuffer, (uint32_t)&htim->Instance->DMAR, ((BurstLength) >> 8U) + 1U) != HAL_OK)
+ if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_COMMUTATION], (uint32_t)BurstBuffer,
+ (uint32_t)&htim->Instance->DMAR, ((BurstLength) >> 8U) + 1U) != HAL_OK)
{
return HAL_ERROR;
}
@@ -4021,7 +4040,8 @@ HAL_StatusTypeDef HAL_TIM_DMABurst_WriteStart(TIM_HandleTypeDef *htim, uint32_t
htim->hdma[TIM_DMA_ID_TRIGGER]->XferErrorCallback = TIM_DMAError ;
/* Enable the DMA stream */
- if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_TRIGGER], (uint32_t)BurstBuffer, (uint32_t)&htim->Instance->DMAR, ((BurstLength) >> 8U) + 1U) != HAL_OK)
+ if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_TRIGGER], (uint32_t)BurstBuffer,
+ (uint32_t)&htim->Instance->DMAR, ((BurstLength) >> 8U) + 1U) != HAL_OK)
{
return HAL_ERROR;
}
@@ -4151,8 +4171,8 @@ HAL_StatusTypeDef HAL_TIM_DMABurst_WriteStop(TIM_HandleTypeDef *htim, uint32_t B
* @note This function should be used only when BurstLength is equal to DMA data transfer length.
* @retval HAL status
*/
-HAL_StatusTypeDef HAL_TIM_DMABurst_ReadStart(TIM_HandleTypeDef *htim, uint32_t BurstBaseAddress, uint32_t BurstRequestSrc,
- uint32_t *BurstBuffer, uint32_t BurstLength)
+HAL_StatusTypeDef HAL_TIM_DMABurst_ReadStart(TIM_HandleTypeDef *htim, uint32_t BurstBaseAddress,
+ uint32_t BurstRequestSrc, uint32_t *BurstBuffer, uint32_t BurstLength)
{
/* Check the parameters */
assert_param(IS_TIM_DMABURST_INSTANCE(htim->Instance));
@@ -4160,11 +4180,11 @@ HAL_StatusTypeDef HAL_TIM_DMABurst_ReadStart(TIM_HandleTypeDef *htim, uint32_t B
assert_param(IS_TIM_DMA_SOURCE(BurstRequestSrc));
assert_param(IS_TIM_DMA_LENGTH(BurstLength));
- if ((htim->State == HAL_TIM_STATE_BUSY))
+ if (htim->State == HAL_TIM_STATE_BUSY)
{
return HAL_BUSY;
}
- else if ((htim->State == HAL_TIM_STATE_READY))
+ else if (htim->State == HAL_TIM_STATE_READY)
{
if ((BurstBuffer == NULL) && (BurstLength > 0U))
{
@@ -4465,7 +4485,7 @@ HAL_StatusTypeDef HAL_TIM_ConfigOCrefClear(TIM_HandleTypeDef *htim,
/* When OCRef clear feature is used with ETR source, ETR prescaler must be off */
if (sClearInputConfig->ClearInputPrescaler != TIM_CLEARINPUTPRESCALER_DIV1)
{
- htim->State = HAL_TIM_STATE_READY;
+ htim->State = HAL_TIM_STATE_READY;
__HAL_UNLOCK(htim);
return HAL_ERROR;
}
@@ -4780,9 +4800,9 @@ HAL_StatusTypeDef HAL_TIM_SlaveConfigSynchro(TIM_HandleTypeDef *htim, TIM_SlaveC
htim->State = HAL_TIM_STATE_BUSY;
- if(TIM_SlaveTimer_SetConfig(htim, sSlaveConfig) != HAL_OK)
+ if (TIM_SlaveTimer_SetConfig(htim, sSlaveConfig) != HAL_OK)
{
- htim->State = HAL_TIM_STATE_READY;
+ htim->State = HAL_TIM_STATE_READY;
__HAL_UNLOCK(htim);
return HAL_ERROR;
}
@@ -4810,7 +4830,7 @@ HAL_StatusTypeDef HAL_TIM_SlaveConfigSynchro(TIM_HandleTypeDef *htim, TIM_SlaveC
* @retval HAL status
*/
HAL_StatusTypeDef HAL_TIM_SlaveConfigSynchro_IT(TIM_HandleTypeDef *htim,
- TIM_SlaveConfigTypeDef *sSlaveConfig)
+ TIM_SlaveConfigTypeDef *sSlaveConfig)
{
/* Check the parameters */
assert_param(IS_TIM_SLAVE_INSTANCE(htim->Instance));
@@ -4821,9 +4841,9 @@ HAL_StatusTypeDef HAL_TIM_SlaveConfigSynchro_IT(TIM_HandleTypeDef *htim,
htim->State = HAL_TIM_STATE_BUSY;
- if(TIM_SlaveTimer_SetConfig(htim, sSlaveConfig) != HAL_OK)
+ if (TIM_SlaveTimer_SetConfig(htim, sSlaveConfig) != HAL_OK)
{
- htim->State = HAL_TIM_STATE_READY;
+ htim->State = HAL_TIM_STATE_READY;
__HAL_UNLOCK(htim);
return HAL_ERROR;
}
@@ -4913,8 +4933,8 @@ uint32_t HAL_TIM_ReadCapturedValue(TIM_HandleTypeDef *htim, uint32_t Channel)
*/
/** @defgroup TIM_Exported_Functions_Group9 TIM Callbacks functions
- * @brief TIM Callbacks functions
- *
+ * @brief TIM Callbacks functions
+ *
@verbatim
==============================================================================
##### TIM Callbacks functions #####
@@ -5118,7 +5138,8 @@ __weak void HAL_TIM_ErrorCallback(TIM_HandleTypeDef *htim)
* @param pCallback pointer to the callback function
* @retval status
*/
-HAL_StatusTypeDef HAL_TIM_RegisterCallback(TIM_HandleTypeDef *htim, HAL_TIM_CallbackIDTypeDef CallbackID, pTIM_CallbackTypeDef pCallback)
+HAL_StatusTypeDef HAL_TIM_RegisterCallback(TIM_HandleTypeDef *htim, HAL_TIM_CallbackIDTypeDef CallbackID,
+ pTIM_CallbackTypeDef pCallback)
{
HAL_StatusTypeDef status = HAL_OK;
@@ -5578,8 +5599,8 @@ HAL_StatusTypeDef HAL_TIM_UnRegisterCallback(TIM_HandleTypeDef *htim, HAL_TIM_Ca
*/
/** @defgroup TIM_Exported_Functions_Group10 TIM Peripheral State functions
- * @brief TIM Peripheral State functions
- *
+ * @brief TIM Peripheral State functions
+ *
@verbatim
==============================================================================
##### Peripheral State functions #####
@@ -6365,7 +6386,7 @@ static void TIM_OC6_SetConfig(TIM_TypeDef *TIMx,
* @retval None
*/
static HAL_StatusTypeDef TIM_SlaveTimer_SetConfig(TIM_HandleTypeDef *htim,
- TIM_SlaveConfigTypeDef *sSlaveConfig)
+ TIM_SlaveConfigTypeDef *sSlaveConfig)
{
uint32_t tmpsmcr;
uint32_t tmpccmr1;
diff --git a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_Keil/Prog/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_tim_ex.c b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_Keil/Prog/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_tim_ex.c
index 271f11ec..f2d976ae 100644
--- a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_Keil/Prog/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_tim_ex.c
+++ b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_Keil/Prog/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_tim_ex.c
@@ -73,7 +73,7 @@
* opensource.org/licenses/BSD-3-Clause
*
******************************************************************************
-*/
+ */
/* Includes ------------------------------------------------------------------*/
#include "stm32f7xx_hal.h"
@@ -397,11 +397,11 @@ HAL_StatusTypeDef HAL_TIMEx_HallSensor_Start_DMA(TIM_HandleTypeDef *htim, uint32
/* Check the parameters */
assert_param(IS_TIM_HALL_SENSOR_INTERFACE_INSTANCE(htim->Instance));
- if ((htim->State == HAL_TIM_STATE_BUSY))
+ if (htim->State == HAL_TIM_STATE_BUSY)
{
return HAL_BUSY;
}
- else if ((htim->State == HAL_TIM_STATE_READY))
+ else if (htim->State == HAL_TIM_STATE_READY)
{
if (((uint32_t)pData == 0U) && (Length > 0U))
{
@@ -709,11 +709,11 @@ HAL_StatusTypeDef HAL_TIMEx_OCN_Start_DMA(TIM_HandleTypeDef *htim, uint32_t Chan
/* Check the parameters */
assert_param(IS_TIM_CCXN_INSTANCE(htim->Instance, Channel));
- if ((htim->State == HAL_TIM_STATE_BUSY))
+ if (htim->State == HAL_TIM_STATE_BUSY)
{
return HAL_BUSY;
}
- else if ((htim->State == HAL_TIM_STATE_READY))
+ else if (htim->State == HAL_TIM_STATE_READY)
{
if (((uint32_t)pData == 0U) && (Length > 0U))
{
@@ -1117,11 +1117,11 @@ HAL_StatusTypeDef HAL_TIMEx_PWMN_Start_DMA(TIM_HandleTypeDef *htim, uint32_t Cha
/* Check the parameters */
assert_param(IS_TIM_CCXN_INSTANCE(htim->Instance, Channel));
- if ((htim->State == HAL_TIM_STATE_BUSY))
+ if (htim->State == HAL_TIM_STATE_BUSY)
{
return HAL_BUSY;
}
- else if ((htim->State == HAL_TIM_STATE_READY))
+ else if (htim->State == HAL_TIM_STATE_READY)
{
if (((uint32_t)pData == 0U) && (Length > 0U))
{
@@ -1466,7 +1466,8 @@ HAL_StatusTypeDef HAL_TIMEx_OnePulseN_Stop_IT(TIM_HandleTypeDef *htim, uint32_t
* @arg TIM_COMMUTATION_SOFTWARE: Commutation source is set by software using the COMG bit
* @retval HAL status
*/
-HAL_StatusTypeDef HAL_TIMEx_ConfigCommutEvent(TIM_HandleTypeDef *htim, uint32_t InputTrigger, uint32_t CommutationSource)
+HAL_StatusTypeDef HAL_TIMEx_ConfigCommutEvent(TIM_HandleTypeDef *htim, uint32_t InputTrigger,
+ uint32_t CommutationSource)
{
/* Check the parameters */
assert_param(IS_TIM_COMMUTATION_EVENT_INSTANCE(htim->Instance));
@@ -1521,7 +1522,8 @@ HAL_StatusTypeDef HAL_TIMEx_ConfigCommutEvent(TIM_HandleTypeDef *htim, uint32_t
* @arg TIM_COMMUTATION_SOFTWARE: Commutation source is set by software using the COMG bit
* @retval HAL status
*/
-HAL_StatusTypeDef HAL_TIMEx_ConfigCommutEvent_IT(TIM_HandleTypeDef *htim, uint32_t InputTrigger, uint32_t CommutationSource)
+HAL_StatusTypeDef HAL_TIMEx_ConfigCommutEvent_IT(TIM_HandleTypeDef *htim, uint32_t InputTrigger,
+ uint32_t CommutationSource)
{
/* Check the parameters */
assert_param(IS_TIM_COMMUTATION_EVENT_INSTANCE(htim->Instance));
@@ -1577,7 +1579,8 @@ HAL_StatusTypeDef HAL_TIMEx_ConfigCommutEvent_IT(TIM_HandleTypeDef *htim, uint32
* @arg TIM_COMMUTATION_SOFTWARE: Commutation source is set by software using the COMG bit
* @retval HAL status
*/
-HAL_StatusTypeDef HAL_TIMEx_ConfigCommutEvent_DMA(TIM_HandleTypeDef *htim, uint32_t InputTrigger, uint32_t CommutationSource)
+HAL_StatusTypeDef HAL_TIMEx_ConfigCommutEvent_DMA(TIM_HandleTypeDef *htim, uint32_t InputTrigger,
+ uint32_t CommutationSource)
{
/* Check the parameters */
assert_param(IS_TIM_COMMUTATION_EVENT_INSTANCE(htim->Instance));
@@ -1632,7 +1635,7 @@ HAL_StatusTypeDef HAL_TIMEx_MasterConfigSynchronization(TIM_HandleTypeDef *htim,
uint32_t tmpsmcr;
/* Check the parameters */
- assert_param(IS_TIM_SYNCHRO_INSTANCE(htim->Instance));
+ assert_param(IS_TIM_MASTER_INSTANCE(htim->Instance));
assert_param(IS_TIM_TRGO_SOURCE(sMasterConfig->MasterOutputTrigger));
assert_param(IS_TIM_MSM_STATE(sMasterConfig->MasterSlaveMode));
@@ -1665,16 +1668,19 @@ HAL_StatusTypeDef HAL_TIMEx_MasterConfigSynchronization(TIM_HandleTypeDef *htim,
/* Select the TRGO source */
tmpcr2 |= sMasterConfig->MasterOutputTrigger;
- /* Reset the MSM Bit */
- tmpsmcr &= ~TIM_SMCR_MSM;
- /* Set master mode */
- tmpsmcr |= sMasterConfig->MasterSlaveMode;
-
/* Update TIMx CR2 */
htim->Instance->CR2 = tmpcr2;
- /* Update TIMx SMCR */
- htim->Instance->SMCR = tmpsmcr;
+ if (IS_TIM_SLAVE_INSTANCE(htim->Instance))
+ {
+ /* Reset the MSM Bit */
+ tmpsmcr &= ~TIM_SMCR_MSM;
+ /* Set master mode */
+ tmpsmcr |= sMasterConfig->MasterSlaveMode;
+
+ /* Update TIMx SMCR */
+ htim->Instance->SMCR = tmpsmcr;
+ }
/* Change the htim state */
htim->State = HAL_TIM_STATE_READY;
@@ -1690,6 +1696,9 @@ HAL_StatusTypeDef HAL_TIMEx_MasterConfigSynchronization(TIM_HandleTypeDef *htim,
* @param htim TIM handle
* @param sBreakDeadTimeConfig pointer to a TIM_ConfigBreakDeadConfigTypeDef structure that
* contains the BDTR Register configuration information for the TIM peripheral.
+ * @note Interrupts can be generated when an active level is detected on the
+ * break input, the break 2 input or the system break input. Break
+ * interrupt can be enabled by calling the @ref __HAL_TIM_ENABLE_IT macro.
* @retval HAL status
*/
HAL_StatusTypeDef HAL_TIMEx_ConfigBreakDeadTime(TIM_HandleTypeDef *htim,
@@ -1763,10 +1772,10 @@ HAL_StatusTypeDef HAL_TIMEx_ConfigBreakInput(TIM_HandleTypeDef *htim,
{
uint32_t tmporx;
- uint32_t bkin_enable_mask = 0U;
- uint32_t bkin_polarity_mask = 0U;
- uint32_t bkin_enable_bitpos = 0U;
- uint32_t bkin_polarity_bitpos = 0U;
+ uint32_t bkin_enable_mask;
+ uint32_t bkin_polarity_mask;
+ uint32_t bkin_enable_bitpos;
+ uint32_t bkin_polarity_bitpos;
/* Check the parameters */
assert_param(IS_TIM_BREAK_INSTANCE(htim->Instance));
@@ -1800,11 +1809,19 @@ HAL_StatusTypeDef HAL_TIMEx_ConfigBreakInput(TIM_HandleTypeDef *htim,
{
bkin_enable_mask = TIM1_AF1_BKDF1BKE;
bkin_enable_bitpos = 8;
+ bkin_polarity_mask = 0U;
+ bkin_polarity_bitpos = 0U;
break;
}
default:
+ {
+ bkin_enable_mask = 0U;
+ bkin_polarity_mask = 0U;
+ bkin_enable_bitpos = 0U;
+ bkin_polarity_bitpos = 0U;
break;
+ }
}
switch (BreakInput)
@@ -2054,7 +2071,7 @@ HAL_TIM_StateTypeDef HAL_TIMEx_HallSensor_GetState(TIM_HandleTypeDef *htim)
*/
/* Private functions ---------------------------------------------------------*/
-/** @defgroup TIMEx_Private_Functions TIM Extended Private Functions
+/** @defgroup TIMEx_Private_Functions TIMEx Private Functions
* @{
*/
diff --git a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_Keil/Prog/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_uart.c b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_Keil/Prog/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_uart.c
index 76efbf84..25a901fe 100644
--- a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_Keil/Prog/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_uart.c
+++ b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_Keil/Prog/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_uart.c
@@ -326,7 +326,6 @@ HAL_StatusTypeDef HAL_UART_Init(UART_HandleTypeDef *huart)
huart->gState = HAL_UART_STATE_BUSY;
- /* Disable the Peripheral */
__HAL_UART_DISABLE(huart);
/* Set the UART Communication parameters */
@@ -346,7 +345,6 @@ HAL_StatusTypeDef HAL_UART_Init(UART_HandleTypeDef *huart)
CLEAR_BIT(huart->Instance->CR2, (USART_CR2_LINEN | USART_CR2_CLKEN));
CLEAR_BIT(huart->Instance->CR3, (USART_CR3_SCEN | USART_CR3_HDSEL | USART_CR3_IREN));
- /* Enable the Peripheral */
__HAL_UART_ENABLE(huart);
/* TEACK and/or REACK to check before moving huart->gState and huart->RxState to Ready */
@@ -393,7 +391,6 @@ HAL_StatusTypeDef HAL_HalfDuplex_Init(UART_HandleTypeDef *huart)
huart->gState = HAL_UART_STATE_BUSY;
- /* Disable the Peripheral */
__HAL_UART_DISABLE(huart);
/* Set the UART Communication parameters */
@@ -416,7 +413,6 @@ HAL_StatusTypeDef HAL_HalfDuplex_Init(UART_HandleTypeDef *huart)
/* Enable the Half-Duplex mode by setting the HDSEL bit in the CR3 register */
SET_BIT(huart->Instance->CR3, USART_CR3_HDSEL);
- /* Enable the Peripheral */
__HAL_UART_ENABLE(huart);
/* TEACK and/or REACK to check before moving huart->gState and huart->RxState to Ready */
@@ -481,7 +477,6 @@ HAL_StatusTypeDef HAL_LIN_Init(UART_HandleTypeDef *huart, uint32_t BreakDetectLe
huart->gState = HAL_UART_STATE_BUSY;
- /* Disable the Peripheral */
__HAL_UART_DISABLE(huart);
/* Set the UART Communication parameters */
@@ -507,7 +502,6 @@ HAL_StatusTypeDef HAL_LIN_Init(UART_HandleTypeDef *huart, uint32_t BreakDetectLe
/* Set the USART LIN Break detection length. */
MODIFY_REG(huart->Instance->CR2, USART_CR2_LBDL, BreakDetectLength);
- /* Enable the Peripheral */
__HAL_UART_ENABLE(huart);
/* TEACK and/or REACK to check before moving huart->gState and huart->RxState to Ready */
@@ -567,7 +561,6 @@ HAL_StatusTypeDef HAL_MultiProcessor_Init(UART_HandleTypeDef *huart, uint8_t Add
huart->gState = HAL_UART_STATE_BUSY;
- /* Disable the Peripheral */
__HAL_UART_DISABLE(huart);
/* Set the UART Communication parameters */
@@ -596,7 +589,6 @@ HAL_StatusTypeDef HAL_MultiProcessor_Init(UART_HandleTypeDef *huart, uint8_t Add
/* Set the wake up method by setting the WAKE bit in the CR1 register */
MODIFY_REG(huart->Instance->CR1, USART_CR1_WAKE, WakeUpMethod);
- /* Enable the Peripheral */
__HAL_UART_ENABLE(huart);
/* TEACK and/or REACK to check before moving huart->gState and huart->RxState to Ready */
@@ -622,7 +614,6 @@ HAL_StatusTypeDef HAL_UART_DeInit(UART_HandleTypeDef *huart)
huart->gState = HAL_UART_STATE_BUSY;
- /* Disable the Peripheral */
__HAL_UART_DISABLE(huart);
huart->Instance->CR1 = 0x0U;
@@ -645,7 +636,6 @@ HAL_StatusTypeDef HAL_UART_DeInit(UART_HandleTypeDef *huart)
huart->gState = HAL_UART_STATE_RESET;
huart->RxState = HAL_UART_STATE_RESET;
- /* Process Unlock */
__HAL_UNLOCK(huart);
return HAL_OK;
@@ -704,18 +694,18 @@ __weak void HAL_UART_MspDeInit(UART_HandleTypeDef *huart)
* @param pCallback pointer to the Callback function
* @retval HAL status
*/
-HAL_StatusTypeDef HAL_UART_RegisterCallback(UART_HandleTypeDef *huart, HAL_UART_CallbackIDTypeDef CallbackID, pUART_CallbackTypeDef pCallback)
+HAL_StatusTypeDef HAL_UART_RegisterCallback(UART_HandleTypeDef *huart, HAL_UART_CallbackIDTypeDef CallbackID,
+ pUART_CallbackTypeDef pCallback)
{
HAL_StatusTypeDef status = HAL_OK;
if (pCallback == NULL)
{
- /* Update the error code */
huart->ErrorCode |= HAL_UART_ERROR_INVALID_CALLBACK;
return HAL_ERROR;
}
- /* Process locked */
+
__HAL_LOCK(huart);
if (huart->gState == HAL_UART_STATE_READY)
@@ -768,10 +758,8 @@ HAL_StatusTypeDef HAL_UART_RegisterCallback(UART_HandleTypeDef *huart, HAL_UART_
break;
default :
- /* Update the error code */
huart->ErrorCode |= HAL_UART_ERROR_INVALID_CALLBACK;
- /* Return error status */
status = HAL_ERROR;
break;
}
@@ -789,24 +777,19 @@ HAL_StatusTypeDef HAL_UART_RegisterCallback(UART_HandleTypeDef *huart, HAL_UART_
break;
default :
- /* Update the error code */
huart->ErrorCode |= HAL_UART_ERROR_INVALID_CALLBACK;
- /* Return error status */
status = HAL_ERROR;
break;
}
}
else
{
- /* Update the error code */
huart->ErrorCode |= HAL_UART_ERROR_INVALID_CALLBACK;
- /* Return error status */
status = HAL_ERROR;
}
- /* Release Lock */
__HAL_UNLOCK(huart);
return status;
@@ -837,7 +820,6 @@ HAL_StatusTypeDef HAL_UART_UnRegisterCallback(UART_HandleTypeDef *huart, HAL_UAR
{
HAL_StatusTypeDef status = HAL_OK;
- /* Process locked */
__HAL_LOCK(huart);
if (HAL_UART_STATE_READY == huart->gState)
@@ -876,6 +858,12 @@ HAL_StatusTypeDef HAL_UART_UnRegisterCallback(UART_HandleTypeDef *huart, HAL_UAR
huart->AbortReceiveCpltCallback = HAL_UART_AbortReceiveCpltCallback; /* Legacy weak AbortReceiveCpltCallback */
break;
+#if defined(USART_CR1_UESM)
+ case HAL_UART_WAKEUP_CB_ID :
+ huart->WakeupCallback = HAL_UARTEx_WakeupCallback; /* Legacy weak WakeupCallback */
+ break;
+
+#endif /* USART_CR1_UESM */
case HAL_UART_MSPINIT_CB_ID :
huart->MspInitCallback = HAL_UART_MspInit; /* Legacy weak MspInitCallback */
break;
@@ -885,10 +873,8 @@ HAL_StatusTypeDef HAL_UART_UnRegisterCallback(UART_HandleTypeDef *huart, HAL_UAR
break;
default :
- /* Update the error code */
huart->ErrorCode |= HAL_UART_ERROR_INVALID_CALLBACK;
- /* Return error status */
status = HAL_ERROR;
break;
}
@@ -906,24 +892,19 @@ HAL_StatusTypeDef HAL_UART_UnRegisterCallback(UART_HandleTypeDef *huart, HAL_UAR
break;
default :
- /* Update the error code */
huart->ErrorCode |= HAL_UART_ERROR_INVALID_CALLBACK;
- /* Return error status */
status = HAL_ERROR;
break;
}
}
else
{
- /* Update the error code */
huart->ErrorCode |= HAL_UART_ERROR_INVALID_CALLBACK;
- /* Return error status */
status = HAL_ERROR;
}
- /* Release Lock */
__HAL_UNLOCK(huart);
return status;
@@ -992,6 +973,11 @@ HAL_StatusTypeDef HAL_UART_UnRegisterCallback(UART_HandleTypeDef *huart, HAL_UAR
(+) HAL_UART_AbortCpltCallback()
(+) HAL_UART_AbortTransmitCpltCallback()
(+) HAL_UART_AbortReceiveCpltCallback()
+#if defined(USART_CR1_UESM)
+
+ (#) Wakeup from Stop mode Callback:
+ (+) HAL_UARTEx_WakeupCallback()
+#endif
(#) In Non-Blocking mode transfers, possible errors are split into 2 categories.
Errors are handled as follows :
@@ -1013,9 +999,12 @@ HAL_StatusTypeDef HAL_UART_UnRegisterCallback(UART_HandleTypeDef *huart, HAL_UAR
/**
* @brief Send an amount of data in blocking mode.
+ * @note When UART parity is not enabled (PCE = 0), and Word Length is configured to 9 bits (M1-M0 = 01),
+ * the sent data is handled as a set of u16. In this case, Size must indicate the number
+ * of u16 provided through pData.
* @param huart UART handle.
- * @param pData Pointer to data buffer.
- * @param Size Amount of data to be sent.
+ * @param pData Pointer to data buffer (u8 or u16 data elements).
+ * @param Size Amount of data elements (u8 or u16) to be sent.
* @param Timeout Timeout duration.
* @retval HAL status
*/
@@ -1033,7 +1022,6 @@ HAL_StatusTypeDef HAL_UART_Transmit(UART_HandleTypeDef *huart, uint8_t *pData, u
return HAL_ERROR;
}
- /* Process Locked */
__HAL_LOCK(huart);
huart->ErrorCode = HAL_UART_ERROR_NONE;
@@ -1045,7 +1033,7 @@ HAL_StatusTypeDef HAL_UART_Transmit(UART_HandleTypeDef *huart, uint8_t *pData, u
huart->TxXferSize = Size;
huart->TxXferCount = Size;
- /* In case of 9bits/No Parity transfer, pData needs to be handled as a uint16_t pointer */
+ /* In case of 9bits/No Parity transfer, pData needs to be handled as a uint16_t pointer */
if ((huart->Init.WordLength == UART_WORDLENGTH_9B) && (huart->Init.Parity == UART_PARITY_NONE))
{
pdata8bits = NULL;
@@ -1057,6 +1045,8 @@ HAL_StatusTypeDef HAL_UART_Transmit(UART_HandleTypeDef *huart, uint8_t *pData, u
pdata16bits = NULL;
}
+ __HAL_UNLOCK(huart);
+
while (huart->TxXferCount > 0U)
{
if (UART_WaitOnFlagUntilTimeout(huart, UART_FLAG_TXE, RESET, tickstart, Timeout) != HAL_OK)
@@ -1084,9 +1074,6 @@ HAL_StatusTypeDef HAL_UART_Transmit(UART_HandleTypeDef *huart, uint8_t *pData, u
/* At end of Tx process, restore huart->gState to Ready */
huart->gState = HAL_UART_STATE_READY;
- /* Process Unlocked */
- __HAL_UNLOCK(huart);
-
return HAL_OK;
}
else
@@ -1097,9 +1084,12 @@ HAL_StatusTypeDef HAL_UART_Transmit(UART_HandleTypeDef *huart, uint8_t *pData, u
/**
* @brief Receive an amount of data in blocking mode.
+ * @note When UART parity is not enabled (PCE = 0), and Word Length is configured to 9 bits (M1-M0 = 01),
+ * the received data is handled as a set of u16. In this case, Size must indicate the number
+ * of u16 available through pData.
* @param huart UART handle.
- * @param pData Pointer to data buffer.
- * @param Size Amount of data to be received.
+ * @param pData Pointer to data buffer (u8 or u16 data elements).
+ * @param Size Amount of data elements (u8 or u16) to be received.
* @param Timeout Timeout duration.
* @retval HAL status
*/
@@ -1118,7 +1108,6 @@ HAL_StatusTypeDef HAL_UART_Receive(UART_HandleTypeDef *huart, uint8_t *pData, ui
return HAL_ERROR;
}
- /* Process Locked */
__HAL_LOCK(huart);
huart->ErrorCode = HAL_UART_ERROR_NONE;
@@ -1146,6 +1135,8 @@ HAL_StatusTypeDef HAL_UART_Receive(UART_HandleTypeDef *huart, uint8_t *pData, ui
pdata16bits = NULL;
}
+ __HAL_UNLOCK(huart);
+
/* as long as data have to be received */
while (huart->RxXferCount > 0U)
{
@@ -1169,9 +1160,6 @@ HAL_StatusTypeDef HAL_UART_Receive(UART_HandleTypeDef *huart, uint8_t *pData, ui
/* At end of Rx process, restore huart->RxState to Ready */
huart->RxState = HAL_UART_STATE_READY;
- /* Process Unlocked */
- __HAL_UNLOCK(huart);
-
return HAL_OK;
}
else
@@ -1182,9 +1170,12 @@ HAL_StatusTypeDef HAL_UART_Receive(UART_HandleTypeDef *huart, uint8_t *pData, ui
/**
* @brief Send an amount of data in interrupt mode.
+ * @note When UART parity is not enabled (PCE = 0), and Word Length is configured to 9 bits (M1-M0 = 01),
+ * the sent data is handled as a set of u16. In this case, Size must indicate the number
+ * of u16 provided through pData.
* @param huart UART handle.
- * @param pData Pointer to data buffer.
- * @param Size Amount of data to be sent.
+ * @param pData Pointer to data buffer (u8 or u16 data elements).
+ * @param Size Amount of data elements (u8 or u16) to be sent.
* @retval HAL status
*/
HAL_StatusTypeDef HAL_UART_Transmit_IT(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size)
@@ -1197,7 +1188,6 @@ HAL_StatusTypeDef HAL_UART_Transmit_IT(UART_HandleTypeDef *huart, uint8_t *pData
return HAL_ERROR;
}
- /* Process Locked */
__HAL_LOCK(huart);
huart->pTxBuffPtr = pData;
@@ -1218,7 +1208,6 @@ HAL_StatusTypeDef HAL_UART_Transmit_IT(UART_HandleTypeDef *huart, uint8_t *pData
huart->TxISR = UART_TxISR_8BIT;
}
- /* Process Unlocked */
__HAL_UNLOCK(huart);
/* Enable the Transmit Data Register Empty interrupt */
@@ -1234,9 +1223,12 @@ HAL_StatusTypeDef HAL_UART_Transmit_IT(UART_HandleTypeDef *huart, uint8_t *pData
/**
* @brief Receive an amount of data in interrupt mode.
+ * @note When UART parity is not enabled (PCE = 0), and Word Length is configured to 9 bits (M1-M0 = 01),
+ * the received data is handled as a set of u16. In this case, Size must indicate the number
+ * of u16 available through pData.
* @param huart UART handle.
- * @param pData Pointer to data buffer.
- * @param Size Amount of data to be received.
+ * @param pData Pointer to data buffer (u8 or u16 data elements).
+ * @param Size Amount of data elements (u8 or u16) to be received.
* @retval HAL status
*/
HAL_StatusTypeDef HAL_UART_Receive_IT(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size)
@@ -1249,7 +1241,6 @@ HAL_StatusTypeDef HAL_UART_Receive_IT(UART_HandleTypeDef *huart, uint8_t *pData,
return HAL_ERROR;
}
- /* Process Locked */
__HAL_LOCK(huart);
huart->pRxBuffPtr = pData;
@@ -1276,7 +1267,6 @@ HAL_StatusTypeDef HAL_UART_Receive_IT(UART_HandleTypeDef *huart, uint8_t *pData,
huart->RxISR = UART_RxISR_8BIT;
}
- /* Process Unlocked */
__HAL_UNLOCK(huart);
/* Enable the UART Parity Error interrupt and Data Register Not Empty interrupt */
@@ -1292,9 +1282,12 @@ HAL_StatusTypeDef HAL_UART_Receive_IT(UART_HandleTypeDef *huart, uint8_t *pData,
/**
* @brief Send an amount of data in DMA mode.
+ * @note When UART parity is not enabled (PCE = 0), and Word Length is configured to 9 bits (M1-M0 = 01),
+ * the sent data is handled as a set of u16. In this case, Size must indicate the number
+ * of u16 provided through pData.
* @param huart UART handle.
- * @param pData Pointer to data buffer.
- * @param Size Amount of data to be sent.
+ * @param pData Pointer to data buffer (u8 or u16 data elements).
+ * @param Size Amount of data elements (u8 or u16) to be sent.
* @retval HAL status
*/
HAL_StatusTypeDef HAL_UART_Transmit_DMA(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size)
@@ -1307,7 +1300,6 @@ HAL_StatusTypeDef HAL_UART_Transmit_DMA(UART_HandleTypeDef *huart, uint8_t *pDat
return HAL_ERROR;
}
- /* Process Locked */
__HAL_LOCK(huart);
huart->pTxBuffPtr = pData;
@@ -1337,7 +1329,6 @@ HAL_StatusTypeDef HAL_UART_Transmit_DMA(UART_HandleTypeDef *huart, uint8_t *pDat
/* Set error code to DMA */
huart->ErrorCode = HAL_UART_ERROR_DMA;
- /* Process Unlocked */
__HAL_UNLOCK(huart);
/* Restore huart->gState to ready */
@@ -1349,7 +1340,6 @@ HAL_StatusTypeDef HAL_UART_Transmit_DMA(UART_HandleTypeDef *huart, uint8_t *pDat
/* Clear the TC flag in the ICR register */
__HAL_UART_CLEAR_FLAG(huart, UART_CLEAR_TCF);
- /* Process Unlocked */
__HAL_UNLOCK(huart);
/* Enable the DMA transfer for transmit request by setting the DMAT bit
@@ -1368,9 +1358,12 @@ HAL_StatusTypeDef HAL_UART_Transmit_DMA(UART_HandleTypeDef *huart, uint8_t *pDat
* @brief Receive an amount of data in DMA mode.
* @note When the UART parity is enabled (PCE = 1), the received data contain
* the parity bit (MSB position).
+ * @note When UART parity is not enabled (PCE = 0), and Word Length is configured to 9 bits (M1-M0 = 01),
+ * the received data is handled as a set of u16. In this case, Size must indicate the number
+ * of u16 available through pData.
* @param huart UART handle.
- * @param pData Pointer to data buffer.
- * @param Size Amount of data to be received.
+ * @param pData Pointer to data buffer (u8 or u16 data elements).
+ * @param Size Amount of data elements (u8 or u16) to be received.
* @retval HAL status
*/
HAL_StatusTypeDef HAL_UART_Receive_DMA(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size)
@@ -1383,7 +1376,6 @@ HAL_StatusTypeDef HAL_UART_Receive_DMA(UART_HandleTypeDef *huart, uint8_t *pData
return HAL_ERROR;
}
- /* Process Locked */
__HAL_LOCK(huart);
huart->pRxBuffPtr = pData;
@@ -1412,7 +1404,6 @@ HAL_StatusTypeDef HAL_UART_Receive_DMA(UART_HandleTypeDef *huart, uint8_t *pData
/* Set error code to DMA */
huart->ErrorCode = HAL_UART_ERROR_DMA;
- /* Process Unlocked */
__HAL_UNLOCK(huart);
/* Restore huart->gState to ready */
@@ -1421,7 +1412,6 @@ HAL_StatusTypeDef HAL_UART_Receive_DMA(UART_HandleTypeDef *huart, uint8_t *pData
return HAL_ERROR;
}
}
- /* Process Unlocked */
__HAL_UNLOCK(huart);
/* Enable the UART Parity Error Interrupt */
@@ -1452,7 +1442,6 @@ HAL_StatusTypeDef HAL_UART_DMAPause(UART_HandleTypeDef *huart)
const HAL_UART_StateTypeDef gstate = huart->gState;
const HAL_UART_StateTypeDef rxstate = huart->RxState;
- /* Process Locked */
__HAL_LOCK(huart);
if ((HAL_IS_BIT_SET(huart->Instance->CR3, USART_CR3_DMAT)) &&
@@ -1472,7 +1461,6 @@ HAL_StatusTypeDef HAL_UART_DMAPause(UART_HandleTypeDef *huart)
CLEAR_BIT(huart->Instance->CR3, USART_CR3_DMAR);
}
- /* Process Unlocked */
__HAL_UNLOCK(huart);
return HAL_OK;
@@ -1485,7 +1473,6 @@ HAL_StatusTypeDef HAL_UART_DMAPause(UART_HandleTypeDef *huart)
*/
HAL_StatusTypeDef HAL_UART_DMAResume(UART_HandleTypeDef *huart)
{
- /* Process Locked */
__HAL_LOCK(huart);
if (huart->gState == HAL_UART_STATE_BUSY_TX)
@@ -1506,7 +1493,6 @@ HAL_StatusTypeDef HAL_UART_DMAResume(UART_HandleTypeDef *huart)
SET_BIT(huart->Instance->CR3, USART_CR3_DMAR);
}
- /* Process Unlocked */
__HAL_UNLOCK(huart);
return HAL_OK;
@@ -1591,7 +1577,7 @@ HAL_StatusTypeDef HAL_UART_DMAStop(UART_HandleTypeDef *huart)
* - Set handle State to READY
* @note This procedure is executed in blocking mode : when exiting function, Abort is considered as completed.
* @retval HAL status
-*/
+ */
HAL_StatusTypeDef HAL_UART_Abort(UART_HandleTypeDef *huart)
{
/* Disable TXEIE, TCIE, RXNE, PE and ERR (Frame error, noise error, overrun error) interrupts */
@@ -1663,7 +1649,6 @@ HAL_StatusTypeDef HAL_UART_Abort(UART_HandleTypeDef *huart)
huart->gState = HAL_UART_STATE_READY;
huart->RxState = HAL_UART_STATE_READY;
- /* Reset Handle ErrorCode to No Error */
huart->ErrorCode = HAL_UART_ERROR_NONE;
return HAL_OK;
@@ -1680,7 +1665,7 @@ HAL_StatusTypeDef HAL_UART_Abort(UART_HandleTypeDef *huart)
* - Set handle State to READY
* @note This procedure is executed in blocking mode : when exiting function, Abort is considered as completed.
* @retval HAL status
-*/
+ */
HAL_StatusTypeDef HAL_UART_AbortTransmit(UART_HandleTypeDef *huart)
{
/* Disable TXEIE and TCIE interrupts */
@@ -1732,7 +1717,7 @@ HAL_StatusTypeDef HAL_UART_AbortTransmit(UART_HandleTypeDef *huart)
* - Set handle State to READY
* @note This procedure is executed in blocking mode : when exiting function, Abort is considered as completed.
* @retval HAL status
-*/
+ */
HAL_StatusTypeDef HAL_UART_AbortReceive(UART_HandleTypeDef *huart)
{
/* Disable RXNE, PE and ERR (Frame error, noise error, overrun error) interrupts */
@@ -1792,7 +1777,7 @@ HAL_StatusTypeDef HAL_UART_AbortReceive(UART_HandleTypeDef *huart)
* @note This procedure is executed in Interrupt mode, meaning that abort procedure could be
* considered as completed only when user abort complete callback is executed (not when exiting function).
* @retval HAL status
-*/
+ */
HAL_StatusTypeDef HAL_UART_Abort_IT(UART_HandleTypeDef *huart)
{
uint32_t abortcplt = 1U;
@@ -1931,7 +1916,7 @@ HAL_StatusTypeDef HAL_UART_Abort_IT(UART_HandleTypeDef *huart)
* @note This procedure is executed in Interrupt mode, meaning that abort procedure could be
* considered as completed only when user abort complete callback is executed (not when exiting function).
* @retval HAL status
-*/
+ */
HAL_StatusTypeDef HAL_UART_AbortTransmit_IT(UART_HandleTypeDef *huart)
{
/* Disable interrupts */
@@ -2015,7 +2000,7 @@ HAL_StatusTypeDef HAL_UART_AbortTransmit_IT(UART_HandleTypeDef *huart)
* @note This procedure is executed in Interrupt mode, meaning that abort procedure could be
* considered as completed only when user abort complete callback is executed (not when exiting function).
* @retval HAL status
-*/
+ */
HAL_StatusTypeDef HAL_UART_AbortReceive_IT(UART_HandleTypeDef *huart)
{
/* Disable RXNE, PE and ERR (Frame error, noise error, overrun error) interrupts */
@@ -2110,7 +2095,7 @@ void HAL_UART_IRQHandler(UART_HandleTypeDef *huart)
uint32_t errorcode;
/* If no error occurs */
- errorflags = (isrflags & (uint32_t)(USART_ISR_PE | USART_ISR_FE | USART_ISR_ORE | USART_ISR_NE));
+ errorflags = (isrflags & (uint32_t)(USART_ISR_PE | USART_ISR_FE | USART_ISR_ORE | USART_ISR_NE | USART_ISR_RTOF));
if (errorflags == 0U)
{
/* UART in mode Receiver ---------------------------------------------------*/
@@ -2164,10 +2149,18 @@ void HAL_UART_IRQHandler(UART_HandleTypeDef *huart)
huart->ErrorCode |= HAL_UART_ERROR_ORE;
}
- /* Call UART Error Call back function if need be --------------------------*/
+ /* UART Receiver Timeout interrupt occurred ---------------------------------*/
+ if (((isrflags & USART_ISR_RTOF) != 0U) && ((cr1its & USART_CR1_RTOIE) != 0U))
+ {
+ __HAL_UART_CLEAR_FLAG(huart, UART_CLEAR_RTOF);
+
+ huart->ErrorCode |= HAL_UART_ERROR_RTO;
+ }
+
+ /* Call UART Error Call back function if need be ----------------------------*/
if (huart->ErrorCode != HAL_UART_ERROR_NONE)
{
- /* UART in mode Receiver ---------------------------------------------------*/
+ /* UART in mode Receiver --------------------------------------------------*/
if (((isrflags & USART_ISR_RXNE) != 0U)
&& ((cr1its & USART_CR1_RXNEIE) != 0U))
{
@@ -2177,11 +2170,14 @@ void HAL_UART_IRQHandler(UART_HandleTypeDef *huart)
}
}
- /* If Overrun error occurs, or if any error occurs in DMA mode reception,
- consider error as blocking */
+ /* If Error is to be considered as blocking :
+ - Receiver Timeout error in Reception
+ - Overrun error in Reception
+ - any error occurs in DMA mode reception
+ */
errorcode = huart->ErrorCode;
if ((HAL_IS_BIT_SET(huart->Instance->CR3, USART_CR3_DMAR)) ||
- ((errorcode & HAL_UART_ERROR_ORE) != 0U))
+ ((errorcode & (HAL_UART_ERROR_RTO | HAL_UART_ERROR_ORE)) != 0U))
{
/* Blocking error : transfer is aborted
Set the UART state ready to be able to start again the process,
@@ -2249,6 +2245,26 @@ void HAL_UART_IRQHandler(UART_HandleTypeDef *huart)
return;
} /* End if some error occurs */
+#if defined(USART_CR1_UESM)
+
+ /* UART wakeup from Stop mode interrupt occurred ---------------------------*/
+ if (((isrflags & USART_ISR_WUF) != 0U) && ((cr3its & USART_CR3_WUFIE) != 0U))
+ {
+ __HAL_UART_CLEAR_FLAG(huart, UART_CLEAR_WUF);
+
+ /* UART Rx state is not reset as a reception process might be ongoing.
+ If UART handle state fields need to be reset to READY, this could be done in Wakeup callback */
+
+#if (USE_HAL_UART_REGISTER_CALLBACKS == 1)
+ /* Call registered Wakeup Callback */
+ huart->WakeupCallback(huart);
+#else
+ /* Call legacy weak Wakeup Callback */
+ HAL_UARTEx_WakeupCallback(huart);
+#endif /* USE_HAL_UART_REGISTER_CALLBACKS */
+ return;
+ }
+#endif /* USART_CR1_UESM */
/* UART in mode Transmitter ------------------------------------------------*/
if (((isrflags & USART_ISR_TXE) != 0U)
@@ -2390,6 +2406,23 @@ __weak void HAL_UART_AbortReceiveCpltCallback(UART_HandleTypeDef *huart)
*/
}
+#if defined(USART_CR1_UESM)
+/**
+ * @brief UART wakeup from Stop mode callback.
+ * @param huart UART handle.
+ * @retval None
+ */
+__weak void HAL_UARTEx_WakeupCallback(UART_HandleTypeDef *huart)
+{
+ /* Prevent unused argument(s) compilation warning */
+ UNUSED(huart);
+
+ /* NOTE : This function should not be modified, when the callback is needed,
+ the HAL_UARTEx_WakeupCallback can be implemented in the user file.
+ */
+}
+
+#endif /* USART_CR1_UESM */
/**
* @}
*/
@@ -2403,6 +2436,9 @@ __weak void HAL_UART_AbortReceiveCpltCallback(UART_HandleTypeDef *huart)
===============================================================================
[..]
This subsection provides a set of functions allowing to control the UART.
+ (+) HAL_UART_ReceiverTimeout_Config() API allows to configure the receiver timeout value on the fly
+ (+) HAL_UART_EnableReceiverTimeout() API enables the receiver timeout feature
+ (+) HAL_UART_DisableReceiverTimeout() API disables the receiver timeout feature
(+) HAL_MultiProcessor_EnableMuteMode() API enables mute mode
(+) HAL_MultiProcessor_DisableMuteMode() API disables mute mode
(+) HAL_MultiProcessor_EnterMuteMode() API enters mute mode
@@ -2416,6 +2452,82 @@ __weak void HAL_UART_AbortReceiveCpltCallback(UART_HandleTypeDef *huart)
* @{
*/
+/**
+ * @brief Update on the fly the receiver timeout value in RTOR register.
+ * @param huart Pointer to a UART_HandleTypeDef structure that contains
+ * the configuration information for the specified UART module.
+ * @param TimeoutValue receiver timeout value in number of baud blocks. The timeout
+ * value must be less or equal to 0x0FFFFFFFF.
+ * @retval None
+ */
+void HAL_UART_ReceiverTimeout_Config(UART_HandleTypeDef *huart, uint32_t TimeoutValue)
+{
+ assert_param(IS_UART_RECEIVER_TIMEOUT_VALUE(TimeoutValue));
+ MODIFY_REG(huart->Instance->RTOR, USART_RTOR_RTO, TimeoutValue);
+}
+
+/**
+ * @brief Enable the UART receiver timeout feature.
+ * @param huart Pointer to a UART_HandleTypeDef structure that contains
+ * the configuration information for the specified UART module.
+ * @retval HAL status
+ */
+HAL_StatusTypeDef HAL_UART_EnableReceiverTimeout(UART_HandleTypeDef *huart)
+{
+ if (huart->gState == HAL_UART_STATE_READY)
+ {
+ /* Process Locked */
+ __HAL_LOCK(huart);
+
+ huart->gState = HAL_UART_STATE_BUSY;
+
+ /* Set the USART RTOEN bit */
+ SET_BIT(huart->Instance->CR2, USART_CR2_RTOEN);
+
+ huart->gState = HAL_UART_STATE_READY;
+
+ /* Process Unlocked */
+ __HAL_UNLOCK(huart);
+
+ return HAL_OK;
+ }
+ else
+ {
+ return HAL_BUSY;
+ }
+}
+
+/**
+ * @brief Disable the UART receiver timeout feature.
+ * @param huart Pointer to a UART_HandleTypeDef structure that contains
+ * the configuration information for the specified UART module.
+ * @retval HAL status
+ */
+HAL_StatusTypeDef HAL_UART_DisableReceiverTimeout(UART_HandleTypeDef *huart)
+{
+ if (huart->gState == HAL_UART_STATE_READY)
+ {
+ /* Process Locked */
+ __HAL_LOCK(huart);
+
+ huart->gState = HAL_UART_STATE_BUSY;
+
+ /* Clear the USART RTOEN bit */
+ CLEAR_BIT(huart->Instance->CR2, USART_CR2_RTOEN);
+
+ huart->gState = HAL_UART_STATE_READY;
+
+ /* Process Unlocked */
+ __HAL_UNLOCK(huart);
+
+ return HAL_OK;
+ }
+ else
+ {
+ return HAL_BUSY;
+ }
+}
+
/**
* @brief Enable UART in mute mode (does not mean UART enters mute mode;
* to enter mute mode, HAL_MultiProcessor_EnterMuteMode() API must be called).
@@ -2424,7 +2536,6 @@ __weak void HAL_UART_AbortReceiveCpltCallback(UART_HandleTypeDef *huart)
*/
HAL_StatusTypeDef HAL_MultiProcessor_EnableMuteMode(UART_HandleTypeDef *huart)
{
- /* Process Locked */
__HAL_LOCK(huart);
huart->gState = HAL_UART_STATE_BUSY;
@@ -2445,7 +2556,6 @@ HAL_StatusTypeDef HAL_MultiProcessor_EnableMuteMode(UART_HandleTypeDef *huart)
*/
HAL_StatusTypeDef HAL_MultiProcessor_DisableMuteMode(UART_HandleTypeDef *huart)
{
- /* Process Locked */
__HAL_LOCK(huart);
huart->gState = HAL_UART_STATE_BUSY;
@@ -2476,7 +2586,6 @@ void HAL_MultiProcessor_EnterMuteMode(UART_HandleTypeDef *huart)
*/
HAL_StatusTypeDef HAL_HalfDuplex_EnableTransmitter(UART_HandleTypeDef *huart)
{
- /* Process Locked */
__HAL_LOCK(huart);
huart->gState = HAL_UART_STATE_BUSY;
@@ -2488,7 +2597,6 @@ HAL_StatusTypeDef HAL_HalfDuplex_EnableTransmitter(UART_HandleTypeDef *huart)
huart->gState = HAL_UART_STATE_READY;
- /* Process Unlocked */
__HAL_UNLOCK(huart);
return HAL_OK;
@@ -2501,7 +2609,6 @@ HAL_StatusTypeDef HAL_HalfDuplex_EnableTransmitter(UART_HandleTypeDef *huart)
*/
HAL_StatusTypeDef HAL_HalfDuplex_EnableReceiver(UART_HandleTypeDef *huart)
{
- /* Process Locked */
__HAL_LOCK(huart);
huart->gState = HAL_UART_STATE_BUSY;
@@ -2513,7 +2620,6 @@ HAL_StatusTypeDef HAL_HalfDuplex_EnableReceiver(UART_HandleTypeDef *huart)
huart->gState = HAL_UART_STATE_READY;
- /* Process Unlocked */
__HAL_UNLOCK(huart);
return HAL_OK;
@@ -2530,7 +2636,6 @@ HAL_StatusTypeDef HAL_LIN_SendBreak(UART_HandleTypeDef *huart)
/* Check the parameters */
assert_param(IS_UART_LIN_INSTANCE(huart->Instance));
- /* Process Locked */
__HAL_LOCK(huart);
huart->gState = HAL_UART_STATE_BUSY;
@@ -2540,7 +2645,6 @@ HAL_StatusTypeDef HAL_LIN_SendBreak(UART_HandleTypeDef *huart)
huart->gState = HAL_UART_STATE_READY;
- /* Process Unlocked */
__HAL_UNLOCK(huart);
return HAL_OK;
@@ -2551,8 +2655,8 @@ HAL_StatusTypeDef HAL_LIN_SendBreak(UART_HandleTypeDef *huart)
*/
/** @defgroup UART_Exported_Functions_Group4 Peripheral State and Error functions
- * @brief UART Peripheral State functions
- *
+ * @brief UART Peripheral State functions
+ *
@verbatim
==============================================================================
##### Peripheral State and Error functions #####
@@ -2574,7 +2678,8 @@ HAL_StatusTypeDef HAL_LIN_SendBreak(UART_HandleTypeDef *huart)
*/
HAL_UART_StateTypeDef HAL_UART_GetState(UART_HandleTypeDef *huart)
{
- uint32_t temp1, temp2;
+ uint32_t temp1;
+ uint32_t temp2;
temp1 = huart->gState;
temp2 = huart->RxState;
@@ -2586,7 +2691,7 @@ HAL_UART_StateTypeDef HAL_UART_GetState(UART_HandleTypeDef *huart)
* @param huart Pointer to a UART_HandleTypeDef structure that contains
* the configuration information for the specified UART.
* @retval UART Error Code
-*/
+ */
uint32_t HAL_UART_GetError(UART_HandleTypeDef *huart)
{
return huart->ErrorCode;
@@ -2620,6 +2725,9 @@ void UART_InitCallbacksToDefault(UART_HandleTypeDef *huart)
huart->AbortCpltCallback = HAL_UART_AbortCpltCallback; /* Legacy weak AbortCpltCallback */
huart->AbortTransmitCpltCallback = HAL_UART_AbortTransmitCpltCallback; /* Legacy weak AbortTransmitCpltCallback */
huart->AbortReceiveCpltCallback = HAL_UART_AbortReceiveCpltCallback; /* Legacy weak AbortReceiveCpltCallback */
+#if defined(USART_CR1_UESM)
+ huart->WakeupCallback = HAL_UARTEx_WakeupCallback; /* Legacy weak WakeupCallback */
+#endif /* USART_CR1_UESM */
}
#endif /* USE_HAL_UART_REGISTER_CALLBACKS */
@@ -2636,6 +2744,7 @@ HAL_StatusTypeDef UART_SetConfig(UART_HandleTypeDef *huart)
UART_ClockSourceTypeDef clocksource;
uint32_t usartdiv = 0x00000000U;
HAL_StatusTypeDef ret = HAL_OK;
+ uint32_t pclk;
/* Check the parameters */
assert_param(IS_UART_BAUDRATE(huart->Init.BaudRate));
@@ -2683,21 +2792,23 @@ HAL_StatusTypeDef UART_SetConfig(UART_HandleTypeDef *huart)
switch (clocksource)
{
case UART_CLOCKSOURCE_PCLK1:
- usartdiv = (uint16_t)(UART_DIV_SAMPLING8(HAL_RCC_GetPCLK1Freq(), huart->Init.BaudRate));
+ pclk = HAL_RCC_GetPCLK1Freq();
+ usartdiv = (uint16_t)(UART_DIV_SAMPLING8(pclk, huart->Init.BaudRate));
break;
case UART_CLOCKSOURCE_PCLK2:
- usartdiv = (uint16_t)(UART_DIV_SAMPLING8(HAL_RCC_GetPCLK2Freq(), huart->Init.BaudRate));
+ pclk = HAL_RCC_GetPCLK2Freq();
+ usartdiv = (uint16_t)(UART_DIV_SAMPLING8(pclk, huart->Init.BaudRate));
break;
case UART_CLOCKSOURCE_HSI:
usartdiv = (uint16_t)(UART_DIV_SAMPLING8(HSI_VALUE, huart->Init.BaudRate));
break;
case UART_CLOCKSOURCE_SYSCLK:
- usartdiv = (uint16_t)(UART_DIV_SAMPLING8(HAL_RCC_GetSysClockFreq(), huart->Init.BaudRate));
+ pclk = HAL_RCC_GetSysClockFreq();
+ usartdiv = (uint16_t)(UART_DIV_SAMPLING8(pclk, huart->Init.BaudRate));
break;
case UART_CLOCKSOURCE_LSE:
usartdiv = (uint16_t)(UART_DIV_SAMPLING8(LSE_VALUE, huart->Init.BaudRate));
break;
- case UART_CLOCKSOURCE_UNDEFINED:
default:
ret = HAL_ERROR;
break;
@@ -2720,21 +2831,23 @@ HAL_StatusTypeDef UART_SetConfig(UART_HandleTypeDef *huart)
switch (clocksource)
{
case UART_CLOCKSOURCE_PCLK1:
- usartdiv = (uint16_t)(UART_DIV_SAMPLING16(HAL_RCC_GetPCLK1Freq(), huart->Init.BaudRate));
+ pclk = HAL_RCC_GetPCLK1Freq();
+ usartdiv = (uint16_t)(UART_DIV_SAMPLING16(pclk, huart->Init.BaudRate));
break;
case UART_CLOCKSOURCE_PCLK2:
- usartdiv = (uint16_t)(UART_DIV_SAMPLING16(HAL_RCC_GetPCLK2Freq(), huart->Init.BaudRate));
+ pclk = HAL_RCC_GetPCLK2Freq();
+ usartdiv = (uint16_t)(UART_DIV_SAMPLING16(pclk, huart->Init.BaudRate));
break;
case UART_CLOCKSOURCE_HSI:
usartdiv = (uint16_t)(UART_DIV_SAMPLING16(HSI_VALUE, huart->Init.BaudRate));
break;
case UART_CLOCKSOURCE_SYSCLK:
- usartdiv = (uint16_t)(UART_DIV_SAMPLING16(HAL_RCC_GetSysClockFreq(), huart->Init.BaudRate));
+ pclk = HAL_RCC_GetSysClockFreq();
+ usartdiv = (uint16_t)(UART_DIV_SAMPLING16(pclk, huart->Init.BaudRate));
break;
case UART_CLOCKSOURCE_LSE:
usartdiv = (uint16_t)(UART_DIV_SAMPLING16(LSE_VALUE, huart->Init.BaudRate));
break;
- case UART_CLOCKSOURCE_UNDEFINED:
default:
ret = HAL_ERROR;
break;
@@ -2858,12 +2971,24 @@ HAL_StatusTypeDef UART_CheckIdleState(UART_HandleTypeDef *huart)
return HAL_TIMEOUT;
}
}
+#if defined(USART_ISR_REACK)
+
+ /* Check if the Receiver is enabled */
+ if ((huart->Instance->CR1 & USART_CR1_RE) == USART_CR1_RE)
+ {
+ /* Wait until REACK flag is set */
+ if (UART_WaitOnFlagUntilTimeout(huart, USART_ISR_REACK, RESET, tickstart, HAL_UART_TIMEOUT_VALUE) != HAL_OK)
+ {
+ /* Timeout occurred */
+ return HAL_TIMEOUT;
+ }
+ }
+#endif
/* Initialize the UART State */
huart->gState = HAL_UART_STATE_READY;
huart->RxState = HAL_UART_STATE_READY;
- /* Process Unlocked */
__HAL_UNLOCK(huart);
return HAL_OK;
@@ -2878,7 +3003,8 @@ HAL_StatusTypeDef UART_CheckIdleState(UART_HandleTypeDef *huart)
* @param Timeout Timeout duration
* @retval HAL status
*/
-HAL_StatusTypeDef UART_WaitOnFlagUntilTimeout(UART_HandleTypeDef *huart, uint32_t Flag, FlagStatus Status, uint32_t Tickstart, uint32_t Timeout)
+HAL_StatusTypeDef UART_WaitOnFlagUntilTimeout(UART_HandleTypeDef *huart, uint32_t Flag, FlagStatus Status,
+ uint32_t Tickstart, uint32_t Timeout)
{
/* Wait until flag is set */
while ((__HAL_UART_GET_FLAG(huart, Flag) ? SET : RESET) == Status)
@@ -2895,11 +3021,32 @@ HAL_StatusTypeDef UART_WaitOnFlagUntilTimeout(UART_HandleTypeDef *huart, uint32_
huart->gState = HAL_UART_STATE_READY;
huart->RxState = HAL_UART_STATE_READY;
- /* Process Unlocked */
__HAL_UNLOCK(huart);
return HAL_TIMEOUT;
}
+
+ if (READ_BIT(huart->Instance->CR1, USART_CR1_RE) != 0U)
+ {
+ if (__HAL_UART_GET_FLAG(huart, UART_FLAG_RTOF) == SET)
+ {
+ /* Clear Receiver Timeout flag*/
+ __HAL_UART_CLEAR_FLAG(huart, UART_CLEAR_RTOF);
+
+ /* Disable TXE, RXNE, PE and ERR (Frame error, noise error, overrun error) interrupts for the interrupt process */
+ CLEAR_BIT(huart->Instance->CR1, (USART_CR1_RXNEIE | USART_CR1_PEIE | USART_CR1_TXEIE));
+ CLEAR_BIT(huart->Instance->CR3, USART_CR3_EIE);
+
+ huart->gState = HAL_UART_STATE_READY;
+ huart->RxState = HAL_UART_STATE_READY;
+ huart->ErrorCode = HAL_UART_ERROR_RTO;
+
+ /* Process Unlocked */
+ __HAL_UNLOCK(huart);
+
+ return HAL_TIMEOUT;
+ }
+ }
}
}
return HAL_OK;
diff --git a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_Keil/Prog/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_uart_ex.c b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_Keil/Prog/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_uart_ex.c
index 415fb56b..fcbcf4fd 100644
--- a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_Keil/Prog/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_uart_ex.c
+++ b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_Keil/Prog/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_uart_ex.c
@@ -57,6 +57,9 @@
/** @defgroup UARTEx_Private_Functions UARTEx Private Functions
* @{
*/
+#if defined(USART_CR1_UESM)
+static void UARTEx_Wakeup_AddressConfig(UART_HandleTypeDef *huart, UART_WakeUpTypeDef WakeUpSelection);
+#endif /* USART_CR1_UESM */
/**
* @}
*/
@@ -144,7 +147,8 @@
* oversampling rate).
* @retval HAL status
*/
-HAL_StatusTypeDef HAL_RS485Ex_Init(UART_HandleTypeDef *huart, uint32_t Polarity, uint32_t AssertionTime, uint32_t DeassertionTime)
+HAL_StatusTypeDef HAL_RS485Ex_Init(UART_HandleTypeDef *huart, uint32_t Polarity, uint32_t AssertionTime,
+ uint32_t DeassertionTime)
{
uint32_t temp;
@@ -224,42 +228,74 @@ HAL_StatusTypeDef HAL_RS485Ex_Init(UART_HandleTypeDef *huart, uint32_t Polarity,
* @}
*/
-/** @defgroup UARTEx_Exported_Functions_Group2 IO operation functions
- * @brief Extended functions
- *
-@verbatim
- ===============================================================================
- ##### IO operation functions #####
- ===============================================================================
- This subsection provides a set of Wakeup and FIFO mode related callback functions.
-
-@endverbatim
- * @{
- */
-
-
-/**
- * @}
- */
/** @defgroup UARTEx_Exported_Functions_Group3 Peripheral Control functions
* @brief Extended Peripheral Control functions
- *
+ *
@verbatim
===============================================================================
##### Peripheral Control functions #####
===============================================================================
[..] This section provides the following functions:
+ (+) HAL_UARTEx_EnableClockStopMode() API enables the UART clock (HSI or LSE only) during stop mode
+ (+) HAL_UARTEx_DisableClockStopMode() API disables the above functionality
(+) HAL_MultiProcessorEx_AddressLength_Set() API optionally sets the UART node address
detection length to more than 4 bits for multiprocessor address mark wake up.
+#if defined(USART_CR1_UESM)
+ (+) HAL_UARTEx_StopModeWakeUpSourceConfig() API defines the wake-up from stop mode
+ trigger: address match, Start Bit detection or RXNE bit status.
+ (+) HAL_UARTEx_EnableStopMode() API enables the UART to wake up the MCU from stop mode
+ (+) HAL_UARTEx_DisableStopMode() API disables the above functionality
+#endif
@endverbatim
* @{
*/
+#if defined(USART_CR3_UCESM)
+/**
+ * @brief Keep UART Clock enabled when in Stop Mode.
+ * @note When the USART clock source is configured to be LSE or HSI, it is possible to keep enabled
+ * this clock during STOP mode by setting the UCESM bit in USART_CR3 control register.
+ * @note When LPUART is used to wakeup from stop with LSE is selected as LPUART clock source,
+ * and desired baud rate is 9600 baud, the bit UCESM bit in LPUART_CR3 control register must be set.
+ * @param huart UART handle.
+ * @retval HAL status
+ */
+HAL_StatusTypeDef HAL_UARTEx_EnableClockStopMode(UART_HandleTypeDef *huart)
+{
+ /* Process Locked */
+ __HAL_LOCK(huart);
+ /* Set UCESM bit */
+ SET_BIT(huart->Instance->CR3, USART_CR3_UCESM);
+ /* Process Unlocked */
+ __HAL_UNLOCK(huart);
+ return HAL_OK;
+}
+
+/**
+ * @brief Disable UART Clock when in Stop Mode.
+ * @param huart UART handle.
+ * @retval HAL status
+ */
+HAL_StatusTypeDef HAL_UARTEx_DisableClockStopMode(UART_HandleTypeDef *huart)
+{
+ /* Process Locked */
+ __HAL_LOCK(huart);
+
+ /* Clear UCESM bit */
+ CLEAR_BIT(huart->Instance->CR3, USART_CR3_UCESM);
+
+ /* Process Unlocked */
+ __HAL_UNLOCK(huart);
+
+ return HAL_OK;
+}
+
+#endif /* USART_CR3_UCESM */
/**
* @brief By default in multiprocessor mode, when the wake up method is set
* to address mark, the UART handles only 4-bit long addresses detection;
@@ -299,8 +335,108 @@ HAL_StatusTypeDef HAL_MultiProcessorEx_AddressLength_Set(UART_HandleTypeDef *hua
return (UART_CheckIdleState(huart));
}
+#if defined(USART_CR1_UESM)
+/**
+ * @brief Set Wakeup from Stop mode interrupt flag selection.
+ * @note It is the application responsibility to enable the interrupt used as
+ * usart_wkup interrupt source before entering low-power mode.
+ * @param huart UART handle.
+ * @param WakeUpSelection Address match, Start Bit detection or RXNE/RXFNE bit status.
+ * This parameter can be one of the following values:
+ * @arg @ref UART_WAKEUP_ON_ADDRESS
+ * @arg @ref UART_WAKEUP_ON_STARTBIT
+ * @arg @ref UART_WAKEUP_ON_READDATA_NONEMPTY
+ * @retval HAL status
+ */
+HAL_StatusTypeDef HAL_UARTEx_StopModeWakeUpSourceConfig(UART_HandleTypeDef *huart, UART_WakeUpTypeDef WakeUpSelection)
+{
+ HAL_StatusTypeDef status = HAL_OK;
+ uint32_t tickstart;
+ /* check the wake-up from stop mode UART instance */
+ assert_param(IS_UART_WAKEUP_FROMSTOP_INSTANCE(huart->Instance));
+ /* check the wake-up selection parameter */
+ assert_param(IS_UART_WAKEUP_SELECTION(WakeUpSelection.WakeUpEvent));
+ /* Process Locked */
+ __HAL_LOCK(huart);
+
+ huart->gState = HAL_UART_STATE_BUSY;
+
+ /* Disable the Peripheral */
+ __HAL_UART_DISABLE(huart);
+
+ /* Set the wake-up selection scheme */
+ MODIFY_REG(huart->Instance->CR3, USART_CR3_WUS, WakeUpSelection.WakeUpEvent);
+
+ if (WakeUpSelection.WakeUpEvent == UART_WAKEUP_ON_ADDRESS)
+ {
+ UARTEx_Wakeup_AddressConfig(huart, WakeUpSelection);
+ }
+
+ /* Enable the Peripheral */
+ __HAL_UART_ENABLE(huart);
+
+ /* Init tickstart for timeout managment*/
+ tickstart = HAL_GetTick();
+
+ /* Wait until REACK flag is set */
+ if (UART_WaitOnFlagUntilTimeout(huart, USART_ISR_REACK, RESET, tickstart, HAL_UART_TIMEOUT_VALUE) != HAL_OK)
+ {
+ status = HAL_TIMEOUT;
+ }
+ else
+ {
+ /* Initialize the UART State */
+ huart->gState = HAL_UART_STATE_READY;
+ }
+
+ /* Process Unlocked */
+ __HAL_UNLOCK(huart);
+
+ return status;
+}
+
+/**
+ * @brief Enable UART Stop Mode.
+ * @note The UART is able to wake up the MCU from Stop 1 mode as long as UART clock is HSI or LSE.
+ * @param huart UART handle.
+ * @retval HAL status
+ */
+HAL_StatusTypeDef HAL_UARTEx_EnableStopMode(UART_HandleTypeDef *huart)
+{
+ /* Process Locked */
+ __HAL_LOCK(huart);
+
+ /* Set UESM bit */
+ SET_BIT(huart->Instance->CR1, USART_CR1_UESM);
+
+ /* Process Unlocked */
+ __HAL_UNLOCK(huart);
+
+ return HAL_OK;
+}
+
+/**
+ * @brief Disable UART Stop Mode.
+ * @param huart UART handle.
+ * @retval HAL status
+ */
+HAL_StatusTypeDef HAL_UARTEx_DisableStopMode(UART_HandleTypeDef *huart)
+{
+ /* Process Locked */
+ __HAL_LOCK(huart);
+
+ /* Clear UESM bit */
+ CLEAR_BIT(huart->Instance->CR1, USART_CR1_UESM);
+
+ /* Process Unlocked */
+ __HAL_UNLOCK(huart);
+
+ return HAL_OK;
+}
+
+#endif /* USART_CR1_UESM */
/**
* @}
*/
@@ -312,6 +448,25 @@ HAL_StatusTypeDef HAL_MultiProcessorEx_AddressLength_Set(UART_HandleTypeDef *hua
/** @addtogroup UARTEx_Private_Functions
* @{
*/
+#if defined(USART_CR1_UESM)
+
+/**
+ * @brief Initialize the UART wake-up from stop mode parameters when triggered by address detection.
+ * @param huart UART handle.
+ * @param WakeUpSelection UART wake up from stop mode parameters.
+ * @retval None
+ */
+static void UARTEx_Wakeup_AddressConfig(UART_HandleTypeDef *huart, UART_WakeUpTypeDef WakeUpSelection)
+{
+ assert_param(IS_UART_ADDRESSLENGTH_DETECT(WakeUpSelection.AddressLength));
+
+ /* Set the USART address length */
+ MODIFY_REG(huart->Instance->CR2, USART_CR2_ADDM7, WakeUpSelection.AddressLength);
+
+ /* Set the USART address node */
+ MODIFY_REG(huart->Instance->CR2, USART_CR2_ADD, ((uint32_t)WakeUpSelection.Address << UART_CR2_ADDRESS_LSB_POS));
+}
+#endif /* USART_CR1_UESM */
/**
* @}
diff --git a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_Keil/Prog/lib/system_stm32f7xx.c b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_Keil/Prog/lib/system_stm32f7xx.c
index cb4e5662..7282bc83 100644
--- a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_Keil/Prog/lib/system_stm32f7xx.c
+++ b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_Keil/Prog/lib/system_stm32f7xx.c
@@ -1,278 +1,244 @@
-/**
- ******************************************************************************
- * @file system_stm32f7xx.c
- * @author MCD Application Team
- * @brief CMSIS Cortex-M7 Device Peripheral Access Layer System Source File.
- *
- * This file provides two functions and one global variable to be called from
- * user application:
- * - SystemInit(): This function is called at startup just after reset and
- * before branch to main program. This call is made inside
- * the "startup_stm32f7xx.s" file.
- *
- * - SystemCoreClock variable: Contains the core clock (HCLK), it can be used
- * by the user application to setup the SysTick
- * timer or configure other parameters.
- *
- * - SystemCoreClockUpdate(): Updates the variable SystemCoreClock and must
- * be called whenever the core clock is changed
- * during program execution.
- *
- *
- ******************************************************************************
- * @attention
- *
- * © COPYRIGHT 2016 STMicroelectronics
- *
- * Redistribution and use in source and binary forms, with or without modification,
- * are permitted provided that the following conditions are met:
- * 1. Redistributions of source code must retain the above copyright notice,
- * this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright notice,
- * this list of conditions and the following disclaimer in the documentation
- * and/or other materials provided with the distribution.
- * 3. Neither the name of STMicroelectronics nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
- * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
- * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- ******************************************************************************
- */
-
-/** @addtogroup CMSIS
- * @{
- */
-
-/** @addtogroup stm32f7xx_system
- * @{
- */
-
-/** @addtogroup STM32F7xx_System_Private_Includes
- * @{
- */
-
-#include "stm32f7xx.h"
-
-#if !defined (HSE_VALUE)
- #define HSE_VALUE ((uint32_t)25000000) /*!< Default value of the External oscillator in Hz */
-#endif /* HSE_VALUE */
-
-#if !defined (HSI_VALUE)
- #define HSI_VALUE ((uint32_t)16000000) /*!< Value of the Internal oscillator in Hz*/
-#endif /* HSI_VALUE */
-
-/**
- * @}
- */
-
-/** @addtogroup STM32F7xx_System_Private_TypesDefinitions
- * @{
- */
-
-/**
- * @}
- */
-
-/** @addtogroup STM32F7xx_System_Private_Defines
- * @{
- */
-
-/************************* Miscellaneous Configuration ************************/
-
-/*!< Uncomment the following line if you need to relocate your vector Table in
- Internal SRAM. */
-/* #define VECT_TAB_SRAM */
-#define VECT_TAB_OFFSET 0x00 /*!< Vector Table base offset field.
- This value must be a multiple of 0x200. */
-/******************************************************************************/
-
-/**
- * @}
- */
-
-/** @addtogroup STM32F7xx_System_Private_Macros
- * @{
- */
-
-/**
- * @}
- */
-
-/** @addtogroup STM32F7xx_System_Private_Variables
- * @{
- */
-
- /* This variable is updated in three ways:
- 1) by calling CMSIS function SystemCoreClockUpdate()
- 2) by calling HAL API function HAL_RCC_GetHCLKFreq()
- 3) each time HAL_RCC_ClockConfig() is called to configure the system clock frequency
- Note: If you use this function to configure the system clock; then there
- is no need to call the 2 first functions listed above, since SystemCoreClock
- variable is updated automatically.
- */
- uint32_t SystemCoreClock = 16000000;
- const uint8_t AHBPrescTable[16] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 6, 7, 8, 9};
- const uint8_t APBPrescTable[8] = {0, 0, 0, 0, 1, 2, 3, 4};
-
-/**
- * @}
- */
-
-/** @addtogroup STM32F7xx_System_Private_FunctionPrototypes
- * @{
- */
-
-/**
- * @}
- */
-
-/** @addtogroup STM32F7xx_System_Private_Functions
- * @{
- */
-
-/**
- * @brief Setup the microcontroller system
- * Initialize the Embedded Flash Interface, the PLL and update the
- * SystemFrequency variable.
- * @param None
- * @retval None
- */
-void SystemInit(void)
-{
- /* FPU settings ------------------------------------------------------------*/
- #if (__FPU_PRESENT == 1) && (__FPU_USED == 1)
- SCB->CPACR |= ((3UL << 10*2)|(3UL << 11*2)); /* set CP10 and CP11 Full Access */
- #endif
- /* Reset the RCC clock configuration to the default reset state ------------*/
- /* Set HSION bit */
- RCC->CR |= (uint32_t)0x00000001;
-
- /* Reset CFGR register */
- RCC->CFGR = 0x00000000;
-
- /* Reset HSEON, CSSON and PLLON bits */
- RCC->CR &= (uint32_t)0xFEF6FFFF;
-
- /* Reset PLLCFGR register */
- RCC->PLLCFGR = 0x24003010;
-
- /* Reset HSEBYP bit */
- RCC->CR &= (uint32_t)0xFFFBFFFF;
-
- /* Disable all interrupts */
- RCC->CIR = 0x00000000;
-
- /* Configure the Vector Table location add offset address ------------------*/
-#ifdef VECT_TAB_SRAM
- SCB->VTOR = RAMDTCM_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAM */
-#else
- SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal FLASH */
-#endif
-}
-
-/**
- * @brief Update SystemCoreClock variable according to Clock Register Values.
- * The SystemCoreClock variable contains the core clock (HCLK), it can
- * be used by the user application to setup the SysTick timer or configure
- * other parameters.
- *
- * @note Each time the core clock (HCLK) changes, this function must be called
- * to update SystemCoreClock variable value. Otherwise, any configuration
- * based on this variable will be incorrect.
- *
- * @note - The system frequency computed by this function is not the real
- * frequency in the chip. It is calculated based on the predefined
- * constant and the selected clock source:
- *
- * - If SYSCLK source is HSI, SystemCoreClock will contain the HSI_VALUE(*)
- *
- * - If SYSCLK source is HSE, SystemCoreClock will contain the HSE_VALUE(**)
- *
- * - If SYSCLK source is PLL, SystemCoreClock will contain the HSE_VALUE(**)
- * or HSI_VALUE(*) multiplied/divided by the PLL factors.
- *
- * (*) HSI_VALUE is a constant defined in stm32f7xx_hal_conf.h file (default value
- * 16 MHz) but the real value may vary depending on the variations
- * in voltage and temperature.
- *
- * (**) HSE_VALUE is a constant defined in stm32f7xx_hal_conf.h file (default value
- * 25 MHz), user has to ensure that HSE_VALUE is same as the real
- * frequency of the crystal used. Otherwise, this function may
- * have wrong result.
- *
- * - The result of this function could be not correct when using fractional
- * value for HSE crystal.
- *
- * @param None
- * @retval None
- */
-void SystemCoreClockUpdate(void)
-{
- uint32_t tmp = 0, pllvco = 0, pllp = 2, pllsource = 0, pllm = 2;
-
- /* Get SYSCLK source -------------------------------------------------------*/
- tmp = RCC->CFGR & RCC_CFGR_SWS;
-
- switch (tmp)
- {
- case 0x00: /* HSI used as system clock source */
- SystemCoreClock = HSI_VALUE;
- break;
- case 0x04: /* HSE used as system clock source */
- SystemCoreClock = HSE_VALUE;
- break;
- case 0x08: /* PLL used as system clock source */
-
- /* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N
- SYSCLK = PLL_VCO / PLL_P
- */
- pllsource = (RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC) >> 22;
- pllm = RCC->PLLCFGR & RCC_PLLCFGR_PLLM;
-
- if (pllsource != 0)
- {
- /* HSE used as PLL clock source */
- pllvco = (HSE_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6);
- }
- else
- {
- /* HSI used as PLL clock source */
- pllvco = (HSI_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6);
- }
-
- pllp = (((RCC->PLLCFGR & RCC_PLLCFGR_PLLP) >>16) + 1 ) *2;
- SystemCoreClock = pllvco/pllp;
- break;
- default:
- SystemCoreClock = HSI_VALUE;
- break;
- }
- /* Compute HCLK frequency --------------------------------------------------*/
- /* Get HCLK prescaler */
- tmp = AHBPrescTable[((RCC->CFGR & RCC_CFGR_HPRE) >> 4)];
- /* HCLK frequency */
- SystemCoreClock >>= tmp;
-}
-
-/**
- * @}
- */
-
-/**
- * @}
- */
-
-/**
- * @}
- */
-/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
+/**
+ ******************************************************************************
+ * @file system_stm32f7xx.c
+ * @author MCD Application Team
+ * @brief CMSIS Cortex-M7 Device Peripheral Access Layer System Source File.
+ *
+ * This file provides two functions and one global variable to be called from
+ * user application:
+ * - SystemInit(): This function is called at startup just after reset and
+ * before branch to main program. This call is made inside
+ * the "startup_stm32f7xx.s" file.
+ *
+ * - SystemCoreClock variable: Contains the core clock (HCLK), it can be used
+ * by the user application to setup the SysTick
+ * timer or configure other parameters.
+ *
+ * - SystemCoreClockUpdate(): Updates the variable SystemCoreClock and must
+ * be called whenever the core clock is changed
+ * during program execution.
+ *
+ *
+ ******************************************************************************
+ * @attention
+ *
+ * © Copyright (c) 2016 STMicroelectronics.
+ * All rights reserved.
+ *
+ * This software component is licensed by ST under BSD 3-Clause license,
+ * the "License"; You may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at:
+ * opensource.org/licenses/BSD-3-Clause
+ *
+ ******************************************************************************
+ */
+
+/** @addtogroup CMSIS
+ * @{
+ */
+
+/** @addtogroup stm32f7xx_system
+ * @{
+ */
+
+/** @addtogroup STM32F7xx_System_Private_Includes
+ * @{
+ */
+
+#include "stm32f7xx.h"
+
+#if !defined (HSE_VALUE)
+ #define HSE_VALUE ((uint32_t)25000000) /*!< Default value of the External oscillator in Hz */
+#endif /* HSE_VALUE */
+
+#if !defined (HSI_VALUE)
+ #define HSI_VALUE ((uint32_t)16000000) /*!< Value of the Internal oscillator in Hz*/
+#endif /* HSI_VALUE */
+
+/**
+ * @}
+ */
+
+/** @addtogroup STM32F7xx_System_Private_TypesDefinitions
+ * @{
+ */
+
+/**
+ * @}
+ */
+
+/** @addtogroup STM32F7xx_System_Private_Defines
+ * @{
+ */
+
+/************************* Miscellaneous Configuration ************************/
+
+/*!< Uncomment the following line if you need to relocate your vector Table in
+ Internal SRAM. */
+/* #define VECT_TAB_SRAM */
+#define VECT_TAB_OFFSET 0x00 /*!< Vector Table base offset field.
+ This value must be a multiple of 0x200. */
+/******************************************************************************/
+
+/**
+ * @}
+ */
+
+/** @addtogroup STM32F7xx_System_Private_Macros
+ * @{
+ */
+
+/**
+ * @}
+ */
+
+/** @addtogroup STM32F7xx_System_Private_Variables
+ * @{
+ */
+
+ /* This variable is updated in three ways:
+ 1) by calling CMSIS function SystemCoreClockUpdate()
+ 2) by calling HAL API function HAL_RCC_GetHCLKFreq()
+ 3) each time HAL_RCC_ClockConfig() is called to configure the system clock frequency
+ Note: If you use this function to configure the system clock; then there
+ is no need to call the 2 first functions listed above, since SystemCoreClock
+ variable is updated automatically.
+ */
+ uint32_t SystemCoreClock = 16000000;
+ const uint8_t AHBPrescTable[16] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 6, 7, 8, 9};
+ const uint8_t APBPrescTable[8] = {0, 0, 0, 0, 1, 2, 3, 4};
+
+/**
+ * @}
+ */
+
+/** @addtogroup STM32F7xx_System_Private_FunctionPrototypes
+ * @{
+ */
+
+/**
+ * @}
+ */
+
+/** @addtogroup STM32F7xx_System_Private_Functions
+ * @{
+ */
+
+/**
+ * @brief Setup the microcontroller system
+ * Initialize the Embedded Flash Interface, the PLL and update the
+ * SystemFrequency variable.
+ * @param None
+ * @retval None
+ */
+void SystemInit(void)
+{
+ /* FPU settings ------------------------------------------------------------*/
+#if (__FPU_PRESENT == 1) && (__FPU_USED == 1)
+ SCB->CPACR |= ((3UL << 10*2)|(3UL << 11*2)); /* set CP10 and CP11 Full Access */
+#endif
+
+ /* Configure the Vector Table location add offset address ------------------*/
+#ifdef VECT_TAB_SRAM
+ SCB->VTOR = RAMDTCM_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAM */
+#else
+ SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal FLASH */
+#endif
+}
+
+/**
+ * @brief Update SystemCoreClock variable according to Clock Register Values.
+ * The SystemCoreClock variable contains the core clock (HCLK), it can
+ * be used by the user application to setup the SysTick timer or configure
+ * other parameters.
+ *
+ * @note Each time the core clock (HCLK) changes, this function must be called
+ * to update SystemCoreClock variable value. Otherwise, any configuration
+ * based on this variable will be incorrect.
+ *
+ * @note - The system frequency computed by this function is not the real
+ * frequency in the chip. It is calculated based on the predefined
+ * constant and the selected clock source:
+ *
+ * - If SYSCLK source is HSI, SystemCoreClock will contain the HSI_VALUE(*)
+ *
+ * - If SYSCLK source is HSE, SystemCoreClock will contain the HSE_VALUE(**)
+ *
+ * - If SYSCLK source is PLL, SystemCoreClock will contain the HSE_VALUE(**)
+ * or HSI_VALUE(*) multiplied/divided by the PLL factors.
+ *
+ * (*) HSI_VALUE is a constant defined in stm32f7xx_hal_conf.h file (default value
+ * 16 MHz) but the real value may vary depending on the variations
+ * in voltage and temperature.
+ *
+ * (**) HSE_VALUE is a constant defined in stm32f7xx_hal_conf.h file (default value
+ * 25 MHz), user has to ensure that HSE_VALUE is same as the real
+ * frequency of the crystal used. Otherwise, this function may
+ * have wrong result.
+ *
+ * - The result of this function could be not correct when using fractional
+ * value for HSE crystal.
+ *
+ * @param None
+ * @retval None
+ */
+void SystemCoreClockUpdate(void)
+{
+ uint32_t tmp = 0, pllvco = 0, pllp = 2, pllsource = 0, pllm = 2;
+
+ /* Get SYSCLK source -------------------------------------------------------*/
+ tmp = RCC->CFGR & RCC_CFGR_SWS;
+
+ switch (tmp)
+ {
+ case 0x00: /* HSI used as system clock source */
+ SystemCoreClock = HSI_VALUE;
+ break;
+ case 0x04: /* HSE used as system clock source */
+ SystemCoreClock = HSE_VALUE;
+ break;
+ case 0x08: /* PLL used as system clock source */
+
+ /* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N
+ SYSCLK = PLL_VCO / PLL_P
+ */
+ pllsource = (RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC) >> 22;
+ pllm = RCC->PLLCFGR & RCC_PLLCFGR_PLLM;
+
+ if (pllsource != 0)
+ {
+ /* HSE used as PLL clock source */
+ pllvco = (HSE_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6);
+ }
+ else
+ {
+ /* HSI used as PLL clock source */
+ pllvco = (HSI_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6);
+ }
+
+ pllp = (((RCC->PLLCFGR & RCC_PLLCFGR_PLLP) >>16) + 1 ) *2;
+ SystemCoreClock = pllvco/pllp;
+ break;
+ default:
+ SystemCoreClock = HSI_VALUE;
+ break;
+ }
+ /* Compute HCLK frequency --------------------------------------------------*/
+ /* Get HCLK prescaler */
+ tmp = AHBPrescTable[((RCC->CFGR & RCC_CFGR_HPRE) >> 4)];
+ /* HCLK frequency */
+ SystemCoreClock >>= tmp;
+}
+
+/**
+ * @}
+ */
+
+/**
+ * @}
+ */
+
+/**
+ * @}
+ */
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff --git a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_TrueStudio/Boot/Debug/openblt_stm32f746.elf b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_TrueStudio/Boot/Debug/openblt_stm32f746.elf
index 94b7e2eb..2d182f62 100755
Binary files a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_TrueStudio/Boot/Debug/openblt_stm32f746.elf and b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_TrueStudio/Boot/Debug/openblt_stm32f746.elf differ
diff --git a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_TrueStudio/Boot/Debug/openblt_stm32f746.srec b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_TrueStudio/Boot/Debug/openblt_stm32f746.srec
index deb4d668..b1548ef5 100755
--- a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_TrueStudio/Boot/Debug/openblt_stm32f746.srec
+++ b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_TrueStudio/Boot/Debug/openblt_stm32f746.srec
@@ -1,45 +1,45 @@
S01900006F70656E626C745F73746D3332663734362E73726563F8
-S3150800000000000520A54A0008F54A0008F54A000838
-S31508000010F54A0008F54A0008F54A000800000000FD
-S31508000020000000000000000000000000F54A00087B
-S31508000030F54A000800000000F54A0008C109000852
-S31508000040F54A0008F54A0008F54A0008F54A000886
-S31508000050F54A0008F54A0008F54A0008F54A000876
-S31508000060F54A0008F54A0008F54A0008F54A000866
-S31508000070F54A0008F54A0008F54A0008F54A000856
-S31508000080F54A0008F54A0008F54A0008F54A000846
-S31508000090F54A0008F54A0008F54A0008F54A000836
-S315080000A0F54A0008F54A0008F54A0008F54A000826
-S315080000B0F54A0008F54A0008F54A0008F54A000816
-S315080000C0F54A0008F54A0008F54A0008F54A000806
-S315080000D0F54A0008F54A0008F54A0008F54A0008F6
-S315080000E0F54A0008F54A0008F54A0008F54A0008E6
-S315080000F0F54A0008F54A0008F54A0008F54A0008D6
-S31508000100F54A0008F54A0008F54A0008F54A0008C5
-S31508000110F54A0008F54A0008F54A0008F54A0008B5
-S31508000120F54A0008F54A0008F54A0008F54A0008A5
-S31508000130F54A0008F54A0008F54A0008F54A000895
-S31508000140F54A0008F54A0008F54A0008F54A000885
-S31508000150F54A0008F54A0008F54A0008F54A000875
-S31508000160F54A0008F54A0008F54A0008F54A000865
-S31508000170F54A0008F54A0008F54A0008000000009C
-S31508000180F54A0008F54A0008F54A0008F54A000845
-S31508000190F54A0008F54A0008F54A0008F54A000835
-S315080001A0F54A0008F54A0008F54A0008F54A000825
-S315080001B0F54A0008F54A0008F54A0008F54A000815
-S30D080001C0F54A0008F54A00089B
+S3150800000000000520994B0008E94B0008E94B000859
+S31508000010E94B0008E94B0008E94B0008000000001E
+S31508000020000000000000000000000000E94B000886
+S31508000030E94B000800000000E94B0008C109000868
+S31508000040E94B0008E94B0008E94B0008E94B0008B2
+S31508000050E94B0008E94B0008E94B0008E94B0008A2
+S31508000060E94B0008E94B0008E94B0008E94B000892
+S31508000070E94B0008E94B0008E94B0008E94B000882
+S31508000080E94B0008E94B0008E94B0008E94B000872
+S31508000090E94B0008E94B0008E94B0008E94B000862
+S315080000A0E94B0008E94B0008E94B0008E94B000852
+S315080000B0E94B0008E94B0008E94B0008E94B000842
+S315080000C0E94B0008E94B0008E94B0008E94B000832
+S315080000D0E94B0008E94B0008E94B0008E94B000822
+S315080000E0E94B0008E94B0008E94B0008E94B000812
+S315080000F0E94B0008E94B0008E94B0008E94B000802
+S31508000100E94B0008E94B0008E94B0008E94B0008F1
+S31508000110E94B0008E94B0008E94B0008E94B0008E1
+S31508000120E94B0008E94B0008E94B0008E94B0008D1
+S31508000130E94B0008E94B0008E94B0008E94B0008C1
+S31508000140E94B0008E94B0008E94B0008E94B0008B1
+S31508000150E94B0008E94B0008E94B0008E94B0008A1
+S31508000160E94B0008E94B0008E94B0008E94B000891
+S31508000170E94B0008E94B0008E94B000800000000BD
+S31508000180E94B0008E94B0008E94B0008E94B000871
+S31508000190E94B0008E94B0008E94B0008E94B000861
+S315080001A0E94B0008E94B0008E94B0008E94B000851
+S315080001B0E94B0008E94B0008E94B0008E94B000841
+S30D080001C0E94B0008E94B0008B1
S315080001C810B5054C237833B9044B13B10448AFF37B
S315080001D800800123237010BDC00000200000000025
-S315080001E8C44F000808B5034B1BB103490348AFF3CE
-S315080001F8008008BD00000000C4000020C44F0008A5
+S315080001E8B850000808B5034B1BB103490348AFF3D9
+S315080001F8008008BD00000000C4000020B8500008B0
S3150800020872B6704762B670472DE9F04184B0044665
-S315080002180D4617469846684602F022FE164B02997E
+S315080002180D4617469846684602F02CFE164B029974
S31508000228A3FB01318909002201E00132D2B2112A61
S315080002381DD8124B13F8120003EB420393F801E09A
S3150800024800EB0E0303FB0443B1FBF3FC03FB1C168C
S31508000258002EEAD11FFA8CF32B80013B9BB2B3F52B
S31508000268806FE2D2387088F800E0012000E00020AC
-S3150800027804B0BDE8F08100BFD34D621004500008F1
+S3150800027804B0BDE8F08100BFD34D6210F8500008FD
S3150800028870B58CB00022ADF82E208DF82D200CAB59
S3150800029803F8042D0DF12D020DF12E014FF4FA7015
S315080002A8FFF7B2FF002835D01D4C1E4B23600025EA
@@ -50,7 +50,7 @@ S315080002E808F90695079508964CF6E0430193029592
S315080002F84FF6E073039304230493059509960E2392
S315080003080A9301A9204601F09BF9204601F02EFA26
S315080003180CB070BDB521044800F034FDC4E700BF31
-S31508000328DC00002000640040DC4F000810B588B0E7
+S31508000328DC00002000640040D050000810B588B0F2
S3150800033840F2E1730293002304930593069101ABF7
S31508000348024602A90B4801F03FFA08B108B010BDE9
S3150800035800F026FB00F132040199064801F0A9FAD3
@@ -69,7 +69,7 @@ S315080004182246531E9CB2002AF2D170BD38B505464D
S31508000428002401E00134E4B2062C15D800F0B4FD26
S3150800043804EB44029300094AD358AB42F2D804EBBA
S3150800044844029100054A0A44526813449D42E9D277
-S31508000458024B0B44187A38BDFF2038BD28500008CF
+S31508000458024B0B44187A38BDFF2038BD1C510008DA
S3150800046808B5C1F3080353B90368994209D040F897
S31508000478041B4FF40072FFF7C1FF012008BD0020D6
S3150800048808BD012008BD2DE9F041074601F0A2FB89
@@ -133,12 +133,12 @@ S315080008180A0407E0012363B900F0BEFB00F0C0F83C
S31508000828844206D3034BDB6913F0800FF2D1002309
S31508000838F1E710BD0048004010B588B04FF4614391
S31508000848019300230293039304930C2205920693BB
-S315080008580793054C01A9204602F0AAFC236843F031
+S315080008580793054C01A9204602F0B4FC236843F027
S315080008680103236008B010BD0048004070B506466D
S315080008780D46402904D82846FFF7C4FF00240BE094
S315080008888121074800F07EFAF5E700F085FB305D20
S31508000898FFF7B8FF0134A4B2ABB29C42F5D370BDDA
-S315080008A87C50000870B5254B1C78BCB92448FFF75E
+S315080008A87051000870B5254B1C78BCB92448FFF769
S315080008B897FF012801D0204670BD214B1B78013BC4
S315080008C8DBB23F2BF7D800F06BF81E4B18600022F6
S315080008D81D4B1A700122194B1A70ECE706460D468D
@@ -167,35 +167,35 @@ S31508000A3862002244D100104B0B445A7C1B7C9A4214
S31508000A4813D00D4B0B44DA6815705A7C01325A7468
S31508000A58DA680132DA605B689A4208D9064A0846B3
S31508000A6851580244D160012038BD002038BD012004
-S31508000A7838BD00BFA85000089805002008B50146EB
+S31508000A7838BD00BF9C5100089805002008B50146F6
S31508000A88024B1878FFF7CAFF08BD00BFCC0500203F
S31508000A9838B504460D46012804D94FF4F1711348B0
S31508000AA800F070F904EB4403DA00114B13445B7C3D
S31508000AB8BBB162002244D1000D4B0B449A681278E8
S31508000AC82A705A7C013A5A749A6801329A605B68A5
S31508000AD89A4208D9064A08465158024491600120A4
-S31508000AE838BD002038BD012038BD00BFA850000811
+S31508000AE838BD002038BD012038BD00BF9C5100081C
S31508000AF89805002008B50146024B1878FFF7C8FF85
S31508000B0808BD00BF1006002010B50446012804D900
S31508000B1840F20221044800F035F904EB4404E200E7
-S31508000B28024B1344587C10BDA850000898050020AD
+S31508000B28024B1344587C10BD9C51000898050020B8
S31508000B3838B5FFF743FF1A4C4021601CFFF756FFEC
S31508000B482070184D4021681CFFF750FF287023783D
S31508000B58FF2B1BD0FF2819D0134C00221349204617
-S31508000B6803F02AF91249204603F04FF9012000F04C
-S31508000B782AFC204603F050F9D4F8980201F0ADFD96
+S31508000B6803F068F91249204603F09DF9012000F0C0
+S31508000B782AFC204603F0ABF9D4F8C40201F0B0FD0C
S31508000B8800F02CF9B0F5FA6F05D338BD8521094868
S31508000B9800F0F8F8E0E74FF4FA6000F019F9F4E71E
S31508000BA8CC050020100600205406002070000020FE
-S31508000BB80C000020A850000810B5064CD4F8980276
-S31508000BC801F09DFD204603F00EF9002000F0FBFB1E
+S31508000BB80C0000209C51000810B5064CD4F8C40255
+S31508000BC801F0A0FD204603F051F9002000F0FBFBD8
S31508000BD810BD00BF5406002070B506460D463F29CD
S31508000BE80AD82846FFF74AFF012803D0BD210E4830
S31508000BF800F0C8F8002406E0B9210B4800F0C2F84E
S31508000C08EFE70134A4B2ABB29C420BD200F0C4F9A8
S31508000C18305DFFF733FF0128F3D0C621024800F0FC
-S31508000C28B1F8EEE770BD00BFA850000870B50646D3
-S31508000C380D461F4BD3F8980201F0E2FA1D4B1C78B3
+S31508000C28B1F8EEE770BD00BF9C51000870B50646DE
+S31508000C380D461F4BD3F8C40201F0DEFA1D4B1C788B
S31508000C489CB91D48FFF756FF012801D0204670BDFC
S31508000C58194B1B78013BDBB23E2BF7D80122154B03
S31508000C681A700022154B1A70F0E7144B1B780133DB
@@ -203,29 +203,29 @@ S31508000C7811481844FFF73EFF0446012801D000240E
S31508000C88E4E70E4B1A780132D2B21A700A4B1B786F
S31508000C989A4201D00024D9E709493046FFF7AEFB46
S31508000CA80022044B1A70054B1B782B70CEE700BF41
-S31508000CB85406002030090020F008002031090020D9
-S31508000CC8F108002030B583B0144B1878FFF71CFFDD
+S31508000CB8540600206409002024090020650900203C
+S31508000CC82509002030B583B0144B1878FFF71CFFA8
S31508000CD808B30546402800D94025002405E09DF8B4
S31508000CE807200F4B1A550134E4B2A5420DD90DF168
S31508000CF807010A4B1878FFF7CBFE0128EFD04FF407
-S31508000D08A371084800F03EF8E9E7ABB2044A812126
-S31508000D18054804F08EF803B030BD00BFCC050020A6
-S31508000D2858050020A85000085406002070B5044647
-S31508000D3803F054FF064621460F4804F028F885B202
+S31508000D08A371084800F03EF8E9E72B46044A812112
+S31508000D18054804F008F903B030BD00BFCC0500202B
+S31508000D28580500209C5100085406002070B5044652
+S31508000D3803F0CEFF064621460F4804F0A2F885B20E
S31508000D48002401E00134A4B2AC420CD2315D0B4B4D
S31508000D581878FFF763FE0128F4D04FF4B4710848F1
-S31508000D6800F010F8EEE703F039FF402302460121A8
-S31508000D78014804F066F870BD5406002010060020E5
-S31508000D88A850000808B500F007F9FCE708B500F010
+S31508000D6800F010F8EEE703F0B3FF4023024601212E
+S31508000D78014804F0E0F870BD54060020100600206B
+S31508000D889C51000808B500F007F9FCE708B500F01B
S31508000D98F7F8012803D00B4B1B78012B00D008BDA8
S31508000DA8FFF7FEFD084B1B68084A1268134403F54B
S31508000DB8FA739842F3D30022024B1A70FFF7FEFA29
-S31508000DC8EDE700BF38090020340900203C09002057
-S31508000DD8014B1860704700BF34090020014B18689A
-S31508000DE8704700BF3409002008B5054B1B78012B4E
+S31508000DC8EDE700BF6C0900206809002070090020BB
+S31508000DD8014B1860704700BF68090020014B186866
+S31508000DE8704700BF6809002008B5054B1B78012B1A
S31508000DF800D008BDFFF7D4FD024B1860F9E700BF1D
-S31508000E08380900203C09002008B50122034B1A704E
-S31508000E18FFF7EAFFFFF7BAFF08BD00BF3809002049
+S31508000E086C0900207009002008B50122034B1A70E6
+S31508000E18FFF7EAFFFFF7BAFF08BD00BF6C09002015
S31508000E2808B5FFF7C7FA00F0B3F8FFF797FDFFF71D
S31508000E38B7FC00F00DF8FFF7E7FF08BD08B500F0A6
S31508000E48ABF8FFF79FFD00F017F8FFF79FFF08BDFF
@@ -238,7 +238,7 @@ S31508000EA8C5FE012814D003B05DF804FB01220E4BD9
S31508000EB81A709DF807100B4800F0FCF9E5E70022C0
S31508000EC8094B1A709DF80710064800F0F3F9E3E78E
S31508000ED80222054B1A709DF80710024800F0EAF935
-S31508000EE8E1E700BF400900200000002008B5FFF729
+S31508000EE8E1E700BF740900200000002008B5FFF7F5
S31508000EF863FE08BD38B504460D460E4B1B78012B14
S31508000F0809D00C4B1B7853B10A4B1B78022B0BD014
S31508000F1800F0C8F938BDC9B2FFF708FAF1E7E9B22F
@@ -250,56 +250,56 @@ S31508000F68022B05D0032B05D0012B05D0402070474E
S31508000F783F2070470020704708207047000000206F
S31508000F8808B500F085F9034600B10123184608BDDF
S31508000F9808B500F00FFA08BD08B500F010FA08BD44
-S31508000FA80022014B5A70704780090020034BFE2225
-S31508000FB8DA7018710222A3F84420704780090020C5
+S31508000FA80022014B5A707047B4090020034BFE22F1
+S31508000FB8DA7018710222A3F844207047B409002091
S31508000FC810B5054C00232370FFF7EAFFFF23E370EB
-S31508000FD80123A4F8443010BD80090020064BFF22DF
+S31508000FD80123A4F8443010BDB4090020064BFF22AB
S31508000FE8DA7000221A71597859719A71DA711A7277
-S31508000FF80622A3F8442070478009002008B5002077
+S31508000FF80622A3F844207047B409002008B5002043
S31508001008FFF7D4FF08BD0000074BFF22DA70074A2E
S315080010189A6400221A715A719A710722C3F807202E
-S315080010280822A3F84420704780090020D0500008F9
+S315080010280822A3F844207047B4090020C4510008D0
S31508001038044BFF22DA7042689A640122A3F8442016
-S31508001048704700BF8009002008B53120FFF7AEFFBA
+S31508001048704700BFB409002008B53120FFF7AEFF86
S3150800105808BD000038B5084CFF23E3700025257144
S315080010686571FFF769FFA071E57125726572072337
-S31508001078A4F8443038BD00BF8009002038B5FFF70A
+S31508001078A4F8443038BD00BFB409002038B5FFF7D6
S315080010888FFF0E4C01252570FF23E370102323716B
S3150800109800236371FFF750FFA071FFF75FFFE07148
S315080010A8FFF75CFFC0F3072020726572A572082354
-S315080010B8A4F84430FFF774FB38BD00BF8009002048
+S315080010B8A4F84430FFF774FB38BD00BFB409002014
S315080010C838B505464478FFF737FF0138844210DCFF
S315080010D80A4C6A78A16C201DFFF790F9FF23E37084
S315080010E86A78A36C1344A3646B780133A4F8443074
-S315080010F838BD2220FFF75AFF38BD00BF80090020F7
+S315080010F838BD2220FFF75AFF38BD00BFB4090020C3
S3150800110838B504464578FFF717FF0138854211DCDC
S3150800111861680A4DA9646278281DFFF76FF9FF23ED
S31508001128EB706278AB6C1344AB6463780133A5F84B
-S31508001138443038BD2220FFF739FF38BD8009002022
+S31508001138443038BD2220FFF739FF38BDB4090020EE
S31508001148F8B505461746002406E015F8013B1C4481
S31508001158E4B2FFF721FF31464E1E0029F5D13C605F
S315080011680120F8BD10B5084CFF23E370E21D41685D
S31508001178A06CFFF7E5FF207100236371A3710823AC
-S31508001188A4F8443010BD00BF8009002038B50546CC
+S31508001188A4F8443010BD00BFB409002038B5054698
S315080011980D4B9C6CFFF7D0FE6A1C411E2046FFF7D4
S315080011A803FB60B1084CFF23E370FFF7C5FE01385F
S315080011B8A36C0344A3640123A4F8443038BD312042
-S315080011C8FFF7F4FE38BD00BF8009002038B504468D
+S315080011C8FFF7F4FE38BD00BFB409002038B5044659
S315080011D84578FFF7B1FE023885420EDC114BFF222F
S315080011E8DA700122A3F84420617851B9FFF7ECFABE
S315080011F890B93120FFF7DAFE38BD2220FFF7D6FE70
S3150800120838BDA21C074B986CFFF7CEFA28B161784F
S31508001218044A936C0B44936438BD3120FFF7C6FE25
-S3150800122838BD00BF8009002008B54168074B986C8F
+S3150800122838BD00BFB409002008B54168074B986C5B
S31508001238FFF7BEFA30B1054BFF22DA700122A3F890
-S31508001248442008BD3120FFF7B1FE08BD80090020FB
+S31508001248442008BD3120FFF7B1FE08BDB4090020C7
S3150800125808B5FFF7B3F8034BFF22DA700122A3F8A3
-S31508001268442008BD8009002008B589B2FFF742FE68
+S31508001268442008BDB409002008B589B2FFF742FE34
S3150800127808BD0000054B00221A709A6483F84320BB
-S31508001288A3F844209A705A70704700BF8009002056
+S31508001288A3F844209A705A70704700BFB409002022
S31508001298034B1B780BB1012070470020704700BF2D
-S315080012A8800900200022024B83F84320704700BFBC
-S315080012B88009002008B50378FF2B04D0354A127830
+S315080012A8B40900200022024B83F84320704700BF88
+S315080012B8B409002008B50378FF2B04D0354A1278FC
S315080012C8012A14D008BDFFF7D9FE324B93F84330EC
S315080012D8012B5AD02F4BB3F944100029F2DD1846D2
S315080012E8012380F843300330FFF7BEFFEAE7C93B1E
@@ -313,26 +313,26 @@ S31508001358BBE7FFF743FEB8E7FFF732FEB5E7FFF747
S3150800136815FFB2E7FFF732FFAFE7FFF773FEACE703
S31508001378FFF75AFFA9E7FFF76BFFA6E7FFF764FE33
S31508001388A3E72020FFF712FE9FE71020FFF70EFEBF
-S31508001398A0E700BF8009002008B5054B1B6913F4B0
+S31508001398A0E700BFB409002008B5054B1B6913F47C
S315080013A8005F01D0002008BD00F03EF8012008BD06
S315080013B80008024008B5642000F008F808BD08B51A
S315080013C800F00AF808BD704770477047014B188047
-S315080013D8704700BFCC09002008B5FFF7E1FA0E4BA5
+S315080013D8704700BF000A002008B5FFF7E1FA0E4B70
S315080013E81B6898420FD30D4B1B786BB901220B4B20
S315080013F81A7080220A4B9A61FFF7D2FA094B1B88A2
S315080014081844054B186008BD0022044B1A704FF49F
-S315080014180002034B9A61EFE7D0090020CE090020A5
-S3150800142800040240CC0900204FF40002014B9A61DF
+S315080014180002034B9A61EFE7040A0020020A00203B
+S3150800142800040240000A00204FF40002014B9A61AA
S31508001438704700BF0004024010B5094B4FF0FF3251
S315080014481A6200241C625A625C621A611C615A613B
-S315080014585C619A619C6103F0DDFA204610BD00BF05
+S315080014585C619A619C6103F057FB204610BD00BF8A
S315080014680038024010B504460E4B18784FF47A73C4
S31508001478B3FBF0F30C4A1068B0FBF3F000F008FB76
S3150800148868B90F2C01D9012010BD002221464FF05A
S31508001498FF3000F0CDFA054B1C60002010BD012076
S315080014A810BD00BF0100002008000020040000202D
S315080014B808B5032000F0AAFA0020FFF7D3FF03F0C7
-S315080014C803FA002008BD000038B50446FFF770FA8D
+S315080014C87DFA002008BD000038B50446FFF770FA13
S315080014D80546B4F1FF3F02D0044B1B781C44FFF7BE
S315080014E867FA401B8442FAD838BD00BF01000020BD
S315080014F87047002800F0A18038B5044690F82030D7
@@ -402,7 +402,7 @@ S315080018E8012C06D9436A43F480234362012030BC9D
S315080018F8704700296FD10468E46814F0030F64D0B0
S31508001908056801F11B0424012C5904F004049460A9
S31508001918002C6BD1056801F11B0424012C59640DB0
-S315080019281460056801F11B0424012D59C5F3400507
+S315080019281460056801F11B0424012D5905F0020508
S31508001938D560056825446D6805F00F0515610568C5
S3150800194825446D68C5F30725956105682C446468C0
S31508001958240C546104680A011444D4F8B8411C706C
@@ -445,7 +445,7 @@ S31508001B9804D00F4A936943F0080393610B4BDB683B
S31508001BA813F0400F04D00A4A936943F0040393617B
S31508001BB8064BDB6813F0800F04D0054A936943F097
S31508001BC802039361F222014BDA607047003C024037
-S31508001BD8DC090020094B1B69002B01DB0020704734
+S31508001BD8100A0020094B1B69002B01DB00207047FF
S31508001BE8064B074A5A6002F188325A601B69002B6D
S31508001BF801DB002070470120704700BF003C024007
S31508001C0823016745034A136943F00043136100201B
@@ -455,7 +455,7 @@ S31508001C380AD0B4F1FF3FF7D0CCB1FEF7B9FE401B86
S31508001C488442F1D2032038BD0C4BDB6813F0F20F3F
S31508001C5809D10A4BDB6813F0010F0AD00122074B9A
S31508001C68DA60002038BDFFF77BFF012038BD032066
-S31508001C7838BD002038BD00BFDC090020003C024002
+S31508001C7838BD002038BD00BF100A0020003C0240CD
S31508001C882DE9F0411E4C247D012C03D1022420465F
S31508001C98BDE8F081984617460E4605460122184BB8
S31508001CA81A754CF25030FFF7B7FF044698B9032D5A
@@ -464,7 +464,7 @@ S31508001CC83DFF4CF25030FFF7A7FF04460D4A13694B
S31508001CD823F0010313610022094B1A75D7E7B9B235
S31508001CE83046FFF717FFECE739463046FFF7FEFEA2
S31508001CF8E7E73A4643463046FFF7E0FEE1E700BF26
-S31508001D08DC090020003C0240084B1A6922F440729C
+S31508001D08100A0020003C0240084B1A6922F4407267
S31508001D181A611A6942F004021A611A6942EA00202D
S31508001D2840F480301861BFF34F8F7047003C02407B
S31508001D3809B3012921D002291AD04FF44071104B52
@@ -480,13 +480,13 @@ S31508001DC81FD2217B2846FFF7B3FF4CF25030FFF7A6
S31508001DD823FF0F4A136923F07A031361024678B979
S31508001DE80135E9E7207BFFF78FFF4CF25030FFF704
S31508001DF813FF024606490B6923F004030B6100E04A
-S31508001E0835600021014B1975104670BDDC090020A4
+S31508001E0835600021014B1975104670BD100A00206F
S31508001E18003C02402DE9F04782B0D0F80080CA009D
S31508001E28521A930003445A6D1B6D9A4255D8C146F7
S31508001E389B1AC1EBC104A2000244526C934200D813
S31508001E481A460C46074602F1030A4FEA9A0A15E0AB
S31508001E5806F1030A4FEA9A0AE3001B1B9D003D4454
-S31508001E68A96C3B7C0093B3B2E2B2404601F05AFD36
+S31508001E68A96C3B7C0093B3B2E2B2404601F08CFD04
S31508001E78AB6C3344AB646B6D1E446E6509EB441357
S31508001E8803F510639B699BB29A4512D8E3001B1B9E
S31508001E989A003A44516D136D99420AD24BB15B1AAE
@@ -495,825 +495,840 @@ S31508001EB8CEE7E3001B1B980007443A6D7B6D9A42F0
S31508001EC80FD804F00F040123A340D8F8344824EAAD
S31508001ED80304C8F83448002000E0012002B0BDE831
S31508001EE8F0870020FAE77047F0B58BB0002800F0B5
-S31508001EF88A80044690F8BD33F3B1032384F8BD33CA
-S31508001F08206801F0C5FA254655F8107B6E460FCDB0
-S31508001F180FC60FCD0FC695E8030086E80300231DF4
-S31508001F280ECB384601F0FAF958B1022384F8BD33C6
-S31508001F38012528460BB0F0BD80F8BC33FFF7D3FF60
-S31508001F48DBE70021206801F0A9FA002315E0D9008B
-S31508001F58C81A82002244012082F83D0082F83C30E3
-S31508001F68A2F84230002082F83F0050649064CA1AEA
-S31508001F789100214408650133DBB26568AB42E6D3B4
-S31508001F88002315E0D800C11A8A002244002182F8E5
-S31508001F98FD1182F8FC3182F8FF11C2F80412C2F862
-S31508001FA80812C21A90002044C0F810120133DBB296
-S31508001FB89D42E7D8254655F8107B6E460FCD0FC6C5
-S31508001FC80FCD0FC695E8030086E80300231D0ECB40
-S31508001FD8384601F0A9FA054660B9002384F838306E
-S31508001FE8012384F8BD33636A012B08D0206801F001
-S31508001FF850FE9EE7022384F8BD33012599E720465B
-S3150800200800F01CFDF2E7012593E7704790F8BC330A
-S31508002018012B01D10220704710B50446012380F828
-S31508002028BC33006801F029FE206801F02BFA00206D
-S3150800203884F8BC0310BD38B590F8BC33012B02D11F
-S315080020480225284638BD0446012380F8BC330068B3
-S3150800205801F01EFA206801F0DCFD054620B10023D0
-S3150800206884F8BC330125ECE7206801F012FE00234A
-S3150800207884F8BC33E5E768B110B50446032380F84D
-S31508002088BD33FFF7D8FF2046FFF7BFFF002084F8C7
-S31508002098BD0310BD0120704770B505460E46036896
-S315080020A8196C03EB461303F53064A3680269012A21
-S315080020B807D0364A914257D0F1B202F09BFD00206C
-S315080020C870BD13F0080F14D0314A914205D913F49C
-S315080020D8004F02D04FF40043A360284602F082FD61
-S315080020E805F571720121286801F030FE0823A360FE
-S315080020F8E5E713F0200F30D113F0280FDFD1244A73
-S31508002108914202D913F4004F2AD1F200921B930088
-S315080021182B44D3F804222169C1F31201521AC3F8D1
-S315080021281422D3F80412D3F808220A44C3F808225A
-S31508002138F1B2284602F05EFD002EC0D1C6EBC606EF
-S31508002148B3002B44D3F81032002BB8D105F57172B9
-S315080021580121286801F0FAFDB1E72023A360AEE75C
-S315080021684FF40043A360AAE713F4004F09D113F00C
-S31508002178200F01D02023A360F1B2284602F03AFDC9
-S315080021889DE74FF40043A36099E700BF0A31544F0F
-S315080021980A30544F38B5044603681D6C03EB4111E1
-S315080021A801F530618A680369012B0DD0124B9D42EF
-S315080021B814D0204602F016FD104B9D4202D9236919
-S315080021C8012B12D0002038BD0C4B9D42F1D912F4D0
-S315080021D8004FEED04FF400438B60EAE712F4004F45
-S315080021E8E7D04FF400438B60E3E704F571720121E9
-S315080021F8206801F0ABFDE5E70A31544F0A30544F21
-S315080022082DE9F84F04460568284601F07EFD08B111
-S31508002218BDE8F88FA8460746206801F046FD00285D
-S31508002228F6D0206801F041FD10F0020F04D02268AC
-S31508002238536903F002035361206801F036FD10F470
-S31508002248002F40F092803E46206801F02EFD10F4DB
-S31508002258802F40F0DC80206801F027FD0028C0F2B6
-S315080022684A81206801F021FD10F4006F0AD0D5F8DC
-S31508002278083813F0010F40F058812268536903F4AF
-S3150800228800635361206801F010FD10F0006F15D047
-S315080022982268536903F00063536194F8F433002BFA
-S315080022A840F04781012184F8F41323685B6DC3F372
-S315080022B88303C4F8F833204600F0D4FB206801F0FD
-S315080022C8F4FC10F4805F40F03881206801F0EDFCDA
-S315080022D810F4005F40F08A81206801F0E6FC10F0EF
-S315080022E8100F14D02268936923F0100393612F6A9C
-S315080022F807F00F08C7F34343022B00F08F81062B1C
-S3150800230800F0AD812268936943F010039361206851
-S3150800231801F0CBFC10F0080F40F0B581206801F0F9
-S31508002328C4FC10F4801F40F0B781206801F0BDFC9A
-S3150800233810F4001F40F0BA81206801F0B6FC10F0CE
-S31508002348804F40F0BD81206801F0AFFC10F0040F03
-S315080023583FF45EAF23685D6815F0040F40F0B98155
-S3150800236823685A6815435D6052E7206801F0A1FCA6
-S3150800237881463E4624E008EB46130122C3F8082B9B
-S3150800238831462046FFF788FE29E031462046FFF702
-S3150800239801FF08EB46130822C3F8082B22E008EBCE
-S315080023A846132022C3F8082B1AF4005F05D008EB59
-S315080023B846134FF40052C3F8082B01364FEA590959
-S315080023C8B9F1000F3FF440AF19F0010FF5D0F1B29B
-S315080023D8206801F07EFC824610F0010FCBD11AF076
-S315080023E8080FD2D11AF0100F04D008EB46131022A2
-S315080023F8C3F8082B1AF0200FD6D02369012BCED1A3
-S3150800240804F571720121206801F0A0FCC7E720686D
-S3150800241801F057FC81463E462EE0F200921B9300D7
-S315080024282344596C9A6C0A449A6448E01AF0080FCF
-S3150800243804D008EB46130822C3F808291AF0100F27
-S3150800244804D008EB46131022C3F808291AF0400FDF
-S3150800245804D008EB46134022C3F808291AF0020FDD
-S3150800246804D008EB46130222C3F808291AF0800F8D
-S315080024783CD101364FEA5909B9F1000F3FF4EBAEE2
-S3150800248819F0010FF5D05FFA86FB5946206801F066
-S3150800249829FC824610F0010FC8D006F00F03012167
-S315080024A801FA03F2D8F8343823EA0203C8F83438AC
-S315080024B808EB4613C3F8081923698B42ADD0594669
-S315080024C8204602F0A3FB2369012BAFD1002EADD11C
-S315080024D8C6EBC602930023441B6D002BA6D104F550
-S315080024E871720121206801F031FC9FE731462046C8
-S315080024F8FFF790FCBDE7D5F8043823F00103C5F8C3
-S31508002508043894F8F433012B08D0204602F0C4FBAB
-S315080025182268536903F000435361A2E6002184F850
-S31508002528F413204600F09EFAF2E7204602F09AFBDA
-S31508002538A3E6204602F096FBC0E605F50069D9F839
-S31508002548043023F00103C9F804301021206800F08C
-S31508002558BDFF14E008EB47134FF67F31C3F8081997
-S31508002568D3F8002922F40012C3F80029C3F8081B77
-S31508002578D3F8002B22F40012C3F8002B013763683E
-S315080025889F42E7D3D9F81C3043F00113C9F81C3029
-S31508002598236BEBB1D9F8843043F00B03C9F88430C0
-S315080025A8D9F8443043F00B03C9F84430D5F8003855
-S315080025B823F4FE63C5F8003804F57172217C206897
-S315080025C801F0C4FB2268536903F4805353617CE61F
-S315080025D8D9F8142042F22B031343C9F81430D9F852
-S315080025E8103043F00B03C9F81030DFE7206801F014
-S315080025F891FB206801F072F8E060276800F034FA69
-S31508002608227B0146384600F0C7FE204602F010FB3A
-S315080026182268536903F4005353615DE647F6F0737D
-S315080026281F423FF46FAE4FEAC80AAAEB08034FEAFF
-S315080026388309A1443F09C7F30A02D9F808122846AC
-S3150800264801F078FAC7F30A07D9F808323B44C9F8FB
-S315080026580832D9F814321F44C9F8147252E6082207
-S3150800266804F57171284601F065FAC7F30A174FEAA7
-S31508002678C803A3EB08018A002244D2F814321F447F
-S31508002688C2F814723EE6204602F0CBFA226853696D
-S3150800269803F00803536141E6F1B2204602F00BFB4A
-S315080026A82268536903F4801353613EE6F1B2204663
-S315080026B802F0FBFA2268536903F4001353613BE6F8
-S315080026C8204602F0FEFA2268536903F080435361F4
-S315080026D839E6204602F0FFFA42E690F8BC33012BA9
-S315080026E801D10220704710B50446012380F8BC338F
-S315080026F8006801F0C2FA002084F8BC0310BD90F8FF
-S31508002708BC33012B01D10220704710B504460123BA
-S3150800271880F8BC33006801F0BCFA002084F8BC03D2
-S3150800272810BD90F8BC33012B01D10220704710B5B3
-S315080027380446012380F8BC3380F83810006801F095
-S315080027488CFA002084F8BC0310BDF8B511F0800F88
-S315080027581ED101F00F06F500AF1BBC00274604F58D
-S31508002768FC74044404343E460644002586F8FD51A4
-S3150800277801F00F012170A260E370627802B1E1806E
-S31508002788022B14D090F8BC33012B13D10220F8BDC4
-S3150800279801F00F06F500AF1BBC0027463834044481
-S315080027A804343E460644012586F83D50E0E70023F2
-S315080027B82371E7E70546012380F8BC3321460068FC
-S315080027C800F09CFF002085F8BC03F8BD38B511F069
-S315080027D8800F17D101F00F04E200151BAB001D4648
-S315080027E803F5FC73034404332C460444002284F896
-S315080027F8FD2101F00F01197090F8BC23012A10D1A8
-S31508002808022038BD01F00F04E200151BAB001D4677
-S315080028183833034404332C460444012284F83D2003
-S31508002828E7E70446012280F8BC231946006800F049
-S31508002838ADFF002084F8BC0338BD70B501F00F055C
-S31508002848EE00711B8C0004F5FC740444211D761BEC
-S31508002858B4000444C4F80822C4F810320023C4F8A3
-S31508002868143284F8FD3184F8FC510369012B06D02B
-S3150800287865B1DAB2006801F069F8002070BDC5EBE9
-S31508002888C506B4000444C4F80C22F1E7DAB20068B5
-S3150800289800F0C4FFF1E701F00F01C1EBC1018B009D
-S315080028A81844D0F81402704770B501F00F05EE0009
-S315080028B8711B8C0038340444211D761BB40004446B
-S315080028C8A264236500236365012384F83D3084F8F0
-S315080028D83C500369012B06D05DB1DAB2006801F0F5
-S315080028E835F8002070BDC5EBC506B4000444E2649B
-S315080028F8F2E7DAB2006800F091FFF2E738B501F0BE
-S315080029080F0543689D4238D811F0800F15D1CA00C3
-S31508002918541AA3001C4603F5FC73034404332246E1
-S315080029280244002182F8FD1101229A701D7090F860
-S31508002938BC23012A0DD1022038BDEA00511B8B00A1
-S3150800294819463833034404330144012281F83D20EB
-S31508002958EAE70446012280F8BC231946006801F014
-S31508002968FDF81DB1002084F8BC0338BD04F5717262
-S31508002978217C206801F0EAF9F4E7012038BD01F066
-S315080029880F03426893422FD810B511F0800F14D15F
-S31508002998DA00D41AA1000C4601F5FC710144043189
-S315080029A80444002284F8FD2100228A700B7090F8EE
-S315080029B8BC33012B0DD1022010BDDA00D41AA100B0
-S315080029C80C463831014404310444012284F83D2078
-S315080029D8EAE70446012380F8BC33006801F0EBF8FF
-S315080029E8002084F8BC0310BD0120704730B4046881
-S315080029F8606A29B10D46A36A00EB134000230CE070
-S31508002A0840EA0240A06212E003F1400104EB8101AA
-S31508002A18496800EB11400133DBB2691E8B42F3D3D8
-S31508002A2840EA024005F13F0104EB810148600020B5
-S31508002A3830BC70470368596200207047024603682D
-S31508002A480121C0F8FC13002082F8F4039A6942F0C1
-S31508002A5800629A61596D024A0A435A65704700BF6F
-S31508002A680300001070470000014B1868704700BF44
-S31508002A7808000020534B98421FD0534B984228D041
-S31508002A88524B984231D0524B98423AD0514B9842C1
-S31508002A9843D0514B98424CD0504B984255D0504B46
-S31508002AA898425ED04F4B984267D04F4B984270D0A9
-S31508002AB84E4B984279D00120704703F560531A693E
-S31508002AC842F001021A611A6922F001021A6100200D
-S31508002AD8704703F550531A6942F002021A611A69D7
-S31508002AE822F002021A610020704703F540531A695A
-S31508002AF842F004021A611A6922F004021A610020D7
-S31508002B08704703F530531A6942F008021A611A69C0
-S31508002B1822F008021A610020704703F520531A6943
-S31508002B2842F010021A611A6922F010021A6100208E
-S31508002B38704703F510531A6942F020021A611A6998
-S31508002B4822F020021A610020704703F500531A691B
-S31508002B5842F040021A611A6922F040021A610020FE
-S31508002B68704703F5E0531A6942F080021A611A6938
-S31508002B7822F080021A610020704703F5C0531A69CB
-S31508002B8842F480721A611A6922F480721A61002066
-S31508002B98704703F5A0531A6942F400721A611A6954
-S31508002BA822F400721A610020704703F580531A69E7
-S31508002BB842F480621A611A6922F480621A61002056
-S31508002BC8704700BF000002400004024000080240A7
-S31508002BD8000C02400010024000140240001802408F
-S31508002BE8001C02400020024000240240002802403F
-S31508002BF8F0B40C6894FAA4F4B4FA84F42BE08E685A
-S31508002C08826893FAA3F5B5FA85F56D0007FA05F50E
-S31508002C1822EA050293FAA3F5B5FA85F56D0006FAD0
-S31508002C2805F52A43826037E04A69456A1B0A93FA1A
-S31508002C38A3F6B6FA86F6B6000F2707FA06F625EAC1
-S31508002C48060593FAA3F3B3FA83F39B0002FA03F390
-S31508002C582B43436201340B6833FA04F250D001223D
-S31508002C68A2401340F6D04E68026893FAA3F5B5FA5F
-S31508002C7885F56D00032707FA05F522EA050293FA92
-S31508002C88A3F5B5FA85F56D0006FA05F52A43026037
-S31508002C984A68013A012AB2D90E69C26893FAA3F5B5
-S31508002CA8B5FA85F56D00032707FA05F522EA050240
-S31508002CB893FAA3F5B5FA85F56D0006FA05F52A43DC
-S31508002CC8C2604A68022AC5D193FAA3F2B2FA82F216
-S31508002CD8072AA9D84D69026A93FAA3F6B6FA86F6B8
-S31508002CE8B6000F2707FA06F622EA060293FAA3F3AE
-S31508002CF8B3FA83F39B0005FA03F313430362A9E7C0
-S31508002D084A68013A012A02D90020F0BC7047C96806
-S31508002D18426822EA030201FB03F313434360F3E71D
-S31508002D281E4A136843F0010313601C4B1B6813F013
-S31508002D38020FFAD0194A00239360194B13601368D7
-S31508002D4823F0F80343F080031360144B1B6813F051
-S31508002D58007FFAD1114B1B6813F0006FFAD10F4B9D
-S31508002D681B6813F0005FFAD10C4B0E4A5A60103AEA
-S31508002D78C3F88420C3F88820DA6822F4FE42DA60A9
-S31508002D88DA6842F47F02DA605A6F22F001025A675B
-S31508002D985A6F42F080725A6700207047003802401E
-S31508002DA8FFFFF2EA10300024034B9B68C3F30313B2
-S31508002DB8024AD35CD840704700380240D850000809
-S31508002DC8034B9B68C3F38223024AD35CD8407047F7
-S31508002DD800380240E8500008034B9B68C3F34233A7
-S31508002DE8024AD35CD840704700380240E8500008C9
-S31508002DF80D4B5B6803F480030BB90C4800E00C48DC
-S31508002E08094A536803F03F03B0FBF3F35068C0F36D
-S31508002E18881000FB03F05368C3F3014301335B00D2
-S31508002E28B0FBF3F0704700BF003802400024F400F6
-S31508002E3800127A0008B5074B9B6803F00C03042BAD
-S31508002E4806D0082B01D0044808BDFFF7D1FF08BDF6
-S31508002E58024808BD003802400024F40000127A002F
-S31508002E6810B50446FFF7E6FF2060FFF79DFF606090
-S31508002E78FFF7A6FFA0606068FFF7AEFFE06010BD29
-S31508002E8808B5032809D00C2833D0B0F5406F5CD0B4
-S31508002E98302800F08780002008BD584BD3F89030BA
-S31508002EA8034043EA0040564B98420FD0B0F1031F3F
-S31508002EB815D0013B984206D0FFF7BCFFFFF774FF11
-S31508002EC8FFF78AFF08BDFFF7B5FF08BD4B4B1B6820
-S31508002ED813F0020F01D04B4808BD002008BD474B28
-S31508002EE81B6F13F0020F02D04FF4004008BD0020F4
-S31508002EF808BD424BD3F89030034043EA0040424BA2
-S31508002F0898420FD0B0F10C1F15D0043B984206D052
-S31508002F18FFF790FFFFF748FFFFF752FF08BDFFF7D7
-S31508002F2889FF08BD354B1B6813F0020F01D03548D9
-S31508002F3808BD002008BD314B1B6F13F0020F02D0E5
-S31508002F484FF4004008BD002008BD2C4BD3F890303C
-S31508002F58034043EA00402D4B984210D0B0F10C2F9D
-S31508002F6816D0A3F58063984206D0FFF763FFFFF7EC
-S31508002F781BFFFFF731FF08BDFFF75CFF08BD1F4BB6
-S31508002F881B6813F0020F01D01E4808BD002008BDB3
-S31508002F981A4B1B6F13F0020F02D04FF4004008BDFE
-S31508002FA8002008BD154BD3F89030034043EA00408B
-S31508002FB8174B98420FD0B0F1301F15D0103B9842E6
-S31508002FC806D0FFF737FFFFF7EFFEFFF7F9FE08BD54
-S31508002FD8FFF730FF08BD094B1B6813F0020F01D035
-S31508002FE8084808BD002008BD044B1B6F13F0020FE4
-S31508002FF802D04FF4004008BD002008BD0038024042
-S31508003008020003000024F40008000C000008000C65
-S315080030182000300008B5C0280BD0B0F5407F34D062
-S31508003028B0F5405F5ED0B0F5404F00F088800020CC
-S3150800303808BD594BD3F89030034043EA0040574B34
-S3150800304898420FD0B0F1C01F15D0403B984206D021
-S31508003058FFF7F0FEFFF7A8FEFFF7B2FE08BDFFF779
-S31508003068E9FE08BD4C4B1B6813F0020F01D04C480B
-S3150800307808BD002008BD484B1B6F13F0020F02D08D
-S315080030884FF4004008BD002008BD434BD3F89030E4
-S31508003098034043EA0040434B984210D0B0F1032F4F
-S315080030A816D0A3F58073984206D0FFF7C3FEFFF73C
-S315080030B87BFEFFF785FE08BDFFF7BCFE08BD364B4D
-S315080030C81B6813F0020F01D0354808BD002008BD5B
-S315080030D8314B1B6F13F0020F02D04FF4004008BDA6
-S315080030E8002008BD2C4BD3F89030034043EA004033
-S315080030F82D4B984210D0B0F1302F16D0A3F5805337
-S31508003108984206D0FFF796FEFFF74EFEFFF758FEE1
-S3150800311808BDFFF78FFE08BD1F4B1B6813F0020F8B
-S3150800312801D01F4808BD002008BD1B4B1B6F13F0B4
-S31508003138020F02D04FF4004008BD002008BD164B08
-S31508003148D3F89030034043EA0040184B984210D011
-S31508003158B0F1C02F16D0A3F58043984206D0FFF7E2
-S3150800316869FEFFF721FEFFF72BFE08BDFFF762FE93
-S3150800317808BD094B1B6813F0020F01D0084808BDA3
-S31508003188002008BD044B1B6F13F0020F02D04FF442
-S31508003198004008BD002008BD003802408000C00075
-S315080031A80024F4000002000300200030008000C05C
-S315080031B838B5036813F0010F46D00123002B77D1E1
-S315080031C80D46044603683D4A1A404B68C9680B43CE
-S315080031D829690B43A9690B4313430360AB68426823
-S315080031E822F44052134343606B69826822F44072A2
-S315080031F813438360324B984228D0324B984229D0E1
-S31508003208314B98422AD0314B98422BD0304B9842B2
-S315080032182CD0304B98422ED02F4B984230D02F4B7B
-S31508003228984232D00020002844D02B68002B43D07F
-S31508003238AA69B2F5004F2DD000EB5300B0FBF3F0A6
-S3150800324880B2E060002038BD0023B7E70320FFF707
-S3150800325817FEE8E70C20FFF713FEE4E73020FFF730
-S315080032680FFEE0E7C020FFF7D5FEDCE74FF4407015
-S31508003278FFF7D0FED7E74FF44060FFF701FED2E725
-S315080032884FF44050FFF7C6FECDE74FF44040FFF72E
-S31508003298C1FEC8E75A0802EB4000B0FBF3F04FF648
-S315080032A8F0730340C0F342001843E060002038BDBD
-S315080032B8012038BD012038BD012038BDF369FFEF6C
-S315080032C8001001400044004000480040004C0040FF
-S315080032D8005000400014014000780040007C00407F
-S315080032E8002301330C4A934211D80269002AF8DAF6
-S315080032F8036943F00103036100230133064A934235
-S3150800330807D8026912F0010FF7D100207047032089
-S3150800331870470320704700BF400D030084B010B5FE
-S31508003328044603A880E80E00089B012B11D0E36821
-S3150800333843F04003E3602046FFF7D2FFA36B43F44C
-S315080033488033A363069B012B1BD0BDE8104004B04D
-S315080033587047A36B23F48033A363E2680D4B1340CD
-S31508003368E360E36823F44013E3600F9B012B03D063
-S315080033782046FFF7B5FFE5E7E36843F48013E36003
-S31508003388F6E7A36843F00603A360A36843F020039F
-S31508003398A360DAE7BFFFBDFF022A0AD00921C2687F
-S315080033A822F47052C260C36843EA8123C3600020CE
-S315080033B87047274B0B44274A934239D9264B0B4467
-S315080033C8264A934236D9264B0B44264A934233D982
-S315080033D8254B0B4402F5C332A03293422ED9234B10
-S315080033E80B44234A93422BD9224B0B4402F59222CB
-S315080033F802F57872934225D91F4B0B4402F5C3226E
-S3150800340802F5207293421FD91C4B0B4402F5B712DA
-S3150800341802F55872934219D9194B0B4402F5122230
-S3150800342802F5F862934201D90621B8E70721B6E7FB
-S315080034380F21B4E70E21B2E70D21B0E70C21AEE75C
-S315080034480B21ACE70A21AAE70921A8E70821A6E77C
-S31508003458405327FFFF340C00401E1BFF3F420F0056
-S3150800346800DC0BFF7F4F1200808CF9FE60B6E5FE84
-S315080034785FE3160000D3CEFEC05BB3FE00CA91FE1A
-S31508003488E05459FE836843F00103836000207047BF
-S31508003498836823F0010383600020704708B5C36872
-S315080034A823F0C043C360012909D069B9C36843F04A
-S315080034B88043C3603220FEF707F8002008BDC368BA
-S315080034C843F00053C360F5E7012008BD890141F0C0
-S315080034D82001016100230133054A934205D8026990
-S315080034E812F0200FF7D1002070470320704700BF5D
-S315080034F8400D03001023036100230133054A934254
-S3150800350805D8026912F0100FF7D10020704703207A
-S31508003518704700BF400D0300D0F800381943C0F8BB
-S31508003528001800207047000084B02DE9F0410446D1
-S3150800353807A880E80E002546002306E003F14002A6
-S3150800354804EB82020021516001330E2BF6D9119B38
-S3150800355883BBA36B23F40013A363236843F04003D8
-S315080035682360236843F0800323600023C4F8003EE1
-S3150800357804F50066D4F80038C4F800380C9B012B0B
-S315080035881DD0032B27D003212046FFF7C5FF10219E
-S315080035982046FFF79BFF804608B14FF001082046F2
-S315080035A8FFF7A8FF08B14FF00108002333617361DC
-S315080035B8F36127E0A36B43F40013A363D5E7099BDC
-S315080035C823B900212046FFF7A7FFE0E70121204697
-S315080035D8FFF7A2FFDBE7099B23B900212046FFF77F
-S315080035E89BFFD4E701212046FFF796FFCFE7C3B92B
-S315080035F84FF00060C2F8000900220A614FF67F32D0
-S315080036088A60013307998B4210D205EB431202F5FB
-S315080036181061D2F800090028E9DB0020C2F8000981
-S31508003628EAE74FF09040C2F80009E5E700230AE008
-S31508003638BBB14FF09047C2F8007B002202614FF6F3
-S315080036487F32826001338B4210D205EB431202F5B2
-S315080036583060D2F8007B002FEADB0027C2F8007B2F
-S31508003668EBE74FF00067C2F8007BE6E7336923F417
-S31508003678807333610A9B012B1BD00022A2616FF06D
-S31508003688804262611BB9A36943F01003A361A2696A
-S315080036980E4B1343A3610D9B1BB1A36943F00803A3
-S315080036A8A361119B012B0BD04046BDE8F04104B03D
-S315080036B87047074A3263316B064A0A433263DCE7C6
-S315080036C8A269054B1343A361EEE700BF00383C80A7
-S315080036D8000180000300010004000040D0F8083803
-S315080036E813F0060305D0062B18BF022B03D10220B8
-S315080036F870470020704700207047000070B40B78A8
-S315080037084A78012A20D0D0F81C2803F00F0601248D
-S31508003718B44042EA0442C0F81C2800EB4310D0F82B
-S31508003728003B13F4004F0CD1D0F8002B8B68C3F379
-S315080037380A03C97843EA81431343134A1A43C0F86C
-S31508003748002B002070BC7047D0F81C4803F00F0601
-S31508003758B24092B22243C0F81C2800EB4310D0F8B6
-S31508003768002912F4004FECD1D0F800498A68C2F350
-S315080037780A02C97842EA814242EA83532343024A43
-S315080037881A43C0F80029DCE70080001070B40C78EA
-S315080037984B78012B1FD0D0F83C5804F00F060122AD
-S315080037A802FA06F625EA0645C0F83C58D0F81C5829
-S315080037B8097801F00F018A4025EA0242C0F81C2858
-S315080037C800EB4410D0F8002B124B1340C0F8003B0E
-S315080037D8002070BC7047D0F83C6804F00F0203FA62
-S315080037E802F292B226EA0202C0F83C28D0F81C284F
-S315080037F8097801F00F018B409BB222EA0303C0F84F
-S315080038081C3800EB4410D0F80029034B1340C0F8C5
-S315080038180039DDE70078F3EF007833EC70B40B78FD
-S315080038284C78012C24D000EB431000F530631D6951
-S315080038383A4C2C401C611D69394C2C401C614C695A
-S315080038480CB18C684C611C6944F400241C611C6921
-S315080038588D68C5F312052C431C61012A59D0D0F886
-S31508003868003B43F00443C0F8003B002070BC704797
-S315080038784C6954BB00EB4314D4F81069284D3540FD
-S31508003888C4F81059D4F8105945F40025C4F8105945
-S31508003898D4F81069214D3540C4F81059012A30D09A
-S315080038A84A694AB1D0F83428097801F00F04012189
-S315080038B8A1400A43C0F8342800EB4310D0F8002981
-S315080038C842F00442C0F80029CFE700EB431404F598
-S315080038D810642669114D354025612669104D354015
-S315080038E825614E698D68AE4200D94D61256945F452
-S315080038F80025256125694E69C6F3120635432561F3
-S31508003908CCE70A69002AD7D000EB4311C1F8142975
-S31508003918D2E7CA68002AA2D05A61A0E70000F8FFD1
-S31508003928FFFF07E070B49DF80C4064B903339E089E
-S3150800393807E000EB023303F5805351F8045B1D607A
-S315080039480134B442F5D3002070BC7047F0B583B093
-S315080039580C784B78012B29D000EB441404F5306316
-S315080039681E69714D35401D611E69704D35401D61D2
-S315080039784D69002D40F0AA801D698E68C6F31206A7
-S3150800398835431D611D6945F400251D61012A00F0AE
-S31508003998B280CB78012B00F0B480D4F8003B43F012
-S315080039A80443C4F8003B002003B0F0BD4B69002B64
-S315080039B83BD100EB4413D3F810695C4D3540C3F886
-S315080039C81059D3F8105945F40025C3F81059D3F8F7
-S315080039D81069554D3540C3F81059012A57D0CB7888
-S315080039E8012B0BD04B694BB1D0F834380D7805F05C
-S315080039F80F060125B5402B43C0F83438CB78012B80
-S31508003A084DD000EB4414D4F8003943F00443C4F805
-S31508003A180039CB78012BC6D114460B46C9681A78E3
-S31508003A289B8A0094FFF77EFFBDE700EB4413D3F8A3
-S31508003A3810693D4D3540C3F81059D3F810693B4D08
-S31508003A483540C3F81059D3F810694D698F683D4455
-S31508003A58013DB5FBF7F5364F07EAC5453543C3F8C3
-S31508003A681059D3F810594E69C6F312063543C3F8E8
-S31508003A78105903F51063CD78012DAED11D6925F0CF
-S31508003A88C0451D611D6945F000551D61A5E70B690F
-S31508003A98002BB3D000EB4415C5F81439AEE7D0F8B7
-S31508003AA8083813F4807F08D100EB4415D5F8003997
-S31508003AB843F00053C5F80039A3E700EB4415D5F8D9
-S31508003AC8003943F08053C5F800399AE78E683544BB
-S31508003AD8013DB5FBF6F51E69154F07EAC5473E438E
-S31508003AE81E611F698E68ADB206FB05F5C5F312059A
-S31508003AF83D431D614AE7CA68002A3FF44AAF5A613E
-S31508003B0847E7D0F8083813F4807F06D1D4F8003B85
-S31508003B1843F00053C4F8003B3FE7D4F8003B43F0B2
-S31508003B288053C4F8003B38E70000F8FFFFFF07E0BA
-S31508003B380000F81F03329208002393420CD210B4EF
-S31508003B4800F58054246841F8044B01339342F7D3AF
-S31508003B5808465DF8044B7047084670470B784A785C
-S31508003B68012A14D000EB4310D0F8002B002A06DBF4
-S31508003B782BB1D0F8003B23F08043C0F8003BD0F8BF
-S31508003B88003B43F40013C0F8003B0020704700EBE5
-S31508003B984310D0F80029002A06DB2BB1D0F80039E3
-S31508003BA823F08043C0F80039D0F8003943F40013ED
-S31508003BB8C0F80039E9E70B784A78012A0ED000EBF5
-S31508003BC84310D0F8003B23F40013C0F8003BCB7829
-S31508003BD8023BDBB2012B15D90020704700EB4310D6
-S31508003BE8D0F8003923F40013C0F80039CB78023B23
-S31508003BF8DBB2012BF0D8D0F8003943F08053C0F86F
-S31508003C080039E9E7D0F8003B43F08053C0F8003B99
-S31508003C18E2E738B505460446002208E004EB4213F5
-S31508003C284FF67F31C3F80819C3F8081B01320E2A64
-S31508003C38F4D90022C5F81028C5F81428C5F81C2890
-S31508003C482846FFF757FC034608B1184638BD102121
-S31508003C582846FFF73BFC0346F7E7D0F8003823F475
-S31508003C68FE63C0F80038D0F80038090101F4FE618F
-S31508003C780B43C0F800380020704708B5D0F8043858
-S31508003C8823F00203C0F804380320FDF71DFC0020C2
-S31508003C9808BD08B5D0F8043843F00203C0F804385C
-S31508003CA80320FDF711FC002008BD42698069104011
-S31508003CB87047D0F8183800F50060C0691840000C3D
-S31508003CC87047D0F8183800F50060C069184080B207
-S31508003CD8704700EB4111D1F8082B00F500604069E0
-S31508003CE81040704710B4D0F81028D0F8343801F0CE
-S31508003CF80F04E340DB01DBB2134300EB4111D1F8B3
-S31508003D08080918405DF8044B7047406900F001003F
-S31508003D1870470000D0F800290B4B1340C0F800394B
-S31508003D2800F500639A6802F00602042A05D05A6864
-S31508003D3842F480725A6000207047D0F8002942F091
-S31508003D480302C0F80029F2E700F8FFFF10B4046C74
-S31508003D58154B9C4203D9D0F8003B002B16DB0024F0
-S31508003D68C0F8104BD0F8104B44F40024C0F8104B98
-S31508003D78D0F8104B44F01804C0F8104BD0F8104B84
-S31508003D8844F0C044C0F8104B012903D000205DF860
-S31508003D98044B7047C0F8142BD0F8003B43F0802337
-S31508003DA8C0F8003BF2E700BF0A30544F014B1860D1
-S31508003DB8704700BF0800002098B108B50346D0F838
-S31508003DC88C0210B10020C3F88C0209B1C3F8881216
-S31508003DD81846012380F87432027000F087FF002025
-S31508003DE808BD0220704710B50446012380F87432CE
-S31508003DF8D0F88C325B6801799847204600F0E6FFD0
-S31508003E08204600F0D3FF002010BD19B1C0F88C1267
-S31508003E18002070470220704708B500F0CFFF002041
-S31508003E2808BD08B5D0F88C3223B11B68984718B175
-S31508003E38022008BD022008BD002008BD08B5D0F834
-S31508003E488C325B689847002008BD38B5044600F5EB
-S31508003E582075284600F049F90123C4F86C32B4F8ED
-S31508003E688632C4F8703294F8801201F01F03012BC9
-S31508003E780ED03BB1022B10D001F08001204600F08D
-S31508003E88C0FF03E02946204600F0B9FA002038BDED
-S31508003E982946204600F0E7FAF8E72946204600F0C2
-S31508003EA812FBF3E738B50446A9BB1046D4F86C32BA
-S31508003EB8032B03D0052B25D0002038BDD4F84C3168
-S31508003EC8D4F8502193420DD99B1AC4F84C319A421A
-S31508003ED806D99AB20146204600F030FC002038BDC3
-S31508003EE892B2F7E7D4F88C321B691BB194F874229E
-S31508003EF8032A04D0204600F029FC002038BD2046B5
-S31508003F089847F7E70025C4F86C522946204600F07A
-S31508003F1878FF284638BD0A46D0F88C329B694BB1DB
-S31508003F2890F87412032901D0022038BD1146984723
-S31508003F38002038BD022038BD10B50446002956D1E0
-S31508003F481046D4F86C32022B09D0002B18BF042B64
-S31508003F5844D094F87832012B45D0002010BD236A46
-S31508003F68626A93421BD8E169B1FBF2F302FB1313A9
-S31508003F782BB98A4203D8D4F8703299421DD3D4F89B
-S31508003F888C32DB681BB194F87422032A23D080216B
-S31508003F98204600F036FF204600F0E3FBD9E79A1AD8
-S31508003FA8226292B20146204600F0C0FB00231A4658
-S31508003FB81946204600F045FFCBE700221146204661
-S31508003FC800F0B4FB0021C4F870120B460A462046D6
-S31508003FD800F037FFBDE720469847D8E780212046F6
-S31508003FE800F00FFFB5E7002084F8780210BD0A46EE
-S31508003FF8D0F88C325B694BB190F87412032901D05A
-S31508004008022010BD11469847002010BD022010BD99
-S3150800401870B5044640230022114600F0DFFE01254C
-S31508004028C4F844514026C4F850613346002280211A
-S31508004038204600F0D3FEA561666284F87452002310
-S31508004048C4F86C326360C4F87C32D4F890322BB169
-S31508004058D4F88C325B68002120469847002070BD4A
-S3150800406801740020704790F8743280F8753204237A
-S3150800407880F874320020704790F8753280F87432E8
-S315080040880020704708B590F87432032B01D0002039
-S3150800409808BDD0F88C32DB69002BF8D09847F6E7CC
-S315080040A800207047002070470020704708B5012295
-S315080040B880F87422D0F88C2252680179904700203B
-S315080040C808BD002302E00133DBB201300278002A7A
-S315080040D8F9D11846704708B54B88012B00D008BD9A
-S315080040E8C0F87C3200F032FBF9E70B7803704B789E
-S315080040F843708B78CA7803EB022343800B794A7995
-S3150800410803EB022383808B79CA7903EB0223C380E6
-S31508004118704710B50446802100F073FE002120463A
-S3150800412800F06FFE10BD30B583B005460C464A88C8
-S31508004138130A013B062B00F28480DFE803F0041615
-S315080041482A8282667300D0F888321B680DF1060148
-S31508004158007C9847BDF8062012B1E388002B74D175
-S31508004168E388002B7BD003B030BD037C43B9D0F875
-S315080041788C329B6A0DF10600984702234370E9E7DB
-S31508004188D0F88C32DB6A0DF1060098470223437093
-S31508004198E0E7D2B2052A34D8DFE802F0030B131B8E
-S315080041A8232BD0F888325B680DF10601007C984706
-S315080041B8D0E7D0F888329B680DF10601007C98474D
-S315080041C8C8E7D0F88832DB680DF10601007C984705
-S315080041D8C0E7D0F888321B690DF10601007C9847BC
-S315080041E8B8E7D0F888325B690DF10601007C984774
-S315080041F8B0E7D0F888329B690DF10601007C98472C
-S31508004208A8E72146FFF785FFADE7037C33B9D0F861
-S315080042188C325B6B0DF1060098479BE72146FFF742
-S3150800422878FFA0E7037C43B9D0F88C321B6B0DF1F5
-S3150800423806009847072343708CE72146FFF769FF6E
-S3150800424891E72146FFF765FF8DE79A4228BF1A4688
-S31508004258ADF806200146284600F05BFA80E72846AE
-S3150800426800F074FA7FE738B504468B88F3B9CB882B
-S31508004278E3B94B887F2B19D803F07F0590F8743279
-S31508004288032B0CD080F87652294600F0CAFD204642
-S3150800429800F05CFA35B1022384F8743238BDFFF7AA
-S315080042A838FF38BD012384F8743238BD2046FFF735
-S315080042B830FF38BD38B504460D468978284B19703D
-S315080042C801290ED890F87432022B0ED0032B21D070
-S315080042D82946FFF71EFF224B19782046FFF7AEFD41
-S315080042E838BD2946FFF715FF38BD81B1416003235C
-S315080042F880F87432FFF795FD022803D0204600F0AF
-S3150800430825FA38BD29462046FFF703FF38BD00F0D1
-S315080043181DFA38BD89B1436899421DD0D9B2FFF74D
-S315080043288DFD0F4B197861602046FFF77AFD022844
-S315080043380DD0204600F00AFA38BD022380F87432F8
-S315080043484160FFF77BFD204600F000FA38BD294694
-S315080043582046FFF7DEFE38BD00F0F8F938BD00BF85
-S31508004368D409002008B5CB88012B0BD190F87432F4
-S315080043789BB1022B09D9032B0FD10122011D00F08D
-S31508004388C8F908BDFFF7C5FE08BD0146002341F870
-S31508004398083F012200F0BDF908BDFFF7BAFE08BDBF
-S315080043A808B590F87432013B022B12D8CB88022B39
-S315080043B80CD10123C360D0F87C320BB10323C36048
-S315080043C8022200F10C0100F0A4F908BDFFF7A1FECE
-S315080043D808BDFFF79EFE08BD08B590F87432013B84
-S315080043E8022B09D84B88012B00D008BD0023C0F83A
-S315080043F87C3200F0ABF908BDFFF78BFEF5E708B588
-S315080044080B7803F06003202B05D0402B03D043B16B
-S31508004418FFF77FFE03E0D0F88C329B6898470020A8
-S3150800442808BD4B78092B1BD8DFE803F011171A14B7
-S315080044381A08051A0E0BFFF776FEF0E7FFF713FFC3
-S31508004448EDE7FFF737FFEAE7FFF78CFFE7E7FFF740
-S31508004458A7FFE4E7FFF73FFEE1E7FFF7BDFFDEE763
-S31508004468FFF757FEDBE738B505460C460B7803F029
-S315080044786003202B05D0402B03D013B1FFF749FE64
-S315080044880BE095F87432013B022B17D82379012BD8
-S3150800449805D921462846FFF73CFE002038BDD5F841
-S315080044A88C329B68214628469847E388002BF4D126
-S315080044B80028F2D1284600F049F9EEE721462846B1
-S315080044C8FFF727FEE9E738B504468A880B7803F02C
-S315080044D86003202B08D0D0B2402B05D05BB120460C
-S315080044E8FFF717FE002038BDD4F88C329B682046A3
-S315080044F89847002038BD202B12D04B78012B3AD08C
-S31508004508002B67D0032B40F0E18094F87432022B15
-S315080045180CD0032B1DD02046FFF7FBFD002038BD25
-S31508004528D4F88C329B682046984738BD002818BFAF
-S31508004538802809D00146204600F063FC80212046E1
-S3150800454800F05FFC002038BD2046FFF7E2FD00209A
-S3150800455838BD4B882BB9002818BF802801D0CB88CE
-S3150800456823B1204600F0F2F8002038BD014620465F
-S3150800457800F047FCF5E794F87432022B06D0032BB3
-S3150800458817D02046FFF7C5FD002038BD002818BFFC
-S31508004598802809D00146204600F033FC80212046B1
-S315080045A800F02FFC002038BD2046FFF7B2FD00209A
-S315080045B838BD4B88002B40F08E8010F07F0F04D151
-S315080045C8204600F0C3F8002038BD0146204600F012
-S315080045D820FCF5E794F87432022B06D0032B2AD070
-S315080045E82046FFF796FD002038BD002818BF80280A
-S315080045F812D112F0800F14D100F07F0000EB800072
-S31508004608830003F5A073E11800250D6002222046F1
-S3150800461800F07FF8284638BD2046FFF77AFD0020C7
-S3150800462838BD00F07F0000EB8000830003F110011D
-S3150800463821440431E8E752B2002A1FDB00F00F03D1
-S3150800464803EB83039D002544D5F8443123B3002A98
-S3150800465827DB00F07F0202EB8202930003F5A073C2
-S31508004668E518802818BF002825D100232B600222C8
-S315080046782946204600F04DF8002038BD00F00F0303
-S3150800468803EB83039D002544AB69002BDFD1204645
-S31508004698FFF73FFD002038BD2046FFF73AFD00200A
-S315080046A838BD00F07F0202EB8202930003F1100581
-S315080046B825440435D5E70146204600F051FB10B1DC
-S315080046C801232B60D3E700232B60D0E72046FFF7AA
-S315080046D820FD002038BD002038BDC8B170B50D468C
-S315080046E816460446FFF7EDFC013040003080287076
-S315080046F803236B70022307E05A1CD2B20134E9542B
-S315080047080233DBB20021A95421780029F4D170BDFF
-S31508004718704710B513460222C0F86C22C3610362BB
-S315080047280A46002100F085FB002010BD08B513468F
-S315080047380A46002100F07DFB002008BD08B513468F
-S315080047480A46002100F07DFB002008BD08B50423B1
-S31508004758C0F86C3200231A46194600F06AFB002096
-S3150800476808BD08B50523C0F86C3200231A46194651
-S3150800477800F067FB002008BD10B40F4AD2F888304D
-S3150800478843F47003C2F888300C4B196841F00101EC
-S315080047981960002098601C68094921401960094970
-S315080047A85960196821F480211960D8604FF00063B0
-S315080047B893605DF8044B704700ED00E0003802404E
-S315080047C8FFFFF6FE1030002408B52F4A136823F0B9
-S315080047D80F0343F007031360136803F00F03072B4F
-S315080047E803D06A212948FCF7CDFA294B1A6842F4FE
-S315080047F840421A601A6842F480321A6003F5E433B4
-S315080048081A6842F480221A601A6842F480321A60DA
-S31508004818204B1B6813F4003FFAD01E4B5A681E49F2
-S3150800482811401E4A0A435A605A681D4911401D4AD2
-S315080048380A435A601A6842F080721A60154B1B6858
-S3150800484813F0007FFAD0134B9A6822F0F0029A60A8
-S315080048589A6822F4E05242F4A0529A609A6822F4BE
-S31508004868604242F400429A609A6822F0030242F0D3
-S3150800487802029A60074B9B6803F00C03082BF9D1D0
-S315080048880948FFF793FA08BD003C0240F0500008B3
-S3150800489800700040003802400080BCFF086C4000E9
-S315080048A80080BFF0086C400900E6DF0C08B5FCF785
-S315080048B8FFFDFFF789FF08BD08B5FFF7F7FFFCF707
-S315080048C8AFFAFCF7BBFAFCE72DE9F04391B04C4C7C
-S315080048D8636C43F480436364636C03F4804309930D
-S315080048E8099B236C43F080532364236C03F080539D
-S315080048F80893089B236B43F001032363236B03F098
-S3150800490801030793079B236B43F002032363236B77
-S3150800491803F002030693069B236B43F00403236301
-S31508004928236B03F004030593059B236B43F00803E5
-S315080049382363236B03F008030493049B236C43F453
-S3150800494880232364236C03F480230393039B236C3B
-S3150800495843F000732364236C03F000730293029BED
-S3150800496880230A9301230B9300250C950D950E9524
-S31508004978DFF89C800AA94046FEF73AF94FF4000387
-S31508004988C8F818304FF400530A930B950E950AA9E0
-S315080049981C48FEF72DF94FF44079CDF828900227E0
-S315080049A80B9703260C960D950E9507230F930AA9C0
-S315080049B81548FEF71DF9CDF828900B970C960D9516
-S315080049C80E9509230F930AA94046FEF711F94FF4E5
-S315080049D8C0530A930B970C960D950E950A230F93B9
-S315080049E80AA90A48FEF704F9636B43F08003636370
-S315080049F8636B03F080030193019B11B0BDE8F08354
-S31508004A080038024000080240000C0240000002403C
-S31508004A180004024010B5FEF783F91B4C4FF4000357
-S31508004A28A3611A48FEF726F81948FEF723F8204620
-S31508004A38FEF720F81748FEF71DF8174B5A6B22F0B1
-S31508004A4880025A631A6C22F000721A641A6C22F4ED
-S31508004A5880221A641A6B22F008021A631A6B22F06B
-S31508004A6804021A631A6B22F002021A631A6B22F0FE
-S31508004A7801021A631A6C22F080521A645A6C22F4DC
-S31508004A8880425A6410BD00BF00040240000C024070
-S31508004A98000802400000024000380240DFF834D01F
-S31508004AA8002103E00C4B5B58435004310B480C4B70
-S31508004AB842189A42F6D30B4A02E0002342F8043B0E
-S31508004AC8094B9A42F9D3FFF757FE00F053FAFFF756
-S31508004AD8F3FE704700000520585100080000002022
-S31508004AE8C0000020C00000203C100020FEE700009F
-S31508004AF82023038000487047440000200A230380C7
-S31508004B08004870476400002008B590F87432032BF3
-S31508004B1801D0002008BDFCF7D5F8FAE708B5FCF778
-S31508004B28D1F8002008BD08B50846FCF7FFF80020AC
-S31508004B3808BD000008B50B7813F0600F06D14B784E
-S31508004B480A2B14D00B2B17D0062B01D0002008BD32
-S31508004B584B881B0A212B04D00B491722FFF7D9FDCE
-S31508004B68F4E7CA88172A28BF17220849F6E7012250
-S31508004B780749FFF7CEFDE9E78B7813B9044A1360AE
-S31508004B88E4E7FFF7C6FAE1E74D00002056000020E3
-S31508004B98D809002010B50446812100F02AF9012118
-S31508004BA8204600F026F9002010BD000010B504467E
-S31508004BB840230222812100F011F940230222012113
-S31508004BC8204600F00BF94023034A0121204600F04D
-S31508004BD838F9002010BD00BFF809002000487047C2
-S31508004BE8F809002008B500F57171D0F80004FFF738
-S31508004BF82CF908BD08B5C1EBC10293000344D3F8E4
-S31508004C080822D0F80004FFF74DF908BD08B5C1EB2E
-S31508004C18C102930003449A6CD0F80004FFF78CF994
-S31508004C2808BD08B5D0F80004FFF72CFA08BD00003F
-S31508004C3810B50446C3683BB1022B0FD0912108482A
-S31508004C48FCF7A0F8012100E00021D4F80004FFF7DA
-S31508004C5807FAD4F80004FFF7DBF910BD0121F4E7D9
-S31508004C68FC50000810B50446D0F80004FFF7FBF915
-S31508004C782268D2F8003E43F00103C2F8003E236AD0
-S31508004C8823B1044A136943F006031361FCF79CFB36
-S31508004C9810BD00BF00ED00E010B50446FCF795FB13
-S31508004CA8D4F80004FFF7E8F910BD08B5D0F80004F1
-S31508004CB8FFF7F8F908BD08B5D0F80004FFF7F0F9CA
-S31508004CC808BD10B504460120FCF77DFBD4F800049E
-S31508004CD8FFF7EAF910BD10B504460020FCF773FB88
-S31508004CE8D4F80004FFF7E2F910BD000003780BB109
-S31508004CF80020704710B503461748C0F80034C3F8B3
-S31508004D0898024FF0A0430360062343600222C2605C
-S31508004D180023036182610122C26103624362C3629E
-S31508004D280363FDF7E1F880B90B4C80212046FDF7AF
-S31508004D3881FE402200212046FDF758FE80220121E7
-S31508004D482046FDF753FE002010BD40F22511034802
-S31508004D58FCF718F8E8E700BF380A0020FC500008F6
-S31508004D68D0F8983211F0800F08D101F07F01C1EB15
-S31508004D78C1018A00134493F8FE01704701F07F01C8
-S31508004D88C1EBC1018A00134493F83E00704708B581
-S31508004D98D0F89802FDF77FFD08BD18B1022803D0A0
-S31508004DA802207047002070470120704708B5D0F8E0
-S31508004DB89802FDF760F9FFF7F0FF08BD08B5D0F8C7
-S31508004DC89802FDF723F9FFF7E8FF08BD08B5D0F8FC
-S31508004DD89802FDF730F9FFF7E0FF08BD10B51C4645
-S31508004DE813462246D0F89802FDF7AFFCFFF7D5FF21
-S31508004DF810BD08B5D0F89802FDF7E8FCFFF7CDFF17
-S31508004E0808BD08B5D0F89802FDF778FDFFF7C5FF85
-S31508004E1808BD08B5D0F89802FDF7B1FDFFF7BDFF44
-S31508004E2808BD08B5D0F89802FDF77BFCFFF7B5FF73
-S31508004E3808BD08B5D0F89802FDF736FDFFF7ADFFAF
-S31508004E4808BD08B5D0F89802FDF7F7FCFFF7A5FFE7
-S31508004E5808BD000012230B80004870478C0000200C
-S31508004E6804230B8000487047A000002000239342C3
-S31508004E7816D230B40BE0373401F8134000015C0051
-S31508004E88013400250D550133DBB2934206D2040FCF
-S31508004E98092CF0D8303401F81340EFE730BC7047D6
-S31508004EA87047000038B50A4B186804331C68043381
-S31508004EB81B68C01800D138BD064D0822A91CFFF783
-S31508004EC8D5FF042205F112012046FFF7CFFFF2E7C6
-S31508004ED820F4F01FA400002008B51A230B80FFF75A
-S31508004EE8E1FF014808BD00BFA400002008B50A462E
-S31508004EF828B105490548FFF7F0FB034808BD0249EC
-S31508004F080248FFF7EAFBF8E73C0E00203C51000888
-S31508004F1810B5044C0A4621460348FFF7DEFB20462F
-S31508004F2810BD00BF3C0E00202C51000808B50A46E3
-S31508004F3828B105490548FFF7D0FB034808BD0249CB
-S31508004F480248FFF7CAFBF8E73C0E00200C51000898
-S31508004F5808B50A4628B105490548FFF7BEFB0348C0
-S31508004F6808BD02490248FFF7B8FBF8E73C0E0020DF
-S31508004F781451000870B50D4E0D4CA41BA41000253D
-S31508004F88A54209D10B4E0C4C00F018F8A41BA41026
-S31508004F980025A54205D170BD56F825309847013534
-S31508004FA8EEE756F8253098470135F2E750510008DC
-S31508004FB8505100085051000854510008F8B500BF70
-S31508004FC8F8BC08BC9E467047F8B500BFF8BC08BCD4
-S30908004FD89E4670472C
-S31508004FDC2E2E5C2E2E5C2E2E5C2E2E5C536F75722E
-S31508004FEC63655C41524D434D375F53544D333246DE
-S31508004FFC375C63616E2E630005020602060307031F
-S3150800500C0803090309040A040B040C040C050D0512
-S3150800501C0E050F050F06100610071008008000086D
-S3150800502C008000000100000000000108008000005C
-S3150800503C0200000000800108008000000300000048
-S3150800504C000002080000020004000000000004082A
-S3150800505C0000040005000000000008080000040019
-S3150800506C0600000000000C08000004000700000001
-S3150800507C2E2E5C2E2E5C2E2E5C2E2E5C536F75728D
-S3150800508C63655C41524D434D375F53544D3332463D
-S3150800509C375C72733233322E630000002E2E5C2E70
-S315080050AC2E5C2E2E5C2E2E5C536F757263655C41DE
-S315080050BC524D434D375F53544D333246375C7573F7
-S315080050CC622E63004F70656E424C5400000000005F
-S315080050DC000000000102030406070809000000008E
-S315080050EC010203042E2E5C6D61696E2E63000000AE
-S315080050FC2E2E5C757362645F636F6E662E6300009A
-S3150800510C44656661756C740057696E555342204246
-S3150800511C756C6B20496E7465726661636500000078
-S3150800512C4F70656E424C5420557365720000000032
-S3150800513C57696E5553422042756C6B2044657669E7
-S3090800514C6365000089
-S30908005150ED01000857
-S30908005154C901000877
-S3150800515804010000100000000024F400B54B000804
-S315080051689D4B00083D4B00080000000000000000A9
-S31508005178254B00082F4B0008114B000800000000BB
-S315080051880000000000000000F94A000800000000BE
-S31508005198054B000809022000010100C03209040075
-S315080051A80002FF000000070581024000FF0705010D
-S315080051B8024000FF0A060002000000400100000045
-S315080051C85D4E0008694E0008194F0008F54E00089C
-S315080051D8E14E0008354F0008594F00081201000231
-S315080051E800000040501DAC600002010203010000E7
-S315080051F8040309041A030000000000000000000068
-S315080052080000000000000000000000000000000088
-S70508004AA503
+S31508001EF891800446056890F8BD3323B3032384F814
+S31508001F08BD33EB6B13F4807F01D10023236120686E
+S31508001F1801F0C8FA254655F8107B6E460FCD0FC650
+S31508001F280FCD0FC695E8030086E80300231D0ECBE0
+S31508001F38384601F0FDF958B1022384F8BD33012566
+S31508001F4828460BB0F0BD80F8BC33FFF7CCFFD5E7C1
+S31508001F580021206801F0ACFA002315E0D900C81A58
+S31508001F6882002244012082F83D0082F83C30A2F81B
+S31508001F784230002082F83F0050649064CA1A9100E3
+S31508001F88214408650133DBB26568AB42E6D3002312
+S31508001F9815E0D800C11A8A002244002182F8FD11EA
+S31508001FA882F8FC3182F8FF11C2F80412C2F8081246
+S31508001FB8C21A90002044C0F810120133DBB29D42C1
+S31508001FC8E7D8254655F8107B6E460FCD0FC60FCDB8
+S31508001FD80FC695E8030086E80300231D0ECB38468E
+S31508001FE801F0ACFA054660B9002384F838300123B5
+S31508001FF884F8BD33636A012B08D0206801F093FE84
+S315080020089EE7022384F8BD33012599E7204600F0A8
+S3150800201819FDF2E7012593E7704790F8BC33012BC1
+S3150800202801D10220704710B50446012380F8BC3355
+S31508002038006801F06CFE206801F02EFA002084F88A
+S31508002048BC0310BD38B590F8BC33012B02D1022564
+S31508002058284638BD0446012380F8BC33006801F0D9
+S3150800206821FA206801F01FFE054620B1002384F8EE
+S31508002078BC330125ECE7206801F055FE002384F8F7
+S31508002088BC33E5E768B110B50446032380F8BD33C9
+S31508002098FFF7D8FF2046FFF7BFFF002084F8BD03E7
+S315080020A810BD01207047000070B504460D4600684B
+S315080020B8066C00EB411303F5306399682269012A17
+S315080020C811D0374A964254D03DB9C5EBC50293009C
+S315080020D82344D3F81032002B5CD0E9B2204602F02C
+S315080020E803FE002070BD11F0080F09D02D4A96424C
+S315080020F8F7D911F4004FF4D04FF400429A60F0E78C
+S3150800210811F0200F28D111F0280FEAD1254A964256
+S3150800211802D911F4004F22D1E900491B8A0022444A
+S31508002128D2F804121B69C3F31203C91AC2F81412A7
+S31508002138D2F80412D2F808320B44C2F8083235B974
+S31508002148C5EBC50293002344D3F810325BB1E9B254
+S31508002158204602F0C9FDC4E720229A60C1E74FF479
+S3150800216800429A60BDE704F57172012101F02CFE60
+S31508002178EDE711F4004F09D111F0200F01D0202204
+S315080021889A60E9B2204602F0AFFDAAE74FF400428A
+S315080021989A60A6E704F57172002101F015FE9CE71E
+S315080021A80A31544F0A30544F38B5044603681D6C33
+S315080021B803EB4111D1F8082B0E4B9D4207D901F5BF
+S315080021C8306112F4004F02D04FF400438B6020466A
+S315080021D802F082FD074B9D4202D92369012B01D0E3
+S315080021E8002038BD04F571720121206801F0ECFD64
+S315080021F8F6E700BF0A30544F2DE9F84F044605683C
+S31508002208284601F0CCFD08B1BDE8F88F2F460646EA
+S31508002218206801F094FD0028F6D0206801F08FFDAB
+S3150800222810F0020F04D02268536903F002035361C1
+S31508002238206801F084FD10F0100F15D02268936904
+S3150800224823F010039361D5F8208008F00F09C8F326
+S315080022584343022B00F08580062B00F0A5802268F0
+S31508002268936943F010039361206801F068FD10F440
+S31508002278002F40F0AD80206801F061FD10F4802F32
+S3150800228840F0F180206801F05AFD0028C0F25F810D
+S31508002298206801F054FD10F4006F0AD0D5F8083804
+S315080022A813F0010F40F06D812268536903F4006347
+S315080022B85361206801F043FD10F0006F15D02268BD
+S315080022C8536903F00063536194F8F433002B40F024
+S315080022D85C81012184F8F41323685B6DC3F38303D7
+S315080022E8C4F8F833204600F0C1FB206801F027FD42
+S315080022F810F4805F40F04D81206801F020FD10F44D
+S31508002308005F40F0AB81206801F019FD10F0080F56
+S3150800231840F0BC81206801F012FD10F4801F40F0DF
+S31508002328BE81206801F00BFD10F4001F40F0C18142
+S31508002338206801F004FD10F0804F40F0C481206841
+S3150800234801F0FDFC10F0040F3FF45EAF23685D68EA
+S3150800235815F0040F40F0C08123685A6815435D607C
+S3150800236852E747F6F07318EA030F3FF478AF4FEAD7
+S31508002378C90BABEB09034FEA830AA2444FEA1818BC
+S31508002388C8F30A02DAF80812284601F01DFCC8F351
+S315080023980A08DAF808324344CAF80832DAF814326E
+S315080023A84344CAF814325AE7082204F571712846D4
+S315080023B801F00AFCC8F30A184FEAC903A3EB090196
+S315080023C88A002244D2F814324344C2F8143246E743
+S315080023D8206801F0B8FC8046B14617E007EB4913B8
+S315080023E80122C3F8082B49462046FFF75DFE1DE083
+S315080023F807EB49130822C3F8082B49462046FFF776
+S31508002408D3FE16E009F101094FEA5808B8F1000F9A
+S315080024183FF431AF18F0010FF4D05FFA89F120685C
+S3150800242801F0A1FC824610F0010FD7D11AF0080F67
+S31508002438DED11AF0100F04D007EB49131022C3F89F
+S31508002448082B1AF0200F04D007EB49132022C3F8EB
+S31508002458082B1AF4005FD5D007EB49134FF400523E
+S31508002468C3F8082BCEE7206801F075FC8046B1460C
+S315080024782AE05946204602F043FC1AF0080F04D011
+S3150800248807EB49130822C3F808291AF0100F04D0D5
+S3150800249807EB49131022C3F808291AF0400F04D08D
+S315080024A807EB49134022C3F808291AF0020F04D08B
+S315080024B807EB49130222C3F808291AF0800F41D1FD
+S315080024C809F101094FEA5808B8F1000F3FF4DAAEE6
+S315080024D818F0010FF4D05FFA89FB5946206801F015
+S315080024E84BFC824610F0010FC7D009F00F030121F3
+S315080024F801FA03F2D7F8343823EA0203C7F834385E
+S3150800250807EB4913C3F8081923698B42B1D14FEA77
+S31508002518C902A2EB090293002344596C9A6C0A442F
+S315080025289A64B9F1000FA4D1C9EBC90293002344F0
+S315080025381B6D002B9DD104F571720121206801F0ED
+S3150800254843FC96E749462046FFF764FCB8E7D5F802
+S31508002558043823F00103C5F8043894F8F433012B3A
+S3150800256808D0204602F012FC2268536903F000439B
+S3150800257853618DE6002184F8F413204600F076FAB4
+S31508002588F2E7204602F0E8FB8EE6204602F0E4FB76
+S31508002598ABE605F50068D8F8043023F00103C8F857
+S315080025A804301021206800F09BFF20E007EB461353
+S315080025B84FF67F31C3F80819D3F8002922F4001218
+S315080025C8C3F80029D3F8002942F00062C3F80029A5
+S315080025D8C3F8081BD3F8002B22F40012C3F8002B03
+S315080025E8D3F8002B42F00062C3F8002B0136636863
+S315080025F89E42DBD3D8F81C3043F00113C8F81C30C8
+S31508002608236BEBB1D8F8843043F00B03C8F8843051
+S31508002618D8F8443043F00B03C8F84430D5F80038E6
+S3150800262823F4FE63C5F8003804F57172217C206826
+S3150800263801F0CAFB2268536903F4805353615BE6C9
+S31508002648D8F8142042F22B031343C8F81430D8F8E4
+S31508002658103043F00B03C8F81030DFE7206801F0A4
+S31508002668A3FB206801F03EF8E060256800F000FA50
+S31508002678227B0146284600F099FE204602F052FBC6
+S315080026882268536903F4005353613CE6204602F076
+S3150800269842FB2268536903F0080353613AE60021AE
+S315080026A8204602F082FB2268536903F480135361BB
+S315080026B837E60021204602F072FB2268536903F4C4
+S315080026C80013536134E6204602F075FB2268536905
+S315080026D803F08043536132E6204602F076FB3BE678
+S315080026E890F8BC33012B01D10220704710B5044677
+S315080026F8012380F8BC33006801F009FB002084F840
+S31508002708BC0310BD90F8BC33012B01D102207047D9
+S3150800271810B50446012380F8BC33006801F003FBB2
+S31508002728002084F8BC0310BD90F8BC33012B01D1F6
+S315080027380220704710B50446012380F8BC3380F898
+S315080027483810006801F0D3FA002084F8BC0310BDDD
+S31508002758F8B511F0800F1ED101F00F06F500AF1B72
+S31508002768BC00274604F5FC74044404343E46064473
+S31508002778002586F8FD5101F00F012170A260E3706B
+S31508002788627802B1E180022B14D090F8BC33012B91
+S3150800279813D10220F8BD01F00F06F500AF1BBC00E7
+S315080027A827463834044404343E460644012586F848
+S315080027B83D50E0E700232371E7E70546012380F843
+S315080027C8BC332146006800F09DFF002085F8BC034D
+S315080027D8F8BD38B511F0800F17D101F00F04E200E3
+S315080027E8151BAB001D4603F5FC73034404332C463E
+S315080027F80444002284F8FD2101F00F01197090F8AD
+S31508002808BC23012A10D1022038BD01F00F04E200CA
+S31508002818151BAB001D463833034404332C460444C1
+S31508002828012284F83D20E7E70446012280F8BC2304
+S315080028381946006800F0AEFF002084F8BC0338BDCE
+S3150800284870B501F00F05EE00711B8C0004F5FC74D9
+S315080028580444211D761BB4000444C4F80822C4F8AD
+S3150800286810320023C4F8143284F8FD3184F8FC5178
+S315080028780369012B06D065B1DAB2006801F098F849
+S31508002888002070BDC5EBC506B4000444C4F80C2284
+S31508002898F1E7DAB2006800F0EBFFF1E701F00F01A3
+S315080028A8C1EBC1018B001844D0F81402704770B503
+S315080028B801F00F05EE00711B8C0038340444211D05
+S315080028C8761BB4000444A2642365002363650123C8
+S315080028D884F83D3084F83C500369012B06D05DB175
+S315080028E8DAB2006801F064F8002070BDC5EBC506C9
+S315080028F8B4000444E264F2E7DAB2006800F0B8FF0C
+S31508002908F2E738B501F00F0543689D4238D811F04B
+S31508002918800F15D1CA00541AA3001C4603F5FC7388
+S315080029280344043322460244002182F8FD11012299
+S315080029389A701D7090F8BC23012A0DD1022038BD63
+S31508002948EA00511B8B001946383303440433014403
+S31508002958012281F83D20EAE70446012280F8BC23D3
+S315080029681946006801F044F91DB1002084F8BC0333
+S3150800297838BD04F57172217C206801F025FAF4E760
+S31508002988012038BD01F00F03426893422FD810B5CD
+S3150800299811F0800F14D1DA00D41AA1000C4601F5FB
+S315080029A8FC71014404310444002284F8FD21002204
+S315080029B88A700B7090F8BC33012B0DD1022010BD1C
+S315080029C8DA00D41AA1000C4638310144043104440B
+S315080029D8012284F83D20EAE70446012380F8BC333F
+S315080029E8006801F032F9002084F8BC0310BD012004
+S315080029F8704730B40468606A29B10D46A36A00EBCB
+S31508002A08134000230CE040EA0240A06212E003F1FA
+S31508002A18400104EB8101496800EB11400133DBB240
+S31508002A28691E8B42F3D340EA024005F13F0104EBE5
+S31508002A3881014860002030BC70470368596200204D
+S31508002A4870470000024603680121C0F8FC130020FD
+S31508002A5882F8F4039A6942F000629A61596D024A4B
+S31508002A680A435A65704700BF030000107047000004
+S31508002A78014B1868704700BF08000020534B98425E
+S31508002A881FD0534B984228D0524B984231D0524BBC
+S31508002A9898423AD0514B984243D0514B98424CD021
+S31508002AA8504B984255D0504B98425ED04F4B98425F
+S31508002AB867D04F4B984270D04E4B984279D0012038
+S31508002AC8704703F560531A6942F001021A611A69D8
+S31508002AD822F001021A610020704703F550531A695B
+S31508002AE842F002021A611A6922F002021A610020EB
+S31508002AF8704703F540531A6942F004021A611A69C5
+S31508002B0822F004021A610020704703F530531A6947
+S31508002B1842F008021A611A6922F008021A610020AE
+S31508002B28704703F520531A6942F010021A611A69A8
+S31508002B3822F010021A610020704703F510531A692B
+S31508002B4842F020021A611A6922F020021A6100204E
+S31508002B58704703F500531A6942F040021A611A6968
+S31508002B6822F040021A610020704703F5E0531A69FB
+S31508002B7842F080021A611A6922F080021A6100205E
+S31508002B88704703F5C0531A6942F480721A611A69C4
+S31508002B9822F480721A610020704703F5A0531A6957
+S31508002BA842F400721A611A6922F400721A61002046
+S31508002BB8704703F580531A6942F480621A611A69E4
+S31508002BC822F480621A610020704700BF00000240A4
+S31508002BD80004024000080240000C024000100240AF
+S31508002BE80014024000180240001C0240002002405F
+S31508002BF80024024000280240F0B50C6894FAA4F4B0
+S31508002C08B4FA84F44BE08E68826893FAA3F5B5FAA9
+S31508002C1885F56D00032707FA05F522EA050293FAF2
+S31508002C28A3F5B5FA85F56D0006FA05F52A43826017
+S31508002C380E68CD68426822EA060205FB06F52A43AD
+S31508002C48426038E04D69466A1A0A92FAA2F7B7FA54
+S31508002C5887F7BF004FF00F0E0EFA07F726EA0706A2
+S31508002C6892FAA2F2B2FA82F2920005FA02F2324314
+S31508002C7842624D68026893FAA3F6B6FA86F67600B3
+S31508002C88032707FA06F622EA060293FAA3F3B3FA23
+S31508002C9883F35B0005FA03F31343036001340B68F7
+S31508002CA833FA04F23BD00122A2401340F6D04A6810
+S31508002CB8013A012AA7D90E69C26893FAA3F5B5FAA3
+S31508002CC885F56D00032707FA05F522EA050293FA42
+S31508002CD8A3F5B5FA85F56D0006FA05F52A43C26027
+S31508002CE84A68022AC5D193FAA3F2B2FA82F2072AE7
+S31508002CF8A8D84E69026A93FAA3F5B5FA85F5AD0020
+S31508002D080F2707FA05F522EA050293FAA3F5B5FA95
+S31508002D1885F5AD0006FA05F52A430262A9E70020FB
+S31508002D28F0BD000082B0224A136843F0010313601D
+S31508002D381F4B1B6813F0020FFAD01D4B00229A602E
+S31508002D481A68019201991B4A0A400192019A1A6067
+S31508002D581A6822F0F80242F080021A60144B1B68BF
+S31508002D6813F0007FFAD1124B1B6813F0006FFAD1E3
+S31508002D780F4B1B6813F0005FFAD10D4B0E4A5A60C9
+S31508002D88103AC3F88420C3F88820DA6822F4FE4289
+S31508002D98DA60DA6842F47F02DA605A6F22F00102D2
+S31508002DA85A675A6F42F080725A67002002B0704715
+S31508002DB800380240FFFFF2EA10300024034B9B68F4
+S31508002DC8C3F30313024AD35CD8407047003802405D
+S31508002DD8CC510008034B9B68C3F38223024AD35C91
+S31508002DE8D840704700380240DC510008034B9B68FE
+S31508002DF8C3F34233024AD35CD840704700380240CE
+S31508002E08DC5100080D4B5B6803F480030BB90C48CA
+S31508002E1800E00C48094A536803F03F03B0FBF3F394
+S31508002E285068C0F3881000FB03F05368C3F30143E6
+S31508002E3801335B00B0FBF3F0704700BF003802406F
+S31508002E480024F40000127A0008B5074B9B6803F0C3
+S31508002E580C03042B06D0082B01D0044808BDFFF73D
+S31508002E68D1FF08BD024808BD003802400024F40016
+S31508002E7800127A0010B50446FFF7E6FF2060FFF750
+S31508002E889DFF6060FFF7A6FFA0606068FFF7AEFFCA
+S31508002E98E06010BD08B5032809D00C2833D0B0F572
+S31508002EA8406F5CD0302800F08780002008BD584B5A
+S31508002EB8D3F89030034043EA0040564B98420FD067
+S31508002EC8B0F1031F15D0013B984206D0FFF7BCFFA7
+S31508002ED8FFF774FFFFF78AFF08BDFFF7B5FF08BDC0
+S31508002EE84B4B1B6813F0020F01D04B4808BD002056
+S31508002EF808BD474B1B6F13F0020F02D04FF4004072
+S31508002F0808BD002008BD424BD3F89030034043EA79
+S31508002F180040424B98420FD0B0F10C1F15D0043B25
+S31508002F28984206D0FFF790FFFFF748FFFFF752FFD2
+S31508002F3808BDFFF789FF08BD354B1B6813F0020F5C
+S31508002F4801D0354808BD002008BD314B1B6F13F06A
+S31508002F58020F02D04FF4004008BD002008BD2C4BD4
+S31508002F68D3F89030034043EA00402D4B984210D0DE
+S31508002F78B0F10C2F16D0A3F58063984206D0FFF758
+S31508002F8863FFFFF71BFFFFF731FF08BDFFF75CFF7D
+S31508002F9808BD1F4B1B6813F0020F01D01E4808BD59
+S31508002FA8002008BD1A4B1B6F13F0020F02D04FF40E
+S31508002FB8004008BD002008BD154BD3F890300340E3
+S31508002FC843EA0040174B98420FD0B0F1301F15D08E
+S31508002FD8103B984206D0FFF737FFFFF7EFFEFFF7DB
+S31508002FE8F9FE08BDFFF730FF08BD094B1B6813F04B
+S31508002FF8020F01D0084808BD002008BD044B1B6F06
+S3150800300813F0020F02D04FF4004008BD002008BD97
+S3150800301800380240020003000024F40008000C00EF
+S315080030280008000C2000300008B5C0280BD0B0F501
+S31508003038407F34D0B0F5405F5ED0B0F5404F00F021
+S315080030488880002008BD594BD3F89030034043EADE
+S315080030580040574B98420FD0B0F1C01F15D0403BDF
+S31508003068984206D0FFF7F0FEFFF7A8FEFFF7B2FE74
+S3150800307808BDFFF7E9FE08BD4C4B1B6813F0020FA5
+S3150800308801D04C4808BD002008BD484B1B6F13F0FB
+S31508003098020F02D04FF4004008BD002008BD434B7C
+S315080030A8D3F89030034043EA0040434B984210D087
+S315080030B8B0F1032F16D0A3F58073984206D0FFF710
+S315080030C8C3FEFFF77BFEFFF785FE08BDFFF7BCFECC
+S315080030D808BD364B1B6813F0020F01D0354808BDEA
+S315080030E8002008BD314B1B6F13F0020F02D04FF4B6
+S315080030F8004008BD002008BD2C4BD3F8903003408B
+S3150800310843EA00402D4B984210D0B0F1302F16D024
+S31508003118A3F58053984206D0FFF796FEFFF74EFEB2
+S31508003128FFF758FE08BDFFF78FFE08BD1F4B1B6843
+S3150800313813F0020F01D01F4808BD002008BD1B4B1D
+S315080031481B6F13F0020F02D04FF4004008BD002091
+S3150800315808BD164BD3F89030034043EA0040184B95
+S31508003168984210D0B0F1C02F16D0A3F580439842E4
+S3150800317806D0FFF769FEFFF721FEFFF72BFE08BD0D
+S31508003188FFF762FE08BD094B1B6813F0020F01D052
+S31508003198084808BD002008BD044B1B6F13F0020F32
+S315080031A802D04FF4004008BD002008BD0038024090
+S315080031B88000C0000024F40000020003002000304C
+S315080031C8008000C038B5036813F0010F46D0012304
+S315080031D8002B77D10D46044603683D4A1A404B68CA
+S315080031E8C9680B4329690B43A9690B431343036051
+S315080031F8AB68426822F44052134343606B6982689D
+S3150800320822F4407213438360324B984228D0324BDB
+S31508003218984229D0314B98422AD0314B98422BD024
+S31508003228304B98422CD0304B98422ED02F4B984290
+S3150800323830D02F4B984232D00020002844D02B6833
+S31508003248002B43D0AA69B2F5004F2DD000EB5300E6
+S31508003258B0FBF3F080B2E060002038BD0023B7E782
+S315080032680320FFF717FEE8E70C20FFF713FEE4E74D
+S315080032783020FFF70FFEE0E7C020FFF7D5FEDCE7B2
+S315080032884FF44070FFF7D0FED7E74FF44060FFF7DA
+S3150800329801FED2E74FF44050FFF7C6FECDE74FF4DC
+S315080032A84040FFF7C1FEC8E75A0802EB4000B0FBEA
+S315080032B8F3F04FF6F0730340C0F342001843E0609A
+S315080032C8002038BD012038BD012038BD012038BD91
+S315080032D8F369FFEF00100140004400400048004031
+S315080032E8004C00400050004000140140007800409F
+S315080032F8007C0040002301330C4A934211D8026926
+S31508003308002AF8DA036943F001030361002301334D
+S31508003318064A934207D8026912F0010FF7D100202E
+S315080033287047032070470320704700BF400D03000D
+S3150800333884B010B5044603A880E80E00089B012B44
+S3150800334811D0E36843F04003E3602046FFF7D2FF55
+S31508003358A36B43F48033A363069B012B1BD0BDE8FC
+S31508003368104004B07047A36B23F48033A363E26864
+S315080033780D4B1340E360E36823F44013E3600F9BA7
+S31508003388012B03D02046FFF7B5FFE5E7E36843F4CA
+S315080033988013E360F6E7A36843F00603A360A3680F
+S315080033A843F02003A360DAE7BFFFBDFF022A0AD06D
+S315080033B80921C26822F47052C260C36843EA8123AD
+S315080033C8C36000207047274B0B44274A934239D9D4
+S315080033D8264B0B44264A934236D9264B0B44264A93
+S315080033E8934233D9254B0B4402F5C332A032934294
+S315080033F82ED9234B0B44234A93422BD9224B0B44F1
+S3150800340802F5922202F57872934225D91F4B0B448E
+S3150800341802F5C32202F5207293421FD91C4B0B44AE
+S3150800342802F5B71202F55872934219D9194B0B448B
+S3150800343802F5122202F5F862934201D90621B8E785
+S315080034480721B6E70F21B4E70E21B2E70D21B0E749
+S315080034580C21AEE70B21ACE70A21AAE70921A8E760
+S315080034680821A6E7405327FFFF340C00401E1BFF20
+S315080034783F420F0000DC0BFF7F4F1200808CF9FEDD
+S3150800348860B6E5FE5FE3160000D3CEFEC05BB3FE6A
+S3150800349800CA91FEE05459FE836843F0010383602D
+S315080034A800207047836823F0010383600020704773
+S315080034B808B5C36823F0C043C360012909D069B9B0
+S315080034C8C36843F08043C3603220FDF7FDFF002040
+S315080034D808BDC36843F00053C360F5E7012008BD7B
+S315080034E8890141F02001016100230133054A93420D
+S315080034F805D8026912F0200FF7D10020704703207B
+S31508003508704700BF400D03001023036100230133F1
+S31508003518054A934205D8026912F0100FF7D1002020
+S3150800352870470320704700BF400D0300D0F80038E5
+S315080035381943C0F8001800207047000084B02DE928
+S31508003548F041044607A880E80E002546002306E051
+S3150800355803F1400204EB82020021516001330E2B6D
+S31508003568F6D9119B002B36D1D4F8043843F0020358
+S31508003578C4F80438A36B23F40013A363236843F041
+S3150800358840032360236843F0800323600023C4F8BC
+S31508003598003E04F50066D4F80038C4F800380C9BD9
+S315080035A8012B1DD0032B27D003212046FFF7BEFF8A
+S315080035B810212046FFF794FF804608B14FF001080E
+S315080035C82046FFF7A1FF08B14FF001080023336131
+S315080035D87361F36127E0A36B43F40013A363D5E78C
+S315080035E8099B23B900212046FFF7A0FFE0E7012140
+S315080035F82046FFF79BFFDBE7099B23B900212046F6
+S31508003608FFF794FFD4E701212046FFF78FFFCFE79E
+S31508003618C3B94FF00060C2F8000900220A614FF6E4
+S315080036287F328A60013307998B4210D205EB431221
+S3150800363802F51061D2F800090028E9DB0020C2F873
+S315080036480009EAE74FF09040C2F80009E5E70023C9
+S315080036580AE0BBB14FF09047C2F8007B002202612E
+S315080036684FF67F32826001338B4210D205EB431244
+S3150800367802F53060D2F8007B002FEADB0027C2F893
+S31508003688007BEBE74FF00067C2F8007BE6E7336993
+S3150800369823F4807333610023A3616FF08043636169
+S315080036A80A9B1BB9A36943F01003A361A2690B4BD4
+S315080036B81343A3610D9B1BB1A36943F00803A361D8
+S315080036C8119B012B04D04046BDE8F04104B0704771
+S315080036D8A269034B1343A361F5E700BF00383C8092
+S315080036E804000040D0F8083813F0060305D0062B66
+S315080036F818BF022B03D102207047002070470F20FD
+S315080037087047000070B40B784A78012A20D0D0F8A0
+S315080037181C2803F00F060124B44042EA0442C0F804
+S315080037281C2800EB4310D0F8003B13F4004F0CD1CB
+S31508003738D0F8002B8B68C3F30A03C97843EA814398
+S315080037481343134A1A43C0F8002B002070BC70476D
+S31508003758D0F81C4803F00F06B24092B22243C0F8CC
+S315080037681C2800EB4310D0F8002912F4004FECD1BE
+S31508003778D0F800498A68C2F30A02C97842EA81423F
+S3150800378842EA83532343024A1A43C0F80029DCE76E
+S315080037980080001030B40B784A78012A24D000EB50
+S315080037A84313D3F8002B002A50DBD0F83C580A7884
+S315080037B802F00F02012404FA02F225EA0242C0F8CE
+S315080037C83C28D0F81C28097801F00F018C4022EA19
+S315080037D80444C0F81C48D3F8001B234A0A40C3F817
+S315080037E8002B002030BC704700EB4313D3F80029A0
+S315080037F8002A1EDBD0F83C580A7802F00F0201248A
+S3150800380804FA02F292B225EA0202C0F83C28D0F875
+S315080038181C28097801F00F018C40A4B222EA040496
+S31508003828C0F81C48D3F80019104A0A40C3F80029FA
+S31508003838D7E7D3F8002942F00062C3F80029D3F87D
+S31508003848002942F08042C3F80029D3E7D3F8002BB1
+S3150800385842F00062C3F8002BD3F8002B42F08042EE
+S31508003868C3F8002BA1E700BF0078F3EF007833EC24
+S3150800387870B40B784C78012C24D000EB431000F573
+S3150800388830631D693E4C2C401C611D693D4C2C401B
+S315080038981C614C690CB18C684C611C6944F40024A1
+S315080038A81C611C698D68C5F312052C431C61012A25
+S315080038B861D0D0F8003B43F00443C0F8003B002031
+S315080038C870BC70474C695CBB00EB4314D4F81069AC
+S315080038D82C4D3540C4F81059D4F8105945F400252C
+S315080038E8C4F81059D4F81069254D3540C4F810594C
+S315080038F8012A31D000EB4313D3F8002942F00442D9
+S31508003908C3F800294B69002BD9D0D0F83428097890
+S3150800391801F00F040121A1400A43C0F83428CEE774
+S3150800392800EB431404F510642669154D35402561E6
+S315080039382669144D354025614E698D68AE4200D911
+S315080039484D61256945F40025256125694E69C6F343
+S31508003958120635432561CBE70A691AB100EB43110C
+S31508003968C1F8142900EB4310D0F8002942F00442A4
+S31508003978C0F80029A3E7CA68002A9AD05A6198E7C6
+S315080039880000F8FFFFFF07E070B49DF80C4064B923
+S3150800399803339E0807E000EB023303F5805351F81A
+S315080039A8045B1D600134B442F5D3002070BC70472F
+S315080039B8F0B583B00C784B78012B29D000EB44146A
+S315080039C804F530631E697D4D35401D611E697C4DC1
+S315080039D835401D614D69002D40F0C1801D698E680E
+S315080039E8C6F3120635431D611D6945F400251D6198
+S315080039F8012A00F0C980CB78012B00F0CB80D4F8D7
+S31508003A08003B43F00443C4F8003B002003B0F0BD74
+S31508003A184B6973BB00EB4413D3F81069684D3540FE
+S31508003A28C3F81059D3F8105945F40025C3F81059A6
+S31508003A38D3F81069614D3540C3F81059012A4AD0A0
+S31508003A4800EB4414D4F8003943F00443C4F80039A9
+S31508003A58CB78012B68D04B69002BD6D0D0F83438F0
+S31508003A680A7802F00F0101228A401343C0F8343855
+S31508003A78CBE700EB4413D3F81069504D3540C3F82B
+S31508003A881059D3F810694E4D3540C3F81059D3F874
+S31508003A9810694D698F683D44013DB5FBF7F5494FF7
+S31508003AA807EAC5453543C3F81059D3F810594E697E
+S31508003AB8C6F312063543C3F8105903F51063CD78D3
+S31508003AC8012DBBD11D6925F0C0451D611D6945F04D
+S31508003AD800551D61B2E70B691BB100EB4412C2F829
+S31508003AE81439CB78012B08D000EB4414D4F80039E4
+S31508003AF843F00443C4F8003987E7D0F8083813F4C4
+S31508003B08807F08D100EB4412D2F8003943F00053FD
+S31508003B18C2F80039E8E700EB4412D2F8003943F056
+S31508003B288053C2F80039DFE7D0F8083813F4807FE5
+S31508003B380ED1D4F8003943F00053C4F800391446B6
+S31508003B480B46C9681A789B8A0094FFF71DFF5CE73D
+S31508003B58D4F8003943F08053C4F80039EFE78E6883
+S31508003B683544013DB5FBF6F51E69164F07EAC54704
+S31508003B783E431E611F698E68ADB206FB05F5C5F39F
+S31508003B8812053D431D6133E7CA68002A3FF433AF7F
+S31508003B985A6130E7D0F8083813F4807F06D1D4F88C
+S31508003BA8003B43F00053C4F8003B28E7D4F8003B31
+S31508003BB843F08053C4F8003B21E700BF0000F8FF34
+S31508003BC8FFFF07E00000F81F03329208002393421C
+S31508003BD80CD210B400F58054246841F8044B01331C
+S31508003BE89342F7D308465DF8044B70470846704772
+S31508003BF80B784A78012A14D000EB4310D0F8002B2A
+S31508003C08002A06DB2BB1D0F8003B23F08043C0F826
+S31508003C18003BD0F8003B43F40013C0F8003B0020F3
+S31508003C28704700EB4310D0F80029002A06DB2BB1B1
+S31508003C38D0F8003923F08043C0F80039D0F80039A5
+S31508003C4843F40013C0F80039E9E70B784A78012AE3
+S31508003C580ED000EB4310D0F8003B23F40013C0F84D
+S31508003C68003BCB78023BDBB2012B15D90020704705
+S31508003C7800EB4310D0F8003923F40013C0F80039D4
+S31508003C88CB78023BDBB2012BF0D8D0F8003943F0E9
+S31508003C988053C0F80039E9E7D0F8003B43F0805371
+S31508003CA8C0F8003BE2E738B505460446002208E0B6
+S31508003CB804EB42134FF67F31C3F80819C3F8081BFB
+S31508003CC801320E2AF4D90022C5F81028C5F8142896
+S31508003CD8C5F81C282846FFF717FC034608B11846F6
+S31508003CE838BD10212846FFF7FBFB0346F7E7D0F84F
+S31508003CF8003823F4FE63C0F80038D0F80038090104
+S31508003D0801F4FE610B43C0F800380020704708B577
+S31508003D18D0F8043823F00203C0F804380320FDF766
+S31508003D28D3FB002008BD08B5D0F8043843F00203D1
+S31508003D38C0F804380320FDF7C7FB002008BD426910
+S31508003D48806910407047D0F8183800F50060C069D7
+S31508003D581840000C7047D0F8183800F50060C0699C
+S31508003D68184080B2704700EB4111D1F8082B00F5CE
+S31508003D78006040691040704710B4D0F81028D0F891
+S31508003D88343801F00F04E340DB01DBB2134300EBE0
+S31508003D984111D1F8080918405DF8044B7047406985
+S31508003DA800F0010070470000D0F80029054B1340C1
+S31508003DB8C0F80039D0F8043843F48073C0F80438DA
+S31508003DC80020704700F8FFFF10B4046C154B9C429E
+S31508003DD803D9D0F8003B002B16DB0024C0F8104B9B
+S31508003DE8D0F8104B44F40024C0F8104BD0F8104B08
+S31508003DF844F01804C0F8104BD0F8104B44F0C044EF
+S31508003E08C0F8104B012903D000205DF8044B704711
+S31508003E18C0F8142BD0F8003B43F08023C0F8003BC9
+S31508003E28F2E700BF0A30544F014B1860704700BFCD
+S31508003E3808000020C0B108B50346D0F8B80210B18A
+S31508003E480020C3F8B802D3F8CC0210B10020C3F892
+S31508003E58CC0209B1C3F8B4121846012380F89C327B
+S31508003E68027000F0BDFF08BD0320704710B5044670
+S31508003E78012380F89C32D0F8B83213B15B6801790F
+S31508003E889847D4F8CC3213B10023C4F8CC3220466C
+S31508003E9801F016F8034608B1184610BD204600F08A
+S31508003EA8FFFF0346F8E710B582B00023ADF80630E1
+S31508003EB859B10446C4F8B812CB6A0DF106009847FA
+S31508003EC8C4F8CC02002002B010BD0320FBE708B5F1
+S31508003ED800F0EEFF08BD08B5D0F8B83213B11B6874
+S31508003EE8984708BD032008BD08B5D0F8B8320BB105
+S31508003EF85B689847002008BD38B5044600F2AA252D
+S31508003F08284600F02FF90123C4F89432B4F8B032E1
+S31508003F18C4F8983294F8AA1201F01F03012B0DD0A1
+S31508003F283BB1022B0FD001F08001204600F0E3FFD9
+S31508003F3838BD2946204600F0F0FA38BD29462046FD
+S31508003F4800F026FB38BD2946204600F055FB38BD4B
+S31508003F5810B5044631BB1346D0F89422032A01D07B
+S31508003F68002010BDD0F85C11D0F8602191420CD819
+S31508003F78D0F8B8321B691BB190F89C22032A0FD0D7
+S31508003F88204600F076FC002010BD891AC0F85C119E
+S31508003F988A4228BF0A46194600F063FC002010BD6D
+S31508003FA89847EDE70A46D0F8B8329B6943B190F8C6
+S31508003FB89C12032901D0032010BD1146984710BD4D
+S31508003FC8032010BD10B50446002947D11346D0F87A
+S31508003FD89422022A05D094F8A032012B3AD0002060
+S31508003FE810BDC269016A8A4211D88A421BD0D4F820
+S31508003FF8B832DB681BB194F89C22032A27D08021A3
+S31508004008204600F078FF204600F03EFCE3E7521A07
+S31508004018C261194600F01DFC00231A4619462046B7
+S3150800402800F089FFD7E783699942E0D8D0F8982243
+S315080040389342DCD20022114600F00BFC0021C4F89A
+S3150800404898120B460A46204600F075FFC3E7204635
+S315080040589847D4E7002084F8A00210BD0A46D0F88D
+S31508004068B8325B6943B190F89C12032901D0032042
+S3150800407810BD1146984710BD032010BD70B50446FB
+S31508004088012380F89C320023C0F894324360C0F8B4
+S31508004098A432D0F8BC3223B1D0F8B8325B68002114
+S315080040A89847402300221146204600F011FF0126B2
+S315080040B8A4F864614025C4F860512B460022802183
+S315080040C8204600F005FFA6842562002070BD01740D
+S315080040D80020704790F89C3280F89D32042380F8B7
+S315080040E89C320020704790F89C32042B01D000209F
+S315080040F8704790F89D3280F89C32F8E708B590F832
+S315080041089C32032B01D0002008BDD0F8B832DB69F1
+S31508004118002BF8D09847F6E700207047002070472C
+S315080041280020704708B5012380F89C32D0F8B832C9
+S3150800413813B15B6801799847002008BD002302E09F
+S315080041480133DBB201300278002AF9D118467047E4
+S3150800415808B54B88012B00D008BDC0F8A43200F07A
+S3150800416888FBF9E70B7803704B7843708B78CA7825
+S3150800417843EA022343800B794A7943EA0223838078
+S315080041888B79CA7943EA0223C380704710B5044677
+S31508004198802100F0B0FE0021204600F0ACFE10BDDC
+S315080041A830B583B004460D460023ADF806304A8874
+S315080041B8130A013B062B00F2C980DFE803F0042145
+S315080041C837C7C7A5B500D0F8B4321B680DF1060184
+S315080041D8007C984700238BB9EA88002A00F0C1803A
+S315080041E8BDF80630002B00F0B7809A4228BF1A4659
+S315080041F8ADF806200146204600F01EFB03B030BD88
+S31508004208037C4BB9D0F8B8329B6A0DF1060098477B
+S31508004218022343700023DEE7D0F8B832DB6A0DF1D3
+S3150800422806009847022343700023D4E7D2B2052A2A
+S3150800423864D8DFE802F0031323334353D0F8B432C3
+S315080042485B682BB10DF10601007C98470023C2E78D
+S315080042582946FFF79BFF01230020BCE7D0F8B432B4
+S315080042689B682BB10DF10601007C98470023B2E73D
+S315080042782946FFF78BFF01230020ACE7D0F8B432B4
+S31508004288DB682BB10DF10601007C98470023A2E7ED
+S315080042982946FFF77BFF012300209CE7D0F8B432B4
+S315080042A81B692BB10DF10601007C9847002392E79C
+S315080042B82946FFF76BFF012300208CE7D0F8B432B4
+S315080042C85B692BB10DF10601007C9847002382E74C
+S315080042D82946FFF75BFF012300207CE7D0F8B432B4
+S315080042E89B692BB10DF10601007C9847002372E7FC
+S315080042F82946FFF74BFF012300206CE72946FFF7FD
+S3150800430845FF0123002066E7037C3BB9D0F8B8329D
+S315080043185B6B0DF10600984700235CE72946FFF713
+S3150800432835FF0123002056E7037C4BB9D0F8B8328D
+S315080043381B6B0DF1060098470723437000234AE7CD
+S315080043482946FFF723FF0123002044E72946FFF7FC
+S315080043581DFF012300203EE729462046FFF716FFE2
+S315080043684CE7204600F085FA48E738B504468B88B6
+S31508004378F3B9CB88E3B94B887F2B19D803F07F05A7
+S3150800438890F89C32032B0CD080F89E52294600F0F0
+S31508004398C2FD204600F06DFA35B1022384F89C3236
+S315080043A838BDFFF7F3FE38BD012384F89C3238BDC3
+S315080043B82046FFF7EBFE38BD70B504460D468978EA
+S315080043C82E4B1970012905D92946FFF7DFFE032662
+S315080043D8304670BD90F89C32022B0BD0032B1FD0A9
+S315080043E82946FFF7D3FE254B19782046FFF77CFDAB
+S315080043F80326EDE781B14160FFF76DFD064620B15A
+S3150800440829462046FFF7C2FEE2E7204600F031FAC1
+S31508004418032384F89C32DBE700F02BFA0026D7E75B
+S31508004428C9B14368994225D0D9B2FFF75DFD134B48
+S31508004438197861602046FFF74EFD0646B0B1294651
+S315080044482046FFF7A3FE21792046FFF74DFD0223F4
+S3150800445884F89C32BCE7022380F89C324160FFF757
+S3150800446843FD204600F005FA0026B1E7204600F08D
+S3150800447800FAADE700F0FDF90026A9E7080A0020CA
+S3150800448808B5CB88012B0BD190F89C329BB1022B2F
+S3150800449809D9032B0FD10122011D00F0CDF908BD5A
+S315080044A8FFF774FE08BD0146002341F8083F0122BC
+S315080044B800F0C2F908BDFFF769FE08BD08B590F80F
+S315080044C89C32013B022B12D8CB88022B0CD1012334
+S315080044D8C360D0F8A4320BB10323C360022200F1EB
+S315080044E80C0100F0A9F908BDFFF750FE08BDFFF753
+S315080044F84DFE08BD08B590F89C32013B022B09D839
+S315080045084B88012B00D008BD0023C0F8A43200F060
+S31508004518B0F908BDFFF73AFEF5E708B50B7803F0DA
+S315080045286003202B06D0402B04D043B1FFF72EFE9C
+S31508004538002008BDD0F8B8329B68984708BD4B7864
+S31508004548092B21D8DFE803F0141C201820090520B8
+S31508004558100DFFF725FE002008BDFFF706FF00200F
+S3150800456808BDFFF729FF08BDFFF78AFF002008BD29
+S31508004578FFF7A4FF002008BDFFF7EAFD002008BDE5
+S31508004588FFF7B8FF002008BDFFF700FE002008BDAA
+S3150800459870B505460C460B7803F06003202B06D049
+S315080045A8402B04D01BB1FFF7F1FD00260CE095F867
+S315080045B89C32013B022B19D82379012B06D92146AF
+S315080045C82846FFF7E3FD0026304670BDD5F8B83211
+S315080045D89B682146284698470646E388002BF3D168
+S315080045E80028F1D1284600F044F9EDE72146284687
+S315080045F8FFF7CCFD0026E7E738B505460C468A8856
+S315080046080B7803F06003202B08D0D1B2402B05D0D5
+S315080046185BB12146FFF7BAFD002038BDD5F8B83298
+S315080046289B6821462846984738BD6378012B30D0C1
+S31508004638002B5FD0032B40F0DC8090F89C32022BCD
+S3150800464806D0032B15D02146FFF7A0FD002038BD5C
+S31508004658002918BF802907D000F04DFC802128467C
+S3150800466800F049FC002038BD2146FFF78FFD0020E1
+S3150800467838BD63882BB9002918BF802901D0E3887B
+S3150800468823B1284600F0F5F8002038BD00F033FCC1
+S31508004698F7E790F89C32022B06D0032B15D0214653
+S315080046A8FFF774FD002038BD002918BF802907D0F8
+S315080046B800F021FC8021284600F01DFC002038BDAA
+S315080046C82146FFF763FD002038BD6388002B40F0BC
+S315080046D8958011F07F0F0AD1284600F0CAF8D5F858
+S315080046E8B8329B68214628469847002038BD00F00E
+S315080046F80AFCF1E790F89C32022B06D0032B2BD044
+S315080047082146FFF743FD002038BD002918BF802938
+S3150800471813D112F0800F15D101F07F0101EB810149
+S315080047288B0003F5A8710144043100240C600222A9
+S31508004738284600F081F8204638BD2146FFF726FDB1
+S31508004748002038BD01F07F0101EB81018B0003F1E0
+S31508004758100101440431E8E752B2002A20DB01F0CF
+S315080047680F0303EB830398002844B0F8643133B386
+S31508004778002A2ADB01F07F0202EB8202930003F586
+S31508004788A8742C440434802918BF002927D100238B
+S31508004798236002222146284600F04EF8002038BD3C
+S315080047A801F00F0303EB830398002844838C002B3E
+S315080047B8DED121462846FFF7E9FC002038BD214608
+S315080047C82846FFF7E3FC002038BD01F07F0202EB1C
+S315080047D88202930003F110042C440434D3E72846D4
+S315080047E800F038FB10B101232360D2E700232360C9
+S315080047F8CFE72146FFF7CAFC002038BD002038BDA0
+S31508004808C8B170B50D4616460446FFF797FC013041
+S3150800481840003080287003236B70022307E0EA54AF
+S3150800482801345A1CD2B20021A9540233DBB22278C9
+S31508004838002AF4D170BD704710B513460222C0F895
+S3150800484894228361C3610A46002100F06CFB0020AC
+S3150800485810BD08B513460A46002100F064FB00207F
+S3150800486808BD08B513460A46002100F064FB002077
+S3150800487808BD08B50423C0F8943200231A46194619
+S3150800488800F051FB002008BD08B50523C0F894328E
+S3150800489800231A46194600F04EFB002008BD000002
+S315080048A8054BD3F8882042F47002C3F888204FF0E5
+S315080048B800629A60704700BF00ED00E008B52F4A0D
+S315080048C8136823F00F0343F007031360136803F014
+S315080048D80F03072B03D06A212948FCF753FA294BFB
+S315080048E81A6842F440421A601A6842F480321A601A
+S315080048F803F5E4331A6842F480221A601A6842F407
+S3150800490880321A60204B1B6813F4003FFAD01E4BFE
+S315080049185A681E4911401E4A0A435A605A681D4970
+S3150800492811401D4A0A435A601A6842F080721A6092
+S31508004938154B1B6813F0007FFAD0134B9A6822F0C0
+S31508004948F0029A609A6822F4E05242F4A0529A60F9
+S315080049589A6822F4604242F400429A609A6822F001
+S31508004968030242F002029A60074B9B6803F00C03A5
+S31508004978082BF9D10948FFF757FA08BD003C024049
+S31508004988E451000800700040003802400080BCFF6F
+S31508004998086C40000080BFF0086C400900E6DF0C90
+S315080049A808B5FCF785FDFFF789FF08BD08B5FFF7C9
+S315080049B8F7FFFCF735FAFCF741FAFCE72DE9F0436F
+S315080049C891B04C4C636C43F480436364636C03F4A2
+S315080049D880430993099B236C43F080532364236C13
+S315080049E803F080530893089B236B43F00103236362
+S315080049F8236B03F001030793079B236B43F002031A
+S31508004A082363236B03F002030693069B236B43F089
+S31508004A1804032363236B03F004030593059B236BA5
+S31508004A2843F008032363236B03F008030493049BEA
+S31508004A38236C43F480232364236C03F480230393B1
+S31508004A48039B236C43F000732364236C03F0007301
+S31508004A580293029B80230A9301230B9300250C9546
+S31508004A680D950E95DFF89C800AA94046FEF7C4F80E
+S31508004A784FF40003C8F818304FF400530A930B95FF
+S31508004A880E950AA91C48FEF7B7F84FF44079CDF8F1
+S31508004A98289002270B9703260C960D950E95072343
+S31508004AA80F930AA91548FEF7A7F8CDF828900B978B
+S31508004AB80C960D950E9509230F930AA94046FEF7FD
+S31508004AC89BF84FF4C0530A930B970C960D950E95C1
+S31508004AD80A230F930AA90A48FEF78EF8636B43F070
+S31508004AE880036363636B03F080030193019B11B032
+S31508004AF8BDE8F0830038024000080240000C024076
+S31508004B08000002400004024010B5FEF70BF91B4CE2
+S31508004B184FF40003A3611A48FDF7B0FF1948FDF7DB
+S31508004B28ADFF2046FDF7AAFF1748FDF7A7FF174B65
+S31508004B385A6B22F080025A631A6C22F000721A64C1
+S31508004B481A6C22F480221A641A6B22F008021A6375
+S31508004B581A6B22F004021A631A6B22F002021A630D
+S31508004B681A6B22F001021A631A6C22F080521A6430
+S31508004B785A6C22F480425A6410BD00BF00040240F1
+S31508004B88000C0240000802400000024000380240BB
+S31508004B98DFF834D0002103E00C4B5B58435004314E
+S31508004BA80B480C4B42189A42F6D30B4A02E00023EC
+S31508004BB842F8043B094B9A42F9D3FFF771FE00F015
+S31508004BC853FAFFF7F3FE7047000005204C52000819
+S31508004BD800000020C0000020C0000020701000203F
+S31508004BE8FEE70000202303800048704744000020A1
+S31508004BF80A230380004870476400002008B590F827
+S31508004C089C32032B01D0002008BDFCF75BF8FAE7B5
+S31508004C1808B5FCF757F8002008BD08B50846FCF79C
+S31508004C2885F8002008BD000008B50B7813F0600F5A
+S31508004C3806D14B780A2B14D00B2B17D0062B01D08C
+S31508004C48002008BD4B881B0A212B04D00B491722C4
+S31508004C58FFF7F2FDF4E7CA88172A28BF172208497A
+S31508004C68F6E701220749FFF7E7FDE9E78B7813B965
+S31508004C78044A1360E4E7FFF789FAE1E74D000020E4
+S31508004C88560000200C0A002010B50446812100F0C1
+S31508004C982AF90121204600F026F9002010BD000057
+S31508004CA810B5044640230222812100F011F9402359
+S31508004CB802220121204600F00BF94023034A01216C
+S31508004CC8204600F038F9002010BD00BF2C0A002045
+S31508004CD8004870472C0A002008B500F57171D0F80D
+S31508004CE80004FFF709F908BD08B5C1EBC10293002E
+S31508004CF80344D3F80822D0F80004FFF729F908BDB9
+S31508004D0808B5C1EBC102930003449A6CD0F80004B5
+S31508004D18FFF758F908BD08B5D0F80004FFF7EEF90B
+S31508004D2808BD000010B50446C3683BB1022B0FD076
+S31508004D3891210848FCF726F8012100E00021D4F85B
+S31508004D480004FFF7C4F9D4F80004FFF797F910BD73
+S31508004D580121F4E7F051000810B50446D0F800041C
+S31508004D68FFF7B8F92268D2F8003E43F00103C2F803
+S31508004D78003E236A23B1044A136943F00603136104
+S31508004D88FCF722FB10BD00BF00ED00E010B5044695
+S31508004D98FCF71BFBD4F80004FFF7A5F910BD08B506
+S31508004DA8D0F80004FFF7BAF908BD08B5D0F800042A
+S31508004DB8FFF7B2F908BD10B504460120FCF703FB56
+S31508004DC8D4F80004FFF7ACF910BD10B50446002066
+S31508004DD8FCF7F9FAD4F80004FFF7A4F910BD0000A7
+S31508004DE803780BB10020704710B503461748C0F87A
+S31508004DF80034C3F8C4024FF0A04303600623436097
+S31508004E080222C2600023036182610122C261036231
+S31508004E184362C3620363FDF767F880B90B4C8021C8
+S31508004E282046FDF70AFE402200212046FDF7E1FD4F
+S31508004E38802201212046FDF7DCFD002010BD40F246
+S31508004E4825110348FBF79EFFE8E700BF6C0A002018
+S31508004E58F0510008D0F8C43211F0800F08D101F0DB
+S31508004E687F01C1EBC1018A00134493F8FE0170471C
+S31508004E7801F07F01C1EBC1018A00134493F83E0093
+S31508004E88704708B5D0F8C402FDF708FD08BD18B183
+S31508004E98022803D003207047002070470120704776
+S31508004EA808B5D0F8C402FDF7EDF8FFF7F0FF08BD1E
+S31508004EB808B5D0F8C402FDF7B0F8FFF7E8FF08BD53
+S31508004EC808B5D0F8C402FDF7BDF8FFF7E0FF08BD3E
+S31508004ED810B51C4613462246D0F8C402FDF738FC1E
+S31508004EE8FFF7D5FF10BD08B5D0F8C402FDF771FC69
+S31508004EF8FFF7CDFF08BD08B5D0F8C402FDF701FDD8
+S31508004F08FFF7C5FF08BD08B5D0F8C402FDF73AFD96
+S31508004F18FFF7BDFF08BD08B5D0F8C402FDF704FCC5
+S31508004F28FFF7B5FF08BD08B5D0F8C402FDF7BFFC02
+S31508004F38FFF7ADFF08BD08B5D0F8C402FDF780FC39
+S31508004F48FFF7A5FF08BD000012230B80004870472D
+S31508004F588C00002004230B8000487047A00000201E
+S31508004F680023934216D230B40BE0373401F81340C5
+S31508004F7800015C00013400250D550133DBB293426C
+S31508004F8806D2040F092CF0D8303401F81340EFE79D
+S31508004F9830BC70477047000038B50A4B18680433A8
+S31508004FA81C6804331B68C01800D138BD064D082292
+S31508004FB8A91CFFF7D5FF042205F112012046FFF7C1
+S31508004FC8CFFFF2E720F4F01FA400002008B51A2343
+S31508004FD80B80FFF7E1FF014808BD00BFA4000020C9
+S31508004FE808B50A4628B105490548FFF709FC0348E4
+S31508004FF808BD02490248FFF703FCF8E7700E0020CF
+S315080050083052000810B5044C0A4621460348FFF7F3
+S31508005018F7FB204610BD00BF700E0020205200087E
+S3150800502808B50A4628B105490548FFF7E9FB0348C4
+S3150800503808BD02490248FFF7E3FBF8E7700E0020AF
+S315080050480052000808B50A4628B105490548FFF779
+S31508005058D7FB034808BD02490248FFF7D1FBF8E722
+S31508005068700E00200852000870B50D4E0D4CA41B92
+S31508005078A4100025A54209D10B4E0C4C00F018F8CF
+S31508005088A41BA4100025A54205D170BD56F82530E5
+S3150800509898470135EEE756F8253098470135F2E77F
+S315080050A8445200084452000844520008485200086E
+S315080050B8F8B500BFF8BC08BC9E467047F8B500BFEF
+S30D080050C8F8BC08BC9E467047BF
+S315080050D02E2E5C2E2E5C2E2E5C2E2E5C536F757239
+S315080050E063655C41524D434D375F53544D333246E9
+S315080050F0375C63616E2E630005020602060307032A
+S315080051000803090309040A040B040C040C050D051D
+S315080051100E050F050F061006100710080080000878
+S315080051200080000001000000000001080080000067
+S315080051300200000000800108008000000300000053
+S315080051400000020800000200040000000000040835
+S315080051500000040005000000000008080000040024
+S315080051600600000000000C0800000400070000000C
+S315080051702E2E5C2E2E5C2E2E5C2E2E5C536F757298
+S3150800518063655C41524D434D375F53544D33324648
+S31508005190375C72733233322E630000002E2E5C2E7B
+S315080051A02E5C2E2E5C2E2E5C536F757263655C41E9
+S315080051B0524D434D375F53544D333246375C757302
+S315080051C0622E63004F70656E424C5400000000006A
+S315080051D00000000001020304060708090000000099
+S315080051E0010203042E2E5C6D61696E2E63000000B9
+S315080051F02E2E5C757362645F636F6E662E630000A5
+S3150800520044656661756C740057696E555342204251
+S31508005210756C6B20496E7465726661636500000083
+S315080052204F70656E424C542055736572000000003D
+S3150800523057696E5553422042756C6B2044657669F2
+S309080052406365000094
+S30908005244ED01000862
+S30908005248C901000882
+S3150800524C04010000100000000024F400A94C00081A
+S3150800525C914C0008314C00080000000000000000CA
+S3150800526C194C0008234C0008054C000800000000E7
+S3150800527C0000000000000000ED4B000800000000D4
+S3150800528CF94B000809022000010100C0320904008C
+S3150800529C0002FF000000070581024000FF07050118
+S315080052AC024000FF0A060002000000400100000050
+S315080052BC514F00085D4F00080D500008E94F0008D3
+S315080052CCD54F0008295000084D500008120100025D
+S315080052DC00000040501DAC600002010203010000F2
+S315080052EC040309041A030000000000000000000073
+S315080052FC0000000000000000000000000000000094
+S70508004B990E
diff --git a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_TrueStudio/Boot/lib/CMSIS/Device/ST/STM32F7xx/Include/stm32f746xx.h b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_TrueStudio/Boot/lib/CMSIS/Device/ST/STM32F7xx/Include/stm32f746xx.h
index 5de6c6e1..2c47d3f0 100644
--- a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_TrueStudio/Boot/lib/CMSIS/Device/ST/STM32F7xx/Include/stm32f746xx.h
+++ b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_TrueStudio/Boot/lib/CMSIS/Device/ST/STM32F7xx/Include/stm32f746xx.h
@@ -12,29 +12,13 @@
******************************************************************************
* @attention
*
- * © COPYRIGHT(c) 2016 STMicroelectronics
+ * © Copyright (c) 2016 STMicroelectronics.
+ * All rights reserved.
*
- * Redistribution and use in source and binary forms, with or without modification,
- * are permitted provided that the following conditions are met:
- * 1. Redistributions of source code must retain the above copyright notice,
- * this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright notice,
- * this list of conditions and the following disclaimer in the documentation
- * and/or other materials provided with the distribution.
- * 3. Neither the name of STMicroelectronics nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
- * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
- * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ * This software component is licensed by ST under BSD 3-Clause license,
+ * the "License"; You may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at:
+ * opensource.org/licenses/BSD-3-Clause
*
******************************************************************************
*/
@@ -1433,28 +1417,32 @@ typedef struct
/* Analog to Digital Converter */
/* */
/******************************************************************************/
+#define VREFINT_CAL_ADDR_CMSIS ((uint16_t*) (0x1FF0F44A)) /*!© COPYRIGHT(c) 2016 STMicroelectronics
+ * © Copyright (c) 2016 STMicroelectronics.
+ * All rights reserved.
*
- * Redistribution and use in source and binary forms, with or without modification,
- * are permitted provided that the following conditions are met:
- * 1. Redistributions of source code must retain the above copyright notice,
- * this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright notice,
- * this list of conditions and the following disclaimer in the documentation
- * and/or other materials provided with the distribution.
- * 3. Neither the name of STMicroelectronics nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
- * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
- * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ * This software component is licensed by ST under BSD 3-Clause license,
+ * the "License"; You may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at:
+ * opensource.org/licenses/BSD-3-Clause
*
******************************************************************************
*/
@@ -72,10 +56,10 @@
/* Uncomment the line below according to the target STM32 device used in your
application
*/
-#if !defined (STM32F756xx) && !defined (STM32F746xx) && !defined (STM32F745xx) && !defined (STM32F767xx) && \
- !defined (STM32F769xx) && !defined (STM32F777xx) && !defined (STM32F779xx) && !defined (STM32F722xx) && \
- !defined (STM32F723xx) && !defined (STM32F732xx) && !defined (STM32F733xx) && !defined (STM32F730xx) && \
- !defined (STM32F750xx)
+#if !defined (STM32F756xx) && !defined (STM32F746xx) && !defined (STM32F745xx) && !defined (STM32F765xx) && \
+ !defined (STM32F767xx) && !defined (STM32F769xx) && !defined (STM32F777xx) && !defined (STM32F779xx) && \
+ !defined (STM32F722xx) && !defined (STM32F723xx) && !defined (STM32F732xx) && !defined (STM32F733xx) && \
+ !defined (STM32F730xx) && !defined (STM32F750xx)
/* #define STM32F756xx */ /*!< STM32F756VG, STM32F756ZG, STM32F756ZG, STM32F756IG, STM32F756BG,
STM32F756NG Devices */
@@ -113,11 +97,11 @@
#endif /* USE_HAL_DRIVER */
/**
- * @brief CMSIS Device version number V1.2.4
+ * @brief CMSIS Device version number V1.2.5
*/
#define __STM32F7_CMSIS_VERSION_MAIN (0x01) /*!< [31:24] main version */
#define __STM32F7_CMSIS_VERSION_SUB1 (0x02) /*!< [23:16] sub1 version */
-#define __STM32F7_CMSIS_VERSION_SUB2 (0x04) /*!< [15:8] sub2 version */
+#define __STM32F7_CMSIS_VERSION_SUB2 (0x05) /*!< [15:8] sub2 version */
#define __STM32F7_CMSIS_VERSION_RC (0x00) /*!< [7:0] release candidate */
#define __STM32F7_CMSIS_VERSION ((__STM32F7_CMSIS_VERSION_MAIN << 24)\
|(__STM32F7_CMSIS_VERSION_SUB1 << 16)\
diff --git a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_TrueStudio/Boot/lib/STM32F7xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_TrueStudio/Boot/lib/STM32F7xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h
index 13b68bc2..2d265fb6 100644
--- a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_TrueStudio/Boot/lib/STM32F7xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h
+++ b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_TrueStudio/Boot/lib/STM32F7xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h
@@ -7,7 +7,7 @@
******************************************************************************
* @attention
*
- * © Copyright (c) 2018 STMicroelectronics.
+ * © Copyright (c) 2019 STMicroelectronics.
* All rights reserved.
*
* This software component is licensed by ST under BSD 3-Clause license,
@@ -236,6 +236,16 @@
#define DAC_WAVEGENERATION_NOISE DAC_WAVE_NOISE
#define DAC_WAVEGENERATION_TRIANGLE DAC_WAVE_TRIANGLE
+#if defined(STM32G4) || defined(STM32H7)
+#define DAC_CHIPCONNECT_DISABLE DAC_CHIPCONNECT_EXTERNAL
+#define DAC_CHIPCONNECT_ENABLE DAC_CHIPCONNECT_INTERNAL
+#endif
+
+#if defined(STM32L1) || defined(STM32L4) || defined(STM32G0) || defined(STM32L5) || defined(STM32H7) || defined(STM32F4)
+#define HAL_DAC_MSP_INIT_CB_ID HAL_DAC_MSPINIT_CB_ID
+#define HAL_DAC_MSP_DEINIT_CB_ID HAL_DAC_MSPDEINIT_CB_ID
+#endif
+
/**
* @}
*/
@@ -296,8 +306,17 @@
#define HAL_DMAMUX_REQUEST_GEN_FALLING HAL_DMAMUX_REQ_GEN_FALLING
#define HAL_DMAMUX_REQUEST_GEN_RISING_FALLING HAL_DMAMUX_REQ_GEN_RISING_FALLING
+#if defined(STM32L4R5xx) || defined(STM32L4R9xx) || defined(STM32L4R9xx) || defined(STM32L4S5xx) || defined(STM32L4S7xx) || defined(STM32L4S9xx)
+#define DMA_REQUEST_DCMI_PSSI DMA_REQUEST_DCMI
+#endif
+
#endif /* STM32L4 */
+#if defined(STM32G0)
+#define DMA_REQUEST_DAC1_CHANNEL1 DMA_REQUEST_DAC1_CH1
+#define DMA_REQUEST_DAC1_CHANNEL2 DMA_REQUEST_DAC1_CH2
+#endif
+
#if defined(STM32H7)
#define DMA_REQUEST_DAC1 DMA_REQUEST_DAC1_CH1
@@ -355,6 +374,9 @@
#define DFSDM_FILTER_EXT_TRIG_LPTIM2 DFSDM_FILTER_EXT_TRIG_LPTIM2_OUT
#define DFSDM_FILTER_EXT_TRIG_LPTIM3 DFSDM_FILTER_EXT_TRIG_LPTIM3_OUT
+#define DAC_TRIGGER_LP1_OUT DAC_TRIGGER_LPTIM1_OUT
+#define DAC_TRIGGER_LP2_OUT DAC_TRIGGER_LPTIM2_OUT
+
#endif /* STM32H7 */
/**
@@ -450,7 +472,9 @@
#define FLASH_FLAG_SNECCE_BANK2RR FLASH_FLAG_SNECCERR_BANK2
#define FLASH_FLAG_DBECCE_BANK2RR FLASH_FLAG_DBECCERR_BANK2
#define FLASH_FLAG_STRBER_BANK2R FLASH_FLAG_STRBERR_BANK2
-#endif
+#define FLASH_FLAG_WDW FLASH_FLAG_WBNE
+#define OB_WRP_SECTOR_All OB_WRP_SECTOR_ALL
+#endif /* STM32H7 */
/**
* @}
@@ -486,6 +510,13 @@
#define HAL_SYSCFG_FASTMODEPLUS_I2C1 I2C_FASTMODEPLUS_I2C1
#define HAL_SYSCFG_FASTMODEPLUS_I2C2 I2C_FASTMODEPLUS_I2C2
#define HAL_SYSCFG_FASTMODEPLUS_I2C3 I2C_FASTMODEPLUS_I2C3
+#if defined(STM32G4)
+
+#define HAL_SYSCFG_EnableIOAnalogSwitchBooster HAL_SYSCFG_EnableIOSwitchBooster
+#define HAL_SYSCFG_DisableIOAnalogSwitchBooster HAL_SYSCFG_DisableIOSwitchBooster
+#define HAL_SYSCFG_EnableIOAnalogSwitchVDD HAL_SYSCFG_EnableIOSwitchVDD
+#define HAL_SYSCFG_DisableIOAnalogSwitchVDD HAL_SYSCFG_DisableIOSwitchVDD
+#endif /* STM32G4 */
/**
* @}
*/
@@ -494,7 +525,7 @@
/** @defgroup LL_FMC_Aliased_Defines LL FMC Aliased Defines maintained for compatibility purpose
* @{
*/
-#if defined(STM32L4) || defined(STM32F7) || defined(STM32H7)
+#if defined(STM32L4) || defined(STM32F7) || defined(STM32H7) || defined(STM32G4)
#define FMC_NAND_PCC_WAIT_FEATURE_DISABLE FMC_NAND_WAIT_FEATURE_DISABLE
#define FMC_NAND_PCC_WAIT_FEATURE_ENABLE FMC_NAND_WAIT_FEATURE_ENABLE
#define FMC_NAND_PCC_MEM_BUS_WIDTH_8 FMC_NAND_MEM_BUS_WIDTH_8
@@ -547,18 +578,25 @@
#define GPIO_AF9_SDIO2 GPIO_AF9_SDMMC2
#define GPIO_AF10_SDIO2 GPIO_AF10_SDMMC2
#define GPIO_AF11_SDIO2 GPIO_AF11_SDMMC2
-#endif
+
+#if defined (STM32H743xx) || defined (STM32H753xx) || defined (STM32H750xx) || defined (STM32H742xx) || \
+ defined (STM32H745xx) || defined (STM32H755xx) || defined (STM32H747xx) || defined (STM32H757xx)
+#define GPIO_AF10_OTG2_HS GPIO_AF10_OTG2_FS
+#define GPIO_AF10_OTG1_FS GPIO_AF10_OTG1_HS
+#define GPIO_AF12_OTG2_FS GPIO_AF12_OTG1_FS
+#endif /*STM32H743xx || STM32H753xx || STM32H750xx || STM32H742xx || STM32H745xx || STM32H755xx || STM32H747xx || STM32H757xx */
+#endif /* STM32H7 */
#define GPIO_AF0_LPTIM GPIO_AF0_LPTIM1
#define GPIO_AF1_LPTIM GPIO_AF1_LPTIM1
#define GPIO_AF2_LPTIM GPIO_AF2_LPTIM1
-#if defined(STM32L0) || defined(STM32L4) || defined(STM32F4) || defined(STM32F2) || defined(STM32F7) || defined(STM32H7)
+#if defined(STM32L0) || defined(STM32L4) || defined(STM32F4) || defined(STM32F2) || defined(STM32F7) || defined(STM32G4) || defined(STM32H7)
#define GPIO_SPEED_LOW GPIO_SPEED_FREQ_LOW
#define GPIO_SPEED_MEDIUM GPIO_SPEED_FREQ_MEDIUM
#define GPIO_SPEED_FAST GPIO_SPEED_FREQ_HIGH
#define GPIO_SPEED_HIGH GPIO_SPEED_FREQ_VERY_HIGH
-#endif /* STM32L0 || STM32L4 || STM32F4 || STM32F2 || STM32F7 || STM32H7*/
+#endif /* STM32L0 || STM32L4 || STM32F4 || STM32F2 || STM32F7 || STM32G4 || STM32H7*/
#if defined(STM32L1)
#define GPIO_SPEED_VERY_LOW GPIO_SPEED_FREQ_LOW
@@ -599,6 +637,185 @@
#define __HAL_HRTIM_GetClockPrescaler __HAL_HRTIM_GETCLOCKPRESCALER
#define __HAL_HRTIM_SetCompare __HAL_HRTIM_SETCOMPARE
#define __HAL_HRTIM_GetCompare __HAL_HRTIM_GETCOMPARE
+
+#if defined(STM32G4)
+#define HAL_HRTIM_ExternalEventCounterConfig HAL_HRTIM_ExtEventCounterConfig
+#define HAL_HRTIM_ExternalEventCounterEnable HAL_HRTIM_ExtEventCounterEnable
+#define HAL_HRTIM_ExternalEventCounterDisable HAL_HRTIM_ExtEventCounterDisable
+#define HAL_HRTIM_ExternalEventCounterReset HAL_HRTIM_ExtEventCounterReset
+#endif /* STM32G4 */
+
+#if defined(STM32H7)
+#define HRTIM_OUTPUTSET_TIMAEV1_TIMBCMP1 HRTIM_OUTPUTSET_TIMEV_1
+#define HRTIM_OUTPUTSET_TIMAEV2_TIMBCMP2 HRTIM_OUTPUTSET_TIMEV_2
+#define HRTIM_OUTPUTSET_TIMAEV3_TIMCCMP2 HRTIM_OUTPUTSET_TIMEV_3
+#define HRTIM_OUTPUTSET_TIMAEV4_TIMCCMP3 HRTIM_OUTPUTSET_TIMEV_4
+#define HRTIM_OUTPUTSET_TIMAEV5_TIMDCMP1 HRTIM_OUTPUTSET_TIMEV_5
+#define HRTIM_OUTPUTSET_TIMAEV6_TIMDCMP2 HRTIM_OUTPUTSET_TIMEV_6
+#define HRTIM_OUTPUTSET_TIMAEV7_TIMECMP3 HRTIM_OUTPUTSET_TIMEV_7
+#define HRTIM_OUTPUTSET_TIMAEV8_TIMECMP4 HRTIM_OUTPUTSET_TIMEV_8
+#define HRTIM_OUTPUTSET_TIMAEV9_TIMFCMP4 HRTIM_OUTPUTSET_TIMEV_9
+#define HRTIM_OUTPUTSET_TIMBEV1_TIMACMP1 HRTIM_OUTPUTSET_TIMEV_1
+#define HRTIM_OUTPUTSET_TIMBEV2_TIMACMP2 HRTIM_OUTPUTSET_TIMEV_2
+#define HRTIM_OUTPUTSET_TIMBEV3_TIMCCMP3 HRTIM_OUTPUTSET_TIMEV_3
+#define HRTIM_OUTPUTSET_TIMBEV4_TIMCCMP4 HRTIM_OUTPUTSET_TIMEV_4
+#define HRTIM_OUTPUTSET_TIMBEV5_TIMDCMP3 HRTIM_OUTPUTSET_TIMEV_5
+#define HRTIM_OUTPUTSET_TIMBEV6_TIMDCMP4 HRTIM_OUTPUTSET_TIMEV_6
+#define HRTIM_OUTPUTSET_TIMBEV7_TIMECMP1 HRTIM_OUTPUTSET_TIMEV_7
+#define HRTIM_OUTPUTSET_TIMBEV8_TIMECMP2 HRTIM_OUTPUTSET_TIMEV_8
+#define HRTIM_OUTPUTSET_TIMBEV9_TIMFCMP3 HRTIM_OUTPUTSET_TIMEV_9
+#define HRTIM_OUTPUTSET_TIMCEV1_TIMACMP1 HRTIM_OUTPUTSET_TIMEV_1
+#define HRTIM_OUTPUTSET_TIMCEV2_TIMACMP2 HRTIM_OUTPUTSET_TIMEV_2
+#define HRTIM_OUTPUTSET_TIMCEV3_TIMBCMP2 HRTIM_OUTPUTSET_TIMEV_3
+#define HRTIM_OUTPUTSET_TIMCEV4_TIMBCMP3 HRTIM_OUTPUTSET_TIMEV_4
+#define HRTIM_OUTPUTSET_TIMCEV5_TIMDCMP2 HRTIM_OUTPUTSET_TIMEV_5
+#define HRTIM_OUTPUTSET_TIMCEV6_TIMDCMP4 HRTIM_OUTPUTSET_TIMEV_6
+#define HRTIM_OUTPUTSET_TIMCEV7_TIMECMP3 HRTIM_OUTPUTSET_TIMEV_7
+#define HRTIM_OUTPUTSET_TIMCEV8_TIMECMP4 HRTIM_OUTPUTSET_TIMEV_8
+#define HRTIM_OUTPUTSET_TIMCEV9_TIMFCMP2 HRTIM_OUTPUTSET_TIMEV_9
+#define HRTIM_OUTPUTSET_TIMDEV1_TIMACMP1 HRTIM_OUTPUTSET_TIMEV_1
+#define HRTIM_OUTPUTSET_TIMDEV2_TIMACMP4 HRTIM_OUTPUTSET_TIMEV_2
+#define HRTIM_OUTPUTSET_TIMDEV3_TIMBCMP2 HRTIM_OUTPUTSET_TIMEV_3
+#define HRTIM_OUTPUTSET_TIMDEV4_TIMBCMP4 HRTIM_OUTPUTSET_TIMEV_4
+#define HRTIM_OUTPUTSET_TIMDEV5_TIMCCMP4 HRTIM_OUTPUTSET_TIMEV_5
+#define HRTIM_OUTPUTSET_TIMDEV6_TIMECMP1 HRTIM_OUTPUTSET_TIMEV_6
+#define HRTIM_OUTPUTSET_TIMDEV7_TIMECMP4 HRTIM_OUTPUTSET_TIMEV_7
+#define HRTIM_OUTPUTSET_TIMDEV8_TIMFCMP1 HRTIM_OUTPUTSET_TIMEV_8
+#define HRTIM_OUTPUTSET_TIMDEV9_TIMFCMP3 HRTIM_OUTPUTSET_TIMEV_9
+#define HRTIM_OUTPUTSET_TIMEEV1_TIMACMP4 HRTIM_OUTPUTSET_TIMEV_1
+#define HRTIM_OUTPUTSET_TIMEEV2_TIMBCMP3 HRTIM_OUTPUTSET_TIMEV_2
+#define HRTIM_OUTPUTSET_TIMEEV3_TIMBCMP4 HRTIM_OUTPUTSET_TIMEV_3
+#define HRTIM_OUTPUTSET_TIMEEV4_TIMCCMP1 HRTIM_OUTPUTSET_TIMEV_4
+#define HRTIM_OUTPUTSET_TIMEEV5_TIMDCMP2 HRTIM_OUTPUTSET_TIMEV_5
+#define HRTIM_OUTPUTSET_TIMEEV6_TIMDCMP1 HRTIM_OUTPUTSET_TIMEV_6
+#define HRTIM_OUTPUTSET_TIMEEV7_TIMDCMP2 HRTIM_OUTPUTSET_TIMEV_7
+#define HRTIM_OUTPUTSET_TIMEEV8_TIMFCMP3 HRTIM_OUTPUTSET_TIMEV_8
+#define HRTIM_OUTPUTSET_TIMEEV9_TIMFCMP4 HRTIM_OUTPUTSET_TIMEV_9
+#define HRTIM_OUTPUTSET_TIMFEV1_TIMACMP3 HRTIM_OUTPUTSET_TIMEV_1
+#define HRTIM_OUTPUTSET_TIMFEV2_TIMBCMP1 HRTIM_OUTPUTSET_TIMEV_2
+#define HRTIM_OUTPUTSET_TIMFEV3_TIMBCMP4 HRTIM_OUTPUTSET_TIMEV_3
+#define HRTIM_OUTPUTSET_TIMFEV4_TIMCCMP1 HRTIM_OUTPUTSET_TIMEV_4
+#define HRTIM_OUTPUTSET_TIMFEV5_TIMCCMP4 HRTIM_OUTPUTSET_TIMEV_5
+#define HRTIM_OUTPUTSET_TIMFEV6_TIMDCMP3 HRTIM_OUTPUTSET_TIMEV_6
+#define HRTIM_OUTPUTSET_TIMFEV7_TIMDCMP4 HRTIM_OUTPUTSET_TIMEV_7
+#define HRTIM_OUTPUTSET_TIMFEV8_TIMECMP2 HRTIM_OUTPUTSET_TIMEV_8
+#define HRTIM_OUTPUTSET_TIMFEV9_TIMECMP3 HRTIM_OUTPUTSET_TIMEV_9
+
+#define HRTIM_OUTPUTRESET_TIMAEV1_TIMBCMP1 HRTIM_OUTPUTSET_TIMEV_1
+#define HRTIM_OUTPUTRESET_TIMAEV2_TIMBCMP2 HRTIM_OUTPUTSET_TIMEV_2
+#define HRTIM_OUTPUTRESET_TIMAEV3_TIMCCMP2 HRTIM_OUTPUTSET_TIMEV_3
+#define HRTIM_OUTPUTRESET_TIMAEV4_TIMCCMP3 HRTIM_OUTPUTSET_TIMEV_4
+#define HRTIM_OUTPUTRESET_TIMAEV5_TIMDCMP1 HRTIM_OUTPUTSET_TIMEV_5
+#define HRTIM_OUTPUTRESET_TIMAEV6_TIMDCMP2 HRTIM_OUTPUTSET_TIMEV_6
+#define HRTIM_OUTPUTRESET_TIMAEV7_TIMECMP3 HRTIM_OUTPUTSET_TIMEV_7
+#define HRTIM_OUTPUTRESET_TIMAEV8_TIMECMP4 HRTIM_OUTPUTSET_TIMEV_8
+#define HRTIM_OUTPUTRESET_TIMAEV9_TIMFCMP4 HRTIM_OUTPUTSET_TIMEV_9
+#define HRTIM_OUTPUTRESET_TIMBEV1_TIMACMP1 HRTIM_OUTPUTSET_TIMEV_1
+#define HRTIM_OUTPUTRESET_TIMBEV2_TIMACMP2 HRTIM_OUTPUTSET_TIMEV_2
+#define HRTIM_OUTPUTRESET_TIMBEV3_TIMCCMP3 HRTIM_OUTPUTSET_TIMEV_3
+#define HRTIM_OUTPUTRESET_TIMBEV4_TIMCCMP4 HRTIM_OUTPUTSET_TIMEV_4
+#define HRTIM_OUTPUTRESET_TIMBEV5_TIMDCMP3 HRTIM_OUTPUTSET_TIMEV_5
+#define HRTIM_OUTPUTRESET_TIMBEV6_TIMDCMP4 HRTIM_OUTPUTSET_TIMEV_6
+#define HRTIM_OUTPUTRESET_TIMBEV7_TIMECMP1 HRTIM_OUTPUTSET_TIMEV_7
+#define HRTIM_OUTPUTRESET_TIMBEV8_TIMECMP2 HRTIM_OUTPUTSET_TIMEV_8
+#define HRTIM_OUTPUTRESET_TIMBEV9_TIMFCMP3 HRTIM_OUTPUTSET_TIMEV_9
+#define HRTIM_OUTPUTRESET_TIMCEV1_TIMACMP1 HRTIM_OUTPUTSET_TIMEV_1
+#define HRTIM_OUTPUTRESET_TIMCEV2_TIMACMP2 HRTIM_OUTPUTSET_TIMEV_2
+#define HRTIM_OUTPUTRESET_TIMCEV3_TIMBCMP2 HRTIM_OUTPUTSET_TIMEV_3
+#define HRTIM_OUTPUTRESET_TIMCEV4_TIMBCMP3 HRTIM_OUTPUTSET_TIMEV_4
+#define HRTIM_OUTPUTRESET_TIMCEV5_TIMDCMP2 HRTIM_OUTPUTSET_TIMEV_5
+#define HRTIM_OUTPUTRESET_TIMCEV6_TIMDCMP4 HRTIM_OUTPUTSET_TIMEV_6
+#define HRTIM_OUTPUTRESET_TIMCEV7_TIMECMP3 HRTIM_OUTPUTSET_TIMEV_7
+#define HRTIM_OUTPUTRESET_TIMCEV8_TIMECMP4 HRTIM_OUTPUTSET_TIMEV_8
+#define HRTIM_OUTPUTRESET_TIMCEV9_TIMFCMP2 HRTIM_OUTPUTSET_TIMEV_9
+#define HRTIM_OUTPUTRESET_TIMDEV1_TIMACMP1 HRTIM_OUTPUTSET_TIMEV_1
+#define HRTIM_OUTPUTRESET_TIMDEV2_TIMACMP4 HRTIM_OUTPUTSET_TIMEV_2
+#define HRTIM_OUTPUTRESET_TIMDEV3_TIMBCMP2 HRTIM_OUTPUTSET_TIMEV_3
+#define HRTIM_OUTPUTRESET_TIMDEV4_TIMBCMP4 HRTIM_OUTPUTSET_TIMEV_4
+#define HRTIM_OUTPUTRESET_TIMDEV5_TIMCCMP4 HRTIM_OUTPUTSET_TIMEV_5
+#define HRTIM_OUTPUTRESET_TIMDEV6_TIMECMP1 HRTIM_OUTPUTSET_TIMEV_6
+#define HRTIM_OUTPUTRESET_TIMDEV7_TIMECMP4 HRTIM_OUTPUTSET_TIMEV_7
+#define HRTIM_OUTPUTRESET_TIMDEV8_TIMFCMP1 HRTIM_OUTPUTSET_TIMEV_8
+#define HRTIM_OUTPUTRESET_TIMDEV9_TIMFCMP3 HRTIM_OUTPUTSET_TIMEV_9
+#define HRTIM_OUTPUTRESET_TIMEEV1_TIMACMP4 HRTIM_OUTPUTSET_TIMEV_1
+#define HRTIM_OUTPUTRESET_TIMEEV2_TIMBCMP3 HRTIM_OUTPUTSET_TIMEV_2
+#define HRTIM_OUTPUTRESET_TIMEEV3_TIMBCMP4 HRTIM_OUTPUTSET_TIMEV_3
+#define HRTIM_OUTPUTRESET_TIMEEV4_TIMCCMP1 HRTIM_OUTPUTSET_TIMEV_4
+#define HRTIM_OUTPUTRESET_TIMEEV5_TIMDCMP2 HRTIM_OUTPUTSET_TIMEV_5
+#define HRTIM_OUTPUTRESET_TIMEEV6_TIMDCMP1 HRTIM_OUTPUTSET_TIMEV_6
+#define HRTIM_OUTPUTRESET_TIMEEV7_TIMDCMP2 HRTIM_OUTPUTSET_TIMEV_7
+#define HRTIM_OUTPUTRESET_TIMEEV8_TIMFCMP3 HRTIM_OUTPUTSET_TIMEV_8
+#define HRTIM_OUTPUTRESET_TIMEEV9_TIMFCMP4 HRTIM_OUTPUTSET_TIMEV_9
+#define HRTIM_OUTPUTRESET_TIMFEV1_TIMACMP3 HRTIM_OUTPUTSET_TIMEV_1
+#define HRTIM_OUTPUTRESET_TIMFEV2_TIMBCMP1 HRTIM_OUTPUTSET_TIMEV_2
+#define HRTIM_OUTPUTRESET_TIMFEV3_TIMBCMP4 HRTIM_OUTPUTSET_TIMEV_3
+#define HRTIM_OUTPUTRESET_TIMFEV4_TIMCCMP1 HRTIM_OUTPUTSET_TIMEV_4
+#define HRTIM_OUTPUTRESET_TIMFEV5_TIMCCMP4 HRTIM_OUTPUTSET_TIMEV_5
+#define HRTIM_OUTPUTRESET_TIMFEV6_TIMDCMP3 HRTIM_OUTPUTSET_TIMEV_6
+#define HRTIM_OUTPUTRESET_TIMFEV7_TIMDCMP4 HRTIM_OUTPUTSET_TIMEV_7
+#define HRTIM_OUTPUTRESET_TIMFEV8_TIMECMP2 HRTIM_OUTPUTSET_TIMEV_8
+#define HRTIM_OUTPUTRESET_TIMFEV9_TIMECMP3 HRTIM_OUTPUTSET_TIMEV_9
+#endif /* STM32H7 */
+
+#if defined(STM32F3)
+/** @brief Constants defining available sources associated to external events.
+ */
+#define HRTIM_EVENTSRC_1 (0x00000000U)
+#define HRTIM_EVENTSRC_2 (HRTIM_EECR1_EE1SRC_0)
+#define HRTIM_EVENTSRC_3 (HRTIM_EECR1_EE1SRC_1)
+#define HRTIM_EVENTSRC_4 (HRTIM_EECR1_EE1SRC_1 | HRTIM_EECR1_EE1SRC_0)
+
+/** @brief Constants defining the events that can be selected to configure the
+ * set/reset crossbar of a timer output
+ */
+#define HRTIM_OUTPUTSET_TIMEV_1 (HRTIM_SET1R_TIMEVNT1)
+#define HRTIM_OUTPUTSET_TIMEV_2 (HRTIM_SET1R_TIMEVNT2)
+#define HRTIM_OUTPUTSET_TIMEV_3 (HRTIM_SET1R_TIMEVNT3)
+#define HRTIM_OUTPUTSET_TIMEV_4 (HRTIM_SET1R_TIMEVNT4)
+#define HRTIM_OUTPUTSET_TIMEV_5 (HRTIM_SET1R_TIMEVNT5)
+#define HRTIM_OUTPUTSET_TIMEV_6 (HRTIM_SET1R_TIMEVNT6)
+#define HRTIM_OUTPUTSET_TIMEV_7 (HRTIM_SET1R_TIMEVNT7)
+#define HRTIM_OUTPUTSET_TIMEV_8 (HRTIM_SET1R_TIMEVNT8)
+#define HRTIM_OUTPUTSET_TIMEV_9 (HRTIM_SET1R_TIMEVNT9)
+
+#define HRTIM_OUTPUTRESET_TIMEV_1 (HRTIM_RST1R_TIMEVNT1)
+#define HRTIM_OUTPUTRESET_TIMEV_2 (HRTIM_RST1R_TIMEVNT2)
+#define HRTIM_OUTPUTRESET_TIMEV_3 (HRTIM_RST1R_TIMEVNT3)
+#define HRTIM_OUTPUTRESET_TIMEV_4 (HRTIM_RST1R_TIMEVNT4)
+#define HRTIM_OUTPUTRESET_TIMEV_5 (HRTIM_RST1R_TIMEVNT5)
+#define HRTIM_OUTPUTRESET_TIMEV_6 (HRTIM_RST1R_TIMEVNT6)
+#define HRTIM_OUTPUTRESET_TIMEV_7 (HRTIM_RST1R_TIMEVNT7)
+#define HRTIM_OUTPUTRESET_TIMEV_8 (HRTIM_RST1R_TIMEVNT8)
+#define HRTIM_OUTPUTRESET_TIMEV_9 (HRTIM_RST1R_TIMEVNT9)
+
+/** @brief Constants defining the event filtering applied to external events
+ * by a timer
+ */
+#define HRTIM_TIMEVENTFILTER_NONE (0x00000000U)
+#define HRTIM_TIMEVENTFILTER_BLANKINGCMP1 (HRTIM_EEFR1_EE1FLTR_0)
+#define HRTIM_TIMEVENTFILTER_BLANKINGCMP2 (HRTIM_EEFR1_EE1FLTR_1)
+#define HRTIM_TIMEVENTFILTER_BLANKINGCMP3 (HRTIM_EEFR1_EE1FLTR_1 | HRTIM_EEFR1_EE1FLTR_0)
+#define HRTIM_TIMEVENTFILTER_BLANKINGCMP4 (HRTIM_EEFR1_EE1FLTR_2)
+#define HRTIM_TIMEVENTFILTER_BLANKINGFLTR1 (HRTIM_EEFR1_EE1FLTR_2 | HRTIM_EEFR1_EE1FLTR_0)
+#define HRTIM_TIMEVENTFILTER_BLANKINGFLTR2 (HRTIM_EEFR1_EE1FLTR_2 | HRTIM_EEFR1_EE1FLTR_1)
+#define HRTIM_TIMEVENTFILTER_BLANKINGFLTR3 (HRTIM_EEFR1_EE1FLTR_2 | HRTIM_EEFR1_EE1FLTR_1 | HRTIM_EEFR1_EE1FLTR_0)
+#define HRTIM_TIMEVENTFILTER_BLANKINGFLTR4 (HRTIM_EEFR1_EE1FLTR_3)
+#define HRTIM_TIMEVENTFILTER_BLANKINGFLTR5 (HRTIM_EEFR1_EE1FLTR_3 | HRTIM_EEFR1_EE1FLTR_0)
+#define HRTIM_TIMEVENTFILTER_BLANKINGFLTR6 (HRTIM_EEFR1_EE1FLTR_3 | HRTIM_EEFR1_EE1FLTR_1)
+#define HRTIM_TIMEVENTFILTER_BLANKINGFLTR7 (HRTIM_EEFR1_EE1FLTR_3 | HRTIM_EEFR1_EE1FLTR_1 | HRTIM_EEFR1_EE1FLTR_0)
+#define HRTIM_TIMEVENTFILTER_BLANKINGFLTR8 (HRTIM_EEFR1_EE1FLTR_3 | HRTIM_EEFR1_EE1FLTR_2)
+#define HRTIM_TIMEVENTFILTER_WINDOWINGCMP2 (HRTIM_EEFR1_EE1FLTR_3 | HRTIM_EEFR1_EE1FLTR_2 | HRTIM_EEFR1_EE1FLTR_0)
+#define HRTIM_TIMEVENTFILTER_WINDOWINGCMP3 (HRTIM_EEFR1_EE1FLTR_3 | HRTIM_EEFR1_EE1FLTR_2 | HRTIM_EEFR1_EE1FLTR_1)
+#define HRTIM_TIMEVENTFILTER_WINDOWINGTIM (HRTIM_EEFR1_EE1FLTR_3 | HRTIM_EEFR1_EE1FLTR_2 | HRTIM_EEFR1_EE1FLTR_1 | HRTIM_EEFR1_EE1FLTR_0)
+
+/** @brief Constants defining the DLL calibration periods (in micro seconds)
+ */
+#define HRTIM_CALIBRATIONRATE_7300 0x00000000U
+#define HRTIM_CALIBRATIONRATE_910 (HRTIM_DLLCR_CALRTE_0)
+#define HRTIM_CALIBRATIONRATE_114 (HRTIM_DLLCR_CALRTE_1)
+#define HRTIM_CALIBRATIONRATE_14 (HRTIM_DLLCR_CALRTE_1 | HRTIM_DLLCR_CALRTE_0)
+
+#endif /* STM32F3 */
/**
* @}
*/
@@ -738,6 +955,12 @@
#define OPAMP_PGACONNECT_VM0 OPAMP_PGA_CONNECT_INVERTINGINPUT_IO0
#define OPAMP_PGACONNECT_VM1 OPAMP_PGA_CONNECT_INVERTINGINPUT_IO1
+#if defined(STM32L1) || defined(STM32L4) || defined(STM32L5) || defined(STM32H7)
+#define HAL_OPAMP_MSP_INIT_CB_ID HAL_OPAMP_MSPINIT_CB_ID
+#define HAL_OPAMP_MSP_DEINIT_CB_ID HAL_OPAMP_MSPDEINIT_CB_ID
+#endif
+
+
/**
* @}
*/
@@ -753,7 +976,6 @@
#define I2S_FLAG_TXE I2S_FLAG_TXP
#define I2S_FLAG_RXNE I2S_FLAG_RXP
- #define I2S_FLAG_FRE I2S_FLAG_TIFRE
#endif
#if defined(STM32F7)
@@ -824,6 +1046,16 @@
#define RTC_TAMPERPIN_PA0 RTC_TAMPERPIN_POS1
#define RTC_TAMPERPIN_PI8 RTC_TAMPERPIN_POS1
+#if defined(STM32H7)
+#define RTC_TAMPCR_TAMPXE RTC_TAMPER_X
+#define RTC_TAMPCR_TAMPXIE RTC_TAMPER_X_INTERRUPT
+
+#define RTC_TAMPER1_INTERRUPT RTC_IT_TAMP1
+#define RTC_TAMPER2_INTERRUPT RTC_IT_TAMP2
+#define RTC_TAMPER3_INTERRUPT RTC_IT_TAMP3
+#define RTC_ALL_TAMPER_INTERRUPT RTC_IT_TAMPALL
+#endif /* STM32H7 */
+
/**
* @}
*/
@@ -971,6 +1203,24 @@
#define IS_TIM_HALL_INTERFACE_INSTANCE IS_TIM_HALL_SENSOR_INTERFACE_INSTANCE
#endif
+#if defined(STM32H7)
+#define TIM_TIM1_ETR_COMP1_OUT TIM_TIM1_ETR_COMP1
+#define TIM_TIM1_ETR_COMP2_OUT TIM_TIM1_ETR_COMP2
+#define TIM_TIM8_ETR_COMP1_OUT TIM_TIM8_ETR_COMP1
+#define TIM_TIM8_ETR_COMP2_OUT TIM_TIM8_ETR_COMP2
+#define TIM_TIM2_ETR_COMP1_OUT TIM_TIM2_ETR_COMP1
+#define TIM_TIM2_ETR_COMP2_OUT TIM_TIM2_ETR_COMP2
+#define TIM_TIM3_ETR_COMP1_OUT TIM_TIM3_ETR_COMP1
+#define TIM_TIM1_TI1_COMP1_OUT TIM_TIM1_TI1_COMP1
+#define TIM_TIM8_TI1_COMP2_OUT TIM_TIM8_TI1_COMP2
+#define TIM_TIM2_TI4_COMP1_OUT TIM_TIM2_TI4_COMP1
+#define TIM_TIM2_TI4_COMP2_OUT TIM_TIM2_TI4_COMP2
+#define TIM_TIM2_TI4_COMP1COMP2_OUT TIM_TIM2_TI4_COMP1_COMP2
+#define TIM_TIM3_TI1_COMP1_OUT TIM_TIM3_TI1_COMP1
+#define TIM_TIM3_TI1_COMP2_OUT TIM_TIM3_TI1_COMP2
+#define TIM_TIM3_TI1_COMP1COMP2_OUT TIM_TIM3_TI1_COMP1_COMP2
+#endif
+
/**
* @}
*/
@@ -1199,6 +1449,30 @@
#define HASH_HMACKeyType_ShortKey HASH_HMAC_KEYTYPE_SHORTKEY
#define HASH_HMACKeyType_LongKey HASH_HMAC_KEYTYPE_LONGKEY
+
+#if defined(STM32L4) || defined(STM32F4) || defined(STM32F7) || defined(STM32H7)
+
+#define HAL_HASH_MD5_Accumulate HAL_HASH_MD5_Accmlt
+#define HAL_HASH_MD5_Accumulate_End HAL_HASH_MD5_Accmlt_End
+#define HAL_HASH_MD5_Accumulate_IT HAL_HASH_MD5_Accmlt_IT
+#define HAL_HASH_MD5_Accumulate_End_IT HAL_HASH_MD5_Accmlt_End_IT
+
+#define HAL_HASH_SHA1_Accumulate HAL_HASH_SHA1_Accmlt
+#define HAL_HASH_SHA1_Accumulate_End HAL_HASH_SHA1_Accmlt_End
+#define HAL_HASH_SHA1_Accumulate_IT HAL_HASH_SHA1_Accmlt_IT
+#define HAL_HASH_SHA1_Accumulate_End_IT HAL_HASH_SHA1_Accmlt_End_IT
+
+#define HAL_HASHEx_SHA224_Accumulate HAL_HASHEx_SHA224_Accmlt
+#define HAL_HASHEx_SHA224_Accumulate_End HAL_HASHEx_SHA224_Accmlt_End
+#define HAL_HASHEx_SHA224_Accumulate_IT HAL_HASHEx_SHA224_Accmlt_IT
+#define HAL_HASHEx_SHA224_Accumulate_End_IT HAL_HASHEx_SHA224_Accmlt_End_IT
+
+#define HAL_HASHEx_SHA256_Accumulate HAL_HASHEx_SHA256_Accmlt
+#define HAL_HASHEx_SHA256_Accumulate_End HAL_HASHEx_SHA256_Accmlt_End
+#define HAL_HASHEx_SHA256_Accumulate_IT HAL_HASHEx_SHA256_Accmlt_IT
+#define HAL_HASHEx_SHA256_Accumulate_End_IT HAL_HASHEx_SHA256_Accmlt_End_IT
+
+#endif /* STM32L4 || STM32F4 || STM32F7 || STM32H7 */
/**
* @}
*/
@@ -1221,6 +1495,13 @@
#endif
#define HAL_ADC_EnableBuffer_Cmd(cmd) (((cmd)==ENABLE) ? HAL_ADCEx_EnableVREFINT() : HAL_ADCEx_DisableVREFINT())
#define HAL_ADC_EnableBufferSensor_Cmd(cmd) (((cmd)==ENABLE) ? HAL_ADCEx_EnableVREFINTTempSensor() : HAL_ADCEx_DisableVREFINTTempSensor())
+#if defined(STM32H7A3xx) || defined(STM32H7B3xx) || defined(STM32H7B0xx) || defined(STM32H7A3xxQ) || defined(STM32H7B3xxQ) || defined(STM32H7B0xxQ)
+#define HAL_EnableSRDomainDBGStopMode HAL_EnableDomain3DBGStopMode
+#define HAL_DisableSRDomainDBGStopMode HAL_DisableDomain3DBGStopMode
+#define HAL_EnableSRDomainDBGStandbyMode HAL_EnableDomain3DBGStandbyMode
+#define HAL_DisableSRDomainDBGStandbyMode HAL_DisableDomain3DBGStandbyMode
+#endif /* STM32H7A3xx || STM32H7B3xx || STM32H7B0xx || STM32H7A3xxQ || STM32H7B3xxQ || STM32H7B0xxQ */
+
/**
* @}
*/
@@ -1250,16 +1531,18 @@
#define HAL_I2CFastModePlusConfig(SYSCFG_I2CFastModePlus, cmd) (((cmd)==ENABLE)? HAL_I2CEx_EnableFastModePlus(SYSCFG_I2CFastModePlus): HAL_I2CEx_DisableFastModePlus(SYSCFG_I2CFastModePlus))
-#if defined(STM32H7) || defined(STM32WB) || defined(STM32G0) || defined(STM32F4) || defined(STM32F7)
+#if defined(STM32H7) || defined(STM32WB) || defined(STM32G0) || defined(STM32F0) || defined(STM32F1) || defined(STM32F2) || defined(STM32F3) || defined(STM32F4) || defined(STM32F7) || defined(STM32L0) || defined(STM32L4) || defined(STM32L5) || defined(STM32G4)
#define HAL_I2C_Master_Sequential_Transmit_IT HAL_I2C_Master_Seq_Transmit_IT
#define HAL_I2C_Master_Sequential_Receive_IT HAL_I2C_Master_Seq_Receive_IT
#define HAL_I2C_Slave_Sequential_Transmit_IT HAL_I2C_Slave_Seq_Transmit_IT
#define HAL_I2C_Slave_Sequential_Receive_IT HAL_I2C_Slave_Seq_Receive_IT
+#endif /* STM32H7 || STM32WB || STM32G0 || STM32F0 || STM32F1 || STM32F2 || STM32F3 || STM32F4 || STM32F7 || STM32L0 || STM32L4 || STM32L5 || STM32G4 */
+#if defined(STM32H7) || defined(STM32WB) || defined(STM32G0) || defined(STM32F4) || defined(STM32F7) || defined(STM32L0) || defined(STM32L4) || defined(STM32L5) || defined(STM32G4)
#define HAL_I2C_Master_Sequential_Transmit_DMA HAL_I2C_Master_Seq_Transmit_DMA
#define HAL_I2C_Master_Sequential_Receive_DMA HAL_I2C_Master_Seq_Receive_DMA
#define HAL_I2C_Slave_Sequential_Transmit_DMA HAL_I2C_Slave_Seq_Transmit_DMA
#define HAL_I2C_Slave_Sequential_Receive_DMA HAL_I2C_Slave_Seq_Receive_DMA
-#endif /* STM32H7 || STM32WB || STM32G0 || STM32F4 || STM32F7 */
+#endif /* STM32H7 || STM32WB || STM32G0 || STM32F4 || STM32F7 || STM32L0 || STM32L4 || STM32L5 || STM32G4 */
#if defined(STM32F4)
#define HAL_FMPI2C_Master_Sequential_Transmit_IT HAL_FMPI2C_Master_Seq_Transmit_IT
@@ -1278,6 +1561,13 @@
/** @defgroup HAL_PWR_Aliased HAL PWR Aliased maintained for legacy purpose
* @{
*/
+
+#if defined(STM32G0)
+#define HAL_PWR_ConfigPVD HAL_PWREx_ConfigPVD
+#define HAL_PWR_EnablePVD HAL_PWREx_EnablePVD
+#define HAL_PWR_DisablePVD HAL_PWREx_DisablePVD
+#define HAL_PWR_PVD_IRQHandler HAL_PWREx_PVD_IRQHandler
+#endif
#define HAL_PWR_PVDConfig HAL_PWR_ConfigPVD
#define HAL_PWR_DisableBkUpReg HAL_PWREx_DisableBkUpReg
#define HAL_PWR_DisableFlashPowerDown HAL_PWREx_DisableFlashPowerDown
@@ -1350,14 +1640,14 @@
#define HAL_TIM_DMAError TIM_DMAError
#define HAL_TIM_DMACaptureCplt TIM_DMACaptureCplt
#define HAL_TIMEx_DMACommutationCplt TIMEx_DMACommutationCplt
-#if defined(STM32H7) || defined(STM32G0) || defined(STM32F7) || defined(STM32F4) || defined(STM32L0)
+#if defined(STM32H7) || defined(STM32G0) || defined(STM32F0) || defined(STM32F1) || defined(STM32F2) || defined(STM32F3) || defined(STM32F4) || defined(STM32F7) || defined(STM32L0) || defined(STM32L4)
#define HAL_TIM_SlaveConfigSynchronization HAL_TIM_SlaveConfigSynchro
#define HAL_TIM_SlaveConfigSynchronization_IT HAL_TIM_SlaveConfigSynchro_IT
#define HAL_TIMEx_CommutationCallback HAL_TIMEx_CommutCallback
#define HAL_TIMEx_ConfigCommutationEvent HAL_TIMEx_ConfigCommutEvent
#define HAL_TIMEx_ConfigCommutationEvent_IT HAL_TIMEx_ConfigCommutEvent_IT
#define HAL_TIMEx_ConfigCommutationEvent_DMA HAL_TIMEx_ConfigCommutEvent_DMA
-#endif /* STM32H7 || STM32G0 || STM32F7 || STM32F4 || STM32L0 */
+#endif /* STM32H7 || STM32G0 || STM32F0 || STM32F1 || STM32F2 || STM32F3 || STM32F4 || STM32F7 || STM32L0 */
/**
* @}
*/
@@ -2476,12 +2766,28 @@
#define __USB_OTG_FS_CLK_DISABLE __HAL_RCC_USB_OTG_FS_CLK_DISABLE
#define __USB_OTG_FS_CLK_ENABLE __HAL_RCC_USB_OTG_FS_CLK_ENABLE
#define __USB_RELEASE_RESET __HAL_RCC_USB_RELEASE_RESET
+
+#if defined(STM32H7)
+#define __HAL_RCC_WWDG_CLK_DISABLE __HAL_RCC_WWDG1_CLK_DISABLE
+#define __HAL_RCC_WWDG_CLK_ENABLE __HAL_RCC_WWDG1_CLK_ENABLE
+#define __HAL_RCC_WWDG_CLK_SLEEP_DISABLE __HAL_RCC_WWDG1_CLK_SLEEP_DISABLE
+#define __HAL_RCC_WWDG_CLK_SLEEP_ENABLE __HAL_RCC_WWDG1_CLK_SLEEP_ENABLE
+
+#define __HAL_RCC_WWDG_FORCE_RESET ((void)0U) /* Not available on the STM32H7*/
+#define __HAL_RCC_WWDG_RELEASE_RESET ((void)0U) /* Not available on the STM32H7*/
+
+
+#define __HAL_RCC_WWDG_IS_CLK_ENABLED __HAL_RCC_WWDG1_IS_CLK_ENABLED
+#define __HAL_RCC_WWDG_IS_CLK_DISABLED __HAL_RCC_WWDG1_IS_CLK_DISABLED
+#endif
+
#define __WWDG_CLK_DISABLE __HAL_RCC_WWDG_CLK_DISABLE
#define __WWDG_CLK_ENABLE __HAL_RCC_WWDG_CLK_ENABLE
#define __WWDG_CLK_SLEEP_DISABLE __HAL_RCC_WWDG_CLK_SLEEP_DISABLE
#define __WWDG_CLK_SLEEP_ENABLE __HAL_RCC_WWDG_CLK_SLEEP_ENABLE
#define __WWDG_FORCE_RESET __HAL_RCC_WWDG_FORCE_RESET
#define __WWDG_RELEASE_RESET __HAL_RCC_WWDG_RELEASE_RESET
+
#define __TIM21_CLK_ENABLE __HAL_RCC_TIM21_CLK_ENABLE
#define __TIM21_CLK_DISABLE __HAL_RCC_TIM21_CLK_DISABLE
#define __TIM21_FORCE_RESET __HAL_RCC_TIM21_FORCE_RESET
@@ -2814,6 +3120,15 @@
#define __WWDG_IS_CLK_ENABLED __HAL_RCC_WWDG_IS_CLK_ENABLED
#define __WWDG_IS_CLK_DISABLED __HAL_RCC_WWDG_IS_CLK_DISABLED
+#if defined(STM32L1)
+#define __HAL_RCC_CRYP_CLK_DISABLE __HAL_RCC_AES_CLK_DISABLE
+#define __HAL_RCC_CRYP_CLK_ENABLE __HAL_RCC_AES_CLK_ENABLE
+#define __HAL_RCC_CRYP_CLK_SLEEP_DISABLE __HAL_RCC_AES_CLK_SLEEP_DISABLE
+#define __HAL_RCC_CRYP_CLK_SLEEP_ENABLE __HAL_RCC_AES_CLK_SLEEP_ENABLE
+#define __HAL_RCC_CRYP_FORCE_RESET __HAL_RCC_AES_FORCE_RESET
+#define __HAL_RCC_CRYP_RELEASE_RESET __HAL_RCC_AES_RELEASE_RESET
+#endif /* STM32L1 */
+
#if defined(STM32F4)
#define __HAL_RCC_SDMMC1_FORCE_RESET __HAL_RCC_SDIO_FORCE_RESET
#define __HAL_RCC_SDMMC1_RELEASE_RESET __HAL_RCC_SDIO_RELEASE_RESET
@@ -2930,7 +3245,7 @@
#if defined(STM32L4)
#define RCC_RTCCLKSOURCE_NO_CLK RCC_RTCCLKSOURCE_NONE
-#elif defined(STM32WB) || defined(STM32G0)
+#elif defined(STM32WB) || defined(STM32G0) || defined(STM32G4) || defined(STM32L5)
#else
#define RCC_RTCCLKSOURCE_NONE RCC_RTCCLKSOURCE_NO_CLK
#endif
@@ -3058,7 +3373,7 @@
/** @defgroup HAL_RTC_Aliased_Macros HAL RTC Aliased Macros maintained for legacy purpose
* @{
*/
-#if defined (STM32G0) || defined (STM32L412xx) || defined (STM32L422xx) || defined (STM32L4P5xx) || defined (STM32L4Q5xx)
+#if defined (STM32G0) || defined (STM32L5) || defined (STM32L412xx) || defined (STM32L422xx) || defined (STM32L4P5xx) || defined (STM32L4Q5xx) || defined (STM32G4)
#else
#define __HAL_RTC_CLEAR_FLAG __HAL_RTC_EXTI_CLEAR_FLAG
#endif
@@ -3174,14 +3489,14 @@
#define SDIO_IRQHandler SDMMC1_IRQHandler
#endif
-#if defined(STM32F7) || defined(STM32F4) || defined(STM32F2)
+#if defined(STM32F7) || defined(STM32F4) || defined(STM32F2) || defined(STM32L4) || defined(STM32H7)
#define HAL_SD_CardCIDTypedef HAL_SD_CardCIDTypeDef
#define HAL_SD_CardCSDTypedef HAL_SD_CardCSDTypeDef
#define HAL_SD_CardStatusTypedef HAL_SD_CardStatusTypeDef
#define HAL_SD_CardStateTypedef HAL_SD_CardStateTypeDef
#endif
-#if defined(STM32H7)
+#if defined(STM32H7) || defined(STM32L5)
#define HAL_MMCEx_Read_DMADoubleBuffer0CpltCallback HAL_MMCEx_Read_DMADoubleBuf0CpltCallback
#define HAL_MMCEx_Read_DMADoubleBuffer1CpltCallback HAL_MMCEx_Read_DMADoubleBuf1CpltCallback
#define HAL_MMCEx_Write_DMADoubleBuffer0CpltCallback HAL_MMCEx_Write_DMADoubleBuf0CpltCallback
@@ -3421,18 +3736,28 @@
/** @defgroup HAL_HRTIM_Aliased_Functions HAL HRTIM Aliased Functions maintained for legacy purpose
* @{
*/
-#if defined (STM32H7) || defined (STM32F3)
-#define HAL_HRTIM_WaveformCounterStart_IT HAL_HRTIM_WaveformCountStart_IT
-#define HAL_HRTIM_WaveformCounterStart_DMA HAL_HRTIM_WaveformCountStart_DMA
-#define HAL_HRTIM_WaveformCounterStart HAL_HRTIM_WaveformCountStart
-#define HAL_HRTIM_WaveformCounterStop_IT HAL_HRTIM_WaveformCountStop_IT
-#define HAL_HRTIM_WaveformCounterStop_DMA HAL_HRTIM_WaveformCountStop_DMA
-#define HAL_HRTIM_WaveformCounterStop HAL_HRTIM_WaveformCountStop
+#if defined (STM32H7) || defined (STM32G4) || defined (STM32F3)
+#define HAL_HRTIM_WaveformCounterStart_IT HAL_HRTIM_WaveformCountStart_IT
+#define HAL_HRTIM_WaveformCounterStart_DMA HAL_HRTIM_WaveformCountStart_DMA
+#define HAL_HRTIM_WaveformCounterStart HAL_HRTIM_WaveformCountStart
+#define HAL_HRTIM_WaveformCounterStop_IT HAL_HRTIM_WaveformCountStop_IT
+#define HAL_HRTIM_WaveformCounterStop_DMA HAL_HRTIM_WaveformCountStop_DMA
+#define HAL_HRTIM_WaveformCounterStop HAL_HRTIM_WaveformCountStop
#endif
/**
* @}
*/
+/** @defgroup HAL_QSPI_Aliased_Macros HAL QSPI Aliased Macros maintained for legacy purpose
+ * @{
+ */
+#if defined (STM32L4) || defined (STM32F4) || defined (STM32F7)
+#define HAL_QPSI_TIMEOUT_DEFAULT_VALUE HAL_QSPI_TIMEOUT_DEFAULT_VALUE
+#endif /* STM32L4 || STM32F4 || STM32F7 */
+/**
+ * @}
+ */
+
/** @defgroup HAL_PPP_Aliased_Macros HAL PPP Aliased Macros maintained for legacy purpose
* @{
*/
diff --git a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_TrueStudio/Boot/lib/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_exti.h b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_TrueStudio/Boot/lib/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_exti.h
index bf82a38e..c9f137c1 100644
--- a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_TrueStudio/Boot/lib/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_exti.h
+++ b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_TrueStudio/Boot/lib/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_exti.h
@@ -18,8 +18,8 @@
*/
/* Define to prevent recursive inclusion -------------------------------------*/
-#ifndef __STM32F7xx_HAL_EXTI_H
-#define __STM32F7xx_HAL_EXTI_H
+#ifndef STM32F7xx_HAL_EXTI_H
+#define STM32F7xx_HAL_EXTI_H
#ifdef __cplusplus
extern "C" {
@@ -38,14 +38,13 @@ extern "C" {
*/
/* Exported types ------------------------------------------------------------*/
+
/** @defgroup EXTI_Exported_Types EXTI Exported Types
* @{
*/
typedef enum
{
- HAL_EXTI_COMMON_CB_ID = 0x00U,
- HAL_EXTI_RISING_CB_ID = 0x01U,
- HAL_EXTI_FALLING_CB_ID = 0x02U,
+ HAL_EXTI_COMMON_CB_ID = 0x00U
} EXTI_CallbackIDTypeDef;
/**
@@ -68,6 +67,9 @@ typedef struct
This parameter can be a combination of @ref EXTI_Mode */
uint32_t Trigger; /*!< The Exti Trigger to be configured. This parameter
can be a value of @ref EXTI_Trigger */
+ uint32_t GPIOSel; /*!< The Exti GPIO multiplexer selection to be configured.
+ This parameter is only possible for line 0 to 15. It
+ can be a value of @ref EXTI_GPIOSel */
} EXTI_ConfigTypeDef;
/**
@@ -82,48 +84,36 @@ typedef struct
/** @defgroup EXTI_Line EXTI Line
* @{
*/
-#define EXTI_LINE_0 EXTI_IMR_IM0 /*!< External interrupt line 0 */
-#define EXTI_LINE_1 EXTI_IMR_IM1 /*!< External interrupt line 1 */
-#define EXTI_LINE_2 EXTI_IMR_IM2 /*!< External interrupt line 2 */
-#define EXTI_LINE_3 EXTI_IMR_IM3 /*!< External interrupt line 3 */
-#define EXTI_LINE_4 EXTI_IMR_IM4 /*!< External interrupt line 4 */
-#define EXTI_LINE_5 EXTI_IMR_IM5 /*!< External interrupt line 5 */
-#define EXTI_LINE_6 EXTI_IMR_IM6 /*!< External interrupt line 6 */
-#define EXTI_LINE_7 EXTI_IMR_IM7 /*!< External interrupt line 7 */
-#define EXTI_LINE_8 EXTI_IMR_IM8 /*!< External interrupt line 8 */
-#define EXTI_LINE_9 EXTI_IMR_IM9 /*!< External interrupt line 9 */
-#define EXTI_LINE_10 EXTI_IMR_IM10 /*!< External interrupt line 10 */
-#define EXTI_LINE_11 EXTI_IMR_IM11 /*!< External interrupt line 11 */
-#define EXTI_LINE_12 EXTI_IMR_IM12 /*!< External interrupt line 12 */
-#define EXTI_LINE_13 EXTI_IMR_IM13 /*!< External interrupt line 13 */
-#define EXTI_LINE_14 EXTI_IMR_IM14 /*!< External interrupt line 14 */
-#define EXTI_LINE_15 EXTI_IMR_IM15 /*!< External interrupt line 15 */
-#if defined(EXTI_IMR_IM16)
-#define EXTI_LINE_16 EXTI_IMR_IM16 /*!< External interrupt line 16 Connected to the PVD Output */
-#endif /* EXTI_IMR_IM16 */
-#if defined(EXTI_IMR_IM17)
-#define EXTI_LINE_17 EXTI_IMR_IM17 /*!< External interrupt line 17 Connected to the RTC Alarm event */
-#endif /* EXTI_IMR_IM17 */
-#if defined(EXTI_IMR_IM18)
-#define EXTI_LINE_18 EXTI_IMR_IM18 /*!< External interrupt line 18 Connected to the USB OTG FS Wakeup from suspend event */
-#endif /* EXTI_IMR_IM18 */
-#if defined(EXTI_IMR_IM19)
-#define EXTI_LINE_19 EXTI_IMR_IM19 /*!< External interrupt line 19 Connected to the Ethernet Wakeup event */
-#endif /* EXTI_IMR_IM19 */
-#if defined(EXTI_IMR_IM20)
-#define EXTI_LINE_20 EXTI_IMR_IM20 /*!< External interrupt line 20 Connected to the USB OTG HS (configured in FS) Wakeup event */
-#endif /* EXTI_IMR_IM20 */
-#if defined(EXTI_IMR_IM21)
-#define EXTI_LINE_21 EXTI_IMR_IM21 /*!< External interrupt line 21 Connected to the RTC Tamper and Time Stamp events */
-#endif /* EXTI_IMR_IM21 */
-#if defined(EXTI_IMR_IM22)
-#define EXTI_LINE_22 EXTI_IMR_IM22 /*!< External interrupt line 22 Connected to the RTC Wakeup event */
-#endif /* EXTI_IMR_IM22 */
-#if defined(EXTI_IMR_IM23)
-#define EXTI_LINE_23 EXTI_IMR_IM23 /*!< External interrupt line 23 Connected to the LPTIM Wakeup event */
-#endif /* EXTI_IMR_IM23 */
+#define EXTI_LINE_0 (EXTI_GPIO | 0x00u) /*!< External interrupt line 0 */
+#define EXTI_LINE_1 (EXTI_GPIO | 0x01u) /*!< External interrupt line 1 */
+#define EXTI_LINE_2 (EXTI_GPIO | 0x02u) /*!< External interrupt line 2 */
+#define EXTI_LINE_3 (EXTI_GPIO | 0x03u) /*!< External interrupt line 3 */
+#define EXTI_LINE_4 (EXTI_GPIO | 0x04u) /*!< External interrupt line 4 */
+#define EXTI_LINE_5 (EXTI_GPIO | 0x05u) /*!< External interrupt line 5 */
+#define EXTI_LINE_6 (EXTI_GPIO | 0x06u) /*!< External interrupt line 6 */
+#define EXTI_LINE_7 (EXTI_GPIO | 0x07u) /*!< External interrupt line 7 */
+#define EXTI_LINE_8 (EXTI_GPIO | 0x08u) /*!< External interrupt line 8 */
+#define EXTI_LINE_9 (EXTI_GPIO | 0x09u) /*!< External interrupt line 9 */
+#define EXTI_LINE_10 (EXTI_GPIO | 0x0Au) /*!< External interrupt line 10 */
+#define EXTI_LINE_11 (EXTI_GPIO | 0x0Bu) /*!< External interrupt line 11 */
+#define EXTI_LINE_12 (EXTI_GPIO | 0x0Cu) /*!< External interrupt line 12 */
+#define EXTI_LINE_13 (EXTI_GPIO | 0x0Du) /*!< External interrupt line 13 */
+#define EXTI_LINE_14 (EXTI_GPIO | 0x0Eu) /*!< External interrupt line 14 */
+#define EXTI_LINE_15 (EXTI_GPIO | 0x0Fu) /*!< External interrupt line 15 */
+#define EXTI_LINE_16 (EXTI_CONFIG | 0x10u) /*!< External interrupt line 16 Connected to the PVD Output */
+#define EXTI_LINE_17 (EXTI_CONFIG | 0x11u) /*!< External interrupt line 17 Connected to the RTC Alarm event */
+#define EXTI_LINE_18 (EXTI_CONFIG | 0x12u) /*!< External interrupt line 18 Connected to the USB OTG FS Wakeup from suspend event */
+#if defined(ETH)
+#define EXTI_LINE_19 (EXTI_CONFIG | 0x13u) /*!< External interrupt line 19 Connected to the Ethernet Wakeup event */
+#else
+#define EXTI_LINE_19 (EXTI_RESERVED | 0x13u) /*!< No interrupt supported in this line */
+#endif /* ETH */
+#define EXTI_LINE_20 (EXTI_CONFIG | 0x14u) /*!< External interrupt line 20 Connected to the USB OTG HS (configured in FS) Wakeup event */
+#define EXTI_LINE_21 (EXTI_CONFIG | 0x15u) /*!< External interrupt line 21 Connected to the RTC Tamper and Time Stamp events */
+#define EXTI_LINE_22 (EXTI_CONFIG | 0x16u) /*!< External interrupt line 22 Connected to the RTC Wakeup event */
+#define EXTI_LINE_23 (EXTI_CONFIG | 0x17u) /*!< External interrupt line 23 Connected to the LPTIM Wakeup event */
#if defined(EXTI_IMR_IM24)
-#define EXTI_LINE_24 EXTI_IMR_IM24 /*!< External interrupt line 24 Connected to the MDIO Slave global Interrupt Wakeup event */
+#define EXTI_LINE_24 (EXTI_CONFIG | 0x18u) /*!< External interrupt line 24 Connected to the MDIO Slave global Interrupt Wakeup event */
#endif /* EXTI_IMR_IM24 */
/**
* @}
@@ -142,6 +132,7 @@ typedef struct
/** @defgroup EXTI_Trigger EXTI Trigger
* @{
*/
+
#define EXTI_TRIGGER_NONE 0x00000000u
#define EXTI_TRIGGER_RISING 0x00000001u
#define EXTI_TRIGGER_FALLING 0x00000002u
@@ -150,6 +141,24 @@ typedef struct
* @}
*/
+/** @defgroup EXTI_GPIOSel EXTI GPIOSel
+ * @brief
+ * @{
+ */
+#define EXTI_GPIOA 0x00000000u
+#define EXTI_GPIOB 0x00000001u
+#define EXTI_GPIOC 0x00000002u
+#define EXTI_GPIOD 0x00000003u
+#define EXTI_GPIOE 0x00000004u
+#define EXTI_GPIOF 0x00000005u
+#define EXTI_GPIOG 0x00000006u
+#define EXTI_GPIOH 0x00000007u
+#define EXTI_GPIOI 0x00000008u
+#define EXTI_GPIOJ 0x00000009u
+#if defined (GPIOK)
+#define EXTI_GPIOK 0x0000000Au
+#endif /* GPIOK */
+
/**
* @}
*/
@@ -167,6 +176,20 @@ typedef struct
/** @defgroup EXTI_Private_Constants EXTI Private Constants
* @{
*/
+/**
+ * @brief EXTI Line property definition
+ */
+#define EXTI_PROPERTY_SHIFT 24u
+#define EXTI_CONFIG (0x02uL << EXTI_PROPERTY_SHIFT)
+#define EXTI_GPIO ((0x04uL << EXTI_PROPERTY_SHIFT) | EXTI_CONFIG)
+#define EXTI_RESERVED (0x08uL << EXTI_PROPERTY_SHIFT)
+#define EXTI_PROPERTY_MASK (EXTI_CONFIG | EXTI_GPIO)
+
+/**
+ * @brief EXTI bit usage
+ */
+#define EXTI_PIN_MASK 0x0000001Fu
+
/**
* @brief EXTI Mask for interrupt & event mode
*/
@@ -175,12 +198,17 @@ typedef struct
/**
* @brief EXTI Mask for trigger possibilities
*/
-#define EXTI_TRIGGER_MASK (EXTI_TRIGGER_RISING | EXTI_TRIGGER_FALLING | EXTI_TRIGGER_RISING_FALLING)
+#define EXTI_TRIGGER_MASK (EXTI_TRIGGER_RISING | EXTI_TRIGGER_FALLING)
/**
* @brief EXTI Line number
*/
+#if defined(EXTI_IMR_IM24)
#define EXTI_LINE_NB 25u
+#else
+#define EXTI_LINE_NB 24u
+#endif /* EXTI_IMR_IM24 */
+
/**
* @}
@@ -190,16 +218,47 @@ typedef struct
/** @defgroup EXTI_Private_Macros EXTI Private Macros
* @{
*/
-#define IS_EXTI_LINE(__LINE__) ((((__LINE__) & ~EXTI_IMR_IM) == 0x00U) && (__LINE__))
+#define IS_EXTI_LINE(__LINE__) ((((__LINE__) & ~(EXTI_PROPERTY_MASK | EXTI_PIN_MASK)) == 0x00u) && \
+ ((((__LINE__) & EXTI_PROPERTY_MASK) == EXTI_CONFIG) || \
+ (((__LINE__) & EXTI_PROPERTY_MASK) == EXTI_GPIO)) && \
+ (((__LINE__) & EXTI_PIN_MASK) < EXTI_LINE_NB))
-#define IS_EXTI_MODE(__LINE__) ((((__LINE__) & ~EXTI_MODE_MASK) == 0x00U))
+#define IS_EXTI_MODE(__LINE__) ((((__LINE__) & EXTI_MODE_MASK) != 0x00u) && \
+ (((__LINE__) & ~EXTI_MODE_MASK) == 0x00u))
-#define IS_EXTI_TRIGGER(__LINE__) (((__LINE__) & ~EXTI_TRIGGER_MASK) == 0x00U)
+#define IS_EXTI_TRIGGER(__LINE__) (((__LINE__) & ~EXTI_TRIGGER_MASK) == 0x00u)
#define IS_EXTI_PENDING_EDGE(__LINE__) (((__LINE__) == EXTI_TRIGGER_FALLING) || \
((__LINE__) == EXTI_TRIGGER_RISING) || \
((__LINE__) == EXTI_TRIGGER_RISING_FALLING))
+#define IS_EXTI_CONFIG_LINE(__LINE__) (((__LINE__) & EXTI_CONFIG) != 0x00u)
+
+#if defined (GPIOK)
+#define IS_EXTI_GPIO_PORT(__PORT__) (((__PORT__) == EXTI_GPIOA) || \
+ ((__PORT__) == EXTI_GPIOB) || \
+ ((__PORT__) == EXTI_GPIOC) || \
+ ((__PORT__) == EXTI_GPIOD) || \
+ ((__PORT__) == EXTI_GPIOE) || \
+ ((__PORT__) == EXTI_GPIOF) || \
+ ((__PORT__) == EXTI_GPIOG) || \
+ ((__PORT__) == EXTI_GPIOH) || \
+ ((__PORT__) == EXTI_GPIOI) || \
+ ((__PORT__) == EXTI_GPIOJ) || \
+ ((__PORT__) == EXTI_GPIOK))
+#else
+#define IS_EXTI_GPIO_PORT(__PORT__) (((__PORT__) == EXTI_GPIOA) || \
+ ((__PORT__) == EXTI_GPIOB) || \
+ ((__PORT__) == EXTI_GPIOC) || \
+ ((__PORT__) == EXTI_GPIOD) || \
+ ((__PORT__) == EXTI_GPIOE) || \
+ ((__PORT__) == EXTI_GPIOF) || \
+ ((__PORT__) == EXTI_GPIOG) || \
+ ((__PORT__) == EXTI_GPIOH) || \
+ ((__PORT__) == EXTI_GPIOI) || \
+ ((__PORT__) == EXTI_GPIOJ))
+#endif /* GPIOK */
+
#define IS_EXTI_GPIO_PIN(__PIN__) ((__PIN__) < 16U)
/**
* @}
@@ -255,6 +314,6 @@ void HAL_EXTI_GenerateSWI(EXTI_HandleTypeDef *hexti);
}
#endif
-#endif /* __STM32F7xx_HAL_EXTI_H */
+#endif /* STM32F7xx_HAL_EXTI_H */
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff --git a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_TrueStudio/Boot/lib/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_gpio.h b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_TrueStudio/Boot/lib/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_gpio.h
index 3d9de6e2..08e0acb2 100644
--- a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_TrueStudio/Boot/lib/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_gpio.h
+++ b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_TrueStudio/Boot/lib/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_gpio.h
@@ -262,7 +262,7 @@ void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin);
* @{
*/
#define IS_GPIO_PIN_ACTION(ACTION) (((ACTION) == GPIO_PIN_RESET) || ((ACTION) == GPIO_PIN_SET))
-#define IS_GPIO_PIN(__PIN__) ((((__PIN__) & GPIO_PIN_MASK) != (uint32_t)0x00))
+#define IS_GPIO_PIN(__PIN__) ((((uint32_t)(__PIN__) & GPIO_PIN_MASK) != 0x00U))
#define IS_GPIO_MODE(MODE) (((MODE) == GPIO_MODE_INPUT) ||\
((MODE) == GPIO_MODE_OUTPUT_PP) ||\
((MODE) == GPIO_MODE_OUTPUT_OD) ||\
diff --git a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_TrueStudio/Boot/lib/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_i2c_ex.h b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_TrueStudio/Boot/lib/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_i2c_ex.h
index d5d75314..83037894 100644
--- a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_TrueStudio/Boot/lib/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_i2c_ex.h
+++ b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_TrueStudio/Boot/lib/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_i2c_ex.h
@@ -167,6 +167,9 @@ void HAL_I2CEx_DisableFastModePlus(uint32_t ConfigFastModePlus);
(((__CONFIG__) & I2C_FASTMODEPLUS_PB9) == I2C_FASTMODEPLUS_PB9) || \
(((__CONFIG__) & I2C_FASTMODEPLUS_I2C1) == I2C_FASTMODEPLUS_I2C1))
#endif /* SYSCFG_PMC_I2C1_FMP && SYSCFG_PMC_I2C2_FMP && SYSCFG_PMC_I2C3_FMP && SYSCFG_PMC_I2C4_FMP */
+
+
+
/**
* @}
*/
diff --git a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_TrueStudio/Boot/lib/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_pcd.h b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_TrueStudio/Boot/lib/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_pcd.h
index 0633bb22..2650b739 100644
--- a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_TrueStudio/Boot/lib/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_pcd.h
+++ b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_TrueStudio/Boot/lib/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_pcd.h
@@ -96,16 +96,16 @@ typedef struct __PCD_HandleTypeDef
typedef struct
#endif /* USE_HAL_PCD_REGISTER_CALLBACKS */
{
- PCD_TypeDef *Instance; /*!< Register base address */
- PCD_InitTypeDef Init; /*!< PCD required parameters */
- __IO uint8_t USB_Address; /*!< USB Address */
- PCD_EPTypeDef IN_ep[16]; /*!< IN endpoint parameters */
- PCD_EPTypeDef OUT_ep[16]; /*!< OUT endpoint parameters */
- HAL_LockTypeDef Lock; /*!< PCD peripheral status */
- __IO PCD_StateTypeDef State; /*!< PCD communication state */
- __IO uint32_t ErrorCode; /*!< PCD Error code */
- uint32_t Setup[12]; /*!< Setup packet buffer */
- PCD_LPM_StateTypeDef LPM_State; /*!< LPM State */
+ PCD_TypeDef *Instance; /*!< Register base address */
+ PCD_InitTypeDef Init; /*!< PCD required parameters */
+ __IO uint8_t USB_Address; /*!< USB Address */
+ PCD_EPTypeDef IN_ep[16]; /*!< IN endpoint parameters */
+ PCD_EPTypeDef OUT_ep[16]; /*!< OUT endpoint parameters */
+ HAL_LockTypeDef Lock; /*!< PCD peripheral status */
+ __IO PCD_StateTypeDef State; /*!< PCD communication state */
+ __IO uint32_t ErrorCode; /*!< PCD Error code */
+ uint32_t Setup[12]; /*!< Setup packet buffer */
+ PCD_LPM_StateTypeDef LPM_State; /*!< LPM State */
uint32_t BESL;
@@ -148,9 +148,9 @@ typedef struct
/** @defgroup PCD_Speed PCD Speed
* @{
*/
-#define PCD_SPEED_HIGH 0U
-#define PCD_SPEED_HIGH_IN_FULL 1U
-#define PCD_SPEED_FULL 2U
+#define PCD_SPEED_HIGH USBD_HS_SPEED
+#define PCD_SPEED_HIGH_IN_FULL USBD_HSINFS_SPEED
+#define PCD_SPEED_FULL USBD_FS_SPEED
/**
* @}
*/
@@ -207,20 +207,20 @@ typedef struct
#define __HAL_USB_OTG_HS_WAKEUP_EXTI_GET_FLAG() EXTI->PR & (USB_OTG_HS_WAKEUP_EXTI_LINE)
#define __HAL_USB_OTG_HS_WAKEUP_EXTI_CLEAR_FLAG() EXTI->PR = (USB_OTG_HS_WAKEUP_EXTI_LINE)
-#define __HAL_USB_OTG_HS_WAKEUP_EXTI_ENABLE_RISING_EDGE() \
- do { \
+#define __HAL_USB_OTG_HS_WAKEUP_EXTI_ENABLE_RISING_EDGE() \
+ do { \
EXTI->FTSR &= ~(USB_OTG_HS_WAKEUP_EXTI_LINE); \
- EXTI->RTSR |= USB_OTG_HS_WAKEUP_EXTI_LINE; \
+ EXTI->RTSR |= USB_OTG_HS_WAKEUP_EXTI_LINE; \
} while(0U)
#define __HAL_USB_OTG_FS_WAKEUP_EXTI_ENABLE_IT() EXTI->IMR |= USB_OTG_FS_WAKEUP_EXTI_LINE
#define __HAL_USB_OTG_FS_WAKEUP_EXTI_DISABLE_IT() EXTI->IMR &= ~(USB_OTG_FS_WAKEUP_EXTI_LINE)
#define __HAL_USB_OTG_FS_WAKEUP_EXTI_GET_FLAG() EXTI->PR & (USB_OTG_FS_WAKEUP_EXTI_LINE)
#define __HAL_USB_OTG_FS_WAKEUP_EXTI_CLEAR_FLAG() EXTI->PR = USB_OTG_FS_WAKEUP_EXTI_LINE
-#define __HAL_USB_OTG_FS_WAKEUP_EXTI_ENABLE_RISING_EDGE() \
- do { \
+#define __HAL_USB_OTG_FS_WAKEUP_EXTI_ENABLE_RISING_EDGE() \
+ do { \
EXTI->FTSR &= ~(USB_OTG_FS_WAKEUP_EXTI_LINE); \
- EXTI->RTSR |= USB_OTG_FS_WAKEUP_EXTI_LINE; \
+ EXTI->RTSR |= USB_OTG_FS_WAKEUP_EXTI_LINE; \
} while(0U)
#endif /* defined (USB_OTG_FS) || defined (USB_OTG_HS) */
@@ -256,7 +256,7 @@ typedef enum
HAL_PCD_SUSPEND_CB_ID = 0x04, /*!< USB PCD Suspend callback ID */
HAL_PCD_RESUME_CB_ID = 0x05, /*!< USB PCD Resume callback ID */
HAL_PCD_CONNECT_CB_ID = 0x06, /*!< USB PCD Connect callback ID */
- HAL_PCD_DISCONNECT_CB_ID = 0x07, /*!< USB PCD Disconnect callback ID */
+ HAL_PCD_DISCONNECT_CB_ID = 0x07, /*!< USB PCD Disconnect callback ID */
HAL_PCD_MSPINIT_CB_ID = 0x08, /*!< USB PCD MspInit callback ID */
HAL_PCD_MSPDEINIT_CB_ID = 0x09 /*!< USB PCD MspDeInit callback ID */
@@ -371,14 +371,6 @@ PCD_StateTypeDef HAL_PCD_GetState(PCD_HandleTypeDef *hpcd);
* @{
*/
#if defined (USB_OTG_FS) || defined (USB_OTG_HS)
-#define USB_OTG_FS_WAKEUP_EXTI_RISING_EDGE 0x08U
-#define USB_OTG_FS_WAKEUP_EXTI_FALLING_EDGE 0x0CU
-#define USB_OTG_FS_WAKEUP_EXTI_RISING_FALLING_EDGE 0x10U
-
-#define USB_OTG_HS_WAKEUP_EXTI_RISING_EDGE 0x08U
-#define USB_OTG_HS_WAKEUP_EXTI_FALLING_EDGE 0x0CU
-#define USB_OTG_HS_WAKEUP_EXTI_RISING_FALLING_EDGE 0x10U
-
#define USB_OTG_FS_WAKEUP_EXTI_LINE (0x1U << 18) /*!< USB FS EXTI Line WakeUp Interrupt */
#define USB_OTG_HS_WAKEUP_EXTI_LINE (0x1U << 20) /*!< USB HS EXTI Line WakeUp Interrupt */
#endif /* defined (USB_OTG_FS) || defined (USB_OTG_HS) */
diff --git a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_TrueStudio/Boot/lib/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_tim.h b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_TrueStudio/Boot/lib/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_tim.h
index 6a29ae50..ab067a59 100644
--- a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_TrueStudio/Boot/lib/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_tim.h
+++ b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_TrueStudio/Boot/lib/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_tim.h
@@ -167,7 +167,7 @@ typedef struct
This parameter can be a value of @ref TIM_Encoder_Mode */
uint32_t IC1Polarity; /*!< Specifies the active edge of the input signal.
- This parameter can be a value of @ref TIM_Input_Capture_Polarity */
+ This parameter can be a value of @ref TIM_Encoder_Input_Polarity */
uint32_t IC1Selection; /*!< Specifies the input.
This parameter can be a value of @ref TIM_Input_Capture_Selection */
@@ -179,7 +179,7 @@ typedef struct
This parameter can be a number between Min_Data = 0x0 and Max_Data = 0xF */
uint32_t IC2Polarity; /*!< Specifies the active edge of the input signal.
- This parameter can be a value of @ref TIM_Input_Capture_Polarity */
+ This parameter can be a value of @ref TIM_Encoder_Input_Polarity */
uint32_t IC2Selection; /*!< Specifies the input.
This parameter can be a value of @ref TIM_Input_Capture_Selection */
@@ -235,7 +235,12 @@ typedef struct
uint32_t MasterOutputTrigger2; /*!< Trigger output2 (TRGO2) selection
This parameter can be a value of @ref TIM_Master_Mode_Selection_2 */
uint32_t MasterSlaveMode; /*!< Master/slave mode selection
- This parameter can be a value of @ref TIM_Master_Slave_Mode */
+ This parameter can be a value of @ref TIM_Master_Slave_Mode
+ @note When the Master/slave mode is enabled, the effect of
+ an event on the trigger input (TRGI) is delayed to allow a
+ perfect synchronization between the current timer and its
+ slaves (through TRGO). It is not mandatory in case of timer
+ synchronization mode. */
} TIM_MasterConfigTypeDef;
/**
@@ -518,6 +523,15 @@ typedef void (*pTIM_CallbackTypeDef)(TIM_HandleTypeDef *htim); /*!< pointer to
* @}
*/
+/** @defgroup TIM_Update_Interrupt_Flag_Remap TIM Update Interrupt Flag Remap
+ * @{
+ */
+#define TIM_UIFREMAP_DISABLE 0x00000000U /*!< Update interrupt flag remap disabled */
+#define TIM_UIFREMAP_ENABLE TIM_CR1_UIFREMAP /*!< Update interrupt flag remap enabled */
+/**
+ * @}
+ */
+
/** @defgroup TIM_ClockDivision TIM Clock Division
* @{
*/
@@ -611,6 +625,15 @@ typedef void (*pTIM_CallbackTypeDef)(TIM_HandleTypeDef *htim); /*!< pointer to
* @}
*/
+/** @defgroup TIM_Encoder_Input_Polarity TIM Encoder Input Polarity
+ * @{
+ */
+#define TIM_ENCODERINPUTPOLARITY_RISING TIM_INPUTCHANNELPOLARITY_RISING /*!< Encoder input with rising edge polarity */
+#define TIM_ENCODERINPUTPOLARITY_FALLING TIM_INPUTCHANNELPOLARITY_FALLING /*!< Encoder input with falling edge polarity */
+/**
+ * @}
+ */
+
/** @defgroup TIM_Input_Capture_Selection TIM Input Capture Selection
* @{
*/
@@ -1119,15 +1142,15 @@ typedef void (*pTIM_CallbackTypeDef)(TIM_HandleTypeDef *htim); /*!< pointer to
* @retval None
*/
#define __HAL_TIM_DISABLE(__HANDLE__) \
- do { \
- if (((__HANDLE__)->Instance->CCER & TIM_CCER_CCxE_MASK) == 0UL) \
- { \
- if(((__HANDLE__)->Instance->CCER & TIM_CCER_CCxNE_MASK) == 0UL) \
- { \
- (__HANDLE__)->Instance->CR1 &= ~(TIM_CR1_CEN); \
- } \
- } \
- } while(0)
+ do { \
+ if (((__HANDLE__)->Instance->CCER & TIM_CCER_CCxE_MASK) == 0UL) \
+ { \
+ if(((__HANDLE__)->Instance->CCER & TIM_CCER_CCxNE_MASK) == 0UL) \
+ { \
+ (__HANDLE__)->Instance->CR1 &= ~(TIM_CR1_CEN); \
+ } \
+ } \
+ } while(0)
/**
* @brief Disable the TIM main Output.
@@ -1136,15 +1159,15 @@ typedef void (*pTIM_CallbackTypeDef)(TIM_HandleTypeDef *htim); /*!< pointer to
* @note The Main Output Enable of a timer instance is disabled only if all the CCx and CCxN channels have been disabled
*/
#define __HAL_TIM_MOE_DISABLE(__HANDLE__) \
- do { \
- if (((__HANDLE__)->Instance->CCER & TIM_CCER_CCxE_MASK) == 0UL) \
- { \
- if(((__HANDLE__)->Instance->CCER & TIM_CCER_CCxNE_MASK) == 0UL) \
- { \
- (__HANDLE__)->Instance->BDTR &= ~(TIM_BDTR_MOE); \
- } \
- } \
- } while(0)
+ do { \
+ if (((__HANDLE__)->Instance->CCER & TIM_CCER_CCxE_MASK) == 0UL) \
+ { \
+ if(((__HANDLE__)->Instance->CCER & TIM_CCER_CCxNE_MASK) == 0UL) \
+ { \
+ (__HANDLE__)->Instance->BDTR &= ~(TIM_BDTR_MOE); \
+ } \
+ } \
+ } while(0)
/**
* @brief Disable the TIM main Output.
@@ -1279,7 +1302,8 @@ typedef void (*pTIM_CallbackTypeDef)(TIM_HandleTypeDef *htim); /*!< pointer to
* @arg TIM_IT_BREAK: Break interrupt
* @retval The state of TIM_IT (SET or RESET).
*/
-#define __HAL_TIM_GET_IT_SOURCE(__HANDLE__, __INTERRUPT__) ((((__HANDLE__)->Instance->DIER & (__INTERRUPT__)) == (__INTERRUPT__)) ? SET : RESET)
+#define __HAL_TIM_GET_IT_SOURCE(__HANDLE__, __INTERRUPT__) ((((__HANDLE__)->Instance->DIER & (__INTERRUPT__)) \
+ == (__INTERRUPT__)) ? SET : RESET)
/** @brief Clear the TIM interrupt pending bits.
* @param __HANDLE__ TIM handle
@@ -1297,6 +1321,31 @@ typedef void (*pTIM_CallbackTypeDef)(TIM_HandleTypeDef *htim); /*!< pointer to
*/
#define __HAL_TIM_CLEAR_IT(__HANDLE__, __INTERRUPT__) ((__HANDLE__)->Instance->SR = ~(__INTERRUPT__))
+/**
+ * @brief Force a continuous copy of the update interrupt flag (UIF) into the timer counter register (bit 31).
+ * @note This allows both the counter value and a potential roll-over condition signalled by the UIFCPY flag to be read in an atomic way.
+ * @param __HANDLE__ TIM handle.
+ * @retval None
+mode.
+ */
+#define __HAL_TIM_UIFREMAP_ENABLE(__HANDLE__) (((__HANDLE__)->Instance->CR1 |= TIM_CR1_UIFREMAP))
+
+/**
+ * @brief Disable update interrupt flag (UIF) remapping.
+ * @param __HANDLE__ TIM handle.
+ * @retval None
+mode.
+ */
+#define __HAL_TIM_UIFREMAP_DISABLE(__HANDLE__) (((__HANDLE__)->Instance->CR1 &= ~TIM_CR1_UIFREMAP))
+
+/**
+ * @brief Get update interrupt flag (UIF) copy status.
+ * @param __COUNTER__ Counter value.
+ * @retval The state of UIFCPY (TRUE or FALSE).
+mode.
+ */
+#define __HAL_TIM_GET_UIFCPY(__COUNTER__) (((__COUNTER__) & (TIM_CNT_UIFCPY)) == (TIM_CNT_UIFCPY))
+
/**
* @brief Indicates whether or not the TIM Counter is used as downcounter.
* @param __HANDLE__ TIM handle.
@@ -1316,6 +1365,8 @@ mode.
/**
* @brief Set the TIM Counter Register value on runtime.
+ * Note Please check if the bit 31 of CNT register is used as UIF copy or not, this may affect the counter range in case of 32 bits counter TIM instance.
+ * Bit 31 of CNT can be enabled/disabled using __HAL_TIM_UIFREMAP_ENABLE()/__HAL_TIM_UIFREMAP_DISABLE() macros.
* @param __HANDLE__ TIM handle.
* @param __COUNTER__ specifies the Counter register new value.
* @retval None
@@ -1327,8 +1378,7 @@ mode.
* @param __HANDLE__ TIM handle.
* @retval 16-bit or 32-bit value of the timer counter register (TIMx_CNT)
*/
-#define __HAL_TIM_GET_COUNTER(__HANDLE__) \
- ((__HANDLE__)->Instance->CNT)
+#define __HAL_TIM_GET_COUNTER(__HANDLE__) ((__HANDLE__)->Instance->CNT)
/**
* @brief Set the TIM Autoreload Register value on runtime without calling another time any Init function.
@@ -1337,18 +1387,17 @@ mode.
* @retval None
*/
#define __HAL_TIM_SET_AUTORELOAD(__HANDLE__, __AUTORELOAD__) \
- do{ \
- (__HANDLE__)->Instance->ARR = (__AUTORELOAD__); \
- (__HANDLE__)->Init.Period = (__AUTORELOAD__); \
- } while(0)
+ do{ \
+ (__HANDLE__)->Instance->ARR = (__AUTORELOAD__); \
+ (__HANDLE__)->Init.Period = (__AUTORELOAD__); \
+ } while(0)
/**
* @brief Get the TIM Autoreload Register value on runtime.
* @param __HANDLE__ TIM handle.
* @retval 16-bit or 32-bit value of the timer auto-reload register(TIMx_ARR)
*/
-#define __HAL_TIM_GET_AUTORELOAD(__HANDLE__) \
- ((__HANDLE__)->Instance->ARR)
+#define __HAL_TIM_GET_AUTORELOAD(__HANDLE__) ((__HANDLE__)->Instance->ARR)
/**
* @brief Set the TIM Clock Division value on runtime without calling another time any Init function.
@@ -1361,11 +1410,11 @@ mode.
* @retval None
*/
#define __HAL_TIM_SET_CLOCKDIVISION(__HANDLE__, __CKD__) \
- do{ \
- (__HANDLE__)->Instance->CR1 &= (~TIM_CR1_CKD); \
- (__HANDLE__)->Instance->CR1 |= (__CKD__); \
- (__HANDLE__)->Init.ClockDivision = (__CKD__); \
- } while(0)
+ do{ \
+ (__HANDLE__)->Instance->CR1 &= (~TIM_CR1_CKD); \
+ (__HANDLE__)->Instance->CR1 |= (__CKD__); \
+ (__HANDLE__)->Init.ClockDivision = (__CKD__); \
+ } while(0)
/**
* @brief Get the TIM Clock Division value on runtime.
@@ -1375,8 +1424,7 @@ mode.
* @arg TIM_CLOCKDIVISION_DIV2: tDTS=2*tCK_INT
* @arg TIM_CLOCKDIVISION_DIV4: tDTS=4*tCK_INT
*/
-#define __HAL_TIM_GET_CLOCKDIVISION(__HANDLE__) \
- ((__HANDLE__)->Instance->CR1 & TIM_CR1_CKD)
+#define __HAL_TIM_GET_CLOCKDIVISION(__HANDLE__) ((__HANDLE__)->Instance->CR1 & TIM_CR1_CKD)
/**
* @brief Set the TIM Input Capture prescaler on runtime without calling another time HAL_TIM_IC_ConfigChannel() function.
@@ -1396,10 +1444,10 @@ mode.
* @retval None
*/
#define __HAL_TIM_SET_ICPRESCALER(__HANDLE__, __CHANNEL__, __ICPSC__) \
- do{ \
- TIM_RESET_ICPRESCALERVALUE((__HANDLE__), (__CHANNEL__)); \
- TIM_SET_ICPRESCALERVALUE((__HANDLE__), (__CHANNEL__), (__ICPSC__)); \
- } while(0)
+ do{ \
+ TIM_RESET_ICPRESCALERVALUE((__HANDLE__), (__CHANNEL__)); \
+ TIM_SET_ICPRESCALERVALUE((__HANDLE__), (__CHANNEL__), (__ICPSC__)); \
+ } while(0)
/**
* @brief Get the TIM Input Capture prescaler on runtime.
@@ -1437,12 +1485,12 @@ mode.
* @retval None
*/
#define __HAL_TIM_SET_COMPARE(__HANDLE__, __CHANNEL__, __COMPARE__) \
-(((__CHANNEL__) == TIM_CHANNEL_1) ? ((__HANDLE__)->Instance->CCR1 = (__COMPARE__)) :\
- ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCR2 = (__COMPARE__)) :\
- ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCR3 = (__COMPARE__)) :\
- ((__CHANNEL__) == TIM_CHANNEL_4) ? ((__HANDLE__)->Instance->CCR4 = (__COMPARE__)) :\
- ((__CHANNEL__) == TIM_CHANNEL_5) ? ((__HANDLE__)->Instance->CCR5 = (__COMPARE__)) :\
- ((__HANDLE__)->Instance->CCR6 = (__COMPARE__)))
+ (((__CHANNEL__) == TIM_CHANNEL_1) ? ((__HANDLE__)->Instance->CCR1 = (__COMPARE__)) :\
+ ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCR2 = (__COMPARE__)) :\
+ ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCR3 = (__COMPARE__)) :\
+ ((__CHANNEL__) == TIM_CHANNEL_4) ? ((__HANDLE__)->Instance->CCR4 = (__COMPARE__)) :\
+ ((__CHANNEL__) == TIM_CHANNEL_5) ? ((__HANDLE__)->Instance->CCR5 = (__COMPARE__)) :\
+ ((__HANDLE__)->Instance->CCR6 = (__COMPARE__)))
/**
* @brief Get the TIM Capture Compare Register value on runtime.
@@ -1458,12 +1506,12 @@ mode.
* @retval 16-bit or 32-bit value of the capture/compare register (TIMx_CCRy)
*/
#define __HAL_TIM_GET_COMPARE(__HANDLE__, __CHANNEL__) \
-(((__CHANNEL__) == TIM_CHANNEL_1) ? ((__HANDLE__)->Instance->CCR1) :\
- ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCR2) :\
- ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCR3) :\
- ((__CHANNEL__) == TIM_CHANNEL_4) ? ((__HANDLE__)->Instance->CCR4) :\
- ((__CHANNEL__) == TIM_CHANNEL_5) ? ((__HANDLE__)->Instance->CCR5) :\
- ((__HANDLE__)->Instance->CCR6))
+ (((__CHANNEL__) == TIM_CHANNEL_1) ? ((__HANDLE__)->Instance->CCR1) :\
+ ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCR2) :\
+ ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCR3) :\
+ ((__CHANNEL__) == TIM_CHANNEL_4) ? ((__HANDLE__)->Instance->CCR4) :\
+ ((__CHANNEL__) == TIM_CHANNEL_5) ? ((__HANDLE__)->Instance->CCR5) :\
+ ((__HANDLE__)->Instance->CCR6))
/**
* @brief Set the TIM Output compare preload.
@@ -1479,12 +1527,12 @@ mode.
* @retval None
*/
#define __HAL_TIM_ENABLE_OCxPRELOAD(__HANDLE__, __CHANNEL__) \
- (((__CHANNEL__) == TIM_CHANNEL_1) ? ((__HANDLE__)->Instance->CCMR1 |= TIM_CCMR1_OC1PE) :\
- ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCMR1 |= TIM_CCMR1_OC2PE) :\
- ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCMR2 |= TIM_CCMR2_OC3PE) :\
- ((__CHANNEL__) == TIM_CHANNEL_4) ? ((__HANDLE__)->Instance->CCMR2 |= TIM_CCMR2_OC4PE) :\
- ((__CHANNEL__) == TIM_CHANNEL_5) ? ((__HANDLE__)->Instance->CCMR3 |= TIM_CCMR3_OC5PE) :\
- ((__HANDLE__)->Instance->CCMR3 |= TIM_CCMR3_OC6PE))
+ (((__CHANNEL__) == TIM_CHANNEL_1) ? ((__HANDLE__)->Instance->CCMR1 |= TIM_CCMR1_OC1PE) :\
+ ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCMR1 |= TIM_CCMR1_OC2PE) :\
+ ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCMR2 |= TIM_CCMR2_OC3PE) :\
+ ((__CHANNEL__) == TIM_CHANNEL_4) ? ((__HANDLE__)->Instance->CCMR2 |= TIM_CCMR2_OC4PE) :\
+ ((__CHANNEL__) == TIM_CHANNEL_5) ? ((__HANDLE__)->Instance->CCMR3 |= TIM_CCMR3_OC5PE) :\
+ ((__HANDLE__)->Instance->CCMR3 |= TIM_CCMR3_OC6PE))
/**
* @brief Reset the TIM Output compare preload.
@@ -1500,12 +1548,62 @@ mode.
* @retval None
*/
#define __HAL_TIM_DISABLE_OCxPRELOAD(__HANDLE__, __CHANNEL__) \
- (((__CHANNEL__) == TIM_CHANNEL_1) ? ((__HANDLE__)->Instance->CCMR1 &= (uint16_t)~TIM_CCMR1_OC1PE) :\
- ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCMR1 &= (uint16_t)~TIM_CCMR1_OC2PE) :\
- ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCMR2 &= (uint16_t)~TIM_CCMR2_OC3PE) :\
- ((__CHANNEL__) == TIM_CHANNEL_4) ? ((__HANDLE__)->Instance->CCMR2 &= (uint16_t)~TIM_CCMR2_OC4PE) :\
- ((__CHANNEL__) == TIM_CHANNEL_5) ? ((__HANDLE__)->Instance->CCMR3 &= (uint16_t)~TIM_CCMR3_OC5PE) :\
- ((__HANDLE__)->Instance->CCMR3 &= (uint16_t)~TIM_CCMR3_OC6PE))
+ (((__CHANNEL__) == TIM_CHANNEL_1) ? ((__HANDLE__)->Instance->CCMR1 &= ~TIM_CCMR1_OC1PE) :\
+ ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCMR1 &= ~TIM_CCMR1_OC2PE) :\
+ ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCMR2 &= ~TIM_CCMR2_OC3PE) :\
+ ((__CHANNEL__) == TIM_CHANNEL_4) ? ((__HANDLE__)->Instance->CCMR2 &= ~TIM_CCMR2_OC4PE) :\
+ ((__CHANNEL__) == TIM_CHANNEL_5) ? ((__HANDLE__)->Instance->CCMR3 &= ~TIM_CCMR3_OC5PE) :\
+ ((__HANDLE__)->Instance->CCMR3 &= ~TIM_CCMR3_OC6PE))
+
+/**
+ * @brief Enable fast mode for a given channel.
+ * @param __HANDLE__ TIM handle.
+ * @param __CHANNEL__ TIM Channels to be configured.
+ * This parameter can be one of the following values:
+ * @arg TIM_CHANNEL_1: TIM Channel 1 selected
+ * @arg TIM_CHANNEL_2: TIM Channel 2 selected
+ * @arg TIM_CHANNEL_3: TIM Channel 3 selected
+ * @arg TIM_CHANNEL_4: TIM Channel 4 selected
+ * @arg TIM_CHANNEL_5: TIM Channel 5 selected
+ * @arg TIM_CHANNEL_6: TIM Channel 6 selected
+ * @note When fast mode is enabled an active edge on the trigger input acts
+ * like a compare match on CCx output. Delay to sample the trigger
+ * input and to activate CCx output is reduced to 3 clock cycles.
+ * @note Fast mode acts only if the channel is configured in PWM1 or PWM2 mode.
+ * @retval None
+ */
+#define __HAL_TIM_ENABLE_OCxFAST(__HANDLE__, __CHANNEL__) \
+ (((__CHANNEL__) == TIM_CHANNEL_1) ? ((__HANDLE__)->Instance->CCMR1 |= TIM_CCMR1_OC1FE) :\
+ ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCMR1 |= TIM_CCMR1_OC2FE) :\
+ ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCMR2 |= TIM_CCMR2_OC3FE) :\
+ ((__CHANNEL__) == TIM_CHANNEL_4) ? ((__HANDLE__)->Instance->CCMR2 |= TIM_CCMR2_OC4FE) :\
+ ((__CHANNEL__) == TIM_CHANNEL_5) ? ((__HANDLE__)->Instance->CCMR3 |= TIM_CCMR3_OC5FE) :\
+ ((__HANDLE__)->Instance->CCMR3 |= TIM_CCMR3_OC6FE))
+
+/**
+ * @brief Disable fast mode for a given channel.
+ * @param __HANDLE__ TIM handle.
+ * @param __CHANNEL__ TIM Channels to be configured.
+ * This parameter can be one of the following values:
+ * @arg TIM_CHANNEL_1: TIM Channel 1 selected
+ * @arg TIM_CHANNEL_2: TIM Channel 2 selected
+ * @arg TIM_CHANNEL_3: TIM Channel 3 selected
+ * @arg TIM_CHANNEL_4: TIM Channel 4 selected
+ * @arg TIM_CHANNEL_5: TIM Channel 5 selected
+ * @arg TIM_CHANNEL_6: TIM Channel 6 selected
+ * @note When fast mode is disabled CCx output behaves normally depending
+ * on counter and CCRx values even when the trigger is ON. The minimum
+ * delay to activate CCx output when an active edge occurs on the
+ * trigger input is 5 clock cycles.
+ * @retval None
+ */
+#define __HAL_TIM_DISABLE_OCxFAST(__HANDLE__, __CHANNEL__) \
+ (((__CHANNEL__) == TIM_CHANNEL_1) ? ((__HANDLE__)->Instance->CCMR1 &= ~TIM_CCMR1_OC1FE) :\
+ ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCMR1 &= ~TIM_CCMR1_OC2FE) :\
+ ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCMR2 &= ~TIM_CCMR2_OC3FE) :\
+ ((__CHANNEL__) == TIM_CHANNEL_4) ? ((__HANDLE__)->Instance->CCMR2 &= ~TIM_CCMR2_OC4FE) :\
+ ((__CHANNEL__) == TIM_CHANNEL_5) ? ((__HANDLE__)->Instance->CCMR3 &= ~TIM_CCMR3_OC5FE) :\
+ ((__HANDLE__)->Instance->CCMR3 &= ~TIM_CCMR3_OC6FE))
/**
* @brief Set the Update Request Source (URS) bit of the TIMx_CR1 register.
@@ -1515,8 +1613,7 @@ mode.
* enabled)
* @retval None
*/
-#define __HAL_TIM_URS_ENABLE(__HANDLE__) \
- ((__HANDLE__)->Instance->CR1|= TIM_CR1_URS)
+#define __HAL_TIM_URS_ENABLE(__HANDLE__) ((__HANDLE__)->Instance->CR1|= TIM_CR1_URS)
/**
* @brief Reset the Update Request Source (URS) bit of the TIMx_CR1 register.
@@ -1529,8 +1626,7 @@ mode.
* _ Update generation through the slave mode controller
* @retval None
*/
-#define __HAL_TIM_URS_DISABLE(__HANDLE__) \
- ((__HANDLE__)->Instance->CR1&=~TIM_CR1_URS)
+#define __HAL_TIM_URS_DISABLE(__HANDLE__) ((__HANDLE__)->Instance->CR1&=~TIM_CR1_URS)
/**
* @brief Set the TIM Capture x input polarity on runtime.
@@ -1548,10 +1644,10 @@ mode.
* @retval None
*/
#define __HAL_TIM_SET_CAPTUREPOLARITY(__HANDLE__, __CHANNEL__, __POLARITY__) \
- do{ \
- TIM_RESET_CAPTUREPOLARITY((__HANDLE__), (__CHANNEL__)); \
- TIM_SET_CAPTUREPOLARITY((__HANDLE__), (__CHANNEL__), (__POLARITY__)); \
- }while(0)
+ do{ \
+ TIM_RESET_CAPTUREPOLARITY((__HANDLE__), (__CHANNEL__)); \
+ TIM_SET_CAPTUREPOLARITY((__HANDLE__), (__CHANNEL__), (__POLARITY__)); \
+ }while(0)
/**
* @}
@@ -1579,29 +1675,29 @@ mode.
((__MODE__) == TIM_CLEARINPUTSOURCE_ETR))
#if defined(TIM_AF1_BKINE)&&defined(TIM_AF2_BKINE)
-#define IS_TIM_DMA_BASE(__BASE__) (((__BASE__) == TIM_DMABASE_CR1) || \
- ((__BASE__) == TIM_DMABASE_CR2) || \
- ((__BASE__) == TIM_DMABASE_SMCR) || \
- ((__BASE__) == TIM_DMABASE_DIER) || \
- ((__BASE__) == TIM_DMABASE_SR) || \
- ((__BASE__) == TIM_DMABASE_EGR) || \
- ((__BASE__) == TIM_DMABASE_CCMR1) || \
- ((__BASE__) == TIM_DMABASE_CCMR2) || \
- ((__BASE__) == TIM_DMABASE_CCER) || \
- ((__BASE__) == TIM_DMABASE_CNT) || \
- ((__BASE__) == TIM_DMABASE_PSC) || \
- ((__BASE__) == TIM_DMABASE_ARR) || \
- ((__BASE__) == TIM_DMABASE_RCR) || \
- ((__BASE__) == TIM_DMABASE_CCR1) || \
- ((__BASE__) == TIM_DMABASE_CCR2) || \
- ((__BASE__) == TIM_DMABASE_CCR3) || \
- ((__BASE__) == TIM_DMABASE_CCR4) || \
- ((__BASE__) == TIM_DMABASE_BDTR) || \
- ((__BASE__) == TIM_DMABASE_OR) || \
- ((__BASE__) == TIM_DMABASE_CCMR3) || \
- ((__BASE__) == TIM_DMABASE_CCR5) || \
- ((__BASE__) == TIM_DMABASE_CCR6) || \
- ((__BASE__) == TIM_DMABASE_AF1) || \
+#define IS_TIM_DMA_BASE(__BASE__) (((__BASE__) == TIM_DMABASE_CR1) || \
+ ((__BASE__) == TIM_DMABASE_CR2) || \
+ ((__BASE__) == TIM_DMABASE_SMCR) || \
+ ((__BASE__) == TIM_DMABASE_DIER) || \
+ ((__BASE__) == TIM_DMABASE_SR) || \
+ ((__BASE__) == TIM_DMABASE_EGR) || \
+ ((__BASE__) == TIM_DMABASE_CCMR1) || \
+ ((__BASE__) == TIM_DMABASE_CCMR2) || \
+ ((__BASE__) == TIM_DMABASE_CCER) || \
+ ((__BASE__) == TIM_DMABASE_CNT) || \
+ ((__BASE__) == TIM_DMABASE_PSC) || \
+ ((__BASE__) == TIM_DMABASE_ARR) || \
+ ((__BASE__) == TIM_DMABASE_RCR) || \
+ ((__BASE__) == TIM_DMABASE_CCR1) || \
+ ((__BASE__) == TIM_DMABASE_CCR2) || \
+ ((__BASE__) == TIM_DMABASE_CCR3) || \
+ ((__BASE__) == TIM_DMABASE_CCR4) || \
+ ((__BASE__) == TIM_DMABASE_BDTR) || \
+ ((__BASE__) == TIM_DMABASE_OR) || \
+ ((__BASE__) == TIM_DMABASE_CCMR3) || \
+ ((__BASE__) == TIM_DMABASE_CCR5) || \
+ ((__BASE__) == TIM_DMABASE_CCR6) || \
+ ((__BASE__) == TIM_DMABASE_AF1) || \
((__BASE__) == TIM_DMABASE_AF2))
#else
#define IS_TIM_DMA_BASE(__BASE__) (((__BASE__) == TIM_DMABASE_CR1) || \
@@ -1636,6 +1732,9 @@ mode.
((__MODE__) == TIM_COUNTERMODE_CENTERALIGNED2) || \
((__MODE__) == TIM_COUNTERMODE_CENTERALIGNED3))
+#define IS_TIM_UIFREMAP_MODE(__MODE__) (((__MODE__) == TIM_UIFREMAP_DISABLE) || \
+ ((__MODE__) == TIM_UIFREMAP_ENALE))
+
#define IS_TIM_CLOCKDIVISION_DIV(__DIV__) (((__DIV__) == TIM_CLOCKDIVISION_DIV1) || \
((__DIV__) == TIM_CLOCKDIVISION_DIV2) || \
((__DIV__) == TIM_CLOCKDIVISION_DIV4))
@@ -1658,6 +1757,9 @@ mode.
#define IS_TIM_OCNIDLE_STATE(__STATE__) (((__STATE__) == TIM_OCNIDLESTATE_SET) || \
((__STATE__) == TIM_OCNIDLESTATE_RESET))
+#define IS_TIM_ENCODERINPUT_POLARITY(__POLARITY__) (((__POLARITY__) == TIM_ENCODERINPUTPOLARITY_RISING) || \
+ ((__POLARITY__) == TIM_ENCODERINPUTPOLARITY_FALLING))
+
#define IS_TIM_IC_POLARITY(__POLARITY__) (((__POLARITY__) == TIM_ICPOLARITY_RISING) || \
((__POLARITY__) == TIM_ICPOLARITY_FALLING) || \
((__POLARITY__) == TIM_ICPOLARITY_BOTHEDGE))
@@ -1876,28 +1978,28 @@ mode.
((__TRIGGER__) == TIM_SLAVEMODE_COMBINED_RESETTRIGGER))
#define TIM_SET_ICPRESCALERVALUE(__HANDLE__, __CHANNEL__, __ICPSC__) \
-(((__CHANNEL__) == TIM_CHANNEL_1) ? ((__HANDLE__)->Instance->CCMR1 |= (__ICPSC__)) :\
- ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCMR1 |= ((__ICPSC__) << 8U)) :\
- ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCMR2 |= (__ICPSC__)) :\
- ((__HANDLE__)->Instance->CCMR2 |= ((__ICPSC__) << 8U)))
+ (((__CHANNEL__) == TIM_CHANNEL_1) ? ((__HANDLE__)->Instance->CCMR1 |= (__ICPSC__)) :\
+ ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCMR1 |= ((__ICPSC__) << 8U)) :\
+ ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCMR2 |= (__ICPSC__)) :\
+ ((__HANDLE__)->Instance->CCMR2 |= ((__ICPSC__) << 8U)))
#define TIM_RESET_ICPRESCALERVALUE(__HANDLE__, __CHANNEL__) \
-(((__CHANNEL__) == TIM_CHANNEL_1) ? ((__HANDLE__)->Instance->CCMR1 &= (uint16_t)~TIM_CCMR1_IC1PSC) :\
- ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCMR1 &= (uint16_t)~TIM_CCMR1_IC2PSC) :\
- ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCMR2 &= (uint16_t)~TIM_CCMR2_IC3PSC) :\
- ((__HANDLE__)->Instance->CCMR2 &= (uint16_t)~TIM_CCMR2_IC4PSC))
+ (((__CHANNEL__) == TIM_CHANNEL_1) ? ((__HANDLE__)->Instance->CCMR1 &= ~TIM_CCMR1_IC1PSC) :\
+ ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCMR1 &= ~TIM_CCMR1_IC2PSC) :\
+ ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCMR2 &= ~TIM_CCMR2_IC3PSC) :\
+ ((__HANDLE__)->Instance->CCMR2 &= ~TIM_CCMR2_IC4PSC))
#define TIM_SET_CAPTUREPOLARITY(__HANDLE__, __CHANNEL__, __POLARITY__) \
-(((__CHANNEL__) == TIM_CHANNEL_1) ? ((__HANDLE__)->Instance->CCER |= (__POLARITY__)) :\
- ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCER |= ((__POLARITY__) << 4U)) :\
- ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCER |= ((__POLARITY__) << 8U)) :\
- ((__HANDLE__)->Instance->CCER |= (((__POLARITY__) << 12U))))
+ (((__CHANNEL__) == TIM_CHANNEL_1) ? ((__HANDLE__)->Instance->CCER |= (__POLARITY__)) :\
+ ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCER |= ((__POLARITY__) << 4U)) :\
+ ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCER |= ((__POLARITY__) << 8U)) :\
+ ((__HANDLE__)->Instance->CCER |= (((__POLARITY__) << 12U))))
#define TIM_RESET_CAPTUREPOLARITY(__HANDLE__, __CHANNEL__) \
-(((__CHANNEL__) == TIM_CHANNEL_1) ? ((__HANDLE__)->Instance->CCER &= (uint16_t)~(TIM_CCER_CC1P | TIM_CCER_CC1NP)) :\
- ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCER &= (uint16_t)~(TIM_CCER_CC2P | TIM_CCER_CC2NP)) :\
- ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCER &= (uint16_t)~(TIM_CCER_CC3P | TIM_CCER_CC3NP)) :\
- ((__HANDLE__)->Instance->CCER &= (uint16_t)~(TIM_CCER_CC4P | TIM_CCER_CC4NP)))
+ (((__CHANNEL__) == TIM_CHANNEL_1) ? ((__HANDLE__)->Instance->CCER &= ~(TIM_CCER_CC1P | TIM_CCER_CC1NP)) :\
+ ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCER &= ~(TIM_CCER_CC2P | TIM_CCER_CC2NP)) :\
+ ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCER &= ~(TIM_CCER_CC3P | TIM_CCER_CC3NP)) :\
+ ((__HANDLE__)->Instance->CCER &= ~(TIM_CCER_CC4P | TIM_CCER_CC4NP)))
/**
* @}
@@ -2035,7 +2137,8 @@ HAL_StatusTypeDef HAL_TIM_Encoder_Stop(TIM_HandleTypeDef *htim, uint32_t Channel
HAL_StatusTypeDef HAL_TIM_Encoder_Start_IT(TIM_HandleTypeDef *htim, uint32_t Channel);
HAL_StatusTypeDef HAL_TIM_Encoder_Stop_IT(TIM_HandleTypeDef *htim, uint32_t Channel);
/* Non-Blocking mode: DMA */
-HAL_StatusTypeDef HAL_TIM_Encoder_Start_DMA(TIM_HandleTypeDef *htim, uint32_t Channel, uint32_t *pData1, uint32_t *pData2, uint16_t Length);
+HAL_StatusTypeDef HAL_TIM_Encoder_Start_DMA(TIM_HandleTypeDef *htim, uint32_t Channel, uint32_t *pData1,
+ uint32_t *pData2, uint16_t Length);
HAL_StatusTypeDef HAL_TIM_Encoder_Stop_DMA(TIM_HandleTypeDef *htim, uint32_t Channel);
/**
* @}
@@ -2059,17 +2162,19 @@ void HAL_TIM_IRQHandler(TIM_HandleTypeDef *htim);
HAL_StatusTypeDef HAL_TIM_OC_ConfigChannel(TIM_HandleTypeDef *htim, TIM_OC_InitTypeDef *sConfig, uint32_t Channel);
HAL_StatusTypeDef HAL_TIM_PWM_ConfigChannel(TIM_HandleTypeDef *htim, TIM_OC_InitTypeDef *sConfig, uint32_t Channel);
HAL_StatusTypeDef HAL_TIM_IC_ConfigChannel(TIM_HandleTypeDef *htim, TIM_IC_InitTypeDef *sConfig, uint32_t Channel);
-HAL_StatusTypeDef HAL_TIM_OnePulse_ConfigChannel(TIM_HandleTypeDef *htim, TIM_OnePulse_InitTypeDef *sConfig, uint32_t OutputChannel, uint32_t InputChannel);
-HAL_StatusTypeDef HAL_TIM_ConfigOCrefClear(TIM_HandleTypeDef *htim, TIM_ClearInputConfigTypeDef *sClearInputConfig, uint32_t Channel);
+HAL_StatusTypeDef HAL_TIM_OnePulse_ConfigChannel(TIM_HandleTypeDef *htim, TIM_OnePulse_InitTypeDef *sConfig,
+ uint32_t OutputChannel, uint32_t InputChannel);
+HAL_StatusTypeDef HAL_TIM_ConfigOCrefClear(TIM_HandleTypeDef *htim, TIM_ClearInputConfigTypeDef *sClearInputConfig,
+ uint32_t Channel);
HAL_StatusTypeDef HAL_TIM_ConfigClockSource(TIM_HandleTypeDef *htim, TIM_ClockConfigTypeDef *sClockSourceConfig);
HAL_StatusTypeDef HAL_TIM_ConfigTI1Input(TIM_HandleTypeDef *htim, uint32_t TI1_Selection);
HAL_StatusTypeDef HAL_TIM_SlaveConfigSynchro(TIM_HandleTypeDef *htim, TIM_SlaveConfigTypeDef *sSlaveConfig);
HAL_StatusTypeDef HAL_TIM_SlaveConfigSynchro_IT(TIM_HandleTypeDef *htim, TIM_SlaveConfigTypeDef *sSlaveConfig);
-HAL_StatusTypeDef HAL_TIM_DMABurst_WriteStart(TIM_HandleTypeDef *htim, uint32_t BurstBaseAddress, uint32_t BurstRequestSrc, \
- uint32_t *BurstBuffer, uint32_t BurstLength);
+HAL_StatusTypeDef HAL_TIM_DMABurst_WriteStart(TIM_HandleTypeDef *htim, uint32_t BurstBaseAddress,
+ uint32_t BurstRequestSrc, uint32_t *BurstBuffer, uint32_t BurstLength);
HAL_StatusTypeDef HAL_TIM_DMABurst_WriteStop(TIM_HandleTypeDef *htim, uint32_t BurstRequestSrc);
-HAL_StatusTypeDef HAL_TIM_DMABurst_ReadStart(TIM_HandleTypeDef *htim, uint32_t BurstBaseAddress, uint32_t BurstRequestSrc, \
- uint32_t *BurstBuffer, uint32_t BurstLength);
+HAL_StatusTypeDef HAL_TIM_DMABurst_ReadStart(TIM_HandleTypeDef *htim, uint32_t BurstBaseAddress,
+ uint32_t BurstRequestSrc, uint32_t *BurstBuffer, uint32_t BurstLength);
HAL_StatusTypeDef HAL_TIM_DMABurst_ReadStop(TIM_HandleTypeDef *htim, uint32_t BurstRequestSrc);
HAL_StatusTypeDef HAL_TIM_GenerateEvent(TIM_HandleTypeDef *htim, uint32_t EventSource);
uint32_t HAL_TIM_ReadCapturedValue(TIM_HandleTypeDef *htim, uint32_t Channel);
@@ -2095,7 +2200,8 @@ void HAL_TIM_ErrorCallback(TIM_HandleTypeDef *htim);
/* Callbacks Register/UnRegister functions ***********************************/
#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)
-HAL_StatusTypeDef HAL_TIM_RegisterCallback(TIM_HandleTypeDef *htim, HAL_TIM_CallbackIDTypeDef CallbackID, pTIM_CallbackTypeDef pCallback);
+HAL_StatusTypeDef HAL_TIM_RegisterCallback(TIM_HandleTypeDef *htim, HAL_TIM_CallbackIDTypeDef CallbackID,
+ pTIM_CallbackTypeDef pCallback);
HAL_StatusTypeDef HAL_TIM_UnRegisterCallback(TIM_HandleTypeDef *htim, HAL_TIM_CallbackIDTypeDef CallbackID);
#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */
@@ -2125,8 +2231,8 @@ HAL_TIM_StateTypeDef HAL_TIM_Encoder_GetState(TIM_HandleTypeDef *htim);
/* Private functions----------------------------------------------------------*/
/** @defgroup TIM_Private_Functions TIM Private Functions
-* @{
-*/
+ * @{
+ */
void TIM_Base_SetConfig(TIM_TypeDef *TIMx, TIM_Base_InitTypeDef *Structure);
void TIM_TI1_SetConfig(TIM_TypeDef *TIMx, uint32_t TIM_ICPolarity, uint32_t TIM_ICSelection, uint32_t TIM_ICFilter);
void TIM_OC2_SetConfig(TIM_TypeDef *TIMx, TIM_OC_InitTypeDef *OC_Config);
@@ -2145,8 +2251,8 @@ void TIM_ResetCallback(TIM_HandleTypeDef *htim);
#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */
/**
-* @}
-*/
+ * @}
+ */
/* End of private functions --------------------------------------------------*/
/**
diff --git a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_TrueStudio/Boot/lib/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_tim_ex.h b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_TrueStudio/Boot/lib/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_tim_ex.h
index 598f5c6e..b8d3472e 100644
--- a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_TrueStudio/Boot/lib/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_tim_ex.h
+++ b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_TrueStudio/Boot/lib/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_tim_ex.h
@@ -201,9 +201,9 @@ TIMEx_BreakInputConfigTypeDef;
*/
/** @addtogroup TIMEx_Exported_Functions_Group1 Extended Timer Hall Sensor functions
- * @brief Timer Hall Sensor functions
- * @{
- */
+ * @brief Timer Hall Sensor functions
+ * @{
+ */
/* Timer Hall Sensor functions **********************************************/
HAL_StatusTypeDef HAL_TIMEx_HallSensor_Init(TIM_HandleTypeDef *htim, TIM_HallSensor_InitTypeDef *sConfig);
HAL_StatusTypeDef HAL_TIMEx_HallSensor_DeInit(TIM_HandleTypeDef *htim);
@@ -225,9 +225,9 @@ HAL_StatusTypeDef HAL_TIMEx_HallSensor_Stop_DMA(TIM_HandleTypeDef *htim);
*/
/** @addtogroup TIMEx_Exported_Functions_Group2 Extended Timer Complementary Output Compare functions
- * @brief Timer Complementary Output Compare functions
- * @{
- */
+ * @brief Timer Complementary Output Compare functions
+ * @{
+ */
/* Timer Complementary Output Compare functions *****************************/
/* Blocking mode: Polling */
HAL_StatusTypeDef HAL_TIMEx_OCN_Start(TIM_HandleTypeDef *htim, uint32_t Channel);
@@ -245,9 +245,9 @@ HAL_StatusTypeDef HAL_TIMEx_OCN_Stop_DMA(TIM_HandleTypeDef *htim, uint32_t Chann
*/
/** @addtogroup TIMEx_Exported_Functions_Group3 Extended Timer Complementary PWM functions
- * @brief Timer Complementary PWM functions
- * @{
- */
+ * @brief Timer Complementary PWM functions
+ * @{
+ */
/* Timer Complementary PWM functions ****************************************/
/* Blocking mode: Polling */
HAL_StatusTypeDef HAL_TIMEx_PWMN_Start(TIM_HandleTypeDef *htim, uint32_t Channel);
@@ -264,9 +264,9 @@ HAL_StatusTypeDef HAL_TIMEx_PWMN_Stop_DMA(TIM_HandleTypeDef *htim, uint32_t Chan
*/
/** @addtogroup TIMEx_Exported_Functions_Group4 Extended Timer Complementary One Pulse functions
- * @brief Timer Complementary One Pulse functions
- * @{
- */
+ * @brief Timer Complementary One Pulse functions
+ * @{
+ */
/* Timer Complementary One Pulse functions **********************************/
/* Blocking mode: Polling */
HAL_StatusTypeDef HAL_TIMEx_OnePulseN_Start(TIM_HandleTypeDef *htim, uint32_t OutputChannel);
@@ -280,17 +280,23 @@ HAL_StatusTypeDef HAL_TIMEx_OnePulseN_Stop_IT(TIM_HandleTypeDef *htim, uint32_t
*/
/** @addtogroup TIMEx_Exported_Functions_Group5 Extended Peripheral Control functions
- * @brief Peripheral Control functions
- * @{
- */
+ * @brief Peripheral Control functions
+ * @{
+ */
/* Extended Control functions ************************************************/
-HAL_StatusTypeDef HAL_TIMEx_ConfigCommutEvent(TIM_HandleTypeDef *htim, uint32_t InputTrigger, uint32_t CommutationSource);
-HAL_StatusTypeDef HAL_TIMEx_ConfigCommutEvent_IT(TIM_HandleTypeDef *htim, uint32_t InputTrigger, uint32_t CommutationSource);
-HAL_StatusTypeDef HAL_TIMEx_ConfigCommutEvent_DMA(TIM_HandleTypeDef *htim, uint32_t InputTrigger, uint32_t CommutationSource);
-HAL_StatusTypeDef HAL_TIMEx_MasterConfigSynchronization(TIM_HandleTypeDef *htim, TIM_MasterConfigTypeDef *sMasterConfig);
-HAL_StatusTypeDef HAL_TIMEx_ConfigBreakDeadTime(TIM_HandleTypeDef *htim, TIM_BreakDeadTimeConfigTypeDef *sBreakDeadTimeConfig);
+HAL_StatusTypeDef HAL_TIMEx_ConfigCommutEvent(TIM_HandleTypeDef *htim, uint32_t InputTrigger,
+ uint32_t CommutationSource);
+HAL_StatusTypeDef HAL_TIMEx_ConfigCommutEvent_IT(TIM_HandleTypeDef *htim, uint32_t InputTrigger,
+ uint32_t CommutationSource);
+HAL_StatusTypeDef HAL_TIMEx_ConfigCommutEvent_DMA(TIM_HandleTypeDef *htim, uint32_t InputTrigger,
+ uint32_t CommutationSource);
+HAL_StatusTypeDef HAL_TIMEx_MasterConfigSynchronization(TIM_HandleTypeDef *htim,
+ TIM_MasterConfigTypeDef *sMasterConfig);
+HAL_StatusTypeDef HAL_TIMEx_ConfigBreakDeadTime(TIM_HandleTypeDef *htim,
+ TIM_BreakDeadTimeConfigTypeDef *sBreakDeadTimeConfig);
#if defined(TIM_BREAK_INPUT_SUPPORT)
-HAL_StatusTypeDef HAL_TIMEx_ConfigBreakInput(TIM_HandleTypeDef *htim, uint32_t BreakInput, TIMEx_BreakInputConfigTypeDef *sBreakInputConfig);
+HAL_StatusTypeDef HAL_TIMEx_ConfigBreakInput(TIM_HandleTypeDef *htim, uint32_t BreakInput,
+ TIMEx_BreakInputConfigTypeDef *sBreakInputConfig);
#endif /* TIM_BREAK_INPUT_SUPPORT */
HAL_StatusTypeDef HAL_TIMEx_GroupChannel5(TIM_HandleTypeDef *htim, uint32_t Channels);
HAL_StatusTypeDef HAL_TIMEx_RemapConfig(TIM_HandleTypeDef *htim, uint32_t Remap);
@@ -327,7 +333,7 @@ HAL_TIM_StateTypeDef HAL_TIMEx_HallSensor_GetState(TIM_HandleTypeDef *htim);
/* End of exported functions -------------------------------------------------*/
/* Private functions----------------------------------------------------------*/
-/** @defgroup TIMEx_Private_Functions TIM Extended Private Functions
+/** @addtogroup TIMEx_Private_Functions TIMEx Private Functions
* @{
*/
void TIMEx_DMACommutationCplt(DMA_HandleTypeDef *hdma);
diff --git a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_TrueStudio/Boot/lib/STM32F7xx_HAL_Driver/Inc/stm32f7xx_ll_usart.h b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_TrueStudio/Boot/lib/STM32F7xx_HAL_Driver/Inc/stm32f7xx_ll_usart.h
index f151a3d3..9bbccb71 100644
--- a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_TrueStudio/Boot/lib/STM32F7xx_HAL_Driver/Inc/stm32f7xx_ll_usart.h
+++ b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_TrueStudio/Boot/lib/STM32F7xx_HAL_Driver/Inc/stm32f7xx_ll_usart.h
@@ -42,13 +42,6 @@ extern "C" {
/* Private variables ---------------------------------------------------------*/
/* Private constants ---------------------------------------------------------*/
-/** @defgroup USART_LL_Private_Constants USART Private Constants
- * @{
- */
-/**
- * @}
- */
-
/* Private macros ------------------------------------------------------------*/
#if defined(USE_FULL_LL_DRIVER)
/** @defgroup USART_LL_Private_Macros USART Private Macros
@@ -156,18 +149,21 @@ typedef struct
*/
#define LL_USART_ICR_PECF USART_ICR_PECF /*!< Parity error flag */
#define LL_USART_ICR_FECF USART_ICR_FECF /*!< Framing error flag */
-#define LL_USART_ICR_NCF USART_ICR_NCF /*!< Noise error detected flag */
+#define LL_USART_ICR_NCF USART_ICR_NCF /*!< Noise error detected flag */
#define LL_USART_ICR_ORECF USART_ICR_ORECF /*!< Overrun error flag */
#define LL_USART_ICR_IDLECF USART_ICR_IDLECF /*!< Idle line detected flag */
#define LL_USART_ICR_TCCF USART_ICR_TCCF /*!< Transmission complete flag */
#if defined(USART_TCBGT_SUPPORT)
#define LL_USART_ICR_TCBGTCF USART_ICR_TCBGTCF /*!< Transmission completed before guard time flag */
-#endif
+#endif /* USART_TCBGT_SUPPORT */
#define LL_USART_ICR_LBDCF USART_ICR_LBDCF /*!< LIN break detection flag */
#define LL_USART_ICR_CTSCF USART_ICR_CTSCF /*!< CTS flag */
#define LL_USART_ICR_RTOCF USART_ICR_RTOCF /*!< Receiver timeout flag */
#define LL_USART_ICR_EOBCF USART_ICR_EOBCF /*!< End of block flag */
#define LL_USART_ICR_CMCF USART_ICR_CMCF /*!< Character match flag */
+#if defined(USART_CR1_UESM)
+#define LL_USART_ICR_WUCF USART_ICR_WUCF /*!< Wakeup from Stop mode flag */
+#endif /* USART_CR1_UESM */
/**
* @}
*/
@@ -195,10 +191,16 @@ typedef struct
#define LL_USART_ISR_CMF USART_ISR_CMF /*!< Character match flag */
#define LL_USART_ISR_SBKF USART_ISR_SBKF /*!< Send break flag */
#define LL_USART_ISR_RWU USART_ISR_RWU /*!< Receiver wakeup from Mute mode flag */
+#if defined(USART_CR1_UESM)
+#define LL_USART_ISR_WUF USART_ISR_WUF /*!< Wakeup from Stop mode flag */
+#endif /* USART_CR1_UESM */
#define LL_USART_ISR_TEACK USART_ISR_TEACK /*!< Transmit enable acknowledge flag */
+#if defined(USART_ISR_REACK)
+#define LL_USART_ISR_REACK USART_ISR_REACK /*!< Receive enable acknowledge flag */
+#endif /* USART_ISR_REACK */
#if defined(USART_TCBGT_SUPPORT)
#define LL_USART_ISR_TCBGT USART_ISR_TCBGT /*!< Transmission complete before guard time completion flag */
-#endif
+#endif /* USART_TCBGT_SUPPORT */
/**
* @}
*/
@@ -218,9 +220,12 @@ typedef struct
#define LL_USART_CR2_LBDIE USART_CR2_LBDIE /*!< LIN break detection interrupt enable */
#define LL_USART_CR3_EIE USART_CR3_EIE /*!< Error interrupt enable */
#define LL_USART_CR3_CTSIE USART_CR3_CTSIE /*!< CTS interrupt enable */
+#if defined(USART_CR1_UESM)
+#define LL_USART_CR3_WUFIE USART_CR3_WUFIE /*!< Wakeup from Stop mode interrupt enable */
+#endif /* USART_CR1_UESM */
#if defined(USART_TCBGT_SUPPORT)
#define LL_USART_CR3_TCBGTIE USART_CR3_TCBGTIE /*!< Transmission complete before guard time interrupt enable */
-#endif
+#endif /* USART_TCBGT_SUPPORT */
/**
* @}
*/
@@ -400,6 +405,18 @@ typedef struct
* @}
*/
+#if defined(USART_CR1_UESM)
+/** @defgroup USART_LL_EC_WAKEUP_ON Wakeup Activation
+ * @{
+ */
+#define LL_USART_WAKEUP_ON_ADDRESS 0x00000000U /*!< Wake up active on address match */
+#define LL_USART_WAKEUP_ON_STARTBIT USART_CR3_WUS_1 /*!< Wake up active on Start bit detection */
+#define LL_USART_WAKEUP_ON_RXNE (USART_CR3_WUS_0 | USART_CR3_WUS_1) /*!< Wake up active on RXNE */
+/**
+ * @}
+ */
+
+#endif /* USART_CR1_UESM */
/** @defgroup USART_LL_EC_IRDA_POWER IrDA Power
* @{
*/
@@ -480,7 +497,8 @@ typedef struct
* @param __BAUDRATE__ Baud rate value to achieve
* @retval USARTDIV value to be used for BRR register filling in OverSampling_8 case
*/
-#define __LL_USART_DIV_SAMPLING8(__PERIPHCLK__, __BAUDRATE__) ((((__PERIPHCLK__)*2U) + ((__BAUDRATE__)/2U))/(__BAUDRATE__))
+#define __LL_USART_DIV_SAMPLING8(__PERIPHCLK__, __BAUDRATE__) ((((__PERIPHCLK__)*2U)\
+ + ((__BAUDRATE__)/2U))/(__BAUDRATE__))
/**
* @brief Compute USARTDIV value according to Peripheral Clock and
@@ -545,6 +563,87 @@ __STATIC_INLINE uint32_t LL_USART_IsEnabled(USART_TypeDef *USARTx)
return ((READ_BIT(USARTx->CR1, USART_CR1_UE) == (USART_CR1_UE)) ? 1UL : 0UL);
}
+#if defined(USART_CR1_UESM)
+/**
+ * @brief USART enabled in STOP Mode.
+ * @note When this function is enabled, USART is able to wake up the MCU from Stop mode, provided that
+ * USART clock selection is HSI or LSE in RCC.
+ * @note Macro @ref IS_UART_WAKEUP_FROMSTOP_INSTANCE(USARTx) can be used to check whether or not
+ * Wake-up from Stop mode feature is supported by the USARTx instance.
+ * @rmtoll CR1 UESM LL_USART_EnableInStopMode
+ * @param USARTx USART Instance
+ * @retval None
+ */
+__STATIC_INLINE void LL_USART_EnableInStopMode(USART_TypeDef *USARTx)
+{
+ SET_BIT(USARTx->CR1, USART_CR1_UESM);
+}
+
+/**
+ * @brief USART disabled in STOP Mode.
+ * @note When this function is disabled, USART is not able to wake up the MCU from Stop mode
+ * @note Macro @ref IS_UART_WAKEUP_FROMSTOP_INSTANCE(USARTx) can be used to check whether or not
+ * Wake-up from Stop mode feature is supported by the USARTx instance.
+ * @rmtoll CR1 UESM LL_USART_DisableInStopMode
+ * @param USARTx USART Instance
+ * @retval None
+ */
+__STATIC_INLINE void LL_USART_DisableInStopMode(USART_TypeDef *USARTx)
+{
+ CLEAR_BIT(USARTx->CR1, USART_CR1_UESM);
+}
+
+/**
+ * @brief Indicate if USART is enabled in STOP Mode (able to wake up MCU from Stop mode or not)
+ * @note Macro @ref IS_UART_WAKEUP_FROMSTOP_INSTANCE(USARTx) can be used to check whether or not
+ * Wake-up from Stop mode feature is supported by the USARTx instance.
+ * @rmtoll CR1 UESM LL_USART_IsEnabledInStopMode
+ * @param USARTx USART Instance
+ * @retval State of bit (1 or 0).
+ */
+__STATIC_INLINE uint32_t LL_USART_IsEnabledInStopMode(USART_TypeDef *USARTx)
+{
+ return ((READ_BIT(USARTx->CR1, USART_CR1_UESM) == (USART_CR1_UESM)) ? 1UL : 0UL);
+}
+
+#if defined(USART_CR3_UCESM)
+/**
+ * @brief USART Clock enabled in STOP Mode
+ * @note When this function is called, USART Clock is enabled while in STOP mode
+ * @rmtoll CR3 UCESM LL_USART_EnableClockInStopMode
+ * @param USARTx USART Instance
+ * @retval None
+ */
+__STATIC_INLINE void LL_USART_EnableClockInStopMode(USART_TypeDef *USARTx)
+{
+ SET_BIT(USARTx->CR3, USART_CR3_UCESM);
+}
+
+/**
+ * @brief USART clock disabled in STOP Mode
+ * @note When this function is called, USART Clock is disabled while in STOP mode
+ * @rmtoll CR3 UCESM LL_USART_DisableClockInStopMode
+ * @param USARTx USART Instance
+ * @retval None
+ */
+__STATIC_INLINE void LL_USART_DisableClockInStopMode(USART_TypeDef *USARTx)
+{
+ CLEAR_BIT(USARTx->CR3, USART_CR3_UCESM);
+}
+
+/**
+ * @brief Indicate if USART clock is enabled in STOP Mode
+ * @rmtoll CR3 UCESM LL_USART_IsClockEnabledInStopMode
+ * @param USARTx USART Instance
+ * @retval State of bit (1 or 0).
+ */
+__STATIC_INLINE uint32_t LL_USART_IsClockEnabledInStopMode(USART_TypeDef *USARTx)
+{
+ return (READ_BIT(USARTx->CR3, USART_CR3_UCESM) == (USART_CR3_UCESM));
+}
+
+#endif /* USART_CR3_UCESM */
+#endif /* USART_CR1_UESM*/
/**
* @brief Receiver Enable (Receiver is enabled and begins searching for a start bit)
* @rmtoll CR1 RE LL_USART_EnableDirectionRx
@@ -1461,6 +1560,41 @@ __STATIC_INLINE uint32_t LL_USART_IsEnabledOverrunDetect(USART_TypeDef *USARTx)
return ((READ_BIT(USARTx->CR3, USART_CR3_OVRDIS) != USART_CR3_OVRDIS) ? 1UL : 0UL);
}
+#if defined(USART_CR1_UESM)
+/**
+ * @brief Select event type for Wake UP Interrupt Flag (WUS[1:0] bits)
+ * @note Macro @ref IS_UART_WAKEUP_FROMSTOP_INSTANCE(USARTx) can be used to check whether or not
+ * Wake-up from Stop mode feature is supported by the USARTx instance.
+ * @rmtoll CR3 WUS LL_USART_SetWKUPType
+ * @param USARTx USART Instance
+ * @param Type This parameter can be one of the following values:
+ * @arg @ref LL_USART_WAKEUP_ON_ADDRESS
+ * @arg @ref LL_USART_WAKEUP_ON_STARTBIT
+ * @arg @ref LL_USART_WAKEUP_ON_RXNE
+ * @retval None
+ */
+__STATIC_INLINE void LL_USART_SetWKUPType(USART_TypeDef *USARTx, uint32_t Type)
+{
+ MODIFY_REG(USARTx->CR3, USART_CR3_WUS, Type);
+}
+
+/**
+ * @brief Return event type for Wake UP Interrupt Flag (WUS[1:0] bits)
+ * @note Macro @ref IS_UART_WAKEUP_FROMSTOP_INSTANCE(USARTx) can be used to check whether or not
+ * Wake-up from Stop mode feature is supported by the USARTx instance.
+ * @rmtoll CR3 WUS LL_USART_GetWKUPType
+ * @param USARTx USART Instance
+ * @retval Returned value can be one of the following values:
+ * @arg @ref LL_USART_WAKEUP_ON_ADDRESS
+ * @arg @ref LL_USART_WAKEUP_ON_STARTBIT
+ * @arg @ref LL_USART_WAKEUP_ON_RXNE
+ */
+__STATIC_INLINE uint32_t LL_USART_GetWKUPType(USART_TypeDef *USARTx)
+{
+ return (uint32_t)(READ_BIT(USARTx->CR3, USART_CR3_WUS));
+}
+
+#endif /* USART_CR1_UESM */
/**
* @brief Configure USART BRR register for achieving expected Baud Rate value.
* @note Compute and set USARTDIV value in BRR Register (full BRR content)
@@ -1480,7 +1614,7 @@ __STATIC_INLINE uint32_t LL_USART_IsEnabledOverrunDetect(USART_TypeDef *USARTx)
__STATIC_INLINE void LL_USART_SetBaudRate(USART_TypeDef *USARTx, uint32_t PeriphClk, uint32_t OverSampling,
uint32_t BaudRate)
{
- register uint32_t usartdiv;
+ uint32_t usartdiv;
register uint32_t brrtemp;
if (OverSampling == LL_USART_OVERSAMPLING_8)
@@ -2161,7 +2295,8 @@ __STATIC_INLINE void LL_USART_ConfigAsyncMode(USART_TypeDef *USARTx)
{
/* In Asynchronous mode, the following bits must be kept cleared:
- LINEN, CLKEN bits in the USART_CR2 register,
- - SCEN, IREN and HDSEL bits in the USART_CR3 register.*/
+ - SCEN, IREN and HDSEL bits in the USART_CR3 register.
+ */
CLEAR_BIT(USARTx->CR2, (USART_CR2_LINEN | USART_CR2_CLKEN));
CLEAR_BIT(USARTx->CR3, (USART_CR3_SCEN | USART_CR3_IREN | USART_CR3_HDSEL));
}
@@ -2197,7 +2332,8 @@ __STATIC_INLINE void LL_USART_ConfigSyncMode(USART_TypeDef *USARTx)
{
/* In Synchronous mode, the following bits must be kept cleared:
- LINEN bit in the USART_CR2 register,
- - SCEN, IREN and HDSEL bits in the USART_CR3 register.*/
+ - SCEN, IREN and HDSEL bits in the USART_CR3 register.
+ */
CLEAR_BIT(USARTx->CR2, (USART_CR2_LINEN));
CLEAR_BIT(USARTx->CR3, (USART_CR3_SCEN | USART_CR3_IREN | USART_CR3_HDSEL));
/* set the UART/USART in Synchronous mode */
@@ -2237,7 +2373,8 @@ __STATIC_INLINE void LL_USART_ConfigLINMode(USART_TypeDef *USARTx)
{
/* In LIN mode, the following bits must be kept cleared:
- STOP and CLKEN bits in the USART_CR2 register,
- - IREN, SCEN and HDSEL bits in the USART_CR3 register.*/
+ - IREN, SCEN and HDSEL bits in the USART_CR3 register.
+ */
CLEAR_BIT(USARTx->CR2, (USART_CR2_CLKEN | USART_CR2_STOP));
CLEAR_BIT(USARTx->CR3, (USART_CR3_IREN | USART_CR3_SCEN | USART_CR3_HDSEL));
/* Set the UART/USART in LIN mode */
@@ -2275,7 +2412,8 @@ __STATIC_INLINE void LL_USART_ConfigHalfDuplexMode(USART_TypeDef *USARTx)
{
/* In Half Duplex mode, the following bits must be kept cleared:
- LINEN and CLKEN bits in the USART_CR2 register,
- - SCEN and IREN bits in the USART_CR3 register.*/
+ - SCEN and IREN bits in the USART_CR3 register.
+ */
CLEAR_BIT(USARTx->CR2, (USART_CR2_LINEN | USART_CR2_CLKEN));
CLEAR_BIT(USARTx->CR3, (USART_CR3_SCEN | USART_CR3_IREN));
/* set the UART/USART in Half Duplex mode */
@@ -2315,7 +2453,8 @@ __STATIC_INLINE void LL_USART_ConfigSmartcardMode(USART_TypeDef *USARTx)
{
/* In Smartcard mode, the following bits must be kept cleared:
- LINEN bit in the USART_CR2 register,
- - IREN and HDSEL bits in the USART_CR3 register.*/
+ - IREN and HDSEL bits in the USART_CR3 register.
+ */
CLEAR_BIT(USARTx->CR2, (USART_CR2_LINEN));
CLEAR_BIT(USARTx->CR3, (USART_CR3_IREN | USART_CR3_HDSEL));
/* Configure Stop bits to 1.5 bits */
@@ -2358,7 +2497,8 @@ __STATIC_INLINE void LL_USART_ConfigIrdaMode(USART_TypeDef *USARTx)
{
/* In IRDA mode, the following bits must be kept cleared:
- LINEN, STOP and CLKEN bits in the USART_CR2 register,
- - SCEN and HDSEL bits in the USART_CR3 register.*/
+ - SCEN and HDSEL bits in the USART_CR3 register.
+ */
CLEAR_BIT(USARTx->CR2, (USART_CR2_LINEN | USART_CR2_CLKEN | USART_CR2_STOP));
CLEAR_BIT(USARTx->CR3, (USART_CR3_SCEN | USART_CR3_HDSEL));
/* set the UART/USART in IRDA mode */
@@ -2396,7 +2536,8 @@ __STATIC_INLINE void LL_USART_ConfigMultiProcessMode(USART_TypeDef *USARTx)
{
/* In Multi Processor mode, the following bits must be kept cleared:
- LINEN and CLKEN bits in the USART_CR2 register,
- - IREN, SCEN and HDSEL bits in the USART_CR3 register.*/
+ - IREN, SCEN and HDSEL bits in the USART_CR3 register.
+ */
CLEAR_BIT(USARTx->CR2, (USART_CR2_LINEN | USART_CR2_CLKEN));
CLEAR_BIT(USARTx->CR3, (USART_CR3_SCEN | USART_CR3_HDSEL | USART_CR3_IREN));
}
@@ -2630,6 +2771,21 @@ __STATIC_INLINE uint32_t LL_USART_IsActiveFlag_RWU(USART_TypeDef *USARTx)
return ((READ_BIT(USARTx->ISR, USART_ISR_RWU) == (USART_ISR_RWU)) ? 1UL : 0UL);
}
+#if defined(USART_CR1_UESM)
+/**
+ * @brief Check if the USART Wake Up from stop mode Flag is set or not
+ * @note Macro @ref IS_UART_WAKEUP_FROMSTOP_INSTANCE(USARTx) can be used to check whether or not
+ * Wake-up from Stop mode feature is supported by the USARTx instance.
+ * @rmtoll ISR WUF LL_USART_IsActiveFlag_WKUP
+ * @param USARTx USART Instance
+ * @retval State of bit (1 or 0).
+ */
+__STATIC_INLINE uint32_t LL_USART_IsActiveFlag_WKUP(USART_TypeDef *USARTx)
+{
+ return ((READ_BIT(USARTx->ISR, USART_ISR_WUF) == (USART_ISR_WUF)) ? 1UL : 0UL);
+}
+
+#endif /* USART_CR1_UESM */
/**
* @brief Check if the USART Transmit Enable Acknowledge Flag is set or not
* @rmtoll ISR TEACK LL_USART_IsActiveFlag_TEACK
@@ -2641,6 +2797,19 @@ __STATIC_INLINE uint32_t LL_USART_IsActiveFlag_TEACK(USART_TypeDef *USARTx)
return ((READ_BIT(USARTx->ISR, USART_ISR_TEACK) == (USART_ISR_TEACK)) ? 1UL : 0UL);
}
+#if defined(USART_ISR_REACK)
+/**
+ * @brief Check if the USART Receive Enable Acknowledge Flag is set or not
+ * @rmtoll ISR REACK LL_USART_IsActiveFlag_REACK
+ * @param USARTx USART Instance
+ * @retval State of bit (1 or 0).
+ */
+__STATIC_INLINE uint32_t LL_USART_IsActiveFlag_REACK(USART_TypeDef *USARTx)
+{
+ return ((READ_BIT(USARTx->ISR, USART_ISR_REACK) == (USART_ISR_REACK)) ? 1UL : 0UL);
+}
+
+#endif/* USART_ISR_REACK */
#if defined(USART_TCBGT_SUPPORT)
/* Function available only on devices supporting Transmit Complete before Guard Time feature */
/**
@@ -2653,8 +2822,8 @@ __STATIC_INLINE uint32_t LL_USART_IsActiveFlag_TCBGT(USART_TypeDef *USARTx)
{
return ((READ_BIT(USARTx->ISR, USART_ISR_TCBGT) == (USART_ISR_TCBGT)) ? 1UL : 0UL);
}
-#endif
+#endif /* USART_TCBGT_SUPPORT */
/**
* @brief Clear Parity Error Flag
* @rmtoll ICR PECF LL_USART_ClearFlag_PE
@@ -2733,7 +2902,7 @@ __STATIC_INLINE void LL_USART_ClearFlag_TCBGT(USART_TypeDef *USARTx)
{
WRITE_REG(USARTx->ICR, USART_ICR_TCBGTCF);
}
-#endif
+#endif /* USART_TCBGT_SUPPORT */
/**
* @brief Clear LIN Break Detection Flag
@@ -2796,6 +2965,21 @@ __STATIC_INLINE void LL_USART_ClearFlag_CM(USART_TypeDef *USARTx)
WRITE_REG(USARTx->ICR, USART_ICR_CMCF);
}
+#if defined(USART_CR1_UESM)
+/**
+ * @brief Clear Wake Up from stop mode Flag
+ * @note Macro @ref IS_UART_WAKEUP_FROMSTOP_INSTANCE(USARTx) can be used to check whether or not
+ * Wake-up from Stop mode feature is supported by the USARTx instance.
+ * @rmtoll ICR WUCF LL_USART_ClearFlag_WKUP
+ * @param USARTx USART Instance
+ * @retval None
+ */
+__STATIC_INLINE void LL_USART_ClearFlag_WKUP(USART_TypeDef *USARTx)
+{
+ WRITE_REG(USARTx->ICR, USART_ICR_WUCF);
+}
+
+#endif /* USART_CR1_UESM */
/**
* @}
*/
@@ -2935,6 +3119,21 @@ __STATIC_INLINE void LL_USART_EnableIT_CTS(USART_TypeDef *USARTx)
SET_BIT(USARTx->CR3, USART_CR3_CTSIE);
}
+#if defined(USART_CR1_UESM)
+/**
+ * @brief Enable Wake Up from Stop Mode Interrupt
+ * @note Macro @ref IS_UART_WAKEUP_FROMSTOP_INSTANCE(USARTx) can be used to check whether or not
+ * Wake-up from Stop mode feature is supported by the USARTx instance.
+ * @rmtoll CR3 WUFIE LL_USART_EnableIT_WKUP
+ * @param USARTx USART Instance
+ * @retval None
+ */
+__STATIC_INLINE void LL_USART_EnableIT_WKUP(USART_TypeDef *USARTx)
+{
+ SET_BIT(USARTx->CR3, USART_CR3_WUFIE);
+}
+
+#endif /* USART_CR1_UESM */
#if defined(USART_TCBGT_SUPPORT)
/* Function available only on devices supporting Transmit Complete before Guard Time feature */
/**
@@ -2949,7 +3148,7 @@ __STATIC_INLINE void LL_USART_EnableIT_TCBGT(USART_TypeDef *USARTx)
{
SET_BIT(USARTx->CR3, USART_CR3_TCBGTIE);
}
-#endif
+#endif /* USART_TCBGT_SUPPORT */
/**
* @brief Disable IDLE Interrupt
@@ -3082,6 +3281,21 @@ __STATIC_INLINE void LL_USART_DisableIT_CTS(USART_TypeDef *USARTx)
CLEAR_BIT(USARTx->CR3, USART_CR3_CTSIE);
}
+#if defined(USART_CR1_UESM)
+/**
+ * @brief Disable Wake Up from Stop Mode Interrupt
+ * @note Macro @ref IS_UART_WAKEUP_FROMSTOP_INSTANCE(USARTx) can be used to check whether or not
+ * Wake-up from Stop mode feature is supported by the USARTx instance.
+ * @rmtoll CR3 WUFIE LL_USART_DisableIT_WKUP
+ * @param USARTx USART Instance
+ * @retval None
+ */
+__STATIC_INLINE void LL_USART_DisableIT_WKUP(USART_TypeDef *USARTx)
+{
+ CLEAR_BIT(USARTx->CR3, USART_CR3_WUFIE);
+}
+
+#endif /* USART_CR1_UESM */
#if defined(USART_TCBGT_SUPPORT)
/* Function available only on devices supporting Transmit Complete before Guard Time feature */
/**
@@ -3096,7 +3310,7 @@ __STATIC_INLINE void LL_USART_DisableIT_TCBGT(USART_TypeDef *USARTx)
{
CLEAR_BIT(USARTx->CR3, USART_CR3_TCBGTIE);
}
-#endif
+#endif /* USART_TCBGT_SUPPORT */
/**
* @brief Check if the USART IDLE Interrupt source is enabled or disabled.
@@ -3225,6 +3439,21 @@ __STATIC_INLINE uint32_t LL_USART_IsEnabledIT_CTS(USART_TypeDef *USARTx)
return ((READ_BIT(USARTx->CR3, USART_CR3_CTSIE) == (USART_CR3_CTSIE)) ? 1UL : 0UL);
}
+#if defined(USART_CR1_UESM)
+/**
+ * @brief Check if the USART Wake Up from Stop Mode Interrupt is enabled or disabled.
+ * @note Macro @ref IS_UART_WAKEUP_FROMSTOP_INSTANCE(USARTx) can be used to check whether or not
+ * Wake-up from Stop mode feature is supported by the USARTx instance.
+ * @rmtoll CR3 WUFIE LL_USART_IsEnabledIT_WKUP
+ * @param USARTx USART Instance
+ * @retval State of bit (1 or 0).
+ */
+__STATIC_INLINE uint32_t LL_USART_IsEnabledIT_WKUP(USART_TypeDef *USARTx)
+{
+ return ((READ_BIT(USARTx->CR3, USART_CR3_WUFIE) == (USART_CR3_WUFIE)) ? 1UL : 0UL);
+}
+
+#endif /* USART_CR1_UESM */
#if defined(USART_TCBGT_SUPPORT)
/* Function available only on devices supporting Transmit Complete before Guard Time feature */
/**
@@ -3239,7 +3468,7 @@ __STATIC_INLINE uint32_t LL_USART_IsEnabledIT_TCBGT(USART_TypeDef *USARTx)
{
return ((READ_BIT(USARTx->CR3, USART_CR3_TCBGTIE) == (USART_CR3_TCBGTIE)) ? 1UL : 0UL);
}
-#endif
+#endif /* USART_TCBGT_SUPPORT */
/**
* @}
@@ -3365,12 +3594,12 @@ __STATIC_INLINE uint32_t LL_USART_DMA_GetRegAddr(USART_TypeDef *USARTx, uint32_t
if (Direction == LL_USART_DMA_REG_DATA_TRANSMIT)
{
/* return address of TDR register */
- data_reg_addr = (uint32_t) & (USARTx->TDR);
+ data_reg_addr = (uint32_t) &(USARTx->TDR);
}
else
{
/* return address of RDR register */
- data_reg_addr = (uint32_t) & (USARTx->RDR);
+ data_reg_addr = (uint32_t) &(USARTx->RDR);
}
return data_reg_addr;
@@ -3392,7 +3621,7 @@ __STATIC_INLINE uint32_t LL_USART_DMA_GetRegAddr(USART_TypeDef *USARTx, uint32_t
*/
__STATIC_INLINE uint8_t LL_USART_ReceiveData8(USART_TypeDef *USARTx)
{
- return (uint8_t)(READ_BIT(USARTx->RDR, USART_RDR_RDR));
+ return (uint8_t)(READ_BIT(USARTx->RDR, USART_RDR_RDR) & 0xFFU);
}
/**
diff --git a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_TrueStudio/Boot/lib/STM32F7xx_HAL_Driver/Inc/stm32f7xx_ll_usb.h b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_TrueStudio/Boot/lib/STM32F7xx_HAL_Driver/Inc/stm32f7xx_ll_usb.h
index 1f768abf..44bf4853 100644
--- a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_TrueStudio/Boot/lib/STM32F7xx_HAL_Driver/Inc/stm32f7xx_ll_usb.h
+++ b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_TrueStudio/Boot/lib/STM32F7xx_HAL_Driver/Inc/stm32f7xx_ll_usb.h
@@ -155,7 +155,7 @@ typedef struct
typedef struct
{
- uint8_t dev_addr ; /*!< USB device address.
+ uint8_t dev_addr; /*!< USB device address.
This parameter must be a number between Min_Data = 1 and Max_Data = 255 */
uint8_t ch_num; /*!< Host channel number.
@@ -199,10 +199,10 @@ typedef struct
uint32_t ErrCnt; /*!< Host channel error count.*/
- USB_OTG_URBStateTypeDef urb_state; /*!< URB state.
+ USB_OTG_URBStateTypeDef urb_state; /*!< URB state.
This parameter can be any value of @ref USB_OTG_URBStateTypeDef */
- USB_OTG_HCStateTypeDef state; /*!< Host Channel state.
+ USB_OTG_HCStateTypeDef state; /*!< Host Channel state.
This parameter can be any value of @ref USB_OTG_HCStateTypeDef */
} USB_OTG_HCTypeDef;
#endif /* defined (USB_OTG_FS) || defined (USB_OTG_HS) */
@@ -234,6 +234,18 @@ typedef struct
* @}
*/
+/** @defgroup USB_LL Device Speed
+ * @{
+ */
+#define USBD_HS_SPEED 0U
+#define USBD_HSINFS_SPEED 1U
+#define USBH_HS_SPEED 0U
+#define USBD_FS_SPEED 2U
+#define USBH_FSLS_SPEED 1U
+/**
+ * @}
+ */
+
/** @defgroup USB_LL_Core_Speed USB Low Layer Core Speed
* @{
*/
@@ -252,7 +264,7 @@ typedef struct
#define USB_OTG_HS_EMBEDDED_PHY 3U
#if !defined (USB_HS_PHYC_TUNE_VALUE)
-#define USB_HS_PHYC_TUNE_VALUE 0x00000F13U /*!< Value of USB HS PHY Tune */
+#define USB_HS_PHYC_TUNE_VALUE 0x00000F13U /*!< Value of USB HS PHY Tune */
#endif /* USB_HS_PHYC_TUNE_VALUE */
/**
* @}
@@ -262,11 +274,11 @@ typedef struct
* @{
*/
#ifndef USBD_HS_TRDT_VALUE
-#define USBD_HS_TRDT_VALUE 9U
+#define USBD_HS_TRDT_VALUE 9U
#endif /* USBD_HS_TRDT_VALUE */
#ifndef USBD_FS_TRDT_VALUE
-#define USBD_FS_TRDT_VALUE 5U
-#define USBD_DEFAULT_TRDT_VALUE 9U
+#define USBD_FS_TRDT_VALUE 5U
+#define USBD_DEFAULT_TRDT_VALUE 9U
#endif /* USBD_HS_TRDT_VALUE */
/**
* @}
@@ -275,9 +287,9 @@ typedef struct
/** @defgroup USB_LL_Core_MPS USB Low Layer Core MPS
* @{
*/
-#define USB_OTG_HS_MAX_PACKET_SIZE 512U
-#define USB_OTG_FS_MAX_PACKET_SIZE 64U
-#define USB_OTG_MAX_EP0_SIZE 64U
+#define USB_OTG_HS_MAX_PACKET_SIZE 512U
+#define USB_OTG_FS_MAX_PACKET_SIZE 64U
+#define USB_OTG_MAX_EP0_SIZE 64U
/**
* @}
*/
@@ -287,7 +299,6 @@ typedef struct
*/
#define DSTS_ENUMSPD_HS_PHY_30MHZ_OR_60MHZ (0U << 1)
#define DSTS_ENUMSPD_FS_PHY_30MHZ_OR_60MHZ (1U << 1)
-#define DSTS_ENUMSPD_LS_PHY_6MHZ (2U << 1)
#define DSTS_ENUMSPD_FS_PHY_48MHZ (3U << 1)
/**
* @}
@@ -397,7 +408,7 @@ typedef struct
#define USBPHYC ((USBPHYC_GlobalTypeDef *)((uint32_t )USB_PHY_HS_CONTROLLER_BASE))
#endif /* defined (USB_OTG_FS) || defined (USB_OTG_HS) */
-#define EP_ADDR_MSK 0xFU
+#define EP_ADDR_MSK 0xFU
/**
* @}
*/
@@ -462,13 +473,9 @@ HAL_StatusTypeDef USB_ResetPort(USB_OTG_GlobalTypeDef *USBx);
HAL_StatusTypeDef USB_DriveVbus(USB_OTG_GlobalTypeDef *USBx, uint8_t state);
uint32_t USB_GetHostSpeed(USB_OTG_GlobalTypeDef *USBx);
uint32_t USB_GetCurrentFrame(USB_OTG_GlobalTypeDef *USBx);
-HAL_StatusTypeDef USB_HC_Init(USB_OTG_GlobalTypeDef *USBx,
- uint8_t ch_num,
- uint8_t epnum,
- uint8_t dev_address,
- uint8_t speed,
- uint8_t ep_type,
- uint16_t mps);
+HAL_StatusTypeDef USB_HC_Init(USB_OTG_GlobalTypeDef *USBx, uint8_t ch_num,
+ uint8_t epnum, uint8_t dev_address, uint8_t speed,
+ uint8_t ep_type, uint16_t mps);
HAL_StatusTypeDef USB_HC_StartXfer(USB_OTG_GlobalTypeDef *USBx, USB_OTG_HCTypeDef *hc, uint8_t dma);
uint32_t USB_HC_ReadInterrupt(USB_OTG_GlobalTypeDef *USBx);
HAL_StatusTypeDef USB_HC_Halt(USB_OTG_GlobalTypeDef *USBx, uint8_t hc_num);
diff --git a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_TrueStudio/Boot/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal.c b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_TrueStudio/Boot/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal.c
index 81a39d76..48bbd535 100644
--- a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_TrueStudio/Boot/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal.c
+++ b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_TrueStudio/Boot/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal.c
@@ -50,11 +50,11 @@
* @{
*/
/**
- * @brief STM32F7xx HAL Driver version number V1.2.7
+ * @brief STM32F7xx HAL Driver version number V1.2.8
*/
#define __STM32F7xx_HAL_VERSION_MAIN (0x01) /*!< [31:24] main version */
#define __STM32F7xx_HAL_VERSION_SUB1 (0x02) /*!< [23:16] sub1 version */
-#define __STM32F7xx_HAL_VERSION_SUB2 (0x07) /*!< [15:8] sub2 version */
+#define __STM32F7xx_HAL_VERSION_SUB2 (0x08) /*!< [15:8] sub2 version */
#define __STM32F7xx_HAL_VERSION_RC (0x00) /*!< [7:0] release candidate */
#define __STM32F7xx_HAL_VERSION ((__STM32F7xx_HAL_VERSION_MAIN << 24)\
|(__STM32F7xx_HAL_VERSION_SUB1 << 16)\
@@ -319,14 +319,26 @@ uint32_t HAL_GetTickPrio(void)
HAL_StatusTypeDef HAL_SetTickFreq(HAL_TickFreqTypeDef Freq)
{
HAL_StatusTypeDef status = HAL_OK;
+ HAL_TickFreqTypeDef prevTickFreq;
+
assert_param(IS_TICKFREQ(Freq));
if (uwTickFreq != Freq)
{
+ /* Back up uwTickFreq frequency */
+ prevTickFreq = uwTickFreq;
+
+ /* Update uwTickFreq global variable used by HAL_InitTick() */
uwTickFreq = Freq;
/* Apply the new tick Freq */
status = HAL_InitTick(uwTickPrio);
+
+ if (status != HAL_OK)
+ {
+ /* Restore previous tick frequency */
+ uwTickFreq = prevTickFreq;
+ }
}
return status;
diff --git a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_TrueStudio/Boot/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_can.c b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_TrueStudio/Boot/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_can.c
index 6978c4da..a381dfc4 100644
--- a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_TrueStudio/Boot/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_can.c
+++ b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_TrueStudio/Boot/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_can.c
@@ -1556,7 +1556,7 @@ HAL_StatusTypeDef HAL_CAN_GetRxMessage(CAN_HandleTypeDef *hcan, uint32_t RxFifo,
{
pHeader->ExtId = ((CAN_RI0R_EXID | CAN_RI0R_STID) & hcan->Instance->sFIFOMailBox[RxFifo].RIR) >> CAN_RI0R_EXID_Pos;
}
- pHeader->RTR = (CAN_RI0R_RTR & hcan->Instance->sFIFOMailBox[RxFifo].RIR) >> CAN_RI0R_RTR_Pos;
+ pHeader->RTR = (CAN_RI0R_RTR & hcan->Instance->sFIFOMailBox[RxFifo].RIR);
pHeader->DLC = (CAN_RDT0R_DLC & hcan->Instance->sFIFOMailBox[RxFifo].RDTR) >> CAN_RDT0R_DLC_Pos;
pHeader->FilterMatchIndex = (CAN_RDT0R_FMI & hcan->Instance->sFIFOMailBox[RxFifo].RDTR) >> CAN_RDT0R_FMI_Pos;
pHeader->Timestamp = (CAN_RDT0R_TIME & hcan->Instance->sFIFOMailBox[RxFifo].RDTR) >> CAN_RDT0R_TIME_Pos;
diff --git a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_TrueStudio/Boot/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_exti.c b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_TrueStudio/Boot/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_exti.c
index 07e53536..246f4562 100644
--- a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_TrueStudio/Boot/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_exti.c
+++ b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_TrueStudio/Boot/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_exti.c
@@ -85,7 +85,6 @@
/* Includes ------------------------------------------------------------------*/
#include "stm32f7xx_hal.h"
-#include "stm32f7xx_hal_exti.h"
/** @addtogroup STM32F7xx_HAL_Driver
* @{
@@ -105,7 +104,7 @@
#ifdef HAL_EXTI_MODULE_ENABLED
/* Private typedef -----------------------------------------------------------*/
-/* Private defines ------------------------------------------------------------*/
+/* Private defines -----------------------------------------------------------*/
/** @defgroup EXTI_Private_Constants EXTI Private Constants
* @{
*/
@@ -144,6 +143,8 @@
HAL_StatusTypeDef HAL_EXTI_SetConfigLine(EXTI_HandleTypeDef *hexti, EXTI_ConfigTypeDef *pExtiConfig)
{
uint32_t regval;
+ uint32_t linepos;
+ uint32_t maskline;
/* Check null pointer */
if ((hexti == NULL) || (pExtiConfig == NULL))
@@ -154,37 +155,77 @@ HAL_StatusTypeDef HAL_EXTI_SetConfigLine(EXTI_HandleTypeDef *hexti, EXTI_ConfigT
/* Check parameters */
assert_param(IS_EXTI_LINE(pExtiConfig->Line));
assert_param(IS_EXTI_MODE(pExtiConfig->Mode));
- assert_param(IS_EXTI_TRIGGER(pExtiConfig->Trigger));
-
+
/* Assign line number to handle */
hexti->Line = pExtiConfig->Line;
-
- /* Clear EXTI line configuration */
- EXTI->IMR &= ~pExtiConfig->Line;
- EXTI->EMR &= ~pExtiConfig->Line;
-
- /* Select the Mode for the selected external interrupts */
- regval = (uint32_t)EXTI_BASE;
- regval += pExtiConfig->Mode;
- *(__IO uint32_t *) regval |= pExtiConfig->Line;
-
- /* Clear Rising Falling edge configuration */
- EXTI->RTSR &= ~pExtiConfig->Line;
- EXTI->FTSR &= ~pExtiConfig->Line;
-
- /* Select the trigger for the selected external interrupts */
- if (pExtiConfig->Trigger == EXTI_TRIGGER_RISING_FALLING)
+
+ /* Compute line mask */
+ linepos = (pExtiConfig->Line & EXTI_PIN_MASK);
+ maskline = (1uL << linepos);
+
+ /* Configure triggers for configurable lines */
+ if ((pExtiConfig->Line & EXTI_CONFIG) != 0x00u)
{
- /* Rising Falling edge */
- EXTI->RTSR |= pExtiConfig->Line;
- EXTI->FTSR |= pExtiConfig->Line;
+ assert_param(IS_EXTI_TRIGGER(pExtiConfig->Trigger));
+
+ /* Configure rising trigger */
+ /* Mask or set line */
+ if ((pExtiConfig->Trigger & EXTI_TRIGGER_RISING) != 0x00u)
+ {
+ EXTI->RTSR |= maskline;
+ }
+ else
+ {
+ EXTI->RTSR &= ~maskline;
+ }
+
+ /* Configure falling trigger */
+ /* Mask or set line */
+ if ((pExtiConfig->Trigger & EXTI_TRIGGER_FALLING) != 0x00u)
+ {
+ EXTI->FTSR |= maskline;
+ }
+ else
+ {
+ EXTI->FTSR &= ~maskline;
+ }
+
+
+ /* Configure gpio port selection in case of gpio exti line */
+ if ((pExtiConfig->Line & EXTI_GPIO) == EXTI_GPIO)
+ {
+ assert_param(IS_EXTI_GPIO_PORT(pExtiConfig->GPIOSel));
+ assert_param(IS_EXTI_GPIO_PIN(linepos));
+
+ regval = SYSCFG->EXTICR[linepos >> 2u];
+ regval &= ~(SYSCFG_EXTICR1_EXTI0 << (SYSCFG_EXTICR1_EXTI1_Pos * (linepos & 0x03u)));
+ regval |= (pExtiConfig->GPIOSel << (SYSCFG_EXTICR1_EXTI1_Pos * (linepos & 0x03u)));
+ SYSCFG->EXTICR[linepos >> 2u] = regval;
+ }
+ }
+
+ /* Configure interrupt mode : read current mode */
+ /* Mask or set line */
+ if ((pExtiConfig->Mode & EXTI_MODE_INTERRUPT) != 0x00u)
+ {
+ EXTI->IMR |= maskline;
}
else
{
- regval = (uint32_t)EXTI_BASE;
- regval += pExtiConfig->Trigger;
- *(__IO uint32_t *) regval |= pExtiConfig->Line;
+ EXTI->IMR &= ~maskline;
}
+
+ /* Configure event mode : read current mode */
+ /* Mask or set line */
+ if ((pExtiConfig->Mode & EXTI_MODE_EVENT) != 0x00u)
+ {
+ EXTI->EMR |= maskline;
+ }
+ else
+ {
+ EXTI->EMR &= ~maskline;
+ }
+
return HAL_OK;
}
@@ -196,6 +237,10 @@ HAL_StatusTypeDef HAL_EXTI_SetConfigLine(EXTI_HandleTypeDef *hexti, EXTI_ConfigT
*/
HAL_StatusTypeDef HAL_EXTI_GetConfigLine(EXTI_HandleTypeDef *hexti, EXTI_ConfigTypeDef *pExtiConfig)
{
+ uint32_t regval;
+ uint32_t linepos;
+ uint32_t maskline;
+
/* Check null pointer */
if ((hexti == NULL) || (pExtiConfig == NULL))
{
@@ -208,41 +253,67 @@ HAL_StatusTypeDef HAL_EXTI_GetConfigLine(EXTI_HandleTypeDef *hexti, EXTI_ConfigT
/* Store handle line number to configuration structure */
pExtiConfig->Line = hexti->Line;
- /* Get EXTI mode to configiguration structure */
- if ((EXTI->IMR & hexti->Line) == hexti->Line)
+ /* Compute line mask */
+ linepos = (pExtiConfig->Line & EXTI_PIN_MASK);
+ maskline = (1uL << linepos);
+
+ /* 1] Get core mode : interrupt */
+
+ /* Check if selected line is enable */
+ if ((EXTI->IMR & maskline) != 0x00u)
{
pExtiConfig->Mode = EXTI_MODE_INTERRUPT;
}
- else if ((EXTI->EMR & hexti->Line) == hexti->Line)
- {
- pExtiConfig->Mode = EXTI_MODE_EVENT;
- }
else
{
- /* No MODE selected */
- pExtiConfig->Mode = 0x0Bu;
+ pExtiConfig->Mode = EXTI_MODE_NONE;
}
- /* Get EXTI Trigger to configiguration structure */
- if ((EXTI->RTSR & hexti->Line) == hexti->Line)
+ /* Get event mode */
+ /* Check if selected line is enable */
+ if ((EXTI->EMR & maskline) != 0x00u)
{
- if ((EXTI->FTSR & hexti->Line) == hexti->Line)
- {
- pExtiConfig->Trigger = EXTI_TRIGGER_RISING_FALLING;
- }
- else
+ pExtiConfig->Mode |= EXTI_MODE_EVENT;
+ }
+
+ /* 2] Get trigger for configurable lines : rising */
+ if ((pExtiConfig->Line & EXTI_CONFIG) != 0x00u)
+ {
+ /* Check if configuration of selected line is enable */
+ if ((EXTI->RTSR & maskline) != 0x00u)
{
pExtiConfig->Trigger = EXTI_TRIGGER_RISING;
}
- }
- else if ((EXTI->FTSR & hexti->Line) == hexti->Line)
- {
- pExtiConfig->Trigger = EXTI_TRIGGER_FALLING;
+ else
+ {
+ pExtiConfig->Trigger = EXTI_TRIGGER_NONE;
+ }
+
+ /* Get falling configuration */
+ /* Check if configuration of selected line is enable */
+ if ((EXTI->FTSR & maskline) != 0x00u)
+ {
+ pExtiConfig->Trigger |= EXTI_TRIGGER_FALLING;
+ }
+
+ /* Get Gpio port selection for gpio lines */
+ if ((pExtiConfig->Line & EXTI_GPIO) == EXTI_GPIO)
+ {
+ assert_param(IS_EXTI_GPIO_PIN(linepos));
+
+ regval = SYSCFG->EXTICR[linepos >> 2u];
+ pExtiConfig->GPIOSel = ((regval << (SYSCFG_EXTICR1_EXTI1_Pos * (3uL - (linepos & 0x03u)))) >> 24);
+ }
+ else
+ {
+ pExtiConfig->GPIOSel = 0x00u;
+ }
}
else
{
/* No Trigger selected */
- pExtiConfig->Trigger = 0x00u;
+ pExtiConfig->Trigger = EXTI_TRIGGER_NONE;
+ pExtiConfig->GPIOSel = 0x00u;
}
return HAL_OK;
@@ -255,6 +326,10 @@ HAL_StatusTypeDef HAL_EXTI_GetConfigLine(EXTI_HandleTypeDef *hexti, EXTI_ConfigT
*/
HAL_StatusTypeDef HAL_EXTI_ClearConfigLine(EXTI_HandleTypeDef *hexti)
{
+ uint32_t regval;
+ uint32_t linepos;
+ uint32_t maskline;
+
/* Check null pointer */
if (hexti == NULL)
{
@@ -264,15 +339,32 @@ HAL_StatusTypeDef HAL_EXTI_ClearConfigLine(EXTI_HandleTypeDef *hexti)
/* Check the parameter */
assert_param(IS_EXTI_LINE(hexti->Line));
+ /* compute line mask */
+ linepos = (hexti->Line & EXTI_PIN_MASK);
+ maskline = (1uL << linepos);
+
/* 1] Clear interrupt mode */
- EXTI->IMR = (EXTI->IMR & ~hexti->Line);
+ EXTI->IMR = (EXTI->IMR & ~maskline);
/* 2] Clear event mode */
- EXTI->EMR = (EXTI->EMR & ~hexti->Line);
+ EXTI->EMR = (EXTI->EMR & ~maskline);
- /* 3] Clear triggers */
- EXTI->RTSR = (EXTI->RTSR & ~hexti->Line);
- EXTI->FTSR = (EXTI->FTSR & ~hexti->Line);
+ /* 3] Clear triggers in case of configurable lines */
+ if ((hexti->Line & EXTI_CONFIG) != 0x00u)
+ {
+ EXTI->RTSR = (EXTI->RTSR & ~maskline);
+ EXTI->FTSR = (EXTI->FTSR & ~maskline);
+
+ /* Get Gpio port selection for gpio lines */
+ if ((hexti->Line & EXTI_GPIO) == EXTI_GPIO)
+ {
+ assert_param(IS_EXTI_GPIO_PIN(linepos));
+
+ regval = SYSCFG->EXTICR[linepos >> 2u];
+ regval &= ~(SYSCFG_EXTICR1_EXTI0 << (SYSCFG_EXTICR1_EXTI1_Pos * (linepos & 0x03u)));
+ SYSCFG->EXTICR[linepos >> 2u] = regval;
+ }
+ }
return HAL_OK;
}
@@ -352,17 +444,18 @@ HAL_StatusTypeDef HAL_EXTI_GetHandle(EXTI_HandleTypeDef *hexti, uint32_t ExtiLin
*/
void HAL_EXTI_IRQHandler(EXTI_HandleTypeDef *hexti)
{
- __IO uint32_t *regaddr;
uint32_t regval;
+ uint32_t maskline;
+
+ /* Compute line mask */
+ maskline = (1uL << (hexti->Line & EXTI_PIN_MASK));
/* Get pending bit */
- regaddr = (&EXTI->PR);
- regval = (*regaddr & hexti->Line);
-
+ regval = (EXTI->PR & maskline);
if (regval != 0x00u)
{
/* Clear pending bit */
- *regaddr = hexti->Line;
+ EXTI->PR = maskline;
/* Call callback */
if (hexti->PendingCallback != NULL)
@@ -383,19 +476,21 @@ void HAL_EXTI_IRQHandler(EXTI_HandleTypeDef *hexti)
*/
uint32_t HAL_EXTI_GetPending(EXTI_HandleTypeDef *hexti, uint32_t Edge)
{
- __IO uint32_t *regaddr;
uint32_t regval;
+ uint32_t linepos;
+ uint32_t maskline;
/* Check parameters */
assert_param(IS_EXTI_LINE(hexti->Line));
+ assert_param(IS_EXTI_CONFIG_LINE(hexti->Line));
assert_param(IS_EXTI_PENDING_EDGE(Edge));
- /* Get pending bit */
- regaddr = &EXTI->PR;
+ /* Compute line mask */
+ linepos = (hexti->Line & EXTI_PIN_MASK);
+ maskline = (1uL << linepos);
/* return 1 if bit is set else 0 */
- regval = ((*regaddr & hexti->Line) >> POSITION_VAL(hexti->Line));
-
+ regval = ((EXTI->PR & maskline) >> linepos);
return regval;
}
@@ -410,12 +505,18 @@ uint32_t HAL_EXTI_GetPending(EXTI_HandleTypeDef *hexti, uint32_t Edge)
*/
void HAL_EXTI_ClearPending(EXTI_HandleTypeDef *hexti, uint32_t Edge)
{
+ uint32_t maskline;
+
/* Check parameters */
assert_param(IS_EXTI_LINE(hexti->Line));
+ assert_param(IS_EXTI_CONFIG_LINE(hexti->Line));
assert_param(IS_EXTI_PENDING_EDGE(Edge));
-
+
+ /* Compute line mask */
+ maskline = (1uL << (hexti->Line & EXTI_PIN_MASK));
+
/* Clear Pending bit */
- EXTI->PR = hexti->Line;
+ EXTI->PR = maskline;
}
/**
@@ -425,10 +526,17 @@ void HAL_EXTI_ClearPending(EXTI_HandleTypeDef *hexti, uint32_t Edge)
*/
void HAL_EXTI_GenerateSWI(EXTI_HandleTypeDef *hexti)
{
+ uint32_t maskline;
+
/* Check parameters */
assert_param(IS_EXTI_LINE(hexti->Line));
+ assert_param(IS_EXTI_CONFIG_LINE(hexti->Line));
- EXTI->SWIER = hexti->Line;
+ /* Compute line mask */
+ maskline = (1uL << (hexti->Line & EXTI_PIN_MASK));
+
+ /* Generate Software interrupt */
+ EXTI->SWIER = maskline;
}
/**
diff --git a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_TrueStudio/Boot/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_gpio.c b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_TrueStudio/Boot/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_gpio.c
index ffc617dd..0afa1df1 100644
--- a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_TrueStudio/Boot/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_gpio.c
+++ b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_TrueStudio/Boot/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_gpio.c
@@ -190,25 +190,6 @@ void HAL_GPIO_Init(GPIO_TypeDef *GPIOx, GPIO_InitTypeDef *GPIO_Init)
if(iocurrent == ioposition)
{
/*--------------------- GPIO Mode Configuration ------------------------*/
- /* In case of Alternate function mode selection */
- if((GPIO_Init->Mode == GPIO_MODE_AF_PP) || (GPIO_Init->Mode == GPIO_MODE_AF_OD))
- {
- /* Check the Alternate function parameter */
- assert_param(IS_GPIO_AF(GPIO_Init->Alternate));
-
- /* Configure Alternate function mapped with the current IO */
- temp = GPIOx->AFR[position >> 3];
- temp &= ~((uint32_t)0xF << ((uint32_t)(position & (uint32_t)0x07) * 4)) ;
- temp |= ((uint32_t)(GPIO_Init->Alternate) << (((uint32_t)position & (uint32_t)0x07) * 4));
- GPIOx->AFR[position >> 3] = temp;
- }
-
- /* Configure IO Direction mode (Input, Output, Alternate or Analog) */
- temp = GPIOx->MODER;
- temp &= ~(GPIO_MODER_MODER0 << (position * 2));
- temp |= ((GPIO_Init->Mode & GPIO_MODE) << (position * 2));
- GPIOx->MODER = temp;
-
/* In case of Output or Alternate function mode selection */
if((GPIO_Init->Mode == GPIO_MODE_OUTPUT_PP) || (GPIO_Init->Mode == GPIO_MODE_AF_PP) ||
(GPIO_Init->Mode == GPIO_MODE_OUTPUT_OD) || (GPIO_Init->Mode == GPIO_MODE_AF_OD))
@@ -234,6 +215,25 @@ void HAL_GPIO_Init(GPIO_TypeDef *GPIOx, GPIO_InitTypeDef *GPIO_Init)
temp |= ((GPIO_Init->Pull) << (position * 2));
GPIOx->PUPDR = temp;
+ /* In case of Alternate function mode selection */
+ if((GPIO_Init->Mode == GPIO_MODE_AF_PP) || (GPIO_Init->Mode == GPIO_MODE_AF_OD))
+ {
+ /* Check the Alternate function parameter */
+ assert_param(IS_GPIO_AF(GPIO_Init->Alternate));
+
+ /* Configure Alternate function mapped with the current IO */
+ temp = GPIOx->AFR[position >> 3];
+ temp &= ~((uint32_t)0xF << ((uint32_t)(position & (uint32_t)0x07) * 4)) ;
+ temp |= ((uint32_t)(GPIO_Init->Alternate) << (((uint32_t)position & (uint32_t)0x07) * 4));
+ GPIOx->AFR[position >> 3] = temp;
+ }
+
+ /* Configure IO Direction mode (Input, Output, Alternate or Analog) */
+ temp = GPIOx->MODER;
+ temp &= ~(GPIO_MODER_MODER0 << (position * 2));
+ temp |= ((GPIO_Init->Mode & GPIO_MODE) << (position * 2));
+ GPIOx->MODER = temp;
+
/*--------------------- EXTI Mode Configuration ------------------------*/
/* Configure the External Interrupt or event for the current IO */
if((GPIO_Init->Mode & EXTI_MODE) == EXTI_MODE)
@@ -300,7 +300,7 @@ void HAL_GPIO_DeInit(GPIO_TypeDef *GPIOx, uint32_t GPIO_Pin)
/* Check the parameters */
assert_param(IS_GPIO_ALL_INSTANCE(GPIOx));
-
+
/* Configure the port pins */
for(position = 0; position < GPIO_NUMBER; position++)
{
@@ -316,10 +316,6 @@ void HAL_GPIO_DeInit(GPIO_TypeDef *GPIOx, uint32_t GPIO_Pin)
tmp &= (((uint32_t)0x0F) << (4 * (position & 0x03)));
if(tmp == ((uint32_t)(GPIO_GET_INDEX(GPIOx)) << (4 * (position & 0x03))))
{
- /* Configure the External Interrupt or event for the current IO */
- tmp = ((uint32_t)0x0F) << (4 * (position & 0x03));
- SYSCFG->EXTICR[position >> 2] &= ~tmp;
-
/* Clear EXTI line configuration */
EXTI->IMR &= ~((uint32_t)iocurrent);
EXTI->EMR &= ~((uint32_t)iocurrent);
@@ -327,6 +323,10 @@ void HAL_GPIO_DeInit(GPIO_TypeDef *GPIOx, uint32_t GPIO_Pin)
/* Clear Rising Falling edge configuration */
EXTI->RTSR &= ~((uint32_t)iocurrent);
EXTI->FTSR &= ~((uint32_t)iocurrent);
+
+ /* Configure the External Interrupt or event for the current IO */
+ tmp = ((uint32_t)0x0F) << (4 * (position & 0x03));
+ SYSCFG->EXTICR[position >> 2] &= ~tmp;
}
/*------------------------- GPIO Mode Configuration --------------------*/
/* Configure IO Direction in Input Floating Mode */
@@ -335,14 +335,14 @@ void HAL_GPIO_DeInit(GPIO_TypeDef *GPIOx, uint32_t GPIO_Pin)
/* Configure the default Alternate Function in current IO */
GPIOx->AFR[position >> 3] &= ~((uint32_t)0xF << ((uint32_t)(position & (uint32_t)0x07) * 4)) ;
- /* Configure the default value for IO Speed */
- GPIOx->OSPEEDR &= ~(GPIO_OSPEEDER_OSPEEDR0 << (position * 2));
+ /* Deactivate the Pull-up and Pull-down resistor for the current IO */
+ GPIOx->PUPDR &= ~(GPIO_PUPDR_PUPDR0 << (position * 2));
/* Configure the default value IO Output Type */
GPIOx->OTYPER &= ~(GPIO_OTYPER_OT_0 << position) ;
- /* Deactivate the Pull-up and Pull-down resistor for the current IO */
- GPIOx->PUPDR &= ~(GPIO_PUPDR_PUPDR0 << (position * 2));
+ /* Configure the default value for IO Speed */
+ GPIOx->OSPEEDR &= ~(GPIO_OSPEEDER_OSPEEDR0 << (position * 2));
}
}
}
@@ -431,13 +431,13 @@ void HAL_GPIO_TogglePin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
/* Check the parameters */
assert_param(IS_GPIO_PIN(GPIO_Pin));
- if ((GPIOx->ODR & GPIO_Pin) == GPIO_Pin)
+ if ((GPIOx->ODR & GPIO_Pin) != 0X00u)
{
GPIOx->BSRR = (uint32_t)GPIO_Pin << GPIO_NUMBER;
}
else
{
- GPIOx->BSRR = GPIO_Pin;
+ GPIOx->BSRR = (uint32_t)GPIO_Pin;
}
}
@@ -467,10 +467,11 @@ HAL_StatusTypeDef HAL_GPIO_LockPin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
GPIOx->LCKR = GPIO_Pin;
/* Set LCKx bit(s): LCKK='1' + LCK[15-0] */
GPIOx->LCKR = tmp;
- /* Read LCKK bit*/
+ /* Read LCKR register. This read is mandatory to complete key lock sequence */
tmp = GPIOx->LCKR;
- if((GPIOx->LCKR & GPIO_LCKR_LCKK) != RESET)
+ /* Read again in order to confirm lock is active */
+ if((GPIOx->LCKR & GPIO_LCKR_LCKK) != RESET)
{
return HAL_OK;
}
diff --git a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_TrueStudio/Boot/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_i2c.c b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_TrueStudio/Boot/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_i2c.c
index 775bff23..ef049ec4 100644
--- a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_TrueStudio/Boot/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_i2c.c
+++ b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_TrueStudio/Boot/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_i2c.c
@@ -223,12 +223,12 @@
*** Callback registration ***
=============================================
-
+ [..]
The compilation flag USE_HAL_I2C_REGISTER_CALLBACKS when set to 1
allows the user to configure dynamically the driver callbacks.
Use Functions @ref HAL_I2C_RegisterCallback() or @ref HAL_I2C_RegisterAddrCallback()
to register an interrupt callback.
-
+ [..]
Function @ref HAL_I2C_RegisterCallback() allows to register following callbacks:
(+) MasterTxCpltCallback : callback for Master transmission end of transfer.
(+) MasterRxCpltCallback : callback for Master reception end of transfer.
@@ -243,9 +243,9 @@
(+) MspDeInitCallback : callback for Msp DeInit.
This function takes as parameters the HAL peripheral handle, the Callback ID
and a pointer to the user callback function.
-
+ [..]
For specific callback AddrCallback use dedicated register callbacks : @ref HAL_I2C_RegisterAddrCallback().
-
+ [..]
Use function @ref HAL_I2C_UnRegisterCallback to reset a callback to the default
weak function.
@ref HAL_I2C_UnRegisterCallback takes as parameters the HAL peripheral handle,
@@ -262,9 +262,9 @@
(+) AbortCpltCallback : callback for abort completion process.
(+) MspInitCallback : callback for Msp Init.
(+) MspDeInitCallback : callback for Msp DeInit.
-
+ [..]
For callback AddrCallback use dedicated register callbacks : @ref HAL_I2C_UnRegisterAddrCallback().
-
+ [..]
By default, after the @ref HAL_I2C_Init() and when the state is @ref HAL_I2C_STATE_RESET
all callbacks are set to the corresponding weak functions:
examples @ref HAL_I2C_MasterTxCpltCallback(), @ref HAL_I2C_MasterRxCpltCallback().
@@ -273,7 +273,7 @@
these callbacks are null (not registered beforehand).
If MspInit or MspDeInit are not null, the @ref HAL_I2C_Init()/ @ref HAL_I2C_DeInit()
keep and use the user MspInit/MspDeInit callbacks (registered beforehand) whatever the state.
-
+ [..]
Callbacks can be registered/unregistered in @ref HAL_I2C_STATE_READY state only.
Exception done MspInit/MspDeInit functions that can be registered/unregistered
in @ref HAL_I2C_STATE_READY or @ref HAL_I2C_STATE_RESET state,
@@ -281,7 +281,7 @@
Then, the user first registers the MspInit/MspDeInit user callbacks
using @ref HAL_I2C_RegisterCallback() before calling @ref HAL_I2C_DeInit()
or @ref HAL_I2C_Init() function.
-
+ [..]
When the compilation flag USE_HAL_I2C_REGISTER_CALLBACKS is set to 0 or
not defined, the callback registration feature is not available and all callbacks
are set to the corresponding weak functions.
@@ -4737,6 +4737,13 @@ static HAL_StatusTypeDef I2C_Slave_ISR_IT(struct __I2C_HandleTypeDef *hi2c, uint
/* Process locked */
__HAL_LOCK(hi2c);
+ /* Check if STOPF is set */
+ if ((I2C_CHECK_FLAG(tmpITFlags, I2C_FLAG_STOPF) != RESET) && (I2C_CHECK_IT_SOURCE(ITSources, I2C_IT_STOPI) != RESET))
+ {
+ /* Call I2C Slave complete process */
+ I2C_ITSlaveCplt(hi2c, tmpITFlags);
+ }
+
if ((I2C_CHECK_FLAG(tmpITFlags, I2C_FLAG_AF) != RESET) && (I2C_CHECK_IT_SOURCE(ITSources, I2C_IT_NACKI) != RESET))
{
/* Check that I2C transfer finished */
@@ -4788,9 +4795,6 @@ static HAL_StatusTypeDef I2C_Slave_ISR_IT(struct __I2C_HandleTypeDef *hi2c, uint
{
if (hi2c->XferCount > 0U)
{
- /* Remove RXNE flag on temporary variable as read done */
- tmpITFlags &= ~I2C_FLAG_RXNE;
-
/* Read data from RXDR */
*hi2c->pBuffPtr = (uint8_t)hi2c->Instance->RXDR;
@@ -4844,13 +4848,6 @@ static HAL_StatusTypeDef I2C_Slave_ISR_IT(struct __I2C_HandleTypeDef *hi2c, uint
/* Nothing to do */
}
- /* Check if STOPF is set */
- if ((I2C_CHECK_FLAG(tmpITFlags, I2C_FLAG_STOPF) != RESET) && (I2C_CHECK_IT_SOURCE(ITSources, I2C_IT_STOPI) != RESET))
- {
- /* Call I2C Slave complete process */
- I2C_ITSlaveCplt(hi2c, tmpITFlags);
- }
-
/* Process Unlocked */
__HAL_UNLOCK(hi2c);
@@ -5008,6 +5005,13 @@ static HAL_StatusTypeDef I2C_Slave_ISR_DMA(struct __I2C_HandleTypeDef *hi2c, uin
/* Process locked */
__HAL_LOCK(hi2c);
+ /* Check if STOPF is set */
+ if ((I2C_CHECK_FLAG(ITFlags, I2C_FLAG_STOPF) != RESET) && (I2C_CHECK_IT_SOURCE(ITSources, I2C_IT_STOPI) != RESET))
+ {
+ /* Call I2C Slave complete process */
+ I2C_ITSlaveCplt(hi2c, ITFlags);
+ }
+
if ((I2C_CHECK_FLAG(ITFlags, I2C_FLAG_AF) != RESET) && (I2C_CHECK_IT_SOURCE(ITSources, I2C_IT_NACKI) != RESET))
{
/* Check that I2C transfer finished */
@@ -5092,11 +5096,6 @@ static HAL_StatusTypeDef I2C_Slave_ISR_DMA(struct __I2C_HandleTypeDef *hi2c, uin
{
I2C_ITAddrCplt(hi2c, ITFlags);
}
- else if ((I2C_CHECK_FLAG(ITFlags, I2C_FLAG_STOPF) != RESET) && (I2C_CHECK_IT_SOURCE(ITSources, I2C_IT_STOPI) != RESET))
- {
- /* Call I2C Slave complete process */
- I2C_ITSlaveCplt(hi2c, ITFlags);
- }
else
{
/* Nothing to do */
diff --git a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_TrueStudio/Boot/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_pcd.c b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_TrueStudio/Boot/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_pcd.c
index 2b4a5eff..ea532df6 100644
--- a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_TrueStudio/Boot/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_pcd.c
+++ b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_TrueStudio/Boot/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_pcd.c
@@ -122,6 +122,7 @@ static HAL_StatusTypeDef PCD_EP_OutSetupPacket_int(PCD_HandleTypeDef *hpcd, uint
*/
HAL_StatusTypeDef HAL_PCD_Init(PCD_HandleTypeDef *hpcd)
{
+ USB_OTG_GlobalTypeDef *USBx;
uint8_t i;
/* Check the PCD handle allocation */
@@ -133,6 +134,8 @@ HAL_StatusTypeDef HAL_PCD_Init(PCD_HandleTypeDef *hpcd)
/* Check the parameters */
assert_param(IS_PCD_ALL_INSTANCE(hpcd->Instance));
+ USBx = hpcd->Instance;
+
if (hpcd->State == HAL_PCD_STATE_RESET)
{
/* Allocate lock resource and initialize it */
@@ -166,6 +169,12 @@ HAL_StatusTypeDef HAL_PCD_Init(PCD_HandleTypeDef *hpcd)
hpcd->State = HAL_PCD_STATE_BUSY;
+ /* Disable DMA mode for FS instance */
+ if ((USBx->CID & (0x1U << 8)) == 0U)
+ {
+ hpcd->Init.dma_enable = 0U;
+ }
+
/* Disable the Interrupts */
__HAL_PCD_DISABLE(hpcd);
@@ -943,7 +952,7 @@ void HAL_PCD_IRQHandler(PCD_HandleTypeDef *hpcd)
{
USB_OTG_GlobalTypeDef *USBx = hpcd->Instance;
uint32_t USBx_BASE = (uint32_t)USBx;
- uint32_t i, ep_intr, epint, epnum = 0U;
+ uint32_t i, ep_intr, epint, epnum;
uint32_t fifoemptymsk, temp;
USB_OTG_EPTypeDef *ep;
@@ -962,6 +971,38 @@ void HAL_PCD_IRQHandler(PCD_HandleTypeDef *hpcd)
__HAL_PCD_CLEAR_FLAG(hpcd, USB_OTG_GINTSTS_MMIS);
}
+ /* Handle RxQLevel Interrupt */
+ if (__HAL_PCD_GET_FLAG(hpcd, USB_OTG_GINTSTS_RXFLVL))
+ {
+ USB_MASK_INTERRUPT(hpcd->Instance, USB_OTG_GINTSTS_RXFLVL);
+
+ temp = USBx->GRXSTSP;
+
+ ep = &hpcd->OUT_ep[temp & USB_OTG_GRXSTSP_EPNUM];
+
+ if (((temp & USB_OTG_GRXSTSP_PKTSTS) >> 17) == STS_DATA_UPDT)
+ {
+ if ((temp & USB_OTG_GRXSTSP_BCNT) != 0U)
+ {
+ (void)USB_ReadPacket(USBx, ep->xfer_buff,
+ (uint16_t)((temp & USB_OTG_GRXSTSP_BCNT) >> 4));
+
+ ep->xfer_buff += (temp & USB_OTG_GRXSTSP_BCNT) >> 4;
+ ep->xfer_count += (temp & USB_OTG_GRXSTSP_BCNT) >> 4;
+ }
+ }
+ else if (((temp & USB_OTG_GRXSTSP_PKTSTS) >> 17) == STS_SETUP_UPDT)
+ {
+ (void)USB_ReadPacket(USBx, (uint8_t *)hpcd->Setup, 8U);
+ ep->xfer_count += (temp & USB_OTG_GRXSTSP_BCNT) >> 4;
+ }
+ else
+ {
+ /* ... */
+ }
+ USB_UNMASK_INTERRUPT(hpcd->Instance, USB_OTG_GINTSTS_RXFLVL);
+ }
+
if (__HAL_PCD_GET_FLAG(hpcd, USB_OTG_GINTSTS_OEPINT))
{
epnum = 0U;
@@ -983,9 +1024,9 @@ void HAL_PCD_IRQHandler(PCD_HandleTypeDef *hpcd)
if ((epint & USB_OTG_DOEPINT_STUP) == USB_OTG_DOEPINT_STUP)
{
+ CLEAR_OUT_EP_INTR(epnum, USB_OTG_DOEPINT_STUP);
/* Class B setup phase done for previous decoded setup */
(void)PCD_EP_OutSetupPacket_int(hpcd, epnum);
- CLEAR_OUT_EP_INTR(epnum, USB_OTG_DOEPINT_STUP);
}
if ((epint & USB_OTG_DOEPINT_OTEPDIS) == USB_OTG_DOEPINT_OTEPDIS)
@@ -996,10 +1037,6 @@ void HAL_PCD_IRQHandler(PCD_HandleTypeDef *hpcd)
/* Clear Status Phase Received interrupt */
if ((epint & USB_OTG_DOEPINT_OTEPSPR) == USB_OTG_DOEPINT_OTEPSPR)
{
- if (hpcd->Init.dma_enable == 1U)
- {
- (void)USB_EP0_OutStart(hpcd->Instance, 1U, (uint8_t *)hpcd->Setup);
- }
CLEAR_OUT_EP_INTR(epnum, USB_OTG_DOEPINT_OTEPSPR);
}
@@ -1037,16 +1074,7 @@ void HAL_PCD_IRQHandler(PCD_HandleTypeDef *hpcd)
if (hpcd->Init.dma_enable == 1U)
{
hpcd->IN_ep[epnum].xfer_buff += hpcd->IN_ep[epnum].maxpacket;
- }
-#if (USE_HAL_PCD_REGISTER_CALLBACKS == 1U)
- hpcd->DataInStageCallback(hpcd, (uint8_t)epnum);
-#else
- HAL_PCD_DataInStageCallback(hpcd, (uint8_t)epnum);
-#endif /* USE_HAL_PCD_REGISTER_CALLBACKS */
-
- if (hpcd->Init.dma_enable == 1U)
- {
/* this is ZLP, so prepare EP0 for next setup */
if ((epnum == 0U) && (hpcd->IN_ep[epnum].xfer_len == 0U))
{
@@ -1054,6 +1082,12 @@ void HAL_PCD_IRQHandler(PCD_HandleTypeDef *hpcd)
(void)USB_EP0_OutStart(hpcd->Instance, 1U, (uint8_t *)hpcd->Setup);
}
}
+
+#if (USE_HAL_PCD_REGISTER_CALLBACKS == 1U)
+ hpcd->DataInStageCallback(hpcd, (uint8_t)epnum);
+#else
+ HAL_PCD_DataInStageCallback(hpcd, (uint8_t)epnum);
+#endif /* USE_HAL_PCD_REGISTER_CALLBACKS */
}
if ((epint & USB_OTG_DIEPINT_TOC) == USB_OTG_DIEPINT_TOC)
{
@@ -1159,8 +1193,10 @@ void HAL_PCD_IRQHandler(PCD_HandleTypeDef *hpcd)
{
USBx_INEP(i)->DIEPINT = 0xFB7FU;
USBx_INEP(i)->DIEPCTL &= ~USB_OTG_DIEPCTL_STALL;
+ USBx_INEP(i)->DIEPCTL |= USB_OTG_DIEPCTL_SNAK;
USBx_OUTEP(i)->DOEPINT = 0xFB7FU;
USBx_OUTEP(i)->DOEPCTL &= ~USB_OTG_DOEPCTL_STALL;
+ USBx_OUTEP(i)->DOEPCTL |= USB_OTG_DOEPCTL_SNAK;
}
USBx_DEVICE->DAINTMSK |= 0x10001U;
@@ -1217,38 +1253,6 @@ void HAL_PCD_IRQHandler(PCD_HandleTypeDef *hpcd)
__HAL_PCD_CLEAR_FLAG(hpcd, USB_OTG_GINTSTS_ENUMDNE);
}
- /* Handle RxQLevel Interrupt */
- if (__HAL_PCD_GET_FLAG(hpcd, USB_OTG_GINTSTS_RXFLVL))
- {
- USB_MASK_INTERRUPT(hpcd->Instance, USB_OTG_GINTSTS_RXFLVL);
-
- temp = USBx->GRXSTSP;
-
- ep = &hpcd->OUT_ep[temp & USB_OTG_GRXSTSP_EPNUM];
-
- if (((temp & USB_OTG_GRXSTSP_PKTSTS) >> 17) == STS_DATA_UPDT)
- {
- if ((temp & USB_OTG_GRXSTSP_BCNT) != 0U)
- {
- (void)USB_ReadPacket(USBx, ep->xfer_buff,
- (uint16_t)((temp & USB_OTG_GRXSTSP_BCNT) >> 4));
-
- ep->xfer_buff += (temp & USB_OTG_GRXSTSP_BCNT) >> 4;
- ep->xfer_count += (temp & USB_OTG_GRXSTSP_BCNT) >> 4;
- }
- }
- else if (((temp & USB_OTG_GRXSTSP_PKTSTS) >> 17) == STS_SETUP_UPDT)
- {
- (void)USB_ReadPacket(USBx, (uint8_t *)hpcd->Setup, 8U);
- ep->xfer_count += (temp & USB_OTG_GRXSTSP_BCNT) >> 4;
- }
- else
- {
- /* ... */
- }
- USB_UNMASK_INTERRUPT(hpcd->Instance, USB_OTG_GINTSTS_RXFLVL);
- }
-
/* Handle SOF Interrupt */
if (__HAL_PCD_GET_FLAG(hpcd, USB_OTG_GINTSTS_SOF))
{
@@ -1264,6 +1268,10 @@ void HAL_PCD_IRQHandler(PCD_HandleTypeDef *hpcd)
/* Handle Incomplete ISO IN Interrupt */
if (__HAL_PCD_GET_FLAG(hpcd, USB_OTG_GINTSTS_IISOIXFR))
{
+ /* Keep application checking the corresponding Iso IN endpoint
+ causing the incomplete Interrupt */
+ epnum = 0U;
+
#if (USE_HAL_PCD_REGISTER_CALLBACKS == 1U)
hpcd->ISOINIncompleteCallback(hpcd, (uint8_t)epnum);
#else
@@ -1276,6 +1284,10 @@ void HAL_PCD_IRQHandler(PCD_HandleTypeDef *hpcd)
/* Handle Incomplete ISO OUT Interrupt */
if (__HAL_PCD_GET_FLAG(hpcd, USB_OTG_GINTSTS_PXFR_INCOMPISOOUT))
{
+ /* Keep application checking the corresponding Iso OUT endpoint
+ causing the incomplete Interrupt */
+ epnum = 0U;
+
#if (USE_HAL_PCD_REGISTER_CALLBACKS == 1U)
hpcd->ISOOUTIncompleteCallback(hpcd, (uint8_t)epnum);
#else
@@ -1955,16 +1967,6 @@ static HAL_StatusTypeDef PCD_EP_OutXfrComplete_int(PCD_HandleTypeDef *hpcd, uint
{
CLEAR_OUT_EP_INTR(epnum, USB_OTG_DOEPINT_STPKTRX);
}
-
- /* Inform the upper layer that a setup packet is available */
-#if (USE_HAL_PCD_REGISTER_CALLBACKS == 1U)
- hpcd->SetupStageCallback(hpcd);
-#else
- HAL_PCD_SetupStageCallback(hpcd);
-#endif /* USE_HAL_PCD_REGISTER_CALLBACKS */
-
- (void)USB_EP0_OutStart(hpcd->Instance, 1U, (uint8_t *)hpcd->Setup);
- CLEAR_OUT_EP_INTR(epnum, USB_OTG_DOEPINT_STUP);
}
else if ((DoepintReg & USB_OTG_DOEPINT_OTEPSPR) == USB_OTG_DOEPINT_OTEPSPR) /* Class E */
{
@@ -1987,17 +1989,16 @@ static HAL_StatusTypeDef PCD_EP_OutXfrComplete_int(PCD_HandleTypeDef *hpcd, uint
hpcd->OUT_ep[epnum].xfer_buff += hpcd->OUT_ep[epnum].maxpacket;
-#if (USE_HAL_PCD_REGISTER_CALLBACKS == 1U)
- hpcd->DataOutStageCallback(hpcd, (uint8_t)epnum);
-#else
- HAL_PCD_DataOutStageCallback(hpcd, (uint8_t)epnum);
-#endif /* USE_HAL_PCD_REGISTER_CALLBACKS */
-
if ((epnum == 0U) && (hpcd->OUT_ep[epnum].xfer_len == 0U))
{
/* this is ZLP, so prepare EP0 for next setup */
(void)USB_EP0_OutStart(hpcd->Instance, 1U, (uint8_t *)hpcd->Setup);
}
+#if (USE_HAL_PCD_REGISTER_CALLBACKS == 1U)
+ hpcd->DataOutStageCallback(hpcd, (uint8_t)epnum);
+#else
+ HAL_PCD_DataOutStageCallback(hpcd, (uint8_t)epnum);
+#endif /* USE_HAL_PCD_REGISTER_CALLBACKS */
}
}
else
@@ -2030,6 +2031,12 @@ static HAL_StatusTypeDef PCD_EP_OutXfrComplete_int(PCD_HandleTypeDef *hpcd, uint
}
else
{
+ if ((epnum == 0U) && (hpcd->OUT_ep[epnum].xfer_len == 0U))
+ {
+ /* this is ZLP, so prepare EP0 for next setup */
+ (void)USB_EP0_OutStart(hpcd->Instance, 0U, (uint8_t *)hpcd->Setup);
+ }
+
#if (USE_HAL_PCD_REGISTER_CALLBACKS == 1U)
hpcd->DataOutStageCallback(hpcd, (uint8_t)epnum);
#else
@@ -2055,22 +2062,10 @@ static HAL_StatusTypeDef PCD_EP_OutSetupPacket_int(PCD_HandleTypeDef *hpcd, uint
uint32_t gSNPSiD = *(__IO uint32_t *)(&USBx->CID + 0x1U);
uint32_t DoepintReg = USBx_OUTEP(epnum)->DOEPINT;
- if (hpcd->Init.dma_enable == 1U)
+ if ((gSNPSiD > USB_OTG_CORE_ID_300A) &&
+ ((DoepintReg & USB_OTG_DOEPINT_STPKTRX) == USB_OTG_DOEPINT_STPKTRX))
{
- /* StupPktRcvd = 1 pending setup packet int */
- if ((gSNPSiD > USB_OTG_CORE_ID_300A) &&
- ((DoepintReg & USB_OTG_DOEPINT_STPKTRX) == USB_OTG_DOEPINT_STPKTRX))
- {
- CLEAR_OUT_EP_INTR(epnum, USB_OTG_DOEPINT_STPKTRX);
- }
- }
- else
- {
- if ((gSNPSiD == USB_OTG_CORE_ID_310A) &&
- ((DoepintReg & USB_OTG_DOEPINT_STPKTRX) == USB_OTG_DOEPINT_STPKTRX))
- {
- CLEAR_OUT_EP_INTR(epnum, USB_OTG_DOEPINT_STPKTRX);
- }
+ CLEAR_OUT_EP_INTR(epnum, USB_OTG_DOEPINT_STPKTRX);
}
/* Inform the upper layer that a setup packet is available */
diff --git a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_TrueStudio/Boot/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_rcc.c b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_TrueStudio/Boot/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_rcc.c
index bf33cff4..d63a6f4e 100644
--- a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_TrueStudio/Boot/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_rcc.c
+++ b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_TrueStudio/Boot/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_rcc.c
@@ -317,7 +317,7 @@ HAL_StatusTypeDef HAL_RCC_DeInit(void)
SystemCoreClock = HSI_VALUE;
/* Adapt Systick interrupt period */
- if(HAL_InitTick(TICK_INT_PRIORITY) != HAL_OK)
+ if (HAL_InitTick(uwTickPrio) != HAL_OK)
{
return HAL_ERROR;
}
@@ -344,10 +344,11 @@ HAL_StatusTypeDef HAL_RCC_DeInit(void)
HAL_StatusTypeDef HAL_RCC_OscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct)
{
uint32_t tickstart;
+ uint32_t pll_config;
FlagStatus pwrclkchanged = RESET;
/* Check Null pointer */
- if(RCC_OscInitStruct == NULL)
+ if (RCC_OscInitStruct == NULL)
{
return HAL_ERROR;
}
@@ -356,15 +357,15 @@ HAL_StatusTypeDef HAL_RCC_OscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct)
assert_param(IS_RCC_OSCILLATORTYPE(RCC_OscInitStruct->OscillatorType));
/*------------------------------- HSE Configuration ------------------------*/
- if(((RCC_OscInitStruct->OscillatorType) & RCC_OSCILLATORTYPE_HSE) == RCC_OSCILLATORTYPE_HSE)
+ if (((RCC_OscInitStruct->OscillatorType) & RCC_OSCILLATORTYPE_HSE) == RCC_OSCILLATORTYPE_HSE)
{
/* Check the parameters */
assert_param(IS_RCC_HSE(RCC_OscInitStruct->HSEState));
/* When the HSE is used as system clock or clock source for PLL, It can not be disabled */
- if((__HAL_RCC_GET_SYSCLK_SOURCE() == RCC_SYSCLKSOURCE_STATUS_HSE)
- || ((__HAL_RCC_GET_SYSCLK_SOURCE() == RCC_SYSCLKSOURCE_STATUS_PLLCLK) && ((RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC) == RCC_PLLCFGR_PLLSRC_HSE)))
+ if ((__HAL_RCC_GET_SYSCLK_SOURCE() == RCC_SYSCLKSOURCE_STATUS_HSE)
+ || ((__HAL_RCC_GET_SYSCLK_SOURCE() == RCC_SYSCLKSOURCE_STATUS_PLLCLK) && ((RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC) == RCC_PLLCFGR_PLLSRC_HSE)))
{
- if((__HAL_RCC_GET_FLAG(RCC_FLAG_HSERDY) != RESET) && (RCC_OscInitStruct->HSEState == RCC_HSE_OFF))
+ if ((__HAL_RCC_GET_FLAG(RCC_FLAG_HSERDY) != RESET) && (RCC_OscInitStruct->HSEState == RCC_HSE_OFF))
{
return HAL_ERROR;
}
@@ -375,15 +376,15 @@ HAL_StatusTypeDef HAL_RCC_OscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct)
__HAL_RCC_HSE_CONFIG(RCC_OscInitStruct->HSEState);
/* Check the HSE State */
- if(RCC_OscInitStruct->HSEState != RCC_HSE_OFF)
+ if (RCC_OscInitStruct->HSEState != RCC_HSE_OFF)
{
/* Get Start Tick*/
tickstart = HAL_GetTick();
/* Wait till HSE is ready */
- while(__HAL_RCC_GET_FLAG(RCC_FLAG_HSERDY) == RESET)
+ while (__HAL_RCC_GET_FLAG(RCC_FLAG_HSERDY) == RESET)
{
- if((HAL_GetTick() - tickstart ) > HSE_TIMEOUT_VALUE)
+ if ((HAL_GetTick() - tickstart) > HSE_TIMEOUT_VALUE)
{
return HAL_TIMEOUT;
}
@@ -395,9 +396,9 @@ HAL_StatusTypeDef HAL_RCC_OscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct)
tickstart = HAL_GetTick();
/* Wait till HSE is bypassed or disabled */
- while(__HAL_RCC_GET_FLAG(RCC_FLAG_HSERDY) != RESET)
+ while (__HAL_RCC_GET_FLAG(RCC_FLAG_HSERDY) != RESET)
{
- if((HAL_GetTick() - tickstart ) > HSE_TIMEOUT_VALUE)
+ if ((HAL_GetTick() - tickstart) > HSE_TIMEOUT_VALUE)
{
return HAL_TIMEOUT;
}
@@ -406,18 +407,18 @@ HAL_StatusTypeDef HAL_RCC_OscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct)
}
}
/*----------------------------- HSI Configuration --------------------------*/
- if(((RCC_OscInitStruct->OscillatorType) & RCC_OSCILLATORTYPE_HSI) == RCC_OSCILLATORTYPE_HSI)
+ if (((RCC_OscInitStruct->OscillatorType) & RCC_OSCILLATORTYPE_HSI) == RCC_OSCILLATORTYPE_HSI)
{
/* Check the parameters */
assert_param(IS_RCC_HSI(RCC_OscInitStruct->HSIState));
assert_param(IS_RCC_CALIBRATION_VALUE(RCC_OscInitStruct->HSICalibrationValue));
/* Check if HSI is used as system clock or as PLL source when PLL is selected as system clock */
- if((__HAL_RCC_GET_SYSCLK_SOURCE() == RCC_SYSCLKSOURCE_STATUS_HSI)
- || ((__HAL_RCC_GET_SYSCLK_SOURCE() == RCC_SYSCLKSOURCE_STATUS_PLLCLK) && ((RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC) == RCC_PLLCFGR_PLLSRC_HSI)))
+ if ((__HAL_RCC_GET_SYSCLK_SOURCE() == RCC_SYSCLKSOURCE_STATUS_HSI)
+ || ((__HAL_RCC_GET_SYSCLK_SOURCE() == RCC_SYSCLKSOURCE_STATUS_PLLCLK) && ((RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC) == RCC_PLLCFGR_PLLSRC_HSI)))
{
/* When HSI is used as system clock it will not disabled */
- if((__HAL_RCC_GET_FLAG(RCC_FLAG_HSIRDY) != RESET) && (RCC_OscInitStruct->HSIState != RCC_HSI_ON))
+ if ((__HAL_RCC_GET_FLAG(RCC_FLAG_HSIRDY) != RESET) && (RCC_OscInitStruct->HSIState != RCC_HSI_ON))
{
return HAL_ERROR;
}
@@ -431,7 +432,7 @@ HAL_StatusTypeDef HAL_RCC_OscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct)
else
{
/* Check the HSI State */
- if((RCC_OscInitStruct->HSIState)!= RCC_HSI_OFF)
+ if ((RCC_OscInitStruct->HSIState) != RCC_HSI_OFF)
{
/* Enable the Internal High Speed oscillator (HSI). */
__HAL_RCC_HSI_ENABLE();
@@ -440,9 +441,9 @@ HAL_StatusTypeDef HAL_RCC_OscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct)
tickstart = HAL_GetTick();
/* Wait till HSI is ready */
- while(__HAL_RCC_GET_FLAG(RCC_FLAG_HSIRDY) == RESET)
+ while (__HAL_RCC_GET_FLAG(RCC_FLAG_HSIRDY) == RESET)
{
- if((HAL_GetTick() - tickstart ) > HSI_TIMEOUT_VALUE)
+ if ((HAL_GetTick() - tickstart) > HSI_TIMEOUT_VALUE)
{
return HAL_TIMEOUT;
}
@@ -460,9 +461,9 @@ HAL_StatusTypeDef HAL_RCC_OscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct)
tickstart = HAL_GetTick();
/* Wait till HSI is ready */
- while(__HAL_RCC_GET_FLAG(RCC_FLAG_HSIRDY) != RESET)
+ while (__HAL_RCC_GET_FLAG(RCC_FLAG_HSIRDY) != RESET)
{
- if((HAL_GetTick() - tickstart ) > HSI_TIMEOUT_VALUE)
+ if ((HAL_GetTick() - tickstart) > HSI_TIMEOUT_VALUE)
{
return HAL_TIMEOUT;
}
@@ -471,13 +472,13 @@ HAL_StatusTypeDef HAL_RCC_OscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct)
}
}
/*------------------------------ LSI Configuration -------------------------*/
- if(((RCC_OscInitStruct->OscillatorType) & RCC_OSCILLATORTYPE_LSI) == RCC_OSCILLATORTYPE_LSI)
+ if (((RCC_OscInitStruct->OscillatorType) & RCC_OSCILLATORTYPE_LSI) == RCC_OSCILLATORTYPE_LSI)
{
/* Check the parameters */
assert_param(IS_RCC_LSI(RCC_OscInitStruct->LSIState));
/* Check the LSI State */
- if((RCC_OscInitStruct->LSIState)!= RCC_LSI_OFF)
+ if ((RCC_OscInitStruct->LSIState) != RCC_LSI_OFF)
{
/* Enable the Internal Low Speed oscillator (LSI). */
__HAL_RCC_LSI_ENABLE();
@@ -486,9 +487,9 @@ HAL_StatusTypeDef HAL_RCC_OscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct)
tickstart = HAL_GetTick();
/* Wait till LSI is ready */
- while(__HAL_RCC_GET_FLAG(RCC_FLAG_LSIRDY) == RESET)
+ while (__HAL_RCC_GET_FLAG(RCC_FLAG_LSIRDY) == RESET)
{
- if((HAL_GetTick() - tickstart ) > LSI_TIMEOUT_VALUE)
+ if ((HAL_GetTick() - tickstart) > LSI_TIMEOUT_VALUE)
{
return HAL_TIMEOUT;
}
@@ -503,9 +504,9 @@ HAL_StatusTypeDef HAL_RCC_OscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct)
tickstart = HAL_GetTick();
/* Wait till LSI is ready */
- while(__HAL_RCC_GET_FLAG(RCC_FLAG_LSIRDY) != RESET)
+ while (__HAL_RCC_GET_FLAG(RCC_FLAG_LSIRDY) != RESET)
{
- if((HAL_GetTick() - tickstart ) > LSI_TIMEOUT_VALUE)
+ if ((HAL_GetTick() - tickstart) > LSI_TIMEOUT_VALUE)
{
return HAL_TIMEOUT;
}
@@ -513,21 +514,21 @@ HAL_StatusTypeDef HAL_RCC_OscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct)
}
}
/*------------------------------ LSE Configuration -------------------------*/
- if(((RCC_OscInitStruct->OscillatorType) & RCC_OSCILLATORTYPE_LSE) == RCC_OSCILLATORTYPE_LSE)
+ if (((RCC_OscInitStruct->OscillatorType) & RCC_OSCILLATORTYPE_LSE) == RCC_OSCILLATORTYPE_LSE)
{
/* Check the parameters */
assert_param(IS_RCC_LSE(RCC_OscInitStruct->LSEState));
/* Update LSE configuration in Backup Domain control register */
/* Requires to enable write access to Backup Domain of necessary */
- if(__HAL_RCC_PWR_IS_CLK_DISABLED())
+ if (__HAL_RCC_PWR_IS_CLK_DISABLED())
{
/* Enable Power Clock*/
__HAL_RCC_PWR_CLK_ENABLE();
pwrclkchanged = SET;
}
- if(HAL_IS_BIT_CLR(PWR->CR1, PWR_CR1_DBP))
+ if (HAL_IS_BIT_CLR(PWR->CR1, PWR_CR1_DBP))
{
/* Enable write access to Backup domain */
PWR->CR1 |= PWR_CR1_DBP;
@@ -535,9 +536,9 @@ HAL_StatusTypeDef HAL_RCC_OscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct)
/* Wait for Backup domain Write protection disable */
tickstart = HAL_GetTick();
- while(HAL_IS_BIT_CLR(PWR->CR1, PWR_CR1_DBP))
+ while (HAL_IS_BIT_CLR(PWR->CR1, PWR_CR1_DBP))
{
- if((HAL_GetTick() - tickstart ) > RCC_DBP_TIMEOUT_VALUE)
+ if ((HAL_GetTick() - tickstart) > RCC_DBP_TIMEOUT_VALUE)
{
return HAL_TIMEOUT;
}
@@ -547,15 +548,15 @@ HAL_StatusTypeDef HAL_RCC_OscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct)
/* Set the new LSE configuration -----------------------------------------*/
__HAL_RCC_LSE_CONFIG(RCC_OscInitStruct->LSEState);
/* Check the LSE State */
- if((RCC_OscInitStruct->LSEState) != RCC_LSE_OFF)
+ if ((RCC_OscInitStruct->LSEState) != RCC_LSE_OFF)
{
/* Get Start Tick*/
tickstart = HAL_GetTick();
/* Wait till LSE is ready */
- while(__HAL_RCC_GET_FLAG(RCC_FLAG_LSERDY) == RESET)
+ while (__HAL_RCC_GET_FLAG(RCC_FLAG_LSERDY) == RESET)
{
- if((HAL_GetTick() - tickstart ) > RCC_LSE_TIMEOUT_VALUE)
+ if ((HAL_GetTick() - tickstart) > RCC_LSE_TIMEOUT_VALUE)
{
return HAL_TIMEOUT;
}
@@ -567,9 +568,9 @@ HAL_StatusTypeDef HAL_RCC_OscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct)
tickstart = HAL_GetTick();
/* Wait till LSE is ready */
- while(__HAL_RCC_GET_FLAG(RCC_FLAG_LSERDY) != RESET)
+ while (__HAL_RCC_GET_FLAG(RCC_FLAG_LSERDY) != RESET)
{
- if((HAL_GetTick() - tickstart ) > RCC_LSE_TIMEOUT_VALUE)
+ if ((HAL_GetTick() - tickstart) > RCC_LSE_TIMEOUT_VALUE)
{
return HAL_TIMEOUT;
}
@@ -577,7 +578,7 @@ HAL_StatusTypeDef HAL_RCC_OscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct)
}
/* Restore clock configuration if changed */
- if(pwrclkchanged == SET)
+ if (pwrclkchanged == SET)
{
__HAL_RCC_PWR_CLK_DISABLE();
}
@@ -588,9 +589,9 @@ HAL_StatusTypeDef HAL_RCC_OscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct)
if ((RCC_OscInitStruct->PLL.PLLState) != RCC_PLL_NONE)
{
/* Check if the PLL is used as system clock or not */
- if(__HAL_RCC_GET_SYSCLK_SOURCE() != RCC_SYSCLKSOURCE_STATUS_PLLCLK)
+ if (__HAL_RCC_GET_SYSCLK_SOURCE() != RCC_SYSCLKSOURCE_STATUS_PLLCLK)
{
- if((RCC_OscInitStruct->PLL.PLLState) == RCC_PLL_ON)
+ if ((RCC_OscInitStruct->PLL.PLLState) == RCC_PLL_ON)
{
/* Check the parameters */
assert_param(IS_RCC_PLLSOURCE(RCC_OscInitStruct->PLL.PLLSource));
@@ -609,9 +610,9 @@ HAL_StatusTypeDef HAL_RCC_OscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct)
tickstart = HAL_GetTick();
/* Wait till PLL is ready */
- while(__HAL_RCC_GET_FLAG(RCC_FLAG_PLLRDY) != RESET)
+ while (__HAL_RCC_GET_FLAG(RCC_FLAG_PLLRDY) != RESET)
{
- if((HAL_GetTick() - tickstart ) > PLL_TIMEOUT_VALUE)
+ if ((HAL_GetTick() - tickstart) > PLL_TIMEOUT_VALUE)
{
return HAL_TIMEOUT;
}
@@ -640,9 +641,9 @@ HAL_StatusTypeDef HAL_RCC_OscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct)
tickstart = HAL_GetTick();
/* Wait till PLL is ready */
- while(__HAL_RCC_GET_FLAG(RCC_FLAG_PLLRDY) == RESET)
+ while (__HAL_RCC_GET_FLAG(RCC_FLAG_PLLRDY) == RESET)
{
- if((HAL_GetTick() - tickstart ) > PLL_TIMEOUT_VALUE)
+ if ((HAL_GetTick() - tickstart) > PLL_TIMEOUT_VALUE)
{
return HAL_TIMEOUT;
}
@@ -657,9 +658,9 @@ HAL_StatusTypeDef HAL_RCC_OscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct)
tickstart = HAL_GetTick();
/* Wait till PLL is ready */
- while(__HAL_RCC_GET_FLAG(RCC_FLAG_PLLRDY) != RESET)
+ while (__HAL_RCC_GET_FLAG(RCC_FLAG_PLLRDY) != RESET)
{
- if((HAL_GetTick() - tickstart ) > PLL_TIMEOUT_VALUE)
+ if ((HAL_GetTick() - tickstart) > PLL_TIMEOUT_VALUE)
{
return HAL_TIMEOUT;
}
@@ -668,7 +669,27 @@ HAL_StatusTypeDef HAL_RCC_OscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct)
}
else
{
- return HAL_ERROR;
+ /* Do not return HAL_ERROR if request repeats the current configuration */
+ pll_config = RCC->PLLCFGR;
+#if defined (RCC_PLLCFGR_PLLR)
+ if (((RCC_OscInitStruct->PLL.PLLState) == RCC_PLL_OFF) ||
+ (READ_BIT(pll_config, RCC_PLLCFGR_PLLSRC) != RCC_OscInitStruct->PLL.PLLSource) ||
+ (READ_BIT(pll_config, RCC_PLLCFGR_PLLM) != RCC_OscInitStruct->PLL.PLLM) ||
+ (READ_BIT(pll_config, RCC_PLLCFGR_PLLN) != (RCC_OscInitStruct->PLL.PLLN << RCC_PLLCFGR_PLLN_Pos)) ||
+ (READ_BIT(pll_config, RCC_PLLCFGR_PLLP) != ((((RCC_OscInitStruct->PLL.PLLP) >> 1U) - 1U) << RCC_PLLCFGR_PLLP_Pos)) ||
+ (READ_BIT(pll_config, RCC_PLLCFGR_PLLQ) != (RCC_OscInitStruct->PLL.PLLQ << RCC_PLLCFGR_PLLQ_Pos)) ||
+ (READ_BIT(pll_config, RCC_PLLCFGR_PLLR) != (RCC_OscInitStruct->PLL.PLLR << RCC_PLLCFGR_PLLR_Pos)))
+#else
+ if (((RCC_OscInitStruct->PLL.PLLState) == RCC_PLL_OFF) ||
+ (READ_BIT(pll_config, RCC_PLLCFGR_PLLSRC) != RCC_OscInitStruct->PLL.PLLSource) ||
+ (READ_BIT(pll_config, RCC_PLLCFGR_PLLM) != RCC_OscInitStruct->PLL.PLLM) ||
+ (READ_BIT(pll_config, RCC_PLLCFGR_PLLN) != (RCC_OscInitStruct->PLL.PLLN << RCC_PLLCFGR_PLLN_Pos)) ||
+ (READ_BIT(pll_config, RCC_PLLCFGR_PLLP) != ((((RCC_OscInitStruct->PLL.PLLP) >> 1U) - 1U) << RCC_PLLCFGR_PLLP_Pos)) ||
+ (READ_BIT(pll_config, RCC_PLLCFGR_PLLQ) != (RCC_OscInitStruct->PLL.PLLQ << RCC_PLLCFGR_PLLQ_Pos)))
+#endif
+ {
+ return HAL_ERROR;
+ }
}
}
return HAL_OK;
@@ -705,7 +726,7 @@ HAL_StatusTypeDef HAL_RCC_ClockConfig(RCC_ClkInitTypeDef *RCC_ClkInitStruct, ui
uint32_t tickstart = 0;
/* Check Null pointer */
- if(RCC_ClkInitStruct == NULL)
+ if (RCC_ClkInitStruct == NULL)
{
return HAL_ERROR;
}
@@ -719,30 +740,30 @@ HAL_StatusTypeDef HAL_RCC_ClockConfig(RCC_ClkInitTypeDef *RCC_ClkInitStruct, ui
(HCLK) and the supply voltage of the device. */
/* Increasing the CPU frequency */
- if(FLatency > __HAL_FLASH_GET_LATENCY())
+ if (FLatency > __HAL_FLASH_GET_LATENCY())
{
/* Program the new number of wait states to the LATENCY bits in the FLASH_ACR register */
__HAL_FLASH_SET_LATENCY(FLatency);
/* Check that the new number of wait states is taken into account to access the Flash
memory by reading the FLASH_ACR register */
- if(__HAL_FLASH_GET_LATENCY() != FLatency)
+ if (__HAL_FLASH_GET_LATENCY() != FLatency)
{
return HAL_ERROR;
}
}
/*-------------------------- HCLK Configuration --------------------------*/
- if(((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_HCLK) == RCC_CLOCKTYPE_HCLK)
+ if (((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_HCLK) == RCC_CLOCKTYPE_HCLK)
{
/* Set the highest APBx dividers in order to ensure that we do not go through
a non-spec phase whatever we decrease or increase HCLK. */
- if(((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_PCLK1) == RCC_CLOCKTYPE_PCLK1)
+ if (((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_PCLK1) == RCC_CLOCKTYPE_PCLK1)
{
MODIFY_REG(RCC->CFGR, RCC_CFGR_PPRE1, RCC_HCLK_DIV16);
}
- if(((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_PCLK2) == RCC_CLOCKTYPE_PCLK2)
+ if (((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_PCLK2) == RCC_CLOCKTYPE_PCLK2)
{
MODIFY_REG(RCC->CFGR, RCC_CFGR_PPRE2, (RCC_HCLK_DIV16 << 3));
}
@@ -753,24 +774,24 @@ HAL_StatusTypeDef HAL_RCC_ClockConfig(RCC_ClkInitTypeDef *RCC_ClkInitStruct, ui
}
/*------------------------- SYSCLK Configuration ---------------------------*/
- if(((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_SYSCLK) == RCC_CLOCKTYPE_SYSCLK)
+ if (((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_SYSCLK) == RCC_CLOCKTYPE_SYSCLK)
{
assert_param(IS_RCC_SYSCLKSOURCE(RCC_ClkInitStruct->SYSCLKSource));
/* HSE is selected as System Clock Source */
- if(RCC_ClkInitStruct->SYSCLKSource == RCC_SYSCLKSOURCE_HSE)
+ if (RCC_ClkInitStruct->SYSCLKSource == RCC_SYSCLKSOURCE_HSE)
{
/* Check the HSE ready flag */
- if(__HAL_RCC_GET_FLAG(RCC_FLAG_HSERDY) == RESET)
+ if (__HAL_RCC_GET_FLAG(RCC_FLAG_HSERDY) == RESET)
{
return HAL_ERROR;
}
}
/* PLL is selected as System Clock Source */
- else if(RCC_ClkInitStruct->SYSCLKSource == RCC_SYSCLKSOURCE_PLLCLK)
+ else if (RCC_ClkInitStruct->SYSCLKSource == RCC_SYSCLKSOURCE_PLLCLK)
{
/* Check the PLL ready flag */
- if(__HAL_RCC_GET_FLAG(RCC_FLAG_PLLRDY) == RESET)
+ if (__HAL_RCC_GET_FLAG(RCC_FLAG_PLLRDY) == RESET)
{
return HAL_ERROR;
}
@@ -779,7 +800,7 @@ HAL_StatusTypeDef HAL_RCC_ClockConfig(RCC_ClkInitTypeDef *RCC_ClkInitStruct, ui
else
{
/* Check the HSI ready flag */
- if(__HAL_RCC_GET_FLAG(RCC_FLAG_HSIRDY) == RESET)
+ if (__HAL_RCC_GET_FLAG(RCC_FLAG_HSIRDY) == RESET)
{
return HAL_ERROR;
}
@@ -800,38 +821,38 @@ HAL_StatusTypeDef HAL_RCC_ClockConfig(RCC_ClkInitTypeDef *RCC_ClkInitStruct, ui
}
/* Decreasing the number of wait states because of lower CPU frequency */
- if(FLatency < __HAL_FLASH_GET_LATENCY())
+ if (FLatency < __HAL_FLASH_GET_LATENCY())
{
/* Program the new number of wait states to the LATENCY bits in the FLASH_ACR register */
__HAL_FLASH_SET_LATENCY(FLatency);
/* Check that the new number of wait states is taken into account to access the Flash
memory by reading the FLASH_ACR register */
- if(__HAL_FLASH_GET_LATENCY() != FLatency)
+ if (__HAL_FLASH_GET_LATENCY() != FLatency)
{
return HAL_ERROR;
}
}
/*-------------------------- PCLK1 Configuration ---------------------------*/
- if(((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_PCLK1) == RCC_CLOCKTYPE_PCLK1)
+ if (((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_PCLK1) == RCC_CLOCKTYPE_PCLK1)
{
assert_param(IS_RCC_PCLK(RCC_ClkInitStruct->APB1CLKDivider));
MODIFY_REG(RCC->CFGR, RCC_CFGR_PPRE1, RCC_ClkInitStruct->APB1CLKDivider);
}
/*-------------------------- PCLK2 Configuration ---------------------------*/
- if(((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_PCLK2) == RCC_CLOCKTYPE_PCLK2)
+ if (((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_PCLK2) == RCC_CLOCKTYPE_PCLK2)
{
assert_param(IS_RCC_PCLK(RCC_ClkInitStruct->APB2CLKDivider));
MODIFY_REG(RCC->CFGR, RCC_CFGR_PPRE2, ((RCC_ClkInitStruct->APB2CLKDivider) << 3));
}
/* Update the SystemCoreClock global variable */
- SystemCoreClock = HAL_RCC_GetSysClockFreq() >> AHBPrescTable[(RCC->CFGR & RCC_CFGR_HPRE)>> RCC_CFGR_HPRE_Pos];
+ SystemCoreClock = HAL_RCC_GetSysClockFreq() >> AHBPrescTable[(RCC->CFGR & RCC_CFGR_HPRE) >> RCC_CFGR_HPRE_Pos];
/* Configure the source of time base considering new system clocks settings*/
- HAL_InitTick (TICK_INT_PRIORITY);
+ HAL_InitTick(uwTickPrio);
return HAL_OK;
}
@@ -888,7 +909,7 @@ void HAL_RCC_MCOConfig(uint32_t RCC_MCOx, uint32_t RCC_MCOSource, uint32_t RCC_M
assert_param(IS_RCC_MCO(RCC_MCOx));
assert_param(IS_RCC_MCODIV(RCC_MCODiv));
/* RCC_MCO1 */
- if(RCC_MCOx == RCC_MCO1)
+ if (RCC_MCOx == RCC_MCO1)
{
assert_param(IS_RCC_MCO1SOURCE(RCC_MCOSource));
@@ -990,7 +1011,7 @@ uint32_t HAL_RCC_GetSysClockFreq(void)
case RCC_SYSCLKSOURCE_STATUS_HSI: /* HSI used as system clock source */
{
sysclockfreq = HSI_VALUE;
- break;
+ break;
}
case RCC_SYSCLKSOURCE_STATUS_HSE: /* HSE used as system clock source */
{
@@ -1005,16 +1026,16 @@ uint32_t HAL_RCC_GetSysClockFreq(void)
if (__HAL_RCC_GET_PLL_OSCSOURCE() != RCC_PLLCFGR_PLLSRC_HSI)
{
/* HSE used as PLL clock source */
- pllvco = (uint32_t) ((((uint64_t) HSE_VALUE * ((uint64_t) ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> RCC_PLLCFGR_PLLN_Pos)))) / (uint64_t)pllm);
+ pllvco = (uint32_t)((((uint64_t) HSE_VALUE * ((uint64_t)((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> RCC_PLLCFGR_PLLN_Pos)))) / (uint64_t)pllm);
}
else
{
/* HSI used as PLL clock source */
- pllvco = (uint32_t) ((((uint64_t) HSI_VALUE * ((uint64_t) ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> RCC_PLLCFGR_PLLN_Pos)))) / (uint64_t)pllm);
+ pllvco = (uint32_t)((((uint64_t) HSI_VALUE * ((uint64_t)((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> RCC_PLLCFGR_PLLN_Pos)))) / (uint64_t)pllm);
}
- pllp = ((((RCC->PLLCFGR & RCC_PLLCFGR_PLLP) >> RCC_PLLCFGR_PLLP_Pos) + 1 ) *2);
+ pllp = ((((RCC->PLLCFGR & RCC_PLLCFGR_PLLP) >> RCC_PLLCFGR_PLLP_Pos) + 1) * 2);
- sysclockfreq = pllvco/pllp;
+ sysclockfreq = pllvco / pllp;
break;
}
default:
@@ -1047,7 +1068,7 @@ uint32_t HAL_RCC_GetHCLKFreq(void)
uint32_t HAL_RCC_GetPCLK1Freq(void)
{
/* Get HCLK source and Compute PCLK1 frequency ---------------------------*/
- return (HAL_RCC_GetHCLKFreq() >> APBPrescTable[(RCC->CFGR & RCC_CFGR_PPRE1)>> RCC_CFGR_PPRE1_Pos]);
+ return (HAL_RCC_GetHCLKFreq() >> APBPrescTable[(RCC->CFGR & RCC_CFGR_PPRE1) >> RCC_CFGR_PPRE1_Pos]);
}
/**
@@ -1059,7 +1080,7 @@ uint32_t HAL_RCC_GetPCLK1Freq(void)
uint32_t HAL_RCC_GetPCLK2Freq(void)
{
/* Get HCLK source and Compute PCLK2 frequency ---------------------------*/
- return (HAL_RCC_GetHCLKFreq()>> APBPrescTable[(RCC->CFGR & RCC_CFGR_PPRE2)>> RCC_CFGR_PPRE2_Pos]);
+ return (HAL_RCC_GetHCLKFreq() >> APBPrescTable[(RCC->CFGR & RCC_CFGR_PPRE2) >> RCC_CFGR_PPRE2_Pos]);
}
/**
@@ -1075,11 +1096,11 @@ void HAL_RCC_GetOscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct)
RCC_OscInitStruct->OscillatorType = RCC_OSCILLATORTYPE_HSE | RCC_OSCILLATORTYPE_HSI | RCC_OSCILLATORTYPE_LSE | RCC_OSCILLATORTYPE_LSI;
/* Get the HSE configuration -----------------------------------------------*/
- if((RCC->CR &RCC_CR_HSEBYP) == RCC_CR_HSEBYP)
+ if ((RCC->CR & RCC_CR_HSEBYP) == RCC_CR_HSEBYP)
{
RCC_OscInitStruct->HSEState = RCC_HSE_BYPASS;
}
- else if((RCC->CR &RCC_CR_HSEON) == RCC_CR_HSEON)
+ else if ((RCC->CR & RCC_CR_HSEON) == RCC_CR_HSEON)
{
RCC_OscInitStruct->HSEState = RCC_HSE_ON;
}
@@ -1089,7 +1110,7 @@ void HAL_RCC_GetOscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct)
}
/* Get the HSI configuration -----------------------------------------------*/
- if((RCC->CR &RCC_CR_HSION) == RCC_CR_HSION)
+ if ((RCC->CR & RCC_CR_HSION) == RCC_CR_HSION)
{
RCC_OscInitStruct->HSIState = RCC_HSI_ON;
}
@@ -1098,14 +1119,14 @@ void HAL_RCC_GetOscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct)
RCC_OscInitStruct->HSIState = RCC_HSI_OFF;
}
- RCC_OscInitStruct->HSICalibrationValue = (uint32_t)((RCC->CR &RCC_CR_HSITRIM) >> RCC_CR_HSITRIM_Pos);
+ RCC_OscInitStruct->HSICalibrationValue = (uint32_t)((RCC->CR & RCC_CR_HSITRIM) >> RCC_CR_HSITRIM_Pos);
/* Get the LSE configuration -----------------------------------------------*/
- if((RCC->BDCR &RCC_BDCR_LSEBYP) == RCC_BDCR_LSEBYP)
+ if ((RCC->BDCR & RCC_BDCR_LSEBYP) == RCC_BDCR_LSEBYP)
{
RCC_OscInitStruct->LSEState = RCC_LSE_BYPASS;
}
- else if((RCC->BDCR &RCC_BDCR_LSEON) == RCC_BDCR_LSEON)
+ else if ((RCC->BDCR & RCC_BDCR_LSEON) == RCC_BDCR_LSEON)
{
RCC_OscInitStruct->LSEState = RCC_LSE_ON;
}
@@ -1115,7 +1136,7 @@ void HAL_RCC_GetOscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct)
}
/* Get the LSI configuration -----------------------------------------------*/
- if((RCC->CSR &RCC_CSR_LSION) == RCC_CSR_LSION)
+ if ((RCC->CSR & RCC_CSR_LSION) == RCC_CSR_LSION)
{
RCC_OscInitStruct->LSIState = RCC_LSI_ON;
}
@@ -1125,7 +1146,7 @@ void HAL_RCC_GetOscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct)
}
/* Get the PLL configuration -----------------------------------------------*/
- if((RCC->CR &RCC_CR_PLLON) == RCC_CR_PLLON)
+ if ((RCC->CR & RCC_CR_PLLON) == RCC_CR_PLLON)
{
RCC_OscInitStruct->PLL.PLLState = RCC_PLL_ON;
}
@@ -1180,7 +1201,7 @@ void HAL_RCC_GetClockConfig(RCC_ClkInitTypeDef *RCC_ClkInitStruct, uint32_t *pF
void HAL_RCC_NMI_IRQHandler(void)
{
/* Check RCC CSSF flag */
- if(__HAL_RCC_GET_IT(RCC_IT_CSS))
+ if (__HAL_RCC_GET_IT(RCC_IT_CSS))
{
/* RCC Clock Security System interrupt user callback */
HAL_RCC_CSSCallback();
diff --git a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_TrueStudio/Boot/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_tim.c b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_TrueStudio/Boot/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_tim.c
index c4676923..29de7d5b 100644
--- a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_TrueStudio/Boot/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_tim.c
+++ b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_TrueStudio/Boot/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_tim.c
@@ -98,18 +98,22 @@
*** Callback registration ***
=============================================
+ [..]
The compilation define USE_HAL_TIM_REGISTER_CALLBACKS when set to 1
allows the user to configure dynamically the driver callbacks.
+ [..]
Use Function @ref HAL_TIM_RegisterCallback() to register a callback.
@ref HAL_TIM_RegisterCallback() takes as parameters the HAL peripheral handle,
the Callback ID and a pointer to the user callback function.
+ [..]
Use function @ref HAL_TIM_UnRegisterCallback() to reset a callback to the default
weak function.
@ref HAL_TIM_UnRegisterCallback takes as parameters the HAL peripheral handle,
and the Callback ID.
+ [..]
These functions allow to register/unregister following callbacks:
(+) Base_MspInitCallback : TIM Base Msp Init Callback.
(+) Base_MspDeInitCallback : TIM Base Msp DeInit Callback.
@@ -140,15 +144,18 @@
(+) BreakCallback : TIM Break Callback.
(+) Break2Callback : TIM Break2 Callback.
+ [..]
By default, after the Init and when the state is HAL_TIM_STATE_RESET
all interrupt callbacks are set to the corresponding weak functions:
examples @ref HAL_TIM_TriggerCallback(), @ref HAL_TIM_ErrorCallback().
+ [..]
Exception done for MspInit and MspDeInit functions that are reset to the legacy weak
functionalities in the Init / DeInit only when these callbacks are null
(not registered beforehand). If not, MspInit or MspDeInit are not null, the Init / DeInit
keep and use the user MspInit / MspDeInit callbacks(registered beforehand)
+ [..]
Callbacks can be registered / unregistered in HAL_TIM_STATE_READY state only.
Exception done MspInit / MspDeInit that can be registered / unregistered
in HAL_TIM_STATE_READY or HAL_TIM_STATE_RESET state,
@@ -156,6 +163,7 @@ all interrupt callbacks are set to the corresponding weak functions:
In that case first register the MspInit/MspDeInit user callbacks
using @ref HAL_TIM_RegisterCallback() before calling DeInit or Init function.
+ [..]
When The compilation define USE_HAL_TIM_REGISTER_CALLBACKS is set to 0 or
not defined, the callback registration feature is not available and all callbacks
are set to the corresponding weak functions.
@@ -216,7 +224,7 @@ static void TIM_DMAPeriodElapsedHalfCplt(DMA_HandleTypeDef *hdma);
static void TIM_DMATriggerCplt(DMA_HandleTypeDef *hdma);
static void TIM_DMATriggerHalfCplt(DMA_HandleTypeDef *hdma);
static HAL_StatusTypeDef TIM_SlaveTimer_SetConfig(TIM_HandleTypeDef *htim,
- TIM_SlaveConfigTypeDef *sSlaveConfig);
+ TIM_SlaveConfigTypeDef *sSlaveConfig);
/**
* @}
*/
@@ -227,8 +235,8 @@ static HAL_StatusTypeDef TIM_SlaveTimer_SetConfig(TIM_HandleTypeDef *htim,
*/
/** @defgroup TIM_Exported_Functions_Group1 TIM Time Base functions
- * @brief Time Base functions
- *
+ * @brief Time Base functions
+ *
@verbatim
==============================================================================
##### Time Base functions #####
@@ -482,11 +490,11 @@ HAL_StatusTypeDef HAL_TIM_Base_Start_DMA(TIM_HandleTypeDef *htim, uint32_t *pDat
/* Check the parameters */
assert_param(IS_TIM_DMA_INSTANCE(htim->Instance));
- if ((htim->State == HAL_TIM_STATE_BUSY))
+ if (htim->State == HAL_TIM_STATE_BUSY)
{
return HAL_BUSY;
}
- else if ((htim->State == HAL_TIM_STATE_READY))
+ else if (htim->State == HAL_TIM_STATE_READY)
{
if ((pData == NULL) && (Length > 0U))
{
@@ -559,8 +567,8 @@ HAL_StatusTypeDef HAL_TIM_Base_Stop_DMA(TIM_HandleTypeDef *htim)
*/
/** @defgroup TIM_Exported_Functions_Group2 TIM Output Compare functions
- * @brief TIM Output Compare functions
- *
+ * @brief TIM Output Compare functions
+ *
@verbatim
==============================================================================
##### TIM Output Compare functions #####
@@ -929,16 +937,16 @@ HAL_StatusTypeDef HAL_TIM_OC_Stop_IT(TIM_HandleTypeDef *htim, uint32_t Channel)
*/
HAL_StatusTypeDef HAL_TIM_OC_Start_DMA(TIM_HandleTypeDef *htim, uint32_t Channel, uint32_t *pData, uint16_t Length)
{
- uint32_t tmpsmcr;
+ uint32_t tmpsmcr;
/* Check the parameters */
assert_param(IS_TIM_CCX_INSTANCE(htim->Instance, Channel));
- if ((htim->State == HAL_TIM_STATE_BUSY))
+ if (htim->State == HAL_TIM_STATE_BUSY)
{
return HAL_BUSY;
}
- else if ((htim->State == HAL_TIM_STATE_READY))
+ else if (htim->State == HAL_TIM_STATE_READY)
{
if ((pData == NULL) && (Length > 0U))
{
@@ -1136,8 +1144,8 @@ HAL_StatusTypeDef HAL_TIM_OC_Stop_DMA(TIM_HandleTypeDef *htim, uint32_t Channel)
*/
/** @defgroup TIM_Exported_Functions_Group3 TIM PWM functions
- * @brief TIM PWM functions
- *
+ * @brief TIM PWM functions
+ *
@verbatim
==============================================================================
##### TIM PWM functions #####
@@ -1513,11 +1521,11 @@ HAL_StatusTypeDef HAL_TIM_PWM_Start_DMA(TIM_HandleTypeDef *htim, uint32_t Channe
/* Check the parameters */
assert_param(IS_TIM_CCX_INSTANCE(htim->Instance, Channel));
- if ((htim->State == HAL_TIM_STATE_BUSY))
+ if (htim->State == HAL_TIM_STATE_BUSY)
{
return HAL_BUSY;
}
- else if ((htim->State == HAL_TIM_STATE_READY))
+ else if (htim->State == HAL_TIM_STATE_READY)
{
if ((pData == NULL) && (Length > 0U))
{
@@ -1714,8 +1722,8 @@ HAL_StatusTypeDef HAL_TIM_PWM_Stop_DMA(TIM_HandleTypeDef *htim, uint32_t Channel
*/
/** @defgroup TIM_Exported_Functions_Group4 TIM Input Capture functions
- * @brief TIM Input Capture functions
- *
+ * @brief TIM Input Capture functions
+ *
@verbatim
==============================================================================
##### TIM Input Capture functions #####
@@ -2061,11 +2069,11 @@ HAL_StatusTypeDef HAL_TIM_IC_Start_DMA(TIM_HandleTypeDef *htim, uint32_t Channel
assert_param(IS_TIM_CCX_INSTANCE(htim->Instance, Channel));
assert_param(IS_TIM_DMA_CC_INSTANCE(htim->Instance));
- if ((htim->State == HAL_TIM_STATE_BUSY))
+ if (htim->State == HAL_TIM_STATE_BUSY)
{
return HAL_BUSY;
}
- else if ((htim->State == HAL_TIM_STATE_READY))
+ else if (htim->State == HAL_TIM_STATE_READY)
{
if ((pData == NULL) && (Length > 0U))
{
@@ -2249,8 +2257,8 @@ HAL_StatusTypeDef HAL_TIM_IC_Stop_DMA(TIM_HandleTypeDef *htim, uint32_t Channel)
*/
/** @defgroup TIM_Exported_Functions_Group5 TIM One Pulse functions
- * @brief TIM One Pulse functions
- *
+ * @brief TIM One Pulse functions
+ *
@verbatim
==============================================================================
##### TIM One Pulse functions #####
@@ -2563,8 +2571,8 @@ HAL_StatusTypeDef HAL_TIM_OnePulse_Stop_IT(TIM_HandleTypeDef *htim, uint32_t Out
*/
/** @defgroup TIM_Exported_Functions_Group6 TIM Encoder functions
- * @brief TIM Encoder functions
- *
+ * @brief TIM Encoder functions
+ *
@verbatim
==============================================================================
##### TIM Encoder functions #####
@@ -2609,15 +2617,15 @@ HAL_StatusTypeDef HAL_TIM_Encoder_Init(TIM_HandleTypeDef *htim, TIM_Encoder_Ini
}
/* Check the parameters */
+ assert_param(IS_TIM_ENCODER_INTERFACE_INSTANCE(htim->Instance));
assert_param(IS_TIM_COUNTER_MODE(htim->Init.CounterMode));
assert_param(IS_TIM_CLOCKDIVISION_DIV(htim->Init.ClockDivision));
assert_param(IS_TIM_AUTORELOAD_PRELOAD(htim->Init.AutoReloadPreload));
- assert_param(IS_TIM_CC2_INSTANCE(htim->Instance));
assert_param(IS_TIM_ENCODER_MODE(sConfig->EncoderMode));
assert_param(IS_TIM_IC_SELECTION(sConfig->IC1Selection));
assert_param(IS_TIM_IC_SELECTION(sConfig->IC2Selection));
- assert_param(IS_TIM_IC_POLARITY(sConfig->IC1Polarity));
- assert_param(IS_TIM_IC_POLARITY(sConfig->IC2Polarity));
+ assert_param(IS_TIM_ENCODERINPUT_POLARITY(sConfig->IC1Polarity));
+ assert_param(IS_TIM_ENCODERINPUT_POLARITY(sConfig->IC2Polarity));
assert_param(IS_TIM_IC_PRESCALER(sConfig->IC1Prescaler));
assert_param(IS_TIM_IC_PRESCALER(sConfig->IC2Prescaler));
assert_param(IS_TIM_IC_FILTER(sConfig->IC1Filter));
@@ -2775,7 +2783,7 @@ __weak void HAL_TIM_Encoder_MspDeInit(TIM_HandleTypeDef *htim)
HAL_StatusTypeDef HAL_TIM_Encoder_Start(TIM_HandleTypeDef *htim, uint32_t Channel)
{
/* Check the parameters */
- assert_param(IS_TIM_CC2_INSTANCE(htim->Instance));
+ assert_param(IS_TIM_ENCODER_INTERFACE_INSTANCE(htim->Instance));
/* Enable the encoder interface channels */
switch (Channel)
@@ -2819,7 +2827,7 @@ HAL_StatusTypeDef HAL_TIM_Encoder_Start(TIM_HandleTypeDef *htim, uint32_t Channe
HAL_StatusTypeDef HAL_TIM_Encoder_Stop(TIM_HandleTypeDef *htim, uint32_t Channel)
{
/* Check the parameters */
- assert_param(IS_TIM_CC2_INSTANCE(htim->Instance));
+ assert_param(IS_TIM_ENCODER_INTERFACE_INSTANCE(htim->Instance));
/* Disable the Input Capture channels 1 and 2
(in the EncoderInterface the two possible channels that can be used are TIM_CHANNEL_1 and TIM_CHANNEL_2) */
@@ -2865,7 +2873,7 @@ HAL_StatusTypeDef HAL_TIM_Encoder_Stop(TIM_HandleTypeDef *htim, uint32_t Channel
HAL_StatusTypeDef HAL_TIM_Encoder_Start_IT(TIM_HandleTypeDef *htim, uint32_t Channel)
{
/* Check the parameters */
- assert_param(IS_TIM_CC2_INSTANCE(htim->Instance));
+ assert_param(IS_TIM_ENCODER_INTERFACE_INSTANCE(htim->Instance));
/* Enable the encoder interface channels */
/* Enable the capture compare Interrupts 1 and/or 2 */
@@ -2915,7 +2923,7 @@ HAL_StatusTypeDef HAL_TIM_Encoder_Start_IT(TIM_HandleTypeDef *htim, uint32_t Cha
HAL_StatusTypeDef HAL_TIM_Encoder_Stop_IT(TIM_HandleTypeDef *htim, uint32_t Channel)
{
/* Check the parameters */
- assert_param(IS_TIM_CC2_INSTANCE(htim->Instance));
+ assert_param(IS_TIM_ENCODER_INTERFACE_INSTANCE(htim->Instance));
/* Disable the Input Capture channels 1 and 2
(in the EncoderInterface the two possible channels that can be used are TIM_CHANNEL_1 and TIM_CHANNEL_2) */
@@ -2966,16 +2974,17 @@ HAL_StatusTypeDef HAL_TIM_Encoder_Stop_IT(TIM_HandleTypeDef *htim, uint32_t Chan
* @param Length The length of data to be transferred from TIM peripheral to memory.
* @retval HAL status
*/
-HAL_StatusTypeDef HAL_TIM_Encoder_Start_DMA(TIM_HandleTypeDef *htim, uint32_t Channel, uint32_t *pData1, uint32_t *pData2, uint16_t Length)
+HAL_StatusTypeDef HAL_TIM_Encoder_Start_DMA(TIM_HandleTypeDef *htim, uint32_t Channel, uint32_t *pData1,
+ uint32_t *pData2, uint16_t Length)
{
/* Check the parameters */
- assert_param(IS_TIM_DMA_CC_INSTANCE(htim->Instance));
+ assert_param(IS_TIM_ENCODER_INTERFACE_INSTANCE(htim->Instance));
- if ((htim->State == HAL_TIM_STATE_BUSY))
+ if (htim->State == HAL_TIM_STATE_BUSY)
{
return HAL_BUSY;
}
- else if ((htim->State == HAL_TIM_STATE_READY))
+ else if (htim->State == HAL_TIM_STATE_READY)
{
if ((((pData1 == NULL) || (pData2 == NULL))) && (Length > 0U))
{
@@ -3103,7 +3112,7 @@ HAL_StatusTypeDef HAL_TIM_Encoder_Start_DMA(TIM_HandleTypeDef *htim, uint32_t Ch
HAL_StatusTypeDef HAL_TIM_Encoder_Stop_DMA(TIM_HandleTypeDef *htim, uint32_t Channel)
{
/* Check the parameters */
- assert_param(IS_TIM_DMA_CC_INSTANCE(htim->Instance));
+ assert_param(IS_TIM_ENCODER_INTERFACE_INSTANCE(htim->Instance));
/* Disable the Input Capture channels 1 and 2
(in the EncoderInterface the two possible channels that can be used are TIM_CHANNEL_1 and TIM_CHANNEL_2) */
@@ -3149,8 +3158,8 @@ HAL_StatusTypeDef HAL_TIM_Encoder_Stop_DMA(TIM_HandleTypeDef *htim, uint32_t Cha
* @}
*/
/** @defgroup TIM_Exported_Functions_Group7 TIM IRQ handler management
- * @brief TIM IRQ handler management
- *
+ * @brief TIM IRQ handler management
+ *
@verbatim
==============================================================================
##### IRQ handler management #####
@@ -3363,8 +3372,8 @@ void HAL_TIM_IRQHandler(TIM_HandleTypeDef *htim)
*/
/** @defgroup TIM_Exported_Functions_Group8 TIM Peripheral Control functions
- * @brief TIM Peripheral Control functions
- *
+ * @brief TIM Peripheral Control functions
+ *
@verbatim
==============================================================================
##### Peripheral Control functions #####
@@ -3738,9 +3747,14 @@ HAL_StatusTypeDef HAL_TIM_PWM_ConfigChannel(TIM_HandleTypeDef *htim,
* This parameter can be one of the following values:
* @arg TIM_CHANNEL_1: TIM Channel 1 selected
* @arg TIM_CHANNEL_2: TIM Channel 2 selected
+ * @note To output a waveform with a minimum delay user can enable the fast
+ * mode by calling the @ref __HAL_TIM_ENABLE_OCxFAST macro. Then CCx
+ * output is forced in response to the edge detection on TIx input,
+ * without taking in account the comparison.
* @retval HAL status
*/
-HAL_StatusTypeDef HAL_TIM_OnePulse_ConfigChannel(TIM_HandleTypeDef *htim, TIM_OnePulse_InitTypeDef *sConfig, uint32_t OutputChannel, uint32_t InputChannel)
+HAL_StatusTypeDef HAL_TIM_OnePulse_ConfigChannel(TIM_HandleTypeDef *htim, TIM_OnePulse_InitTypeDef *sConfig,
+ uint32_t OutputChannel, uint32_t InputChannel)
{
TIM_OC_InitTypeDef temp1;
@@ -3894,11 +3908,11 @@ HAL_StatusTypeDef HAL_TIM_DMABurst_WriteStart(TIM_HandleTypeDef *htim, uint32_t
assert_param(IS_TIM_DMA_SOURCE(BurstRequestSrc));
assert_param(IS_TIM_DMA_LENGTH(BurstLength));
- if ((htim->State == HAL_TIM_STATE_BUSY))
+ if (htim->State == HAL_TIM_STATE_BUSY)
{
return HAL_BUSY;
}
- else if ((htim->State == HAL_TIM_STATE_READY))
+ else if (htim->State == HAL_TIM_STATE_READY)
{
if ((BurstBuffer == NULL) && (BurstLength > 0U))
{
@@ -3941,7 +3955,8 @@ HAL_StatusTypeDef HAL_TIM_DMABurst_WriteStart(TIM_HandleTypeDef *htim, uint32_t
htim->hdma[TIM_DMA_ID_CC1]->XferErrorCallback = TIM_DMAError ;
/* Enable the DMA stream */
- if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC1], (uint32_t)BurstBuffer, (uint32_t)&htim->Instance->DMAR, ((BurstLength) >> 8U) + 1U) != HAL_OK)
+ if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC1], (uint32_t)BurstBuffer,
+ (uint32_t)&htim->Instance->DMAR, ((BurstLength) >> 8U) + 1U) != HAL_OK)
{
return HAL_ERROR;
}
@@ -3957,7 +3972,8 @@ HAL_StatusTypeDef HAL_TIM_DMABurst_WriteStart(TIM_HandleTypeDef *htim, uint32_t
htim->hdma[TIM_DMA_ID_CC2]->XferErrorCallback = TIM_DMAError ;
/* Enable the DMA stream */
- if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC2], (uint32_t)BurstBuffer, (uint32_t)&htim->Instance->DMAR, ((BurstLength) >> 8U) + 1U) != HAL_OK)
+ if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC2], (uint32_t)BurstBuffer,
+ (uint32_t)&htim->Instance->DMAR, ((BurstLength) >> 8U) + 1U) != HAL_OK)
{
return HAL_ERROR;
}
@@ -3973,7 +3989,8 @@ HAL_StatusTypeDef HAL_TIM_DMABurst_WriteStart(TIM_HandleTypeDef *htim, uint32_t
htim->hdma[TIM_DMA_ID_CC3]->XferErrorCallback = TIM_DMAError ;
/* Enable the DMA stream */
- if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC3], (uint32_t)BurstBuffer, (uint32_t)&htim->Instance->DMAR, ((BurstLength) >> 8U) + 1U) != HAL_OK)
+ if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC3], (uint32_t)BurstBuffer,
+ (uint32_t)&htim->Instance->DMAR, ((BurstLength) >> 8U) + 1U) != HAL_OK)
{
return HAL_ERROR;
}
@@ -3989,7 +4006,8 @@ HAL_StatusTypeDef HAL_TIM_DMABurst_WriteStart(TIM_HandleTypeDef *htim, uint32_t
htim->hdma[TIM_DMA_ID_CC4]->XferErrorCallback = TIM_DMAError ;
/* Enable the DMA stream */
- if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC4], (uint32_t)BurstBuffer, (uint32_t)&htim->Instance->DMAR, ((BurstLength) >> 8U) + 1U) != HAL_OK)
+ if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC4], (uint32_t)BurstBuffer,
+ (uint32_t)&htim->Instance->DMAR, ((BurstLength) >> 8U) + 1U) != HAL_OK)
{
return HAL_ERROR;
}
@@ -4005,7 +4023,8 @@ HAL_StatusTypeDef HAL_TIM_DMABurst_WriteStart(TIM_HandleTypeDef *htim, uint32_t
htim->hdma[TIM_DMA_ID_COMMUTATION]->XferErrorCallback = TIM_DMAError ;
/* Enable the DMA stream */
- if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_COMMUTATION], (uint32_t)BurstBuffer, (uint32_t)&htim->Instance->DMAR, ((BurstLength) >> 8U) + 1U) != HAL_OK)
+ if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_COMMUTATION], (uint32_t)BurstBuffer,
+ (uint32_t)&htim->Instance->DMAR, ((BurstLength) >> 8U) + 1U) != HAL_OK)
{
return HAL_ERROR;
}
@@ -4021,7 +4040,8 @@ HAL_StatusTypeDef HAL_TIM_DMABurst_WriteStart(TIM_HandleTypeDef *htim, uint32_t
htim->hdma[TIM_DMA_ID_TRIGGER]->XferErrorCallback = TIM_DMAError ;
/* Enable the DMA stream */
- if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_TRIGGER], (uint32_t)BurstBuffer, (uint32_t)&htim->Instance->DMAR, ((BurstLength) >> 8U) + 1U) != HAL_OK)
+ if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_TRIGGER], (uint32_t)BurstBuffer,
+ (uint32_t)&htim->Instance->DMAR, ((BurstLength) >> 8U) + 1U) != HAL_OK)
{
return HAL_ERROR;
}
@@ -4151,8 +4171,8 @@ HAL_StatusTypeDef HAL_TIM_DMABurst_WriteStop(TIM_HandleTypeDef *htim, uint32_t B
* @note This function should be used only when BurstLength is equal to DMA data transfer length.
* @retval HAL status
*/
-HAL_StatusTypeDef HAL_TIM_DMABurst_ReadStart(TIM_HandleTypeDef *htim, uint32_t BurstBaseAddress, uint32_t BurstRequestSrc,
- uint32_t *BurstBuffer, uint32_t BurstLength)
+HAL_StatusTypeDef HAL_TIM_DMABurst_ReadStart(TIM_HandleTypeDef *htim, uint32_t BurstBaseAddress,
+ uint32_t BurstRequestSrc, uint32_t *BurstBuffer, uint32_t BurstLength)
{
/* Check the parameters */
assert_param(IS_TIM_DMABURST_INSTANCE(htim->Instance));
@@ -4160,11 +4180,11 @@ HAL_StatusTypeDef HAL_TIM_DMABurst_ReadStart(TIM_HandleTypeDef *htim, uint32_t B
assert_param(IS_TIM_DMA_SOURCE(BurstRequestSrc));
assert_param(IS_TIM_DMA_LENGTH(BurstLength));
- if ((htim->State == HAL_TIM_STATE_BUSY))
+ if (htim->State == HAL_TIM_STATE_BUSY)
{
return HAL_BUSY;
}
- else if ((htim->State == HAL_TIM_STATE_READY))
+ else if (htim->State == HAL_TIM_STATE_READY)
{
if ((BurstBuffer == NULL) && (BurstLength > 0U))
{
@@ -4465,7 +4485,7 @@ HAL_StatusTypeDef HAL_TIM_ConfigOCrefClear(TIM_HandleTypeDef *htim,
/* When OCRef clear feature is used with ETR source, ETR prescaler must be off */
if (sClearInputConfig->ClearInputPrescaler != TIM_CLEARINPUTPRESCALER_DIV1)
{
- htim->State = HAL_TIM_STATE_READY;
+ htim->State = HAL_TIM_STATE_READY;
__HAL_UNLOCK(htim);
return HAL_ERROR;
}
@@ -4780,9 +4800,9 @@ HAL_StatusTypeDef HAL_TIM_SlaveConfigSynchro(TIM_HandleTypeDef *htim, TIM_SlaveC
htim->State = HAL_TIM_STATE_BUSY;
- if(TIM_SlaveTimer_SetConfig(htim, sSlaveConfig) != HAL_OK)
+ if (TIM_SlaveTimer_SetConfig(htim, sSlaveConfig) != HAL_OK)
{
- htim->State = HAL_TIM_STATE_READY;
+ htim->State = HAL_TIM_STATE_READY;
__HAL_UNLOCK(htim);
return HAL_ERROR;
}
@@ -4810,7 +4830,7 @@ HAL_StatusTypeDef HAL_TIM_SlaveConfigSynchro(TIM_HandleTypeDef *htim, TIM_SlaveC
* @retval HAL status
*/
HAL_StatusTypeDef HAL_TIM_SlaveConfigSynchro_IT(TIM_HandleTypeDef *htim,
- TIM_SlaveConfigTypeDef *sSlaveConfig)
+ TIM_SlaveConfigTypeDef *sSlaveConfig)
{
/* Check the parameters */
assert_param(IS_TIM_SLAVE_INSTANCE(htim->Instance));
@@ -4821,9 +4841,9 @@ HAL_StatusTypeDef HAL_TIM_SlaveConfigSynchro_IT(TIM_HandleTypeDef *htim,
htim->State = HAL_TIM_STATE_BUSY;
- if(TIM_SlaveTimer_SetConfig(htim, sSlaveConfig) != HAL_OK)
+ if (TIM_SlaveTimer_SetConfig(htim, sSlaveConfig) != HAL_OK)
{
- htim->State = HAL_TIM_STATE_READY;
+ htim->State = HAL_TIM_STATE_READY;
__HAL_UNLOCK(htim);
return HAL_ERROR;
}
@@ -4913,8 +4933,8 @@ uint32_t HAL_TIM_ReadCapturedValue(TIM_HandleTypeDef *htim, uint32_t Channel)
*/
/** @defgroup TIM_Exported_Functions_Group9 TIM Callbacks functions
- * @brief TIM Callbacks functions
- *
+ * @brief TIM Callbacks functions
+ *
@verbatim
==============================================================================
##### TIM Callbacks functions #####
@@ -5118,7 +5138,8 @@ __weak void HAL_TIM_ErrorCallback(TIM_HandleTypeDef *htim)
* @param pCallback pointer to the callback function
* @retval status
*/
-HAL_StatusTypeDef HAL_TIM_RegisterCallback(TIM_HandleTypeDef *htim, HAL_TIM_CallbackIDTypeDef CallbackID, pTIM_CallbackTypeDef pCallback)
+HAL_StatusTypeDef HAL_TIM_RegisterCallback(TIM_HandleTypeDef *htim, HAL_TIM_CallbackIDTypeDef CallbackID,
+ pTIM_CallbackTypeDef pCallback)
{
HAL_StatusTypeDef status = HAL_OK;
@@ -5578,8 +5599,8 @@ HAL_StatusTypeDef HAL_TIM_UnRegisterCallback(TIM_HandleTypeDef *htim, HAL_TIM_Ca
*/
/** @defgroup TIM_Exported_Functions_Group10 TIM Peripheral State functions
- * @brief TIM Peripheral State functions
- *
+ * @brief TIM Peripheral State functions
+ *
@verbatim
==============================================================================
##### Peripheral State functions #####
@@ -6365,7 +6386,7 @@ static void TIM_OC6_SetConfig(TIM_TypeDef *TIMx,
* @retval None
*/
static HAL_StatusTypeDef TIM_SlaveTimer_SetConfig(TIM_HandleTypeDef *htim,
- TIM_SlaveConfigTypeDef *sSlaveConfig)
+ TIM_SlaveConfigTypeDef *sSlaveConfig)
{
uint32_t tmpsmcr;
uint32_t tmpccmr1;
diff --git a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_TrueStudio/Boot/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_tim_ex.c b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_TrueStudio/Boot/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_tim_ex.c
index 271f11ec..f2d976ae 100644
--- a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_TrueStudio/Boot/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_tim_ex.c
+++ b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_TrueStudio/Boot/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_tim_ex.c
@@ -73,7 +73,7 @@
* opensource.org/licenses/BSD-3-Clause
*
******************************************************************************
-*/
+ */
/* Includes ------------------------------------------------------------------*/
#include "stm32f7xx_hal.h"
@@ -397,11 +397,11 @@ HAL_StatusTypeDef HAL_TIMEx_HallSensor_Start_DMA(TIM_HandleTypeDef *htim, uint32
/* Check the parameters */
assert_param(IS_TIM_HALL_SENSOR_INTERFACE_INSTANCE(htim->Instance));
- if ((htim->State == HAL_TIM_STATE_BUSY))
+ if (htim->State == HAL_TIM_STATE_BUSY)
{
return HAL_BUSY;
}
- else if ((htim->State == HAL_TIM_STATE_READY))
+ else if (htim->State == HAL_TIM_STATE_READY)
{
if (((uint32_t)pData == 0U) && (Length > 0U))
{
@@ -709,11 +709,11 @@ HAL_StatusTypeDef HAL_TIMEx_OCN_Start_DMA(TIM_HandleTypeDef *htim, uint32_t Chan
/* Check the parameters */
assert_param(IS_TIM_CCXN_INSTANCE(htim->Instance, Channel));
- if ((htim->State == HAL_TIM_STATE_BUSY))
+ if (htim->State == HAL_TIM_STATE_BUSY)
{
return HAL_BUSY;
}
- else if ((htim->State == HAL_TIM_STATE_READY))
+ else if (htim->State == HAL_TIM_STATE_READY)
{
if (((uint32_t)pData == 0U) && (Length > 0U))
{
@@ -1117,11 +1117,11 @@ HAL_StatusTypeDef HAL_TIMEx_PWMN_Start_DMA(TIM_HandleTypeDef *htim, uint32_t Cha
/* Check the parameters */
assert_param(IS_TIM_CCXN_INSTANCE(htim->Instance, Channel));
- if ((htim->State == HAL_TIM_STATE_BUSY))
+ if (htim->State == HAL_TIM_STATE_BUSY)
{
return HAL_BUSY;
}
- else if ((htim->State == HAL_TIM_STATE_READY))
+ else if (htim->State == HAL_TIM_STATE_READY)
{
if (((uint32_t)pData == 0U) && (Length > 0U))
{
@@ -1466,7 +1466,8 @@ HAL_StatusTypeDef HAL_TIMEx_OnePulseN_Stop_IT(TIM_HandleTypeDef *htim, uint32_t
* @arg TIM_COMMUTATION_SOFTWARE: Commutation source is set by software using the COMG bit
* @retval HAL status
*/
-HAL_StatusTypeDef HAL_TIMEx_ConfigCommutEvent(TIM_HandleTypeDef *htim, uint32_t InputTrigger, uint32_t CommutationSource)
+HAL_StatusTypeDef HAL_TIMEx_ConfigCommutEvent(TIM_HandleTypeDef *htim, uint32_t InputTrigger,
+ uint32_t CommutationSource)
{
/* Check the parameters */
assert_param(IS_TIM_COMMUTATION_EVENT_INSTANCE(htim->Instance));
@@ -1521,7 +1522,8 @@ HAL_StatusTypeDef HAL_TIMEx_ConfigCommutEvent(TIM_HandleTypeDef *htim, uint32_t
* @arg TIM_COMMUTATION_SOFTWARE: Commutation source is set by software using the COMG bit
* @retval HAL status
*/
-HAL_StatusTypeDef HAL_TIMEx_ConfigCommutEvent_IT(TIM_HandleTypeDef *htim, uint32_t InputTrigger, uint32_t CommutationSource)
+HAL_StatusTypeDef HAL_TIMEx_ConfigCommutEvent_IT(TIM_HandleTypeDef *htim, uint32_t InputTrigger,
+ uint32_t CommutationSource)
{
/* Check the parameters */
assert_param(IS_TIM_COMMUTATION_EVENT_INSTANCE(htim->Instance));
@@ -1577,7 +1579,8 @@ HAL_StatusTypeDef HAL_TIMEx_ConfigCommutEvent_IT(TIM_HandleTypeDef *htim, uint32
* @arg TIM_COMMUTATION_SOFTWARE: Commutation source is set by software using the COMG bit
* @retval HAL status
*/
-HAL_StatusTypeDef HAL_TIMEx_ConfigCommutEvent_DMA(TIM_HandleTypeDef *htim, uint32_t InputTrigger, uint32_t CommutationSource)
+HAL_StatusTypeDef HAL_TIMEx_ConfigCommutEvent_DMA(TIM_HandleTypeDef *htim, uint32_t InputTrigger,
+ uint32_t CommutationSource)
{
/* Check the parameters */
assert_param(IS_TIM_COMMUTATION_EVENT_INSTANCE(htim->Instance));
@@ -1632,7 +1635,7 @@ HAL_StatusTypeDef HAL_TIMEx_MasterConfigSynchronization(TIM_HandleTypeDef *htim,
uint32_t tmpsmcr;
/* Check the parameters */
- assert_param(IS_TIM_SYNCHRO_INSTANCE(htim->Instance));
+ assert_param(IS_TIM_MASTER_INSTANCE(htim->Instance));
assert_param(IS_TIM_TRGO_SOURCE(sMasterConfig->MasterOutputTrigger));
assert_param(IS_TIM_MSM_STATE(sMasterConfig->MasterSlaveMode));
@@ -1665,16 +1668,19 @@ HAL_StatusTypeDef HAL_TIMEx_MasterConfigSynchronization(TIM_HandleTypeDef *htim,
/* Select the TRGO source */
tmpcr2 |= sMasterConfig->MasterOutputTrigger;
- /* Reset the MSM Bit */
- tmpsmcr &= ~TIM_SMCR_MSM;
- /* Set master mode */
- tmpsmcr |= sMasterConfig->MasterSlaveMode;
-
/* Update TIMx CR2 */
htim->Instance->CR2 = tmpcr2;
- /* Update TIMx SMCR */
- htim->Instance->SMCR = tmpsmcr;
+ if (IS_TIM_SLAVE_INSTANCE(htim->Instance))
+ {
+ /* Reset the MSM Bit */
+ tmpsmcr &= ~TIM_SMCR_MSM;
+ /* Set master mode */
+ tmpsmcr |= sMasterConfig->MasterSlaveMode;
+
+ /* Update TIMx SMCR */
+ htim->Instance->SMCR = tmpsmcr;
+ }
/* Change the htim state */
htim->State = HAL_TIM_STATE_READY;
@@ -1690,6 +1696,9 @@ HAL_StatusTypeDef HAL_TIMEx_MasterConfigSynchronization(TIM_HandleTypeDef *htim,
* @param htim TIM handle
* @param sBreakDeadTimeConfig pointer to a TIM_ConfigBreakDeadConfigTypeDef structure that
* contains the BDTR Register configuration information for the TIM peripheral.
+ * @note Interrupts can be generated when an active level is detected on the
+ * break input, the break 2 input or the system break input. Break
+ * interrupt can be enabled by calling the @ref __HAL_TIM_ENABLE_IT macro.
* @retval HAL status
*/
HAL_StatusTypeDef HAL_TIMEx_ConfigBreakDeadTime(TIM_HandleTypeDef *htim,
@@ -1763,10 +1772,10 @@ HAL_StatusTypeDef HAL_TIMEx_ConfigBreakInput(TIM_HandleTypeDef *htim,
{
uint32_t tmporx;
- uint32_t bkin_enable_mask = 0U;
- uint32_t bkin_polarity_mask = 0U;
- uint32_t bkin_enable_bitpos = 0U;
- uint32_t bkin_polarity_bitpos = 0U;
+ uint32_t bkin_enable_mask;
+ uint32_t bkin_polarity_mask;
+ uint32_t bkin_enable_bitpos;
+ uint32_t bkin_polarity_bitpos;
/* Check the parameters */
assert_param(IS_TIM_BREAK_INSTANCE(htim->Instance));
@@ -1800,11 +1809,19 @@ HAL_StatusTypeDef HAL_TIMEx_ConfigBreakInput(TIM_HandleTypeDef *htim,
{
bkin_enable_mask = TIM1_AF1_BKDF1BKE;
bkin_enable_bitpos = 8;
+ bkin_polarity_mask = 0U;
+ bkin_polarity_bitpos = 0U;
break;
}
default:
+ {
+ bkin_enable_mask = 0U;
+ bkin_polarity_mask = 0U;
+ bkin_enable_bitpos = 0U;
+ bkin_polarity_bitpos = 0U;
break;
+ }
}
switch (BreakInput)
@@ -2054,7 +2071,7 @@ HAL_TIM_StateTypeDef HAL_TIMEx_HallSensor_GetState(TIM_HandleTypeDef *htim)
*/
/* Private functions ---------------------------------------------------------*/
-/** @defgroup TIMEx_Private_Functions TIM Extended Private Functions
+/** @defgroup TIMEx_Private_Functions TIMEx Private Functions
* @{
*/
diff --git a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_TrueStudio/Boot/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_ll_gpio.c b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_TrueStudio/Boot/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_ll_gpio.c
index 987e5bef..0f04752c 100644
--- a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_TrueStudio/Boot/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_ll_gpio.c
+++ b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_TrueStudio/Boot/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_ll_gpio.c
@@ -220,9 +220,6 @@ ErrorStatus LL_GPIO_Init(GPIO_TypeDef *GPIOx, LL_GPIO_InitTypeDef *GPIO_InitStru
if (currentpin)
{
- /* Pin Mode configuration */
- LL_GPIO_SetPinMode(GPIOx, currentpin, GPIO_InitStruct->Mode);
-
if ((GPIO_InitStruct->Mode == LL_GPIO_MODE_OUTPUT) || (GPIO_InitStruct->Mode == LL_GPIO_MODE_ALTERNATE))
{
/* Check Speed mode parameters */
@@ -230,6 +227,12 @@ ErrorStatus LL_GPIO_Init(GPIO_TypeDef *GPIOx, LL_GPIO_InitTypeDef *GPIO_InitStru
/* Speed mode configuration */
LL_GPIO_SetPinSpeed(GPIOx, currentpin, GPIO_InitStruct->Speed);
+
+ /* Check Output mode parameters */
+ assert_param(IS_LL_GPIO_OUTPUT_TYPE(GPIO_InitStruct->OutputType));
+
+ /* Output mode configuration*/
+ LL_GPIO_SetPinOutputType(GPIOx, GPIO_InitStruct->Pin, GPIO_InitStruct->OutputType);
}
/* Pull-up Pull down resistor configuration*/
@@ -250,19 +253,11 @@ ErrorStatus LL_GPIO_Init(GPIO_TypeDef *GPIOx, LL_GPIO_InitTypeDef *GPIO_InitStru
LL_GPIO_SetAFPin_8_15(GPIOx, currentpin, GPIO_InitStruct->Alternate);
}
}
+ /* Pin Mode configuration */
+ LL_GPIO_SetPinMode(GPIOx, currentpin, GPIO_InitStruct->Mode);
}
pinpos++;
}
-
- if ((GPIO_InitStruct->Mode == LL_GPIO_MODE_OUTPUT) || (GPIO_InitStruct->Mode == LL_GPIO_MODE_ALTERNATE))
- {
- /* Check Output mode parameters */
- assert_param(IS_LL_GPIO_OUTPUT_TYPE(GPIO_InitStruct->OutputType));
-
- /* Output mode configuration*/
- LL_GPIO_SetPinOutputType(GPIOx, GPIO_InitStruct->Pin, GPIO_InitStruct->OutputType);
-
- }
return (SUCCESS);
}
diff --git a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_TrueStudio/Boot/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_ll_rcc.c b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_TrueStudio/Boot/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_ll_rcc.c
index 0197818f..588d0bb5 100644
--- a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_TrueStudio/Boot/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_ll_rcc.c
+++ b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_TrueStudio/Boot/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_ll_rcc.c
@@ -163,7 +163,7 @@ uint32_t RCC_PLLI2S_GetFreqDomain_SPDIFRX(void);
*/
ErrorStatus LL_RCC_DeInit(void)
{
- uint32_t vl_mask = 0xFFFFFFFFU;
+ __IO uint32_t vl_mask;
/* Set HSION bit */
LL_RCC_HSI_Enable();
@@ -175,10 +175,13 @@ ErrorStatus LL_RCC_DeInit(void)
/* Reset CFGR register */
LL_RCC_WriteReg(CFGR, 0x00000000U);
+ /* Read CR register */
+ vl_mask = LL_RCC_ReadReg(CR);
+
/* Reset HSEON, HSEBYP, PLLON, CSSON, PLLI2SON and PLLSAION bits */
CLEAR_BIT(vl_mask, (RCC_CR_HSEON | RCC_CR_HSEBYP | RCC_CR_PLLON | RCC_CR_CSSON | RCC_CR_PLLSAION | RCC_CR_PLLI2SON));
- /* Write new mask in CR register */
+ /* Write new value in CR register */
LL_RCC_WriteReg(CR, vl_mask);
/* Set HSITRIM bits to the reset value*/
diff --git a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_TrueStudio/Boot/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_ll_usart.c b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_TrueStudio/Boot/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_ll_usart.c
index 2f82ef49..b3db0e6a 100644
--- a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_TrueStudio/Boot/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_ll_usart.c
+++ b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_TrueStudio/Boot/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_ll_usart.c
@@ -22,11 +22,11 @@
#include "stm32f7xx_ll_usart.h"
#include "stm32f7xx_ll_rcc.h"
#include "stm32f7xx_ll_bus.h"
-#ifdef USE_FULL_ASSERT
+#ifdef USE_FULL_ASSERT
#include "stm32_assert.h"
#else
#define assert_param(expr) ((void)0U)
-#endif
+#endif /* USE_FULL_ASSERT */
/** @addtogroup STM32F7xx_LL_Driver
* @{
@@ -41,14 +41,6 @@
/* Private types -------------------------------------------------------------*/
/* Private variables ---------------------------------------------------------*/
/* Private constants ---------------------------------------------------------*/
-/** @addtogroup USART_LL_Private_Constants
- * @{
- */
-
-/**
- * @}
- */
-
/* Private macros ------------------------------------------------------------*/
/** @addtogroup USART_LL_Private_Macros
* @{
@@ -65,42 +57,42 @@
#define IS_LL_USART_BRR_MAX(__VALUE__) ((__VALUE__) <= 0x0000FFFFU)
#define IS_LL_USART_DIRECTION(__VALUE__) (((__VALUE__) == LL_USART_DIRECTION_NONE) \
- || ((__VALUE__) == LL_USART_DIRECTION_RX) \
- || ((__VALUE__) == LL_USART_DIRECTION_TX) \
- || ((__VALUE__) == LL_USART_DIRECTION_TX_RX))
+ || ((__VALUE__) == LL_USART_DIRECTION_RX) \
+ || ((__VALUE__) == LL_USART_DIRECTION_TX) \
+ || ((__VALUE__) == LL_USART_DIRECTION_TX_RX))
#define IS_LL_USART_PARITY(__VALUE__) (((__VALUE__) == LL_USART_PARITY_NONE) \
- || ((__VALUE__) == LL_USART_PARITY_EVEN) \
- || ((__VALUE__) == LL_USART_PARITY_ODD))
+ || ((__VALUE__) == LL_USART_PARITY_EVEN) \
+ || ((__VALUE__) == LL_USART_PARITY_ODD))
#define IS_LL_USART_DATAWIDTH(__VALUE__) (((__VALUE__) == LL_USART_DATAWIDTH_7B) \
- || ((__VALUE__) == LL_USART_DATAWIDTH_8B) \
- || ((__VALUE__) == LL_USART_DATAWIDTH_9B))
+ || ((__VALUE__) == LL_USART_DATAWIDTH_8B) \
+ || ((__VALUE__) == LL_USART_DATAWIDTH_9B))
#define IS_LL_USART_OVERSAMPLING(__VALUE__) (((__VALUE__) == LL_USART_OVERSAMPLING_16) \
- || ((__VALUE__) == LL_USART_OVERSAMPLING_8))
+ || ((__VALUE__) == LL_USART_OVERSAMPLING_8))
#define IS_LL_USART_LASTBITCLKOUTPUT(__VALUE__) (((__VALUE__) == LL_USART_LASTCLKPULSE_NO_OUTPUT) \
- || ((__VALUE__) == LL_USART_LASTCLKPULSE_OUTPUT))
+ || ((__VALUE__) == LL_USART_LASTCLKPULSE_OUTPUT))
#define IS_LL_USART_CLOCKPHASE(__VALUE__) (((__VALUE__) == LL_USART_PHASE_1EDGE) \
- || ((__VALUE__) == LL_USART_PHASE_2EDGE))
+ || ((__VALUE__) == LL_USART_PHASE_2EDGE))
#define IS_LL_USART_CLOCKPOLARITY(__VALUE__) (((__VALUE__) == LL_USART_POLARITY_LOW) \
- || ((__VALUE__) == LL_USART_POLARITY_HIGH))
+ || ((__VALUE__) == LL_USART_POLARITY_HIGH))
#define IS_LL_USART_CLOCKOUTPUT(__VALUE__) (((__VALUE__) == LL_USART_CLOCK_DISABLE) \
- || ((__VALUE__) == LL_USART_CLOCK_ENABLE))
+ || ((__VALUE__) == LL_USART_CLOCK_ENABLE))
#define IS_LL_USART_STOPBITS(__VALUE__) (((__VALUE__) == LL_USART_STOPBITS_0_5) \
- || ((__VALUE__) == LL_USART_STOPBITS_1) \
- || ((__VALUE__) == LL_USART_STOPBITS_1_5) \
- || ((__VALUE__) == LL_USART_STOPBITS_2))
+ || ((__VALUE__) == LL_USART_STOPBITS_1) \
+ || ((__VALUE__) == LL_USART_STOPBITS_1_5) \
+ || ((__VALUE__) == LL_USART_STOPBITS_2))
#define IS_LL_USART_HWCONTROL(__VALUE__) (((__VALUE__) == LL_USART_HWCONTROL_NONE) \
- || ((__VALUE__) == LL_USART_HWCONTROL_RTS) \
- || ((__VALUE__) == LL_USART_HWCONTROL_CTS) \
- || ((__VALUE__) == LL_USART_HWCONTROL_RTS_CTS))
+ || ((__VALUE__) == LL_USART_HWCONTROL_RTS) \
+ || ((__VALUE__) == LL_USART_HWCONTROL_CTS) \
+ || ((__VALUE__) == LL_USART_HWCONTROL_RTS_CTS))
/**
* @}
diff --git a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_TrueStudio/Boot/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_ll_usb.c b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_TrueStudio/Boot/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_ll_usb.c
index ece23086..8d9dbb24 100644
--- a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_TrueStudio/Boot/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_ll_usb.c
+++ b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_TrueStudio/Boot/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_ll_usb.c
@@ -94,6 +94,11 @@ HAL_StatusTypeDef USB_CoreInit(USB_OTG_GlobalTypeDef *USBx, USB_OTG_CfgTypeDef c
/* Init The ULPI Interface */
USBx->GUSBCFG &= ~(USB_OTG_GUSBCFG_TSDPS | USB_OTG_GUSBCFG_ULPIFSLS | USB_OTG_GUSBCFG_PHYSEL);
+#if defined(STM32F722xx) || defined(STM32F723xx) || defined(STM32F730xx) || defined(STM32F732xx) || defined(STM32F733xx)
+ /* Select ULPI Interface */
+ USBx->GUSBCFG |= USB_OTG_GUSBCFG_ULPI_UTMI_SEL;
+#endif /* defined(STM32F722xx) || defined(STM32F723xx) || defined(STM32F730xx) || defined(STM32F732xx) || defined(STM32F733xx) */
+
/* Select vbus source */
USBx->GUSBCFG &= ~(USB_OTG_GUSBCFG_ULPIEVBUSD | USB_OTG_GUSBCFG_ULPIEVBUSI);
if (cfg.use_external_vbus == 1U)
@@ -115,7 +120,7 @@ HAL_StatusTypeDef USB_CoreInit(USB_OTG_GlobalTypeDef *USBx, USB_OTG_CfgTypeDef c
USBx->GUSBCFG &= ~(USB_OTG_GUSBCFG_ULPIEVBUSD | USB_OTG_GUSBCFG_ULPIEVBUSI);
/* Select UTMI Interace */
- USBx->GUSBCFG &= ~ USB_OTG_GUSBCFG_ULPI_UTMI_SEL;
+ USBx->GUSBCFG &= ~USB_OTG_GUSBCFG_ULPI_UTMI_SEL;
USBx->GCCFG |= USB_OTG_GCCFG_PHYHSEN;
/* Enables control of a High Speed USB PHY */
@@ -158,10 +163,6 @@ HAL_StatusTypeDef USB_CoreInit(USB_OTG_GlobalTypeDef *USBx, USB_OTG_CfgTypeDef c
* @brief Set the USB turnaround time
* @param USBx USB Instance
* @param hclk: AHB clock frequency
- * @param speed device speed
- * This parameter can be one of these values:
- * @arg PCD_SPEED_HIGH: High speed mode
- * @arg PCD_SPEED_FULL: Full speed mode
* @retval USB turnaround time In PHY Clocks number
*/
HAL_StatusTypeDef USB_SetTurnaroundTime(USB_OTG_GlobalTypeDef *USBx,
@@ -173,7 +174,7 @@ HAL_StatusTypeDef USB_SetTurnaroundTime(USB_OTG_GlobalTypeDef *USBx,
used by application. In the low AHB frequency range it is used to stretch enough the USB response
time to IN tokens, the USB turnaround time, so to compensate for the longer AHB read access
latency to the Data FIFO */
- if (speed == PCD_SPEED_FULL)
+ if (speed == USBD_FS_SPEED)
{
if ((hclk >= 14200000U) && (hclk < 15000000U))
{
@@ -226,7 +227,7 @@ HAL_StatusTypeDef USB_SetTurnaroundTime(USB_OTG_GlobalTypeDef *USBx,
UsbTrd = 0x6U;
}
}
- else if (speed == PCD_SPEED_HIGH)
+ else if (speed == USBD_HS_SPEED)
{
UsbTrd = USBD_HS_TRDT_VALUE;
}
@@ -318,6 +319,8 @@ HAL_StatusTypeDef USB_DevInit(USB_OTG_GlobalTypeDef *USBx, USB_OTG_CfgTypeDef cf
/* VBUS Sensing setup */
if (cfg.vbus_sensing_enable == 0U)
{
+ USBx_DEVICE->DCTL |= USB_OTG_DCTL_SDIS;
+
/* Deactivate VBUS Sensing B */
USBx->GCCFG &= ~USB_OTG_GCCFG_VBDEN;
@@ -339,33 +342,33 @@ HAL_StatusTypeDef USB_DevInit(USB_OTG_GlobalTypeDef *USBx, USB_OTG_CfgTypeDef cf
if (cfg.phy_itface == USB_OTG_ULPI_PHY)
{
- if (cfg.speed == USB_OTG_SPEED_HIGH)
+ if (cfg.speed == USBD_HS_SPEED)
{
- /* Set High speed phy */
+ /* Set Core speed to High speed mode */
(void)USB_SetDevSpeed(USBx, USB_OTG_SPEED_HIGH);
}
else
{
- /* set High speed phy in Full speed mode */
+ /* Set Core speed to Full speed mode */
(void)USB_SetDevSpeed(USBx, USB_OTG_SPEED_HIGH_IN_FULL);
}
}
else if (cfg.phy_itface == USB_OTG_HS_EMBEDDED_PHY)
{
- if (cfg.speed == USB_OTG_SPEED_HIGH)
+ if (cfg.speed == USBD_HS_SPEED)
{
- /* Set High speed phy */
+ /* Set Core speed to High speed mode */
(void)USB_SetDevSpeed(USBx, USB_OTG_SPEED_HIGH);
}
else
{
- /* set High speed phy in Full speed mode */
+ /* Set Core speed to Full speed mode */
(void)USB_SetDevSpeed(USBx, USB_OTG_SPEED_HIGH_IN_FULL);
}
}
else
{
- /* Set Full speed phy */
+ /* Set Core speed to Full speed mode */
(void)USB_SetDevSpeed(USBx, USB_OTG_SPEED_FULL);
}
@@ -431,17 +434,6 @@ HAL_StatusTypeDef USB_DevInit(USB_OTG_GlobalTypeDef *USBx, USB_OTG_CfgTypeDef cf
USBx_DEVICE->DIEPMSK &= ~(USB_OTG_DIEPMSK_TXFURM);
- if (cfg.dma_enable == 1U)
- {
- /*Set threshold parameters */
- USBx_DEVICE->DTHRCTL = USB_OTG_DTHRCTL_TXTHRLEN_6 |
- USB_OTG_DTHRCTL_RXTHRLEN_6;
-
- USBx_DEVICE->DTHRCTL |= USB_OTG_DTHRCTL_RXTHREN |
- USB_OTG_DTHRCTL_ISOTHREN |
- USB_OTG_DTHRCTL_NONISOTHREN;
- }
-
/* Disable all interrupts. */
USBx->GINTMSK = 0U;
@@ -557,16 +549,16 @@ uint8_t USB_GetDevSpeed(USB_OTG_GlobalTypeDef *USBx)
if (DevEnumSpeed == DSTS_ENUMSPD_HS_PHY_30MHZ_OR_60MHZ)
{
- speed = PCD_SPEED_HIGH;
+ speed = USBD_HS_SPEED;
}
else if ((DevEnumSpeed == DSTS_ENUMSPD_FS_PHY_30MHZ_OR_60MHZ) ||
(DevEnumSpeed == DSTS_ENUMSPD_FS_PHY_48MHZ))
{
- speed = PCD_SPEED_FULL;
+ speed = USBD_FS_SPEED;
}
else
{
- speed = 0U;
+ speed = 0xFU;
}
return speed;
@@ -663,6 +655,12 @@ HAL_StatusTypeDef USB_DeactivateEndpoint(USB_OTG_GlobalTypeDef *USBx, USB_OTG_EP
/* Read DEPCTLn register */
if (ep->is_in == 1U)
{
+ if ((USBx_INEP(epnum)->DIEPCTL & USB_OTG_DIEPCTL_EPENA) == USB_OTG_DIEPCTL_EPENA)
+ {
+ USBx_INEP(epnum)->DIEPCTL |= USB_OTG_DIEPCTL_SNAK;
+ USBx_INEP(epnum)->DIEPCTL |= USB_OTG_DIEPCTL_EPDIS;
+ }
+
USBx_DEVICE->DEACHMSK &= ~(USB_OTG_DAINTMSK_IEPM & (uint32_t)(1UL << (ep->num & EP_ADDR_MSK)));
USBx_DEVICE->DAINTMSK &= ~(USB_OTG_DAINTMSK_IEPM & (uint32_t)(1UL << (ep->num & EP_ADDR_MSK)));
USBx_INEP(epnum)->DIEPCTL &= ~(USB_OTG_DIEPCTL_USBAEP |
@@ -673,6 +671,12 @@ HAL_StatusTypeDef USB_DeactivateEndpoint(USB_OTG_GlobalTypeDef *USBx, USB_OTG_EP
}
else
{
+ if ((USBx_OUTEP(epnum)->DOEPCTL & USB_OTG_DOEPCTL_EPENA) == USB_OTG_DOEPCTL_EPENA)
+ {
+ USBx_OUTEP(epnum)->DOEPCTL |= USB_OTG_DOEPCTL_SNAK;
+ USBx_OUTEP(epnum)->DOEPCTL |= USB_OTG_DOEPCTL_EPDIS;
+ }
+
USBx_DEVICE->DEACHMSK &= ~(USB_OTG_DAINTMSK_OEPM & ((uint32_t)(1UL << (ep->num & EP_ADDR_MSK)) << 16));
USBx_DEVICE->DAINTMSK &= ~(USB_OTG_DAINTMSK_OEPM & ((uint32_t)(1UL << (ep->num & EP_ADDR_MSK)) << 16));
USBx_OUTEP(epnum)->DOEPCTL &= ~(USB_OTG_DOEPCTL_USBAEP |
@@ -698,11 +702,23 @@ HAL_StatusTypeDef USB_DeactivateDedicatedEndpoint(USB_OTG_GlobalTypeDef *USBx, U
/* Read DEPCTLn register */
if (ep->is_in == 1U)
{
+ if ((USBx_INEP(epnum)->DIEPCTL & USB_OTG_DIEPCTL_EPENA) == USB_OTG_DIEPCTL_EPENA)
+ {
+ USBx_INEP(epnum)->DIEPCTL |= USB_OTG_DIEPCTL_SNAK;
+ USBx_INEP(epnum)->DIEPCTL |= USB_OTG_DIEPCTL_EPDIS;
+ }
+
USBx_INEP(epnum)->DIEPCTL &= ~ USB_OTG_DIEPCTL_USBAEP;
USBx_DEVICE->DAINTMSK &= ~(USB_OTG_DAINTMSK_IEPM & (uint32_t)(1UL << (ep->num & EP_ADDR_MSK)));
}
else
{
+ if ((USBx_OUTEP(epnum)->DOEPCTL & USB_OTG_DOEPCTL_EPENA) == USB_OTG_DOEPCTL_EPENA)
+ {
+ USBx_OUTEP(epnum)->DOEPCTL |= USB_OTG_DOEPCTL_SNAK;
+ USBx_OUTEP(epnum)->DOEPCTL |= USB_OTG_DOEPCTL_EPDIS;
+ }
+
USBx_OUTEP(epnum)->DOEPCTL &= ~USB_OTG_DOEPCTL_USBAEP;
USBx_DEVICE->DAINTMSK &= ~(USB_OTG_DAINTMSK_OEPM & ((uint32_t)(1UL << (ep->num & EP_ADDR_MSK)) << 16));
}
@@ -761,9 +777,27 @@ HAL_StatusTypeDef USB_EPStartXfer(USB_OTG_GlobalTypeDef *USBx, USB_OTG_EPTypeDef
{
USBx_INEP(epnum)->DIEPDMA = (uint32_t)(ep->dma_addr);
}
+
+ if (ep->type == EP_TYPE_ISOC)
+ {
+ if ((USBx_DEVICE->DSTS & (1U << 8)) == 0U)
+ {
+ USBx_INEP(epnum)->DIEPCTL |= USB_OTG_DIEPCTL_SODDFRM;
+ }
+ else
+ {
+ USBx_INEP(epnum)->DIEPCTL |= USB_OTG_DIEPCTL_SD0PID_SEVNFRM;
+ }
+ }
+
+ /* EP enable, IN data in FIFO */
+ USBx_INEP(epnum)->DIEPCTL |= (USB_OTG_DIEPCTL_CNAK | USB_OTG_DIEPCTL_EPENA);
}
else
{
+ /* EP enable, IN data in FIFO */
+ USBx_INEP(epnum)->DIEPCTL |= (USB_OTG_DIEPCTL_CNAK | USB_OTG_DIEPCTL_EPENA);
+
if (ep->type != EP_TYPE_ISOC)
{
/* Enable the Tx FIFO Empty Interrupt for this EP */
@@ -772,27 +806,20 @@ HAL_StatusTypeDef USB_EPStartXfer(USB_OTG_GlobalTypeDef *USBx, USB_OTG_EPTypeDef
USBx_DEVICE->DIEPEMPMSK |= 1UL << (ep->num & EP_ADDR_MSK);
}
}
- }
-
- if (ep->type == EP_TYPE_ISOC)
- {
- if ((USBx_DEVICE->DSTS & (1U << 8)) == 0U)
- {
- USBx_INEP(epnum)->DIEPCTL |= USB_OTG_DIEPCTL_SODDFRM;
- }
else
{
- USBx_INEP(epnum)->DIEPCTL |= USB_OTG_DIEPCTL_SD0PID_SEVNFRM;
+ if ((USBx_DEVICE->DSTS & (1U << 8)) == 0U)
+ {
+ USBx_INEP(epnum)->DIEPCTL |= USB_OTG_DIEPCTL_SODDFRM;
+ }
+ else
+ {
+ USBx_INEP(epnum)->DIEPCTL |= USB_OTG_DIEPCTL_SD0PID_SEVNFRM;
+ }
+
+ (void)USB_WritePacket(USBx, ep->xfer_buff, ep->num, (uint16_t)ep->xfer_len, dma);
}
}
-
- /* EP enable, IN data in FIFO */
- USBx_INEP(epnum)->DIEPCTL |= (USB_OTG_DIEPCTL_CNAK | USB_OTG_DIEPCTL_EPENA);
-
- if (ep->type == EP_TYPE_ISOC)
- {
- (void)USB_WritePacket(USBx, ep->xfer_buff, ep->num, (uint16_t)ep->xfer_len, dma);
- }
}
else /* OUT endpoint */
{
@@ -890,18 +917,21 @@ HAL_StatusTypeDef USB_EP0StartXfer(USB_OTG_GlobalTypeDef *USBx, USB_OTG_EPTypeDe
{
USBx_INEP(epnum)->DIEPDMA = (uint32_t)(ep->dma_addr);
}
+
+ /* EP enable, IN data in FIFO */
+ USBx_INEP(epnum)->DIEPCTL |= (USB_OTG_DIEPCTL_CNAK | USB_OTG_DIEPCTL_EPENA);
}
else
{
+ /* EP enable, IN data in FIFO */
+ USBx_INEP(epnum)->DIEPCTL |= (USB_OTG_DIEPCTL_CNAK | USB_OTG_DIEPCTL_EPENA);
+
/* Enable the Tx FIFO Empty Interrupt for this EP */
if (ep->xfer_len > 0U)
{
USBx_DEVICE->DIEPEMPMSK |= 1UL << (ep->num & EP_ADDR_MSK);
}
}
-
- /* EP enable, IN data in FIFO */
- USBx_INEP(epnum)->DIEPCTL |= (USB_OTG_DIEPCTL_CNAK | USB_OTG_DIEPCTL_EPENA);
}
else /* OUT endpoint */
{
@@ -959,7 +989,7 @@ HAL_StatusTypeDef USB_WritePacket(USB_OTG_GlobalTypeDef *USBx, uint8_t *src, uin
count32b = ((uint32_t)len + 3U) / 4U;
for (i = 0U; i < count32b; i++)
{
- USBx_DFIFO((uint32_t)ch_ep_num) = *((__packed uint32_t *)pSrc);
+ USBx_DFIFO((uint32_t)ch_ep_num) = __UNALIGNED_UINT32_READ(pSrc);
pSrc++;
}
}
@@ -968,15 +998,10 @@ HAL_StatusTypeDef USB_WritePacket(USB_OTG_GlobalTypeDef *USBx, uint8_t *src, uin
}
/**
- * @brief USB_ReadPacket : read a packet from the Tx FIFO associated
- * with the EP/channel
+ * @brief USB_ReadPacket : read a packet from the RX FIFO
* @param USBx Selected device
* @param dest source pointer
* @param len Number of bytes to read
- * @param dma USB dma enabled or disabled
- * This parameter can be one of these values:
- * 0 : DMA feature not used
- * 1 : DMA feature used
* @retval pointer to destination buffer
*/
void *USB_ReadPacket(USB_OTG_GlobalTypeDef *USBx, uint8_t *dest, uint16_t len)
@@ -988,7 +1013,7 @@ void *USB_ReadPacket(USB_OTG_GlobalTypeDef *USBx, uint8_t *dest, uint16_t len)
for (i = 0U; i < count32b; i++)
{
- *(__packed uint32_t *)pDest = USBx_DFIFO(0U);
+ __UNALIGNED_UINT32_WRITE(pDest, USBx_DFIFO(0U));
pDest++;
}
@@ -1260,13 +1285,9 @@ HAL_StatusTypeDef USB_ActivateSetup(USB_OTG_GlobalTypeDef *USBx)
{
uint32_t USBx_BASE = (uint32_t)USBx;
- /* Set the MPS of the IN EP based on the enumeration speed */
+ /* Set the MPS of the IN EP0 to 64 bytes */
USBx_INEP(0U)->DIEPCTL &= ~USB_OTG_DIEPCTL_MPSIZ;
- if ((USBx_DEVICE->DSTS & USB_OTG_DSTS_ENUMSPD) == DSTS_ENUMSPD_LS_PHY_6MHZ)
- {
- USBx_INEP(0U)->DIEPCTL |= 3U;
- }
USBx_DEVICE->DCTL |= USB_OTG_DCTL_CGINAK;
return HAL_OK;
@@ -1433,7 +1454,7 @@ HAL_StatusTypeDef USB_HostInit(USB_OTG_GlobalTypeDef *USBx, USB_OTG_CfgTypeDef c
if ((USBx->CID & (0x1U << 8)) != 0U)
{
- if (cfg.speed == USB_OTG_SPEED_FULL)
+ if (cfg.speed == USBH_FSLS_SPEED)
{
/* Force Device Enumeration to FS/LS mode only */
USBx_HOST->HCFG |= USB_OTG_HCFG_FSLSS;
@@ -1594,9 +1615,9 @@ HAL_StatusTypeDef USB_DriveVbus(USB_OTG_GlobalTypeDef *USBx, uint8_t state)
* @param USBx Selected device
* @retval speed : Host speed
* This parameter can be one of these values:
- * @arg USB_OTG_SPEED_HIGH: High speed mode
- * @arg USB_OTG_SPEED_FULL: Full speed mode
- * @arg USB_OTG_SPEED_LOW: Low speed mode
+ * @arg HCD_SPEED_HIGH: High speed mode
+ * @arg HCD_SPEED_FULL: Full speed mode
+ * @arg HCD_SPEED_LOW: Low speed mode
*/
uint32_t USB_GetHostSpeed(USB_OTG_GlobalTypeDef *USBx)
{
@@ -1774,7 +1795,7 @@ HAL_StatusTypeDef USB_HC_StartXfer(USB_OTG_GlobalTypeDef *USBx, USB_OTG_HCTypeDe
uint16_t num_packets;
uint16_t max_hc_pkt_count = 256U;
- if (((USBx->CID & (0x1U << 8)) != 0U) && (hc->speed == USB_OTG_SPEED_HIGH))
+ if (((USBx->CID & (0x1U << 8)) != 0U) && (hc->speed == USBH_HS_SPEED))
{
if ((dma == 0U) && (hc->do_ping == 1U))
{
@@ -2002,7 +2023,6 @@ HAL_StatusTypeDef USB_StopHost(USB_OTG_GlobalTypeDef *USBx)
uint32_t value;
uint32_t i;
-
(void)USB_DisableGlobalInt(USBx);
/* Flush FIFO */
@@ -2041,6 +2061,7 @@ HAL_StatusTypeDef USB_StopHost(USB_OTG_GlobalTypeDef *USBx)
/* Clear any pending Host interrupts */
USBx_HOST->HAINT = 0xFFFFFFFFU;
USBx->GINTSTS = 0xFFFFFFFFU;
+
(void)USB_EnableGlobalInt(USBx);
return HAL_OK;
diff --git a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_TrueStudio/Boot/lib/STM32_USB_Device_Library/Core/Inc/usbd_core.h b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_TrueStudio/Boot/lib/STM32_USB_Device_Library/Core/Inc/usbd_core.h
index 31ec3b02..988ba1ff 100644
--- a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_TrueStudio/Boot/lib/STM32_USB_Device_Library/Core/Inc/usbd_core.h
+++ b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_TrueStudio/Boot/lib/STM32_USB_Device_Library/Core/Inc/usbd_core.h
@@ -12,7 +12,7 @@
* This software component is licensed by ST under Ultimate Liberty license
* SLA0044, the "License"; You may not use this file except in compliance with
* the License. You may obtain a copy of the License at:
- * http://www.st.com/SLA0044
+ * www.st.com/SLA0044
*
******************************************************************************
*/
@@ -22,7 +22,7 @@
#define __USBD_CORE_H
#ifdef __cplusplus
- extern "C" {
+extern "C" {
#endif
/* Includes ------------------------------------------------------------------*/
@@ -84,58 +84,55 @@
*/
USBD_StatusTypeDef USBD_Init(USBD_HandleTypeDef *pdev, USBD_DescriptorsTypeDef *pdesc, uint8_t id);
USBD_StatusTypeDef USBD_DeInit(USBD_HandleTypeDef *pdev);
-USBD_StatusTypeDef USBD_Start (USBD_HandleTypeDef *pdev);
-USBD_StatusTypeDef USBD_Stop (USBD_HandleTypeDef *pdev);
+USBD_StatusTypeDef USBD_Start(USBD_HandleTypeDef *pdev);
+USBD_StatusTypeDef USBD_Stop(USBD_HandleTypeDef *pdev);
USBD_StatusTypeDef USBD_RegisterClass(USBD_HandleTypeDef *pdev, USBD_ClassTypeDef *pclass);
-USBD_StatusTypeDef USBD_RunTestMode (USBD_HandleTypeDef *pdev);
-USBD_StatusTypeDef USBD_SetClassConfig(USBD_HandleTypeDef *pdev, uint8_t cfgidx);
-USBD_StatusTypeDef USBD_ClrClassConfig(USBD_HandleTypeDef *pdev, uint8_t cfgidx);
+USBD_StatusTypeDef USBD_RunTestMode(USBD_HandleTypeDef *pdev);
+USBD_StatusTypeDef USBD_SetClassConfig(USBD_HandleTypeDef *pdev, uint8_t cfgidx);
+USBD_StatusTypeDef USBD_ClrClassConfig(USBD_HandleTypeDef *pdev, uint8_t cfgidx);
USBD_StatusTypeDef USBD_LL_SetupStage(USBD_HandleTypeDef *pdev, uint8_t *psetup);
-USBD_StatusTypeDef USBD_LL_DataOutStage(USBD_HandleTypeDef *pdev , uint8_t epnum, uint8_t *pdata);
-USBD_StatusTypeDef USBD_LL_DataInStage(USBD_HandleTypeDef *pdev , uint8_t epnum, uint8_t *pdata);
+USBD_StatusTypeDef USBD_LL_DataOutStage(USBD_HandleTypeDef *pdev, uint8_t epnum, uint8_t *pdata);
+USBD_StatusTypeDef USBD_LL_DataInStage(USBD_HandleTypeDef *pdev, uint8_t epnum, uint8_t *pdata);
-USBD_StatusTypeDef USBD_LL_Reset(USBD_HandleTypeDef *pdev);
-USBD_StatusTypeDef USBD_LL_SetSpeed(USBD_HandleTypeDef *pdev, USBD_SpeedTypeDef speed);
-USBD_StatusTypeDef USBD_LL_Suspend(USBD_HandleTypeDef *pdev);
-USBD_StatusTypeDef USBD_LL_Resume(USBD_HandleTypeDef *pdev);
+USBD_StatusTypeDef USBD_LL_Reset(USBD_HandleTypeDef *pdev);
+USBD_StatusTypeDef USBD_LL_SetSpeed(USBD_HandleTypeDef *pdev, USBD_SpeedTypeDef speed);
+USBD_StatusTypeDef USBD_LL_Suspend(USBD_HandleTypeDef *pdev);
+USBD_StatusTypeDef USBD_LL_Resume(USBD_HandleTypeDef *pdev);
USBD_StatusTypeDef USBD_LL_SOF(USBD_HandleTypeDef *pdev);
-USBD_StatusTypeDef USBD_LL_IsoINIncomplete(USBD_HandleTypeDef *pdev, uint8_t epnum);
-USBD_StatusTypeDef USBD_LL_IsoOUTIncomplete(USBD_HandleTypeDef *pdev, uint8_t epnum);
+USBD_StatusTypeDef USBD_LL_IsoINIncomplete(USBD_HandleTypeDef *pdev, uint8_t epnum);
+USBD_StatusTypeDef USBD_LL_IsoOUTIncomplete(USBD_HandleTypeDef *pdev, uint8_t epnum);
-USBD_StatusTypeDef USBD_LL_DevConnected(USBD_HandleTypeDef *pdev);
-USBD_StatusTypeDef USBD_LL_DevDisconnected(USBD_HandleTypeDef *pdev);
+USBD_StatusTypeDef USBD_LL_DevConnected(USBD_HandleTypeDef *pdev);
+USBD_StatusTypeDef USBD_LL_DevDisconnected(USBD_HandleTypeDef *pdev);
/* USBD Low Level Driver */
-USBD_StatusTypeDef USBD_LL_Init (USBD_HandleTypeDef *pdev);
-USBD_StatusTypeDef USBD_LL_DeInit (USBD_HandleTypeDef *pdev);
-USBD_StatusTypeDef USBD_LL_Start(USBD_HandleTypeDef *pdev);
-USBD_StatusTypeDef USBD_LL_Stop (USBD_HandleTypeDef *pdev);
-USBD_StatusTypeDef USBD_LL_OpenEP (USBD_HandleTypeDef *pdev,
- uint8_t ep_addr,
- uint8_t ep_type,
- uint16_t ep_mps);
+USBD_StatusTypeDef USBD_LL_Init(USBD_HandleTypeDef *pdev);
+USBD_StatusTypeDef USBD_LL_DeInit(USBD_HandleTypeDef *pdev);
+USBD_StatusTypeDef USBD_LL_Start(USBD_HandleTypeDef *pdev);
+USBD_StatusTypeDef USBD_LL_Stop(USBD_HandleTypeDef *pdev);
-USBD_StatusTypeDef USBD_LL_CloseEP (USBD_HandleTypeDef *pdev, uint8_t ep_addr);
-USBD_StatusTypeDef USBD_LL_FlushEP (USBD_HandleTypeDef *pdev, uint8_t ep_addr);
-USBD_StatusTypeDef USBD_LL_StallEP (USBD_HandleTypeDef *pdev, uint8_t ep_addr);
-USBD_StatusTypeDef USBD_LL_ClearStallEP (USBD_HandleTypeDef *pdev, uint8_t ep_addr);
-uint8_t USBD_LL_IsStallEP (USBD_HandleTypeDef *pdev, uint8_t ep_addr);
-USBD_StatusTypeDef USBD_LL_SetUSBAddress (USBD_HandleTypeDef *pdev, uint8_t dev_addr);
-USBD_StatusTypeDef USBD_LL_Transmit (USBD_HandleTypeDef *pdev,
- uint8_t ep_addr,
- uint8_t *pbuf,
- uint16_t size);
+USBD_StatusTypeDef USBD_LL_OpenEP(USBD_HandleTypeDef *pdev, uint8_t ep_addr,
+ uint8_t ep_type, uint16_t ep_mps);
-USBD_StatusTypeDef USBD_LL_PrepareReceive(USBD_HandleTypeDef *pdev,
- uint8_t ep_addr,
- uint8_t *pbuf,
- uint16_t size);
+USBD_StatusTypeDef USBD_LL_CloseEP(USBD_HandleTypeDef *pdev, uint8_t ep_addr);
+USBD_StatusTypeDef USBD_LL_FlushEP(USBD_HandleTypeDef *pdev, uint8_t ep_addr);
+USBD_StatusTypeDef USBD_LL_StallEP(USBD_HandleTypeDef *pdev, uint8_t ep_addr);
+USBD_StatusTypeDef USBD_LL_ClearStallEP(USBD_HandleTypeDef *pdev, uint8_t ep_addr);
+USBD_StatusTypeDef USBD_LL_SetUSBAddress(USBD_HandleTypeDef *pdev, uint8_t dev_addr);
-uint32_t USBD_LL_GetRxDataSize (USBD_HandleTypeDef *pdev, uint8_t ep_addr);
-void USBD_LL_Delay (uint32_t Delay);
+USBD_StatusTypeDef USBD_LL_Transmit(USBD_HandleTypeDef *pdev, uint8_t ep_addr,
+ uint8_t *pbuf, uint32_t size);
+
+USBD_StatusTypeDef USBD_LL_PrepareReceive(USBD_HandleTypeDef *pdev, uint8_t ep_addr,
+ uint8_t *pbuf, uint32_t size);
+
+uint8_t USBD_LL_IsStallEP(USBD_HandleTypeDef *pdev, uint8_t ep_addr);
+uint32_t USBD_LL_GetRxDataSize(USBD_HandleTypeDef *pdev, uint8_t ep_addr);
+
+void USBD_LL_Delay(uint32_t Delay);
/**
* @}
diff --git a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_TrueStudio/Boot/lib/STM32_USB_Device_Library/Core/Inc/usbd_ctlreq.h b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_TrueStudio/Boot/lib/STM32_USB_Device_Library/Core/Inc/usbd_ctlreq.h
index 9fa2873a..a4bfc44b 100644
--- a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_TrueStudio/Boot/lib/STM32_USB_Device_Library/Core/Inc/usbd_ctlreq.h
+++ b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_TrueStudio/Boot/lib/STM32_USB_Device_Library/Core/Inc/usbd_ctlreq.h
@@ -12,7 +12,7 @@
* This software component is licensed by ST under Ultimate Liberty license
* SLA0044, the "License"; You may not use this file except in compliance with
* the License. You may obtain a copy of the License at:
- * http://www.st.com/SLA0044
+ * www.st.com/SLA0044
*
******************************************************************************
*/
@@ -22,7 +22,7 @@
#define __USB_REQUEST_H
#ifdef __cplusplus
- extern "C" {
+extern "C" {
#endif
/* Includes ------------------------------------------------------------------*/
@@ -73,16 +73,14 @@
* @{
*/
-USBD_StatusTypeDef USBD_StdDevReq (USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req);
-USBD_StatusTypeDef USBD_StdItfReq (USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req);
-USBD_StatusTypeDef USBD_StdEPReq (USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req);
+USBD_StatusTypeDef USBD_StdDevReq(USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req);
+USBD_StatusTypeDef USBD_StdItfReq(USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req);
+USBD_StatusTypeDef USBD_StdEPReq(USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req);
+void USBD_CtlError(USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req);
+void USBD_ParseSetupRequest(USBD_SetupReqTypedef *req, uint8_t *pdata);
+void USBD_GetString(uint8_t *desc, uint8_t *unicode, uint16_t *len);
-void USBD_CtlError (USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req);
-
-void USBD_ParseSetupRequest (USBD_SetupReqTypedef *req, uint8_t *pdata);
-
-void USBD_GetString (uint8_t *desc, uint8_t *unicode, uint16_t *len);
/**
* @}
*/
diff --git a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_TrueStudio/Boot/lib/STM32_USB_Device_Library/Core/Inc/usbd_def.h b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_TrueStudio/Boot/lib/STM32_USB_Device_Library/Core/Inc/usbd_def.h
index b1e7968d..8219140f 100644
--- a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_TrueStudio/Boot/lib/STM32_USB_Device_Library/Core/Inc/usbd_def.h
+++ b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_TrueStudio/Boot/lib/STM32_USB_Device_Library/Core/Inc/usbd_def.h
@@ -12,7 +12,7 @@
* This software component is licensed by ST under Ultimate Liberty license
* SLA0044, the "License"; You may not use this file except in compliance with
* the License. You may obtain a copy of the License at:
- * http://www.st.com/SLA0044
+ * www.st.com/SLA0044
*
******************************************************************************
*/
@@ -22,7 +22,7 @@
#define __USBD_DEF_H
#ifdef __cplusplus
- extern "C" {
+extern "C" {
#endif
/* Includes ------------------------------------------------------------------*/
@@ -61,9 +61,13 @@
#define USBD_SELF_POWERED 1U
#endif /*USBD_SELF_POWERED */
-#ifndef USBD_SUPPORT_USER_STRING
-#define USBD_SUPPORT_USER_STRING 0U
-#endif /* USBD_SUPPORT_USER_STRING */
+#ifndef USBD_SUPPORT_USER_STRING_DESC
+#define USBD_SUPPORT_USER_STRING_DESC 0U
+#endif /* USBD_SUPPORT_USER_STRING_DESC */
+
+#ifndef USBD_CLASS_USER_STRING_DESC
+#define USBD_CLASS_USER_STRING_DESC 0U
+#endif /* USBD_CLASS_USER_STRING_DESC */
#define USB_LEN_DEV_QUALIFIER_DESC 0x0AU
#define USB_LEN_DEV_DESC 0x12U
@@ -158,37 +162,58 @@
typedef struct usb_setup_req
{
+ uint8_t bmRequest;
+ uint8_t bRequest;
+ uint16_t wValue;
+ uint16_t wIndex;
+ uint16_t wLength;
+} USBD_SetupReqTypedef;
+
+typedef struct
+{
+ uint8_t bLength;
+ uint8_t bDescriptorType;
+ uint8_t wDescriptorLengthLow;
+ uint8_t wDescriptorLengthHigh;
+ uint8_t bNumInterfaces;
+ uint8_t bConfigurationValue;
+ uint8_t iConfiguration;
+ uint8_t bmAttributes;
+ uint8_t bMaxPower;
+} USBD_ConfigDescTypedef;
+
+typedef struct
+{
+ uint8_t bLength;
+ uint8_t bDescriptorType;
+ uint16_t wTotalLength;
+ uint8_t bNumDeviceCaps;
+} USBD_BosDescTypedef;
- uint8_t bmRequest;
- uint8_t bRequest;
- uint16_t wValue;
- uint16_t wIndex;
- uint16_t wLength;
-}USBD_SetupReqTypedef;
struct _USBD_HandleTypeDef;
typedef struct _Device_cb
{
- uint8_t (*Init) (struct _USBD_HandleTypeDef *pdev , uint8_t cfgidx);
- uint8_t (*DeInit) (struct _USBD_HandleTypeDef *pdev , uint8_t cfgidx);
- /* Control Endpoints*/
- uint8_t (*Setup) (struct _USBD_HandleTypeDef *pdev , USBD_SetupReqTypedef *req);
- uint8_t (*EP0_TxSent) (struct _USBD_HandleTypeDef *pdev );
- uint8_t (*EP0_RxReady) (struct _USBD_HandleTypeDef *pdev );
+ uint8_t (*Init)(struct _USBD_HandleTypeDef *pdev, uint8_t cfgidx);
+ uint8_t (*DeInit)(struct _USBD_HandleTypeDef *pdev, uint8_t cfgidx);
+ /* Control Endpoints*/
+ uint8_t (*Setup)(struct _USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req);
+ uint8_t (*EP0_TxSent)(struct _USBD_HandleTypeDef *pdev);
+ uint8_t (*EP0_RxReady)(struct _USBD_HandleTypeDef *pdev);
/* Class Specific Endpoints*/
- uint8_t (*DataIn) (struct _USBD_HandleTypeDef *pdev , uint8_t epnum);
- uint8_t (*DataOut) (struct _USBD_HandleTypeDef *pdev , uint8_t epnum);
- uint8_t (*SOF) (struct _USBD_HandleTypeDef *pdev);
- uint8_t (*IsoINIncomplete) (struct _USBD_HandleTypeDef *pdev , uint8_t epnum);
- uint8_t (*IsoOUTIncomplete) (struct _USBD_HandleTypeDef *pdev , uint8_t epnum);
+ uint8_t (*DataIn)(struct _USBD_HandleTypeDef *pdev, uint8_t epnum);
+ uint8_t (*DataOut)(struct _USBD_HandleTypeDef *pdev, uint8_t epnum);
+ uint8_t (*SOF)(struct _USBD_HandleTypeDef *pdev);
+ uint8_t (*IsoINIncomplete)(struct _USBD_HandleTypeDef *pdev, uint8_t epnum);
+ uint8_t (*IsoOUTIncomplete)(struct _USBD_HandleTypeDef *pdev, uint8_t epnum);
uint8_t *(*GetHSConfigDescriptor)(uint16_t *length);
uint8_t *(*GetFSConfigDescriptor)(uint16_t *length);
uint8_t *(*GetOtherSpeedConfigDescriptor)(uint16_t *length);
uint8_t *(*GetDeviceQualifierDescriptor)(uint16_t *length);
-#if (USBD_SUPPORT_USER_STRING == 1U)
- uint8_t *(*GetUsrStrDescriptor)(struct _USBD_HandleTypeDef *pdev ,uint8_t index, uint16_t *length);
+#if (USBD_SUPPORT_USER_STRING_DESC == 1U)
+ uint8_t *(*GetUsrStrDescriptor)(struct _USBD_HandleTypeDef *pdev, uint8_t index, uint16_t *length);
#endif
} USBD_ClassTypeDef;
@@ -199,38 +224,44 @@ typedef enum
USBD_SPEED_HIGH = 0U,
USBD_SPEED_FULL = 1U,
USBD_SPEED_LOW = 2U,
-}USBD_SpeedTypeDef;
+} USBD_SpeedTypeDef;
/* Following USB Device status */
-typedef enum {
- USBD_OK = 0U,
+typedef enum
+{
+ USBD_OK = 0U,
USBD_BUSY,
+ USBD_EMEM,
USBD_FAIL,
-}USBD_StatusTypeDef;
+} USBD_StatusTypeDef;
/* USB Device descriptors structure */
typedef struct
{
- uint8_t *(*GetDeviceDescriptor)( USBD_SpeedTypeDef speed , uint16_t *length);
- uint8_t *(*GetLangIDStrDescriptor)( USBD_SpeedTypeDef speed , uint16_t *length);
- uint8_t *(*GetManufacturerStrDescriptor)( USBD_SpeedTypeDef speed , uint16_t *length);
- uint8_t *(*GetProductStrDescriptor)( USBD_SpeedTypeDef speed , uint16_t *length);
- uint8_t *(*GetSerialStrDescriptor)( USBD_SpeedTypeDef speed , uint16_t *length);
- uint8_t *(*GetConfigurationStrDescriptor)( USBD_SpeedTypeDef speed , uint16_t *length);
- uint8_t *(*GetInterfaceStrDescriptor)( USBD_SpeedTypeDef speed , uint16_t *length);
-#if (USBD_LPM_ENABLED == 1U)
- uint8_t *(*GetBOSDescriptor)( USBD_SpeedTypeDef speed , uint16_t *length);
+ uint8_t *(*GetDeviceDescriptor)(USBD_SpeedTypeDef speed, uint16_t *length);
+ uint8_t *(*GetLangIDStrDescriptor)(USBD_SpeedTypeDef speed, uint16_t *length);
+ uint8_t *(*GetManufacturerStrDescriptor)(USBD_SpeedTypeDef speed, uint16_t *length);
+ uint8_t *(*GetProductStrDescriptor)(USBD_SpeedTypeDef speed, uint16_t *length);
+ uint8_t *(*GetSerialStrDescriptor)(USBD_SpeedTypeDef speed, uint16_t *length);
+ uint8_t *(*GetConfigurationStrDescriptor)(USBD_SpeedTypeDef speed, uint16_t *length);
+ uint8_t *(*GetInterfaceStrDescriptor)(USBD_SpeedTypeDef speed, uint16_t *length);
+#if (USBD_CLASS_USER_STRING_DESC == 1)
+ uint8_t *(*GetUserStrDescriptor)(USBD_SpeedTypeDef speed, uint8_t idx, uint16_t *length);
+#endif
+#if ((USBD_LPM_ENABLED == 1U) || (USBD_CLASS_BOS_ENABLED == 1))
+ uint8_t *(*GetBOSDescriptor)(USBD_SpeedTypeDef speed, uint16_t *length);
#endif
} USBD_DescriptorsTypeDef;
/* USB Device handle structure */
typedef struct
{
- uint32_t status;
- uint32_t is_used;
- uint32_t total_length;
- uint32_t rem_length;
- uint32_t maxpacket;
+ uint32_t status;
+ uint32_t total_length;
+ uint32_t rem_length;
+ uint32_t maxpacket;
+ uint16_t is_used;
+ uint16_t bInterval;
} USBD_EndpointTypeDef;
/* USB Device handle structure */
@@ -241,8 +272,8 @@ typedef struct _USBD_HandleTypeDef
uint32_t dev_default_config;
uint32_t dev_config_status;
USBD_SpeedTypeDef dev_speed;
- USBD_EndpointTypeDef ep_in[15];
- USBD_EndpointTypeDef ep_out[15];
+ USBD_EndpointTypeDef ep_in[16];
+ USBD_EndpointTypeDef ep_out[16];
uint32_t ep0_state;
uint32_t ep0_data_len;
uint8_t dev_state;
@@ -251,6 +282,7 @@ typedef struct _USBD_HandleTypeDef
uint8_t dev_connection_status;
uint8_t dev_test_mode;
uint32_t dev_remote_wakeup;
+ uint8_t ConfIdx;
USBD_SetupReqTypedef request;
USBD_DescriptorsTypeDef *pDesc;
@@ -258,6 +290,8 @@ typedef struct _USBD_HandleTypeDef
void *pClassData;
void *pUserData;
void *pData;
+ void *pBosDesc;
+ void *pConfDesc;
} USBD_HandleTypeDef;
/**
@@ -269,40 +303,57 @@ typedef struct _USBD_HandleTypeDef
/** @defgroup USBD_DEF_Exported_Macros
* @{
*/
-#define SWAPBYTE(addr) (((uint16_t)(*((uint8_t *)(addr)))) + \
- (((uint16_t)(*(((uint8_t *)(addr)) + 1U))) << 8U))
+__STATIC_INLINE uint16_t SWAPBYTE(uint8_t *addr)
+{
+ uint16_t _SwapVal, _Byte1, _Byte2;
+ uint8_t *_pbuff = addr;
-#define LOBYTE(x) ((uint8_t)(x & 0x00FFU))
-#define HIBYTE(x) ((uint8_t)((x & 0xFF00U) >> 8U))
+ _Byte1 = *(uint8_t *)_pbuff;
+ _pbuff++;
+ _Byte2 = *(uint8_t *)_pbuff;
+
+ _SwapVal = (_Byte2 << 8) | _Byte1;
+
+ return _SwapVal;
+}
+
+#define LOBYTE(x) ((uint8_t)((x) & 0x00FFU))
+#define HIBYTE(x) ((uint8_t)(((x) & 0xFF00U) >> 8U))
#define MIN(a, b) (((a) < (b)) ? (a) : (b))
#define MAX(a, b) (((a) > (b)) ? (a) : (b))
#if defined ( __GNUC__ )
- #ifndef __weak
- #define __weak __attribute__((weak))
- #endif /* __weak */
- #ifndef __packed
- #define __packed __attribute__((__packed__))
- #endif /* __packed */
+#ifndef __weak
+#define __weak __attribute__((weak))
+#endif /* __weak */
+#ifndef __packed
+#define __packed __attribute__((__packed__))
+#endif /* __packed */
#endif /* __GNUC__ */
/* In HS mode and when the DMA is used, all variables and data structures dealing
with the DMA during the transaction process should be 4-bytes aligned */
-#if defined (__GNUC__) /* GNU Compiler */
- #define __ALIGN_END __attribute__ ((aligned (4)))
- #define __ALIGN_BEGIN
+#if defined ( __GNUC__ ) && !defined (__CC_ARM) /* GNU Compiler */
+#ifndef __ALIGN_END
+#define __ALIGN_END __attribute__ ((aligned (4U)))
+#endif /* __ALIGN_END */
+#ifndef __ALIGN_BEGIN
+#define __ALIGN_BEGIN
+#endif /* __ALIGN_BEGIN */
#else
- #define __ALIGN_END
- #if defined (__CC_ARM) /* ARM Compiler */
- #define __ALIGN_BEGIN __align(4)
- #elif defined (__ICCARM__) /* IAR Compiler */
- #define __ALIGN_BEGIN
- #elif defined (__TASKING__) /* TASKING Compiler */
- #define __ALIGN_BEGIN __align(4)
- #endif /* __CC_ARM */
+#ifndef __ALIGN_END
+#define __ALIGN_END
+#endif /* __ALIGN_END */
+#ifndef __ALIGN_BEGIN
+#if defined (__CC_ARM) /* ARM Compiler */
+#define __ALIGN_BEGIN __align(4U)
+#elif defined (__ICCARM__) /* IAR Compiler */
+#define __ALIGN_BEGIN
+#endif /* __CC_ARM */
+#endif /* __ALIGN_BEGIN */
#endif /* __GNUC__ */
diff --git a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_TrueStudio/Boot/lib/STM32_USB_Device_Library/Core/Inc/usbd_ioreq.h b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_TrueStudio/Boot/lib/STM32_USB_Device_Library/Core/Inc/usbd_ioreq.h
index 0552e00f..8f077c79 100644
--- a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_TrueStudio/Boot/lib/STM32_USB_Device_Library/Core/Inc/usbd_ioreq.h
+++ b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_TrueStudio/Boot/lib/STM32_USB_Device_Library/Core/Inc/usbd_ioreq.h
@@ -12,7 +12,7 @@
* This software component is licensed by ST under Ultimate Liberty license
* SLA0044, the "License"; You may not use this file except in compliance with
* the License. You may obtain a copy of the License at:
- * http://www.st.com/SLA0044
+ * www.st.com/SLA0044
*
******************************************************************************
*/
@@ -22,7 +22,7 @@
#define __USBD_IOREQ_H
#ifdef __cplusplus
- extern "C" {
+extern "C" {
#endif
/* Includes ------------------------------------------------------------------*/
@@ -77,27 +77,22 @@
* @{
*/
-USBD_StatusTypeDef USBD_CtlSendData (USBD_HandleTypeDef *pdev,
- uint8_t *pbuf,
- uint16_t len);
+USBD_StatusTypeDef USBD_CtlSendData(USBD_HandleTypeDef *pdev,
+ uint8_t *pbuf, uint32_t len);
-USBD_StatusTypeDef USBD_CtlContinueSendData (USBD_HandleTypeDef *pdev,
- uint8_t *pbuf,
- uint16_t len);
+USBD_StatusTypeDef USBD_CtlContinueSendData(USBD_HandleTypeDef *pdev,
+ uint8_t *pbuf, uint32_t len);
-USBD_StatusTypeDef USBD_CtlPrepareRx (USBD_HandleTypeDef *pdev,
- uint8_t *pbuf,
- uint16_t len);
+USBD_StatusTypeDef USBD_CtlPrepareRx(USBD_HandleTypeDef *pdev,
+ uint8_t *pbuf, uint32_t len);
-USBD_StatusTypeDef USBD_CtlContinueRx (USBD_HandleTypeDef *pdev,
- uint8_t *pbuf,
- uint16_t len);
+USBD_StatusTypeDef USBD_CtlContinueRx(USBD_HandleTypeDef *pdev,
+ uint8_t *pbuf, uint32_t len);
-USBD_StatusTypeDef USBD_CtlSendStatus (USBD_HandleTypeDef *pdev);
+USBD_StatusTypeDef USBD_CtlSendStatus(USBD_HandleTypeDef *pdev);
+USBD_StatusTypeDef USBD_CtlReceiveStatus(USBD_HandleTypeDef *pdev);
-USBD_StatusTypeDef USBD_CtlReceiveStatus (USBD_HandleTypeDef *pdev);
-
-uint32_t USBD_GetRxCount (USBD_HandleTypeDef *pdev, uint8_t ep_addr);
+uint32_t USBD_GetRxCount(USBD_HandleTypeDef *pdev, uint8_t ep_addr);
/**
* @}
diff --git a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_TrueStudio/Boot/lib/STM32_USB_Device_Library/Core/Src/usbd_core.c b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_TrueStudio/Boot/lib/STM32_USB_Device_Library/Core/Src/usbd_core.c
index 1cc9b19f..e3db03fd 100644
--- a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_TrueStudio/Boot/lib/STM32_USB_Device_Library/Core/Src/usbd_core.c
+++ b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_TrueStudio/Boot/lib/STM32_USB_Device_Library/Core/Src/usbd_core.c
@@ -12,7 +12,7 @@
* This software component is licensed by ST under Ultimate Liberty license
* SLA0044, the "License"; You may not use this file except in compliance with
* the License. You may obtain a copy of the License at:
- * http://www.st.com/SLA0044
+ * www.st.com/SLA0044
*
******************************************************************************
*/
@@ -33,6 +33,7 @@
/** @defgroup USBD_CORE_Private_TypesDefinitions
* @{
*/
+
/**
* @}
*/
@@ -50,13 +51,12 @@
/** @defgroup USBD_CORE_Private_Macros
* @{
*/
+
/**
* @}
*/
-
-
/** @defgroup USBD_CORE_Private_FunctionPrototypes
* @{
*/
@@ -73,6 +73,7 @@
* @}
*/
+
/** @defgroup USBD_CORE_Private_Functions
* @{
*/
@@ -85,10 +86,13 @@
* @param id: Low level core index
* @retval None
*/
-USBD_StatusTypeDef USBD_Init(USBD_HandleTypeDef *pdev, USBD_DescriptorsTypeDef *pdesc, uint8_t id)
+USBD_StatusTypeDef USBD_Init(USBD_HandleTypeDef *pdev,
+ USBD_DescriptorsTypeDef *pdesc, uint8_t id)
{
+ USBD_StatusTypeDef ret;
+
/* Check whether the USB Host handle is valid */
- if(pdev == NULL)
+ if (pdev == NULL)
{
#if (USBD_DEBUG_LEVEL > 1U)
USBD_ErrLog("Invalid Device handle");
@@ -96,25 +100,31 @@ USBD_StatusTypeDef USBD_Init(USBD_HandleTypeDef *pdev, USBD_DescriptorsTypeDef *
return USBD_FAIL;
}
- /* Unlink previous class*/
- if(pdev->pClass != NULL)
+ /* Unlink previous class */
+ if (pdev->pClass != NULL)
{
pdev->pClass = NULL;
}
+ if (pdev->pConfDesc != NULL)
+ {
+ pdev->pConfDesc = NULL;
+ }
+
/* Assign USBD Descriptors */
- if(pdesc != NULL)
+ if (pdesc != NULL)
{
pdev->pDesc = pdesc;
}
/* Set Device initial State */
- pdev->dev_state = USBD_STATE_DEFAULT;
+ pdev->dev_state = USBD_STATE_DEFAULT;
pdev->id = id;
- /* Initialize low level driver */
- USBD_LL_Init(pdev);
- return USBD_OK;
+ /* Initialize low level driver */
+ ret = USBD_LL_Init(pdev);
+
+ return ret;
}
/**
@@ -125,19 +135,34 @@ USBD_StatusTypeDef USBD_Init(USBD_HandleTypeDef *pdev, USBD_DescriptorsTypeDef *
*/
USBD_StatusTypeDef USBD_DeInit(USBD_HandleTypeDef *pdev)
{
+ USBD_StatusTypeDef ret;
+
/* Set Default State */
- pdev->dev_state = USBD_STATE_DEFAULT;
+ pdev->dev_state = USBD_STATE_DEFAULT;
/* Free Class Resources */
- pdev->pClass->DeInit(pdev, (uint8_t)pdev->dev_config);
+ if (pdev->pClass != NULL)
+ {
+ pdev->pClass->DeInit(pdev, (uint8_t)pdev->dev_config);
+ }
- /* Stop the low level driver */
- USBD_LL_Stop(pdev);
+ if (pdev->pConfDesc != NULL)
+ {
+ pdev->pConfDesc = NULL;
+ }
+
+ /* Stop the low level driver */
+ ret = USBD_LL_Stop(pdev);
+
+ if (ret != USBD_OK)
+ {
+ return ret;
+ }
/* Initialize low level driver */
- USBD_LL_DeInit(pdev);
+ ret = USBD_LL_DeInit(pdev);
- return USBD_OK;
+ return ret;
}
/**
@@ -147,24 +172,30 @@ USBD_StatusTypeDef USBD_DeInit(USBD_HandleTypeDef *pdev)
* @param pclass: Class handle
* @retval USBD Status
*/
-USBD_StatusTypeDef USBD_RegisterClass(USBD_HandleTypeDef *pdev, USBD_ClassTypeDef *pclass)
+USBD_StatusTypeDef USBD_RegisterClass(USBD_HandleTypeDef *pdev, USBD_ClassTypeDef *pclass)
{
- USBD_StatusTypeDef status = USBD_OK;
- if(pclass != 0)
- {
- /* link the class to the USB Device handle */
- pdev->pClass = pclass;
- status = USBD_OK;
- }
- else
+ uint16_t len = 0U;
+
+ if (pclass == NULL)
{
#if (USBD_DEBUG_LEVEL > 1U)
USBD_ErrLog("Invalid Class handle");
#endif
- status = USBD_FAIL;
+ return USBD_FAIL;
}
- return status;
+ /* link the class to the USB Device handle */
+ pdev->pClass = pclass;
+
+ /* Get Device Configuration Descriptor */
+#ifdef USE_USB_FS
+ pdev->pConfDesc = (void *)pdev->pClass->GetFSConfigDescriptor(&len);
+#else /* USE_USB_HS */
+ pdev->pConfDesc = (void *)pdev->pClass->GetHSConfigDescriptor(&len);
+#endif /* USE_USB_FS */
+
+
+ return USBD_OK;
}
/**
@@ -173,13 +204,10 @@ USBD_StatusTypeDef USBD_RegisterClass(USBD_HandleTypeDef *pdev, USBD_ClassTypeD
* @param pdev: Device Handle
* @retval USBD Status
*/
-USBD_StatusTypeDef USBD_Start (USBD_HandleTypeDef *pdev)
+USBD_StatusTypeDef USBD_Start(USBD_HandleTypeDef *pdev)
{
-
/* Start the low level driver */
- USBD_LL_Start(pdev);
-
- return USBD_OK;
+ return USBD_LL_Start(pdev);
}
/**
@@ -188,15 +216,25 @@ USBD_StatusTypeDef USBD_Start (USBD_HandleTypeDef *pdev)
* @param pdev: Device Handle
* @retval USBD Status
*/
-USBD_StatusTypeDef USBD_Stop (USBD_HandleTypeDef *pdev)
+USBD_StatusTypeDef USBD_Stop(USBD_HandleTypeDef *pdev)
{
+ USBD_StatusTypeDef ret;
+
/* Free Class Resources */
- pdev->pClass->DeInit(pdev, (uint8_t)pdev->dev_config);
+ if (pdev->pClass != NULL)
+ {
+ pdev->pClass->DeInit(pdev, (uint8_t)pdev->dev_config);
+ }
- /* Stop the low level driver */
- USBD_LL_Stop(pdev);
+ if (pdev->pConfDesc != NULL)
+ {
+ pdev->pConfDesc = NULL;
+ }
- return USBD_OK;
+ /* Stop the low level driver */
+ ret = USBD_LL_Stop(pdev);
+
+ return ret;
}
/**
@@ -205,7 +243,7 @@ USBD_StatusTypeDef USBD_Stop (USBD_HandleTypeDef *pdev)
* @param pdev: device instance
* @retval status
*/
-USBD_StatusTypeDef USBD_RunTestMode (USBD_HandleTypeDef *pdev)
+USBD_StatusTypeDef USBD_RunTestMode(USBD_HandleTypeDef *pdev)
{
/* Prevent unused argument compilation warning */
UNUSED(pdev);
@@ -221,17 +259,14 @@ USBD_StatusTypeDef USBD_RunTestMode (USBD_HandleTypeDef *pdev)
* @retval status
*/
-USBD_StatusTypeDef USBD_SetClassConfig(USBD_HandleTypeDef *pdev, uint8_t cfgidx)
+USBD_StatusTypeDef USBD_SetClassConfig(USBD_HandleTypeDef *pdev, uint8_t cfgidx)
{
- USBD_StatusTypeDef ret = USBD_FAIL;
+ USBD_StatusTypeDef ret = USBD_FAIL;
- if(pdev->pClass != NULL)
+ if (pdev->pClass != NULL)
{
- /* Set configuration and Start the Class*/
- if(pdev->pClass->Init(pdev, cfgidx) == 0U)
- {
- ret = USBD_OK;
- }
+ /* Set configuration and Start the Class */
+ ret = (USBD_StatusTypeDef)pdev->pClass->Init(pdev, cfgidx);
}
return ret;
@@ -244,10 +279,14 @@ USBD_StatusTypeDef USBD_SetClassConfig(USBD_HandleTypeDef *pdev, uint8_t cfgidx
* @param cfgidx: configuration index
* @retval status: USBD_StatusTypeDef
*/
-USBD_StatusTypeDef USBD_ClrClassConfig(USBD_HandleTypeDef *pdev, uint8_t cfgidx)
+USBD_StatusTypeDef USBD_ClrClassConfig(USBD_HandleTypeDef *pdev, uint8_t cfgidx)
{
- /* Clear configuration and De-initialize the Class process*/
- pdev->pClass->DeInit(pdev, cfgidx);
+ /* Clear configuration and De-initialize the Class process */
+ if (pdev->pClass != NULL)
+ {
+ pdev->pClass->DeInit(pdev, cfgidx);
+ }
+
return USBD_OK;
}
@@ -260,6 +299,8 @@ USBD_StatusTypeDef USBD_ClrClassConfig(USBD_HandleTypeDef *pdev, uint8_t cfgidx
*/
USBD_StatusTypeDef USBD_LL_SetupStage(USBD_HandleTypeDef *pdev, uint8_t *psetup)
{
+ USBD_StatusTypeDef ret;
+
USBD_ParseSetupRequest(&pdev->request, psetup);
pdev->ep0_state = USBD_EP0_SETUP;
@@ -268,24 +309,24 @@ USBD_StatusTypeDef USBD_LL_SetupStage(USBD_HandleTypeDef *pdev, uint8_t *psetup)
switch (pdev->request.bmRequest & 0x1FU)
{
- case USB_REQ_RECIPIENT_DEVICE:
- USBD_StdDevReq (pdev, &pdev->request);
- break;
+ case USB_REQ_RECIPIENT_DEVICE:
+ ret = USBD_StdDevReq(pdev, &pdev->request);
+ break;
- case USB_REQ_RECIPIENT_INTERFACE:
- USBD_StdItfReq(pdev, &pdev->request);
- break;
+ case USB_REQ_RECIPIENT_INTERFACE:
+ ret = USBD_StdItfReq(pdev, &pdev->request);
+ break;
- case USB_REQ_RECIPIENT_ENDPOINT:
- USBD_StdEPReq(pdev, &pdev->request);
- break;
+ case USB_REQ_RECIPIENT_ENDPOINT:
+ ret = USBD_StdEPReq(pdev, &pdev->request);
+ break;
- default:
- USBD_LL_StallEP(pdev, (pdev->request.bmRequest & 0x80U));
- break;
+ default:
+ ret = USBD_LL_StallEP(pdev, (pdev->request.bmRequest & 0x80U));
+ break;
}
- return USBD_OK;
+ return ret;
}
/**
@@ -298,48 +339,54 @@ USBD_StatusTypeDef USBD_LL_SetupStage(USBD_HandleTypeDef *pdev, uint8_t *psetup)
USBD_StatusTypeDef USBD_LL_DataOutStage(USBD_HandleTypeDef *pdev,
uint8_t epnum, uint8_t *pdata)
{
- USBD_EndpointTypeDef *pep;
+ USBD_EndpointTypeDef *pep;
+ USBD_StatusTypeDef ret;
- if(epnum == 0U)
+ if (epnum == 0U)
{
pep = &pdev->ep_out[0];
- if ( pdev->ep0_state == USBD_EP0_DATA_OUT)
+ if (pdev->ep0_state == USBD_EP0_DATA_OUT)
{
- if(pep->rem_length > pep->maxpacket)
+ if (pep->rem_length > pep->maxpacket)
{
- pep->rem_length -= pep->maxpacket;
+ pep->rem_length -= pep->maxpacket;
- USBD_CtlContinueRx (pdev,
- pdata,
- (uint16_t)MIN(pep->rem_length, pep->maxpacket));
+ (void)USBD_CtlContinueRx(pdev, pdata, MIN(pep->rem_length, pep->maxpacket));
}
else
{
- if((pdev->pClass->EP0_RxReady != NULL)&&
- (pdev->dev_state == USBD_STATE_CONFIGURED))
+ if ((pdev->pClass->EP0_RxReady != NULL) &&
+ (pdev->dev_state == USBD_STATE_CONFIGURED))
{
pdev->pClass->EP0_RxReady(pdev);
}
- USBD_CtlSendStatus(pdev);
+ (void)USBD_CtlSendStatus(pdev);
}
}
else
{
+#if 0
if (pdev->ep0_state == USBD_EP0_STATUS_OUT)
{
/*
* STATUS PHASE completed, update ep0_state to idle
*/
pdev->ep0_state = USBD_EP0_IDLE;
- USBD_LL_StallEP(pdev, 0U);
+ (void)USBD_LL_StallEP(pdev, 0U);
}
+#endif
}
}
- else if((pdev->pClass->DataOut != NULL) &&
- (pdev->dev_state == USBD_STATE_CONFIGURED))
+ else if ((pdev->pClass->DataOut != NULL) &&
+ (pdev->dev_state == USBD_STATE_CONFIGURED))
{
- pdev->pClass->DataOut(pdev, epnum);
+ ret = (USBD_StatusTypeDef)pdev->pClass->DataOut(pdev, epnum);
+
+ if (ret != USBD_OK)
+ {
+ return ret;
+ }
}
else
{
@@ -357,69 +404,78 @@ USBD_StatusTypeDef USBD_LL_DataOutStage(USBD_HandleTypeDef *pdev,
* @param epnum: endpoint index
* @retval status
*/
-USBD_StatusTypeDef USBD_LL_DataInStage(USBD_HandleTypeDef *pdev, uint8_t epnum,
- uint8_t *pdata)
+USBD_StatusTypeDef USBD_LL_DataInStage(USBD_HandleTypeDef *pdev,
+ uint8_t epnum, uint8_t *pdata)
{
USBD_EndpointTypeDef *pep;
+ USBD_StatusTypeDef ret;
- if(epnum == 0U)
+ if (epnum == 0U)
{
pep = &pdev->ep_in[0];
- if ( pdev->ep0_state == USBD_EP0_DATA_IN)
+ if (pdev->ep0_state == USBD_EP0_DATA_IN)
{
- if(pep->rem_length > pep->maxpacket)
+ if (pep->rem_length > pep->maxpacket)
{
pep->rem_length -= pep->maxpacket;
- USBD_CtlContinueSendData (pdev, pdata, (uint16_t)pep->rem_length);
+ (void)USBD_CtlContinueSendData(pdev, pdata, pep->rem_length);
/* Prepare endpoint for premature end of transfer */
- USBD_LL_PrepareReceive (pdev, 0U, NULL, 0U);
+ (void)USBD_LL_PrepareReceive(pdev, 0U, NULL, 0U);
}
else
- { /* last packet is MPS multiple, so send ZLP packet */
- if((pep->total_length % pep->maxpacket == 0U) &&
- (pep->total_length >= pep->maxpacket) &&
- (pep->total_length < pdev->ep0_data_len))
+ {
+ /* last packet is MPS multiple, so send ZLP packet */
+ if ((pep->maxpacket == pep->rem_length) &&
+ (pep->total_length >= pep->maxpacket) &&
+ (pep->total_length < pdev->ep0_data_len))
{
- USBD_CtlContinueSendData(pdev, NULL, 0U);
+ (void)USBD_CtlContinueSendData(pdev, NULL, 0U);
pdev->ep0_data_len = 0U;
/* Prepare endpoint for premature end of transfer */
- USBD_LL_PrepareReceive (pdev, 0U, NULL, 0U);
+ (void)USBD_LL_PrepareReceive(pdev, 0U, NULL, 0U);
}
else
{
- if((pdev->pClass->EP0_TxSent != NULL)&&
- (pdev->dev_state == USBD_STATE_CONFIGURED))
+ if ((pdev->pClass->EP0_TxSent != NULL) &&
+ (pdev->dev_state == USBD_STATE_CONFIGURED))
{
pdev->pClass->EP0_TxSent(pdev);
}
- USBD_LL_StallEP(pdev, 0x80U);
- USBD_CtlReceiveStatus(pdev);
+ (void)USBD_LL_StallEP(pdev, 0x80U);
+ (void)USBD_CtlReceiveStatus(pdev);
}
}
}
else
{
+#if 0
if ((pdev->ep0_state == USBD_EP0_STATUS_IN) ||
(pdev->ep0_state == USBD_EP0_IDLE))
{
- USBD_LL_StallEP(pdev, 0x80U);
+ (void)USBD_LL_StallEP(pdev, 0x80U);
}
+#endif
}
if (pdev->dev_test_mode == 1U)
{
- USBD_RunTestMode(pdev);
+ (void)USBD_RunTestMode(pdev);
pdev->dev_test_mode = 0U;
}
}
- else if((pdev->pClass->DataIn != NULL) &&
- (pdev->dev_state == USBD_STATE_CONFIGURED))
+ else if ((pdev->pClass->DataIn != NULL) &&
+ (pdev->dev_state == USBD_STATE_CONFIGURED))
{
- pdev->pClass->DataIn(pdev, epnum);
+ ret = (USBD_StatusTypeDef)pdev->pClass->DataIn(pdev, epnum);
+
+ if (ret != USBD_OK)
+ {
+ return ret;
+ }
}
else
{
@@ -437,29 +493,30 @@ USBD_StatusTypeDef USBD_LL_DataInStage(USBD_HandleTypeDef *pdev, uint8_t epnum,
* @retval status
*/
-USBD_StatusTypeDef USBD_LL_Reset(USBD_HandleTypeDef *pdev)
+USBD_StatusTypeDef USBD_LL_Reset(USBD_HandleTypeDef *pdev)
{
- /* Open EP0 OUT */
- USBD_LL_OpenEP(pdev, 0x00U, USBD_EP_TYPE_CTRL, USB_MAX_EP0_SIZE);
+ /* Upon Reset call user call back */
+ pdev->dev_state = USBD_STATE_DEFAULT;
+ pdev->ep0_state = USBD_EP0_IDLE;
+ pdev->dev_config = 0U;
+ pdev->dev_remote_wakeup = 0U;
+
+ if (pdev->pClassData != NULL)
+ {
+ pdev->pClass->DeInit(pdev, (uint8_t)pdev->dev_config);
+ }
+
+ /* Open EP0 OUT */
+ (void)USBD_LL_OpenEP(pdev, 0x00U, USBD_EP_TYPE_CTRL, USB_MAX_EP0_SIZE);
pdev->ep_out[0x00U & 0xFU].is_used = 1U;
pdev->ep_out[0].maxpacket = USB_MAX_EP0_SIZE;
/* Open EP0 IN */
- USBD_LL_OpenEP(pdev, 0x80U, USBD_EP_TYPE_CTRL, USB_MAX_EP0_SIZE);
+ (void)USBD_LL_OpenEP(pdev, 0x80U, USBD_EP_TYPE_CTRL, USB_MAX_EP0_SIZE);
pdev->ep_in[0x80U & 0xFU].is_used = 1U;
pdev->ep_in[0].maxpacket = USB_MAX_EP0_SIZE;
- /* Upon Reset call user call back */
- pdev->dev_state = USBD_STATE_DEFAULT;
- pdev->ep0_state = USBD_EP0_IDLE;
- pdev->dev_config= 0U;
- pdev->dev_remote_wakeup = 0U;
-
- if (pdev->pClassData)
- {
- pdev->pClass->DeInit(pdev, (uint8_t)pdev->dev_config);
- }
return USBD_OK;
}
@@ -470,9 +527,11 @@ USBD_StatusTypeDef USBD_LL_Reset(USBD_HandleTypeDef *pdev)
* @param pdev: device instance
* @retval status
*/
-USBD_StatusTypeDef USBD_LL_SetSpeed(USBD_HandleTypeDef *pdev, USBD_SpeedTypeDef speed)
+USBD_StatusTypeDef USBD_LL_SetSpeed(USBD_HandleTypeDef *pdev,
+ USBD_SpeedTypeDef speed)
{
pdev->dev_speed = speed;
+
return USBD_OK;
}
@@ -483,10 +542,11 @@ USBD_StatusTypeDef USBD_LL_SetSpeed(USBD_HandleTypeDef *pdev, USBD_SpeedTypeDef
* @retval status
*/
-USBD_StatusTypeDef USBD_LL_Suspend(USBD_HandleTypeDef *pdev)
+USBD_StatusTypeDef USBD_LL_Suspend(USBD_HandleTypeDef *pdev)
{
- pdev->dev_old_state = pdev->dev_state;
- pdev->dev_state = USBD_STATE_SUSPENDED;
+ pdev->dev_old_state = pdev->dev_state;
+ pdev->dev_state = USBD_STATE_SUSPENDED;
+
return USBD_OK;
}
@@ -497,9 +557,13 @@ USBD_StatusTypeDef USBD_LL_Suspend(USBD_HandleTypeDef *pdev)
* @retval status
*/
-USBD_StatusTypeDef USBD_LL_Resume(USBD_HandleTypeDef *pdev)
+USBD_StatusTypeDef USBD_LL_Resume(USBD_HandleTypeDef *pdev)
{
- pdev->dev_state = pdev->dev_old_state;
+ if (pdev->dev_state == USBD_STATE_SUSPENDED)
+ {
+ pdev->dev_state = pdev->dev_old_state;
+ }
+
return USBD_OK;
}
@@ -510,15 +574,16 @@ USBD_StatusTypeDef USBD_LL_Resume(USBD_HandleTypeDef *pdev)
* @retval status
*/
-USBD_StatusTypeDef USBD_LL_SOF(USBD_HandleTypeDef *pdev)
+USBD_StatusTypeDef USBD_LL_SOF(USBD_HandleTypeDef *pdev)
{
- if(pdev->dev_state == USBD_STATE_CONFIGURED)
+ if (pdev->dev_state == USBD_STATE_CONFIGURED)
{
- if(pdev->pClass->SOF != NULL)
+ if (pdev->pClass->SOF != NULL)
{
pdev->pClass->SOF(pdev);
}
}
+
return USBD_OK;
}
@@ -528,7 +593,8 @@ USBD_StatusTypeDef USBD_LL_SOF(USBD_HandleTypeDef *pdev)
* @param pdev: device instance
* @retval status
*/
-USBD_StatusTypeDef USBD_LL_IsoINIncomplete(USBD_HandleTypeDef *pdev, uint8_t epnum)
+USBD_StatusTypeDef USBD_LL_IsoINIncomplete(USBD_HandleTypeDef *pdev,
+ uint8_t epnum)
{
/* Prevent unused arguments compilation warning */
UNUSED(pdev);
@@ -543,7 +609,8 @@ USBD_StatusTypeDef USBD_LL_IsoINIncomplete(USBD_HandleTypeDef *pdev, uint8_t ep
* @param pdev: device instance
* @retval status
*/
-USBD_StatusTypeDef USBD_LL_IsoOUTIncomplete(USBD_HandleTypeDef *pdev, uint8_t epnum)
+USBD_StatusTypeDef USBD_LL_IsoOUTIncomplete(USBD_HandleTypeDef *pdev,
+ uint8_t epnum)
{
/* Prevent unused arguments compilation warning */
UNUSED(pdev);
@@ -558,7 +625,7 @@ USBD_StatusTypeDef USBD_LL_IsoOUTIncomplete(USBD_HandleTypeDef *pdev, uint8_t e
* @param pdev: device instance
* @retval status
*/
-USBD_StatusTypeDef USBD_LL_DevConnected(USBD_HandleTypeDef *pdev)
+USBD_StatusTypeDef USBD_LL_DevConnected(USBD_HandleTypeDef *pdev)
{
/* Prevent unused argument compilation warning */
UNUSED(pdev);
@@ -572,11 +639,15 @@ USBD_StatusTypeDef USBD_LL_DevConnected(USBD_HandleTypeDef *pdev)
* @param pdev: device instance
* @retval status
*/
-USBD_StatusTypeDef USBD_LL_DevDisconnected(USBD_HandleTypeDef *pdev)
+USBD_StatusTypeDef USBD_LL_DevDisconnected(USBD_HandleTypeDef *pdev)
{
/* Free Class Resources */
pdev->dev_state = USBD_STATE_DEFAULT;
- pdev->pClass->DeInit(pdev, (uint8_t)pdev->dev_config);
+
+ if (pdev->pClass != NULL)
+ {
+ pdev->pClass->DeInit(pdev, (uint8_t)pdev->dev_config);
+ }
return USBD_OK;
}
diff --git a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_TrueStudio/Boot/lib/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.c b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_TrueStudio/Boot/lib/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.c
index c3e7ecbe..c51f3497 100644
--- a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_TrueStudio/Boot/lib/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.c
+++ b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_TrueStudio/Boot/lib/STM32_USB_Device_Library/Core/Src/usbd_ctlreq.c
@@ -12,7 +12,7 @@
* This software component is licensed by ST under Ultimate Liberty license
* SLA0044, the "License"; You may not use this file except in compliance with
* the License. You may obtain a copy of the License at:
- * http://www.st.com/SLA0044
+ * www.st.com/SLA0044
*
******************************************************************************
*/
@@ -35,6 +35,7 @@
/** @defgroup USBD_REQ_Private_TypesDefinitions
* @{
*/
+
/**
* @}
*/
@@ -52,6 +53,7 @@
/** @defgroup USBD_REQ_Private_Macros
* @{
*/
+
/**
* @}
*/
@@ -60,6 +62,7 @@
/** @defgroup USBD_REQ_Private_Variables
* @{
*/
+
/**
* @}
*/
@@ -68,27 +71,13 @@
/** @defgroup USBD_REQ_Private_FunctionPrototypes
* @{
*/
-static void USBD_GetDescriptor(USBD_HandleTypeDef *pdev ,
- USBD_SetupReqTypedef *req);
-
-static void USBD_SetAddress(USBD_HandleTypeDef *pdev ,
- USBD_SetupReqTypedef *req);
-
-static void USBD_SetConfig(USBD_HandleTypeDef *pdev ,
- USBD_SetupReqTypedef *req);
-
-static void USBD_GetConfig(USBD_HandleTypeDef *pdev ,
- USBD_SetupReqTypedef *req);
-
-static void USBD_GetStatus(USBD_HandleTypeDef *pdev ,
- USBD_SetupReqTypedef *req);
-
-static void USBD_SetFeature(USBD_HandleTypeDef *pdev ,
- USBD_SetupReqTypedef *req);
-
-static void USBD_ClrFeature(USBD_HandleTypeDef *pdev ,
- USBD_SetupReqTypedef *req);
-
+static void USBD_GetDescriptor(USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req);
+static void USBD_SetAddress(USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req);
+static USBD_StatusTypeDef USBD_SetConfig(USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req);
+static void USBD_GetConfig(USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req);
+static void USBD_GetStatus(USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req);
+static void USBD_SetFeature(USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req);
+static void USBD_ClrFeature(USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req);
static uint8_t USBD_GetLen(uint8_t *buf);
/**
@@ -108,7 +97,7 @@ static uint8_t USBD_GetLen(uint8_t *buf);
* @param req: usb request
* @retval status
*/
-USBD_StatusTypeDef USBD_StdDevReq (USBD_HandleTypeDef *pdev , USBD_SetupReqTypedef *req)
+USBD_StatusTypeDef USBD_StdDevReq(USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req)
{
USBD_StatusTypeDef ret = USBD_OK;
@@ -116,41 +105,38 @@ USBD_StatusTypeDef USBD_StdDevReq (USBD_HandleTypeDef *pdev , USBD_SetupReqType
{
case USB_REQ_TYPE_CLASS:
case USB_REQ_TYPE_VENDOR:
- pdev->pClass->Setup(pdev, req);
+ ret = (USBD_StatusTypeDef)pdev->pClass->Setup(pdev, req);
break;
case USB_REQ_TYPE_STANDARD:
-
switch (req->bRequest)
{
case USB_REQ_GET_DESCRIPTOR:
-
- USBD_GetDescriptor (pdev, req);
+ USBD_GetDescriptor(pdev, req);
break;
case USB_REQ_SET_ADDRESS:
- USBD_SetAddress (pdev, req);
+ USBD_SetAddress(pdev, req);
break;
case USB_REQ_SET_CONFIGURATION:
- USBD_SetConfig (pdev, req);
+ ret = USBD_SetConfig(pdev, req);
break;
case USB_REQ_GET_CONFIGURATION:
- USBD_GetConfig (pdev, req);
+ USBD_GetConfig(pdev, req);
break;
case USB_REQ_GET_STATUS:
- USBD_GetStatus (pdev, req);
+ USBD_GetStatus(pdev, req);
break;
-
case USB_REQ_SET_FEATURE:
- USBD_SetFeature (pdev, req);
+ USBD_SetFeature(pdev, req);
break;
case USB_REQ_CLEAR_FEATURE:
- USBD_ClrFeature (pdev, req);
+ USBD_ClrFeature(pdev, req);
break;
default:
@@ -174,7 +160,7 @@ USBD_StatusTypeDef USBD_StdDevReq (USBD_HandleTypeDef *pdev , USBD_SetupReqType
* @param req: usb request
* @retval status
*/
-USBD_StatusTypeDef USBD_StdItfReq (USBD_HandleTypeDef *pdev , USBD_SetupReqTypedef *req)
+USBD_StatusTypeDef USBD_StdItfReq(USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req)
{
USBD_StatusTypeDef ret = USBD_OK;
@@ -191,11 +177,11 @@ USBD_StatusTypeDef USBD_StdItfReq (USBD_HandleTypeDef *pdev , USBD_SetupReqType
if (LOBYTE(req->wIndex) <= USBD_MAX_NUM_INTERFACES)
{
- ret = (USBD_StatusTypeDef)pdev->pClass->Setup (pdev, req);
+ ret = (USBD_StatusTypeDef)pdev->pClass->Setup(pdev, req);
if ((req->wLength == 0U) && (ret == USBD_OK))
{
- USBD_CtlSendStatus(pdev);
+ (void)USBD_CtlSendStatus(pdev);
}
}
else
@@ -215,7 +201,7 @@ USBD_StatusTypeDef USBD_StdItfReq (USBD_HandleTypeDef *pdev , USBD_SetupReqType
break;
}
- return USBD_OK;
+ return ret;
}
/**
@@ -225,43 +211,31 @@ USBD_StatusTypeDef USBD_StdItfReq (USBD_HandleTypeDef *pdev , USBD_SetupReqType
* @param req: usb request
* @retval status
*/
-USBD_StatusTypeDef USBD_StdEPReq (USBD_HandleTypeDef *pdev , USBD_SetupReqTypedef *req)
+USBD_StatusTypeDef USBD_StdEPReq(USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req)
{
-
- uint8_t ep_addr;
+ USBD_EndpointTypeDef *pep;
+ uint8_t ep_addr;
USBD_StatusTypeDef ret = USBD_OK;
- USBD_EndpointTypeDef *pep;
- ep_addr = LOBYTE(req->wIndex);
+ ep_addr = LOBYTE(req->wIndex);
switch (req->bmRequest & USB_REQ_TYPE_MASK)
{
-
case USB_REQ_TYPE_CLASS:
case USB_REQ_TYPE_VENDOR:
- pdev->pClass->Setup (pdev, req);
+ ret = (USBD_StatusTypeDef)pdev->pClass->Setup(pdev, req);
break;
case USB_REQ_TYPE_STANDARD:
- /* Check if it is a class request */
- if ((req->bmRequest & 0x60U) == 0x20U)
- {
- ret = (USBD_StatusTypeDef)pdev->pClass->Setup (pdev, req);
-
- return ret;
- }
-
switch (req->bRequest)
{
-
- case USB_REQ_SET_FEATURE :
-
+ case USB_REQ_SET_FEATURE:
switch (pdev->dev_state)
{
case USBD_STATE_ADDRESSED:
if ((ep_addr != 0x00U) && (ep_addr != 0x80U))
{
- USBD_LL_StallEP(pdev, ep_addr);
- USBD_LL_StallEP(pdev, 0x80U);
+ (void)USBD_LL_StallEP(pdev, ep_addr);
+ (void)USBD_LL_StallEP(pdev, 0x80U);
}
else
{
@@ -274,10 +248,10 @@ USBD_StatusTypeDef USBD_StdEPReq (USBD_HandleTypeDef *pdev , USBD_SetupReqTyped
{
if ((ep_addr != 0x00U) && (ep_addr != 0x80U) && (req->wLength == 0x00U))
{
- USBD_LL_StallEP(pdev, ep_addr);
+ (void)USBD_LL_StallEP(pdev, ep_addr);
}
}
- USBD_CtlSendStatus(pdev);
+ (void)USBD_CtlSendStatus(pdev);
break;
@@ -287,15 +261,15 @@ USBD_StatusTypeDef USBD_StdEPReq (USBD_HandleTypeDef *pdev , USBD_SetupReqTyped
}
break;
- case USB_REQ_CLEAR_FEATURE :
+ case USB_REQ_CLEAR_FEATURE:
switch (pdev->dev_state)
{
case USBD_STATE_ADDRESSED:
if ((ep_addr != 0x00U) && (ep_addr != 0x80U))
{
- USBD_LL_StallEP(pdev, ep_addr);
- USBD_LL_StallEP(pdev, 0x80U);
+ (void)USBD_LL_StallEP(pdev, ep_addr);
+ (void)USBD_LL_StallEP(pdev, 0x80U);
}
else
{
@@ -308,9 +282,10 @@ USBD_StatusTypeDef USBD_StdEPReq (USBD_HandleTypeDef *pdev , USBD_SetupReqTyped
{
if ((ep_addr & 0x7FU) != 0x00U)
{
- USBD_LL_ClearStallEP(pdev, ep_addr);
+ (void)USBD_LL_ClearStallEP(pdev, ep_addr);
}
- USBD_CtlSendStatus(pdev);
+ (void)USBD_CtlSendStatus(pdev);
+ (USBD_StatusTypeDef)pdev->pClass->Setup(pdev, req);
}
break;
@@ -329,16 +304,16 @@ USBD_StatusTypeDef USBD_StdEPReq (USBD_HandleTypeDef *pdev , USBD_SetupReqTyped
USBD_CtlError(pdev, req);
break;
}
- pep = ((ep_addr & 0x80U) == 0x80U) ? &pdev->ep_in[ep_addr & 0x7FU]:\
- &pdev->ep_out[ep_addr & 0x7FU];
+ pep = ((ep_addr & 0x80U) == 0x80U) ? &pdev->ep_in[ep_addr & 0x7FU] : \
+ &pdev->ep_out[ep_addr & 0x7FU];
- pep->status = 0x0000U;
+ pep->status = 0x0000U;
- USBD_CtlSendData (pdev, (uint8_t *)(void *)&pep->status, 2U);
- break;
+ (void)USBD_CtlSendData(pdev, (uint8_t *)&pep->status, 2U);
+ break;
case USBD_STATE_CONFIGURED:
- if((ep_addr & 0x80U) == 0x80U)
+ if ((ep_addr & 0x80U) == 0x80U)
{
if (pdev->ep_in[ep_addr & 0xFU].is_used == 0U)
{
@@ -355,14 +330,14 @@ USBD_StatusTypeDef USBD_StdEPReq (USBD_HandleTypeDef *pdev , USBD_SetupReqTyped
}
}
- pep = ((ep_addr & 0x80U) == 0x80U) ? &pdev->ep_in[ep_addr & 0x7FU]:\
- &pdev->ep_out[ep_addr & 0x7FU];
+ pep = ((ep_addr & 0x80U) == 0x80U) ? &pdev->ep_in[ep_addr & 0x7FU] : \
+ &pdev->ep_out[ep_addr & 0x7FU];
if ((ep_addr == 0x00U) || (ep_addr == 0x80U))
{
pep->status = 0x0000U;
}
- else if(USBD_LL_IsStallEP(pdev, ep_addr))
+ else if (USBD_LL_IsStallEP(pdev, ep_addr) != 0U)
{
pep->status = 0x0001U;
}
@@ -371,7 +346,7 @@ USBD_StatusTypeDef USBD_StdEPReq (USBD_HandleTypeDef *pdev , USBD_SetupReqTyped
pep->status = 0x0000U;
}
- USBD_CtlSendData (pdev, (uint8_t *)(void *)&pep->status, 2U);
+ (void)USBD_CtlSendData(pdev, (uint8_t *)&pep->status, 2U);
break;
default:
@@ -393,6 +368,8 @@ USBD_StatusTypeDef USBD_StdEPReq (USBD_HandleTypeDef *pdev , USBD_SetupReqTyped
return ret;
}
+
+
/**
* @brief USBD_GetDescriptor
* Handle Get Descriptor requests
@@ -400,18 +377,25 @@ USBD_StatusTypeDef USBD_StdEPReq (USBD_HandleTypeDef *pdev , USBD_SetupReqTyped
* @param req: usb request
* @retval status
*/
-static void USBD_GetDescriptor(USBD_HandleTypeDef *pdev ,
- USBD_SetupReqTypedef *req)
+static void USBD_GetDescriptor(USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req)
{
- uint16_t len;
- uint8_t *pbuf;
-
+ uint16_t len = 0U;
+ uint8_t *pbuf = NULL;
+ uint8_t err = 0U;
switch (req->wValue >> 8)
{
-#if (USBD_LPM_ENABLED == 1U)
+#if ((USBD_LPM_ENABLED == 1U) || (USBD_CLASS_BOS_ENABLED == 1U))
case USB_DESC_TYPE_BOS:
- pbuf = pdev->pDesc->GetBOSDescriptor(pdev->dev_speed, &len);
+ if (pdev->pDesc->GetBOSDescriptor != NULL)
+ {
+ pbuf = pdev->pDesc->GetBOSDescriptor(pdev->dev_speed, &len);
+ }
+ else
+ {
+ USBD_CtlError(pdev, req);
+ err++;
+ }
break;
#endif
case USB_DESC_TYPE_DEVICE:
@@ -419,14 +403,14 @@ static void USBD_GetDescriptor(USBD_HandleTypeDef *pdev ,
break;
case USB_DESC_TYPE_CONFIGURATION:
- if(pdev->dev_speed == USBD_SPEED_HIGH )
+ if (pdev->dev_speed == USBD_SPEED_HIGH)
{
- pbuf = (uint8_t *)pdev->pClass->GetHSConfigDescriptor(&len);
+ pbuf = pdev->pClass->GetHSConfigDescriptor(&len);
pbuf[1] = USB_DESC_TYPE_CONFIGURATION;
}
else
{
- pbuf = (uint8_t *)pdev->pClass->GetFSConfigDescriptor(&len);
+ pbuf = pdev->pClass->GetFSConfigDescriptor(&len);
pbuf[1] = USB_DESC_TYPE_CONFIGURATION;
}
break;
@@ -435,81 +419,159 @@ static void USBD_GetDescriptor(USBD_HandleTypeDef *pdev ,
switch ((uint8_t)(req->wValue))
{
case USBD_IDX_LANGID_STR:
- pbuf = pdev->pDesc->GetLangIDStrDescriptor(pdev->dev_speed, &len);
+ if (pdev->pDesc->GetLangIDStrDescriptor != NULL)
+ {
+ pbuf = pdev->pDesc->GetLangIDStrDescriptor(pdev->dev_speed, &len);
+ }
+ else
+ {
+ USBD_CtlError(pdev, req);
+ err++;
+ }
break;
case USBD_IDX_MFC_STR:
- pbuf = pdev->pDesc->GetManufacturerStrDescriptor(pdev->dev_speed, &len);
+ if (pdev->pDesc->GetManufacturerStrDescriptor != NULL)
+ {
+ pbuf = pdev->pDesc->GetManufacturerStrDescriptor(pdev->dev_speed, &len);
+ }
+ else
+ {
+ USBD_CtlError(pdev, req);
+ err++;
+ }
break;
case USBD_IDX_PRODUCT_STR:
- pbuf = pdev->pDesc->GetProductStrDescriptor(pdev->dev_speed, &len);
+ if (pdev->pDesc->GetProductStrDescriptor != NULL)
+ {
+ pbuf = pdev->pDesc->GetProductStrDescriptor(pdev->dev_speed, &len);
+ }
+ else
+ {
+ USBD_CtlError(pdev, req);
+ err++;
+ }
break;
case USBD_IDX_SERIAL_STR:
- pbuf = pdev->pDesc->GetSerialStrDescriptor(pdev->dev_speed, &len);
+ if (pdev->pDesc->GetSerialStrDescriptor != NULL)
+ {
+ pbuf = pdev->pDesc->GetSerialStrDescriptor(pdev->dev_speed, &len);
+ }
+ else
+ {
+ USBD_CtlError(pdev, req);
+ err++;
+ }
break;
case USBD_IDX_CONFIG_STR:
- pbuf = pdev->pDesc->GetConfigurationStrDescriptor(pdev->dev_speed, &len);
+ if (pdev->pDesc->GetConfigurationStrDescriptor != NULL)
+ {
+ pbuf = pdev->pDesc->GetConfigurationStrDescriptor(pdev->dev_speed, &len);
+ }
+ else
+ {
+ USBD_CtlError(pdev, req);
+ err++;
+ }
break;
case USBD_IDX_INTERFACE_STR:
- pbuf = pdev->pDesc->GetInterfaceStrDescriptor(pdev->dev_speed, &len);
+ if (pdev->pDesc->GetInterfaceStrDescriptor != NULL)
+ {
+ pbuf = pdev->pDesc->GetInterfaceStrDescriptor(pdev->dev_speed, &len);
+ }
+ else
+ {
+ USBD_CtlError(pdev, req);
+ err++;
+ }
break;
default:
-#if (USBD_SUPPORT_USER_STRING == 1U)
- pbuf = pdev->pClass->GetUsrStrDescriptor(pdev, (req->wValue) , &len);
- break;
+#if (USBD_SUPPORT_USER_STRING_DESC == 1U)
+ if (pdev->pClass->GetUsrStrDescriptor != NULL)
+ {
+ pbuf = pdev->pClass->GetUsrStrDescriptor(pdev, (req->wValue), &len);
+ }
+ else
+ {
+ USBD_CtlError(pdev, req);
+ err++;
+ }
+#elif (USBD_CLASS_USER_STRING_DESC == 1U)
+ if (pdev->pDesc->GetUserStrDescriptor != NULL)
+ {
+ pbuf = pdev->pDesc->GetUserStrDescriptor(pdev->dev_speed, (req->wValue), &len);
+ }
+ else
+ {
+ USBD_CtlError(pdev, req);
+ err++;
+ }
#else
- USBD_CtlError(pdev , req);
- return;
+ USBD_CtlError(pdev, req);
+ err++;
#endif
+ break;
}
break;
- case USB_DESC_TYPE_DEVICE_QUALIFIER:
- if(pdev->dev_speed == USBD_SPEED_HIGH)
+ case USB_DESC_TYPE_DEVICE_QUALIFIER:
+ if (pdev->dev_speed == USBD_SPEED_HIGH)
{
- pbuf = (uint8_t *)pdev->pClass->GetDeviceQualifierDescriptor(&len);
- break;
+ pbuf = pdev->pClass->GetDeviceQualifierDescriptor(&len);
}
else
{
- USBD_CtlError(pdev , req);
- return;
+ USBD_CtlError(pdev, req);
+ err++;
}
+ break;
case USB_DESC_TYPE_OTHER_SPEED_CONFIGURATION:
- if(pdev->dev_speed == USBD_SPEED_HIGH )
+ if (pdev->dev_speed == USBD_SPEED_HIGH)
{
- pbuf = (uint8_t *)pdev->pClass->GetOtherSpeedConfigDescriptor(&len);
+ pbuf = pdev->pClass->GetOtherSpeedConfigDescriptor(&len);
pbuf[1] = USB_DESC_TYPE_OTHER_SPEED_CONFIGURATION;
- break;
}
else
{
- USBD_CtlError(pdev , req);
- return;
+ USBD_CtlError(pdev, req);
+ err++;
}
+ break;
default:
- USBD_CtlError(pdev , req);
+ USBD_CtlError(pdev, req);
+ err++;
+ break;
+ }
+
+ if (err != 0U)
+ {
return;
}
-
- if((len != 0U) && (req->wLength != 0U))
+ else
{
-
- len = MIN(len, req->wLength);
-
- USBD_CtlSendData (pdev, pbuf, len);
- }
-
- if(req->wLength == 0U)
- {
- USBD_CtlSendStatus(pdev);
+ if (req->wLength != 0U)
+ {
+ if (len != 0U)
+ {
+ len = MIN(len, req->wLength);
+ (void)USBD_CtlSendData(pdev, pbuf, len);
+ }
+ else
+ {
+ USBD_CtlError(pdev, req);
+ }
+ }
+ else
+ {
+ (void)USBD_CtlSendStatus(pdev);
+ }
}
}
@@ -520,8 +582,7 @@ static void USBD_GetDescriptor(USBD_HandleTypeDef *pdev ,
* @param req: usb request
* @retval status
*/
-static void USBD_SetAddress(USBD_HandleTypeDef *pdev ,
- USBD_SetupReqTypedef *req)
+static void USBD_SetAddress(USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req)
{
uint8_t dev_addr;
@@ -531,13 +592,13 @@ static void USBD_SetAddress(USBD_HandleTypeDef *pdev ,
if (pdev->dev_state == USBD_STATE_CONFIGURED)
{
- USBD_CtlError(pdev , req);
+ USBD_CtlError(pdev, req);
}
else
{
pdev->dev_address = dev_addr;
- USBD_LL_SetUSBAddress(pdev, dev_addr);
- USBD_CtlSendStatus(pdev);
+ (void)USBD_LL_SetUSBAddress(pdev, dev_addr);
+ (void)USBD_CtlSendStatus(pdev);
if (dev_addr != 0U)
{
@@ -562,8 +623,9 @@ static void USBD_SetAddress(USBD_HandleTypeDef *pdev ,
* @param req: usb request
* @retval status
*/
-static void USBD_SetConfig(USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req)
+static USBD_StatusTypeDef USBD_SetConfig(USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req)
{
+ USBD_StatusTypeDef ret = USBD_OK;
static uint8_t cfgidx;
cfgidx = (uint8_t)(req->wValue);
@@ -571,63 +633,77 @@ static void USBD_SetConfig(USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req)
if (cfgidx > USBD_MAX_NUM_CONFIGURATION)
{
USBD_CtlError(pdev, req);
+ return USBD_FAIL;
}
- else
+
+ switch (pdev->dev_state)
{
- switch (pdev->dev_state)
+ case USBD_STATE_ADDRESSED:
+ if (cfgidx != 0U)
{
- case USBD_STATE_ADDRESSED:
- if (cfgidx)
+ pdev->dev_config = cfgidx;
+
+ ret = USBD_SetClassConfig(pdev, cfgidx);
+
+ if (ret != USBD_OK)
{
- pdev->dev_config = cfgidx;
+ USBD_CtlError(pdev, req);
+ }
+ else
+ {
+ (void)USBD_CtlSendStatus(pdev);
pdev->dev_state = USBD_STATE_CONFIGURED;
- if(USBD_SetClassConfig(pdev, cfgidx) == USBD_FAIL)
- {
- USBD_CtlError(pdev, req);
- return;
- }
- USBD_CtlSendStatus(pdev);
}
- else
- {
- USBD_CtlSendStatus(pdev);
- }
- break;
-
- case USBD_STATE_CONFIGURED:
- if (cfgidx == 0U)
- {
- pdev->dev_state = USBD_STATE_ADDRESSED;
- pdev->dev_config = cfgidx;
- USBD_ClrClassConfig(pdev, cfgidx);
- USBD_CtlSendStatus(pdev);
- }
- else if (cfgidx != pdev->dev_config)
- {
- /* Clear old configuration */
- USBD_ClrClassConfig(pdev, (uint8_t)pdev->dev_config);
-
- /* set new configuration */
- pdev->dev_config = cfgidx;
- if(USBD_SetClassConfig(pdev, cfgidx) == USBD_FAIL)
- {
- USBD_CtlError(pdev, req);
- return;
- }
- USBD_CtlSendStatus(pdev);
- }
- else
- {
- USBD_CtlSendStatus(pdev);
- }
- break;
-
- default:
- USBD_CtlError(pdev, req);
- USBD_ClrClassConfig(pdev, cfgidx);
- break;
}
+ else
+ {
+ (void)USBD_CtlSendStatus(pdev);
+ }
+ break;
+
+ case USBD_STATE_CONFIGURED:
+ if (cfgidx == 0U)
+ {
+ pdev->dev_state = USBD_STATE_ADDRESSED;
+ pdev->dev_config = cfgidx;
+ (void)USBD_ClrClassConfig(pdev, cfgidx);
+ (void)USBD_CtlSendStatus(pdev);
+ }
+ else if (cfgidx != pdev->dev_config)
+ {
+ /* Clear old configuration */
+ (void)USBD_ClrClassConfig(pdev, (uint8_t)pdev->dev_config);
+
+ /* set new configuration */
+ pdev->dev_config = cfgidx;
+
+ ret = USBD_SetClassConfig(pdev, cfgidx);
+
+ if (ret != USBD_OK)
+ {
+ USBD_CtlError(pdev, req);
+ (void)USBD_ClrClassConfig(pdev, (uint8_t)pdev->dev_config);
+ pdev->dev_state = USBD_STATE_ADDRESSED;
+ }
+ else
+ {
+ (void)USBD_CtlSendStatus(pdev);
+ }
+ }
+ else
+ {
+ (void)USBD_CtlSendStatus(pdev);
+ }
+ break;
+
+ default:
+ USBD_CtlError(pdev, req);
+ (void)USBD_ClrClassConfig(pdev, cfgidx);
+ ret = USBD_FAIL;
+ break;
}
+
+ return ret;
}
/**
@@ -641,7 +717,7 @@ static void USBD_GetConfig(USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req)
{
if (req->wLength != 1U)
{
- USBD_CtlError(pdev , req);
+ USBD_CtlError(pdev, req);
}
else
{
@@ -650,15 +726,15 @@ static void USBD_GetConfig(USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req)
case USBD_STATE_DEFAULT:
case USBD_STATE_ADDRESSED:
pdev->dev_default_config = 0U;
- USBD_CtlSendData (pdev, (uint8_t *)(void *)&pdev->dev_default_config, 1U);
+ (void)USBD_CtlSendData(pdev, (uint8_t *)&pdev->dev_default_config, 1U);
break;
case USBD_STATE_CONFIGURED:
- USBD_CtlSendData (pdev, (uint8_t *)(void *)&pdev->dev_config, 1U);
+ (void)USBD_CtlSendData(pdev, (uint8_t *)&pdev->dev_config, 1U);
break;
default:
- USBD_CtlError(pdev , req);
+ USBD_CtlError(pdev, req);
break;
}
}
@@ -678,28 +754,28 @@ static void USBD_GetStatus(USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req)
case USBD_STATE_DEFAULT:
case USBD_STATE_ADDRESSED:
case USBD_STATE_CONFIGURED:
- if(req->wLength != 0x2U)
+ if (req->wLength != 0x2U)
{
USBD_CtlError(pdev, req);
break;
}
-#if ( USBD_SELF_POWERED == 1U)
+#if (USBD_SELF_POWERED == 1U)
pdev->dev_config_status = USB_CONFIG_SELF_POWERED;
#else
pdev->dev_config_status = 0U;
#endif
- if (pdev->dev_remote_wakeup)
+ if (pdev->dev_remote_wakeup != 0U)
{
pdev->dev_config_status |= USB_CONFIG_REMOTE_WAKEUP;
}
- USBD_CtlSendData (pdev, (uint8_t *)(void *)&pdev->dev_config_status, 2U);
+ (void)USBD_CtlSendData(pdev, (uint8_t *)&pdev->dev_config_status, 2U);
break;
- default :
- USBD_CtlError(pdev , req);
+ default:
+ USBD_CtlError(pdev, req);
break;
}
}
@@ -712,16 +788,13 @@ static void USBD_GetStatus(USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req)
* @param req: usb request
* @retval status
*/
-static void USBD_SetFeature(USBD_HandleTypeDef *pdev ,
- USBD_SetupReqTypedef *req)
+static void USBD_SetFeature(USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req)
{
-
if (req->wValue == USB_FEATURE_REMOTE_WAKEUP)
{
pdev->dev_remote_wakeup = 1U;
- USBD_CtlSendStatus(pdev);
+ (void)USBD_CtlSendStatus(pdev);
}
-
}
@@ -732,24 +805,23 @@ static void USBD_SetFeature(USBD_HandleTypeDef *pdev ,
* @param req: usb request
* @retval status
*/
-static void USBD_ClrFeature(USBD_HandleTypeDef *pdev ,
- USBD_SetupReqTypedef *req)
+static void USBD_ClrFeature(USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req)
{
switch (pdev->dev_state)
{
- case USBD_STATE_DEFAULT:
- case USBD_STATE_ADDRESSED:
- case USBD_STATE_CONFIGURED:
- if (req->wValue == USB_FEATURE_REMOTE_WAKEUP)
- {
- pdev->dev_remote_wakeup = 0U;
- USBD_CtlSendStatus(pdev);
- }
- break;
+ case USBD_STATE_DEFAULT:
+ case USBD_STATE_ADDRESSED:
+ case USBD_STATE_CONFIGURED:
+ if (req->wValue == USB_FEATURE_REMOTE_WAKEUP)
+ {
+ pdev->dev_remote_wakeup = 0U;
+ (void)USBD_CtlSendStatus(pdev);
+ }
+ break;
- default :
- USBD_CtlError(pdev , req);
- break;
+ default:
+ USBD_CtlError(pdev, req);
+ break;
}
}
@@ -763,12 +835,23 @@ static void USBD_ClrFeature(USBD_HandleTypeDef *pdev ,
void USBD_ParseSetupRequest(USBD_SetupReqTypedef *req, uint8_t *pdata)
{
- req->bmRequest = *(uint8_t *) (pdata);
- req->bRequest = *(uint8_t *) (pdata + 1);
- req->wValue = SWAPBYTE (pdata + 2);
- req->wIndex = SWAPBYTE (pdata + 4);
- req->wLength = SWAPBYTE (pdata + 6);
+ uint8_t *pbuff = pdata;
+ req->bmRequest = *(uint8_t *)(pbuff);
+
+ pbuff++;
+ req->bRequest = *(uint8_t *)(pbuff);
+
+ pbuff++;
+ req->wValue = SWAPBYTE(pbuff);
+
+ pbuff++;
+ pbuff++;
+ req->wIndex = SWAPBYTE(pbuff);
+
+ pbuff++;
+ pbuff++;
+ req->wLength = SWAPBYTE(pbuff);
}
/**
@@ -779,11 +862,12 @@ void USBD_ParseSetupRequest(USBD_SetupReqTypedef *req, uint8_t *pdata)
* @retval None
*/
-void USBD_CtlError( USBD_HandleTypeDef *pdev ,
- USBD_SetupReqTypedef *req)
+void USBD_CtlError(USBD_HandleTypeDef *pdev, USBD_SetupReqTypedef *req)
{
- USBD_LL_StallEP(pdev , 0x80U);
- USBD_LL_StallEP(pdev , 0U);
+ UNUSED(req);
+
+ (void)USBD_LL_StallEP(pdev, 0x80U);
+ (void)USBD_LL_StallEP(pdev, 0U);
}
@@ -798,18 +882,29 @@ void USBD_CtlError( USBD_HandleTypeDef *pdev ,
void USBD_GetString(uint8_t *desc, uint8_t *unicode, uint16_t *len)
{
uint8_t idx = 0U;
+ uint8_t *pdesc;
- if (desc != NULL)
+ if (desc == NULL)
{
- *len = (uint16_t)USBD_GetLen(desc) * 2U + 2U;
- unicode[idx++] = *(uint8_t *)(void *)len;
- unicode[idx++] = USB_DESC_TYPE_STRING;
+ return;
+ }
- while (*desc != '\0')
- {
- unicode[idx++] = *desc++;
- unicode[idx++] = 0U;
- }
+ pdesc = desc;
+ *len = ((uint16_t)USBD_GetLen(pdesc) * 2U) + 2U;
+
+ unicode[idx] = *(uint8_t *)len;
+ idx++;
+ unicode[idx] = USB_DESC_TYPE_STRING;
+ idx++;
+
+ while (*pdesc != (uint8_t)'\0')
+ {
+ unicode[idx] = *pdesc;
+ pdesc++;
+ idx++;
+
+ unicode[idx] = 0U;
+ idx++;
}
}
@@ -821,15 +916,16 @@ void USBD_GetString(uint8_t *desc, uint8_t *unicode, uint16_t *len)
*/
static uint8_t USBD_GetLen(uint8_t *buf)
{
- uint8_t len = 0U;
+ uint8_t len = 0U;
+ uint8_t *pbuff = buf;
- while (*buf != '\0')
- {
- len++;
- buf++;
- }
+ while (*pbuff != (uint8_t)'\0')
+ {
+ len++;
+ pbuff++;
+ }
- return len;
+ return len;
}
/**
* @}
diff --git a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_TrueStudio/Boot/lib/STM32_USB_Device_Library/Core/Src/usbd_ioreq.c b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_TrueStudio/Boot/lib/STM32_USB_Device_Library/Core/Src/usbd_ioreq.c
index 5600c370..4d5c8efe 100644
--- a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_TrueStudio/Boot/lib/STM32_USB_Device_Library/Core/Src/usbd_ioreq.c
+++ b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_TrueStudio/Boot/lib/STM32_USB_Device_Library/Core/Src/usbd_ioreq.c
@@ -12,7 +12,7 @@
* This software component is licensed by ST under Ultimate Liberty license
* SLA0044, the "License"; You may not use this file except in compliance with
* the License. You may obtain a copy of the License at:
- * http://www.st.com/SLA0044
+ * www.st.com/SLA0044
*
******************************************************************************
*/
@@ -84,16 +84,16 @@
* @param len: length of data to be sent
* @retval status
*/
-USBD_StatusTypeDef USBD_CtlSendData (USBD_HandleTypeDef *pdev, uint8_t *pbuf,
- uint16_t len)
+USBD_StatusTypeDef USBD_CtlSendData(USBD_HandleTypeDef *pdev,
+ uint8_t *pbuf, uint32_t len)
{
/* Set EP0 State */
pdev->ep0_state = USBD_EP0_DATA_IN;
pdev->ep_in[0].total_length = len;
- pdev->ep_in[0].rem_length = len;
+ pdev->ep_in[0].rem_length = len;
- /* Start the transfer */
- USBD_LL_Transmit (pdev, 0x00U, pbuf, len);
+ /* Start the transfer */
+ (void)USBD_LL_Transmit(pdev, 0x00U, pbuf, len);
return USBD_OK;
}
@@ -106,11 +106,11 @@ USBD_StatusTypeDef USBD_CtlSendData (USBD_HandleTypeDef *pdev, uint8_t *pbuf,
* @param len: length of data to be sent
* @retval status
*/
-USBD_StatusTypeDef USBD_CtlContinueSendData (USBD_HandleTypeDef *pdev,
- uint8_t *pbuf, uint16_t len)
+USBD_StatusTypeDef USBD_CtlContinueSendData(USBD_HandleTypeDef *pdev,
+ uint8_t *pbuf, uint32_t len)
{
- /* Start the next transfer */
- USBD_LL_Transmit (pdev, 0x00U, pbuf, len);
+ /* Start the next transfer */
+ (void)USBD_LL_Transmit(pdev, 0x00U, pbuf, len);
return USBD_OK;
}
@@ -123,16 +123,16 @@ USBD_StatusTypeDef USBD_CtlContinueSendData (USBD_HandleTypeDef *pdev,
* @param len: length of data to be received
* @retval status
*/
-USBD_StatusTypeDef USBD_CtlPrepareRx (USBD_HandleTypeDef *pdev, uint8_t *pbuf,
- uint16_t len)
+USBD_StatusTypeDef USBD_CtlPrepareRx(USBD_HandleTypeDef *pdev,
+ uint8_t *pbuf, uint32_t len)
{
/* Set EP0 State */
pdev->ep0_state = USBD_EP0_DATA_OUT;
pdev->ep_out[0].total_length = len;
- pdev->ep_out[0].rem_length = len;
+ pdev->ep_out[0].rem_length = len;
/* Start the transfer */
- USBD_LL_PrepareReceive (pdev, 0U, pbuf, len);
+ (void)USBD_LL_PrepareReceive(pdev, 0U, pbuf, len);
return USBD_OK;
}
@@ -145,10 +145,10 @@ USBD_StatusTypeDef USBD_CtlPrepareRx (USBD_HandleTypeDef *pdev, uint8_t *pbuf,
* @param len: length of data to be received
* @retval status
*/
-USBD_StatusTypeDef USBD_CtlContinueRx (USBD_HandleTypeDef *pdev, uint8_t *pbuf,
- uint16_t len)
+USBD_StatusTypeDef USBD_CtlContinueRx(USBD_HandleTypeDef *pdev,
+ uint8_t *pbuf, uint32_t len)
{
- USBD_LL_PrepareReceive(pdev, 0U, pbuf, len);
+ (void)USBD_LL_PrepareReceive(pdev, 0U, pbuf, len);
return USBD_OK;
}
@@ -159,13 +159,13 @@ USBD_StatusTypeDef USBD_CtlContinueRx (USBD_HandleTypeDef *pdev, uint8_t *pbuf,
* @param pdev: device instance
* @retval status
*/
-USBD_StatusTypeDef USBD_CtlSendStatus (USBD_HandleTypeDef *pdev)
+USBD_StatusTypeDef USBD_CtlSendStatus(USBD_HandleTypeDef *pdev)
{
/* Set EP0 State */
pdev->ep0_state = USBD_EP0_STATUS_IN;
/* Start the transfer */
- USBD_LL_Transmit(pdev, 0x00U, NULL, 0U);
+ (void)USBD_LL_Transmit(pdev, 0x00U, NULL, 0U);
return USBD_OK;
}
@@ -176,13 +176,13 @@ USBD_StatusTypeDef USBD_CtlSendStatus (USBD_HandleTypeDef *pdev)
* @param pdev: device instance
* @retval status
*/
-USBD_StatusTypeDef USBD_CtlReceiveStatus (USBD_HandleTypeDef *pdev)
+USBD_StatusTypeDef USBD_CtlReceiveStatus(USBD_HandleTypeDef *pdev)
{
/* Set EP0 State */
pdev->ep0_state = USBD_EP0_STATUS_OUT;
- /* Start the transfer */
- USBD_LL_PrepareReceive (pdev, 0U, NULL, 0U);
+ /* Start the transfer */
+ (void)USBD_LL_PrepareReceive(pdev, 0U, NULL, 0U);
return USBD_OK;
}
@@ -194,7 +194,7 @@ USBD_StatusTypeDef USBD_CtlReceiveStatus (USBD_HandleTypeDef *pdev)
* @param ep_addr: endpoint address
* @retval Rx Data blength
*/
-uint32_t USBD_GetRxCount (USBD_HandleTypeDef *pdev, uint8_t ep_addr)
+uint32_t USBD_GetRxCount(USBD_HandleTypeDef *pdev, uint8_t ep_addr)
{
return USBD_LL_GetRxDataSize(pdev, ep_addr);
}
diff --git a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_TrueStudio/Boot/lib/system_stm32f7xx.c b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_TrueStudio/Boot/lib/system_stm32f7xx.c
index cb4e5662..7282bc83 100644
--- a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_TrueStudio/Boot/lib/system_stm32f7xx.c
+++ b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_TrueStudio/Boot/lib/system_stm32f7xx.c
@@ -1,278 +1,244 @@
-/**
- ******************************************************************************
- * @file system_stm32f7xx.c
- * @author MCD Application Team
- * @brief CMSIS Cortex-M7 Device Peripheral Access Layer System Source File.
- *
- * This file provides two functions and one global variable to be called from
- * user application:
- * - SystemInit(): This function is called at startup just after reset and
- * before branch to main program. This call is made inside
- * the "startup_stm32f7xx.s" file.
- *
- * - SystemCoreClock variable: Contains the core clock (HCLK), it can be used
- * by the user application to setup the SysTick
- * timer or configure other parameters.
- *
- * - SystemCoreClockUpdate(): Updates the variable SystemCoreClock and must
- * be called whenever the core clock is changed
- * during program execution.
- *
- *
- ******************************************************************************
- * @attention
- *
- * © COPYRIGHT 2016 STMicroelectronics
- *
- * Redistribution and use in source and binary forms, with or without modification,
- * are permitted provided that the following conditions are met:
- * 1. Redistributions of source code must retain the above copyright notice,
- * this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright notice,
- * this list of conditions and the following disclaimer in the documentation
- * and/or other materials provided with the distribution.
- * 3. Neither the name of STMicroelectronics nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
- * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
- * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- ******************************************************************************
- */
-
-/** @addtogroup CMSIS
- * @{
- */
-
-/** @addtogroup stm32f7xx_system
- * @{
- */
-
-/** @addtogroup STM32F7xx_System_Private_Includes
- * @{
- */
-
-#include "stm32f7xx.h"
-
-#if !defined (HSE_VALUE)
- #define HSE_VALUE ((uint32_t)25000000) /*!< Default value of the External oscillator in Hz */
-#endif /* HSE_VALUE */
-
-#if !defined (HSI_VALUE)
- #define HSI_VALUE ((uint32_t)16000000) /*!< Value of the Internal oscillator in Hz*/
-#endif /* HSI_VALUE */
-
-/**
- * @}
- */
-
-/** @addtogroup STM32F7xx_System_Private_TypesDefinitions
- * @{
- */
-
-/**
- * @}
- */
-
-/** @addtogroup STM32F7xx_System_Private_Defines
- * @{
- */
-
-/************************* Miscellaneous Configuration ************************/
-
-/*!< Uncomment the following line if you need to relocate your vector Table in
- Internal SRAM. */
-/* #define VECT_TAB_SRAM */
-#define VECT_TAB_OFFSET 0x00 /*!< Vector Table base offset field.
- This value must be a multiple of 0x200. */
-/******************************************************************************/
-
-/**
- * @}
- */
-
-/** @addtogroup STM32F7xx_System_Private_Macros
- * @{
- */
-
-/**
- * @}
- */
-
-/** @addtogroup STM32F7xx_System_Private_Variables
- * @{
- */
-
- /* This variable is updated in three ways:
- 1) by calling CMSIS function SystemCoreClockUpdate()
- 2) by calling HAL API function HAL_RCC_GetHCLKFreq()
- 3) each time HAL_RCC_ClockConfig() is called to configure the system clock frequency
- Note: If you use this function to configure the system clock; then there
- is no need to call the 2 first functions listed above, since SystemCoreClock
- variable is updated automatically.
- */
- uint32_t SystemCoreClock = 16000000;
- const uint8_t AHBPrescTable[16] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 6, 7, 8, 9};
- const uint8_t APBPrescTable[8] = {0, 0, 0, 0, 1, 2, 3, 4};
-
-/**
- * @}
- */
-
-/** @addtogroup STM32F7xx_System_Private_FunctionPrototypes
- * @{
- */
-
-/**
- * @}
- */
-
-/** @addtogroup STM32F7xx_System_Private_Functions
- * @{
- */
-
-/**
- * @brief Setup the microcontroller system
- * Initialize the Embedded Flash Interface, the PLL and update the
- * SystemFrequency variable.
- * @param None
- * @retval None
- */
-void SystemInit(void)
-{
- /* FPU settings ------------------------------------------------------------*/
- #if (__FPU_PRESENT == 1) && (__FPU_USED == 1)
- SCB->CPACR |= ((3UL << 10*2)|(3UL << 11*2)); /* set CP10 and CP11 Full Access */
- #endif
- /* Reset the RCC clock configuration to the default reset state ------------*/
- /* Set HSION bit */
- RCC->CR |= (uint32_t)0x00000001;
-
- /* Reset CFGR register */
- RCC->CFGR = 0x00000000;
-
- /* Reset HSEON, CSSON and PLLON bits */
- RCC->CR &= (uint32_t)0xFEF6FFFF;
-
- /* Reset PLLCFGR register */
- RCC->PLLCFGR = 0x24003010;
-
- /* Reset HSEBYP bit */
- RCC->CR &= (uint32_t)0xFFFBFFFF;
-
- /* Disable all interrupts */
- RCC->CIR = 0x00000000;
-
- /* Configure the Vector Table location add offset address ------------------*/
-#ifdef VECT_TAB_SRAM
- SCB->VTOR = RAMDTCM_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAM */
-#else
- SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal FLASH */
-#endif
-}
-
-/**
- * @brief Update SystemCoreClock variable according to Clock Register Values.
- * The SystemCoreClock variable contains the core clock (HCLK), it can
- * be used by the user application to setup the SysTick timer or configure
- * other parameters.
- *
- * @note Each time the core clock (HCLK) changes, this function must be called
- * to update SystemCoreClock variable value. Otherwise, any configuration
- * based on this variable will be incorrect.
- *
- * @note - The system frequency computed by this function is not the real
- * frequency in the chip. It is calculated based on the predefined
- * constant and the selected clock source:
- *
- * - If SYSCLK source is HSI, SystemCoreClock will contain the HSI_VALUE(*)
- *
- * - If SYSCLK source is HSE, SystemCoreClock will contain the HSE_VALUE(**)
- *
- * - If SYSCLK source is PLL, SystemCoreClock will contain the HSE_VALUE(**)
- * or HSI_VALUE(*) multiplied/divided by the PLL factors.
- *
- * (*) HSI_VALUE is a constant defined in stm32f7xx_hal_conf.h file (default value
- * 16 MHz) but the real value may vary depending on the variations
- * in voltage and temperature.
- *
- * (**) HSE_VALUE is a constant defined in stm32f7xx_hal_conf.h file (default value
- * 25 MHz), user has to ensure that HSE_VALUE is same as the real
- * frequency of the crystal used. Otherwise, this function may
- * have wrong result.
- *
- * - The result of this function could be not correct when using fractional
- * value for HSE crystal.
- *
- * @param None
- * @retval None
- */
-void SystemCoreClockUpdate(void)
-{
- uint32_t tmp = 0, pllvco = 0, pllp = 2, pllsource = 0, pllm = 2;
-
- /* Get SYSCLK source -------------------------------------------------------*/
- tmp = RCC->CFGR & RCC_CFGR_SWS;
-
- switch (tmp)
- {
- case 0x00: /* HSI used as system clock source */
- SystemCoreClock = HSI_VALUE;
- break;
- case 0x04: /* HSE used as system clock source */
- SystemCoreClock = HSE_VALUE;
- break;
- case 0x08: /* PLL used as system clock source */
-
- /* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N
- SYSCLK = PLL_VCO / PLL_P
- */
- pllsource = (RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC) >> 22;
- pllm = RCC->PLLCFGR & RCC_PLLCFGR_PLLM;
-
- if (pllsource != 0)
- {
- /* HSE used as PLL clock source */
- pllvco = (HSE_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6);
- }
- else
- {
- /* HSI used as PLL clock source */
- pllvco = (HSI_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6);
- }
-
- pllp = (((RCC->PLLCFGR & RCC_PLLCFGR_PLLP) >>16) + 1 ) *2;
- SystemCoreClock = pllvco/pllp;
- break;
- default:
- SystemCoreClock = HSI_VALUE;
- break;
- }
- /* Compute HCLK frequency --------------------------------------------------*/
- /* Get HCLK prescaler */
- tmp = AHBPrescTable[((RCC->CFGR & RCC_CFGR_HPRE) >> 4)];
- /* HCLK frequency */
- SystemCoreClock >>= tmp;
-}
-
-/**
- * @}
- */
-
-/**
- * @}
- */
-
-/**
- * @}
- */
-/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
+/**
+ ******************************************************************************
+ * @file system_stm32f7xx.c
+ * @author MCD Application Team
+ * @brief CMSIS Cortex-M7 Device Peripheral Access Layer System Source File.
+ *
+ * This file provides two functions and one global variable to be called from
+ * user application:
+ * - SystemInit(): This function is called at startup just after reset and
+ * before branch to main program. This call is made inside
+ * the "startup_stm32f7xx.s" file.
+ *
+ * - SystemCoreClock variable: Contains the core clock (HCLK), it can be used
+ * by the user application to setup the SysTick
+ * timer or configure other parameters.
+ *
+ * - SystemCoreClockUpdate(): Updates the variable SystemCoreClock and must
+ * be called whenever the core clock is changed
+ * during program execution.
+ *
+ *
+ ******************************************************************************
+ * @attention
+ *
+ * © Copyright (c) 2016 STMicroelectronics.
+ * All rights reserved.
+ *
+ * This software component is licensed by ST under BSD 3-Clause license,
+ * the "License"; You may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at:
+ * opensource.org/licenses/BSD-3-Clause
+ *
+ ******************************************************************************
+ */
+
+/** @addtogroup CMSIS
+ * @{
+ */
+
+/** @addtogroup stm32f7xx_system
+ * @{
+ */
+
+/** @addtogroup STM32F7xx_System_Private_Includes
+ * @{
+ */
+
+#include "stm32f7xx.h"
+
+#if !defined (HSE_VALUE)
+ #define HSE_VALUE ((uint32_t)25000000) /*!< Default value of the External oscillator in Hz */
+#endif /* HSE_VALUE */
+
+#if !defined (HSI_VALUE)
+ #define HSI_VALUE ((uint32_t)16000000) /*!< Value of the Internal oscillator in Hz*/
+#endif /* HSI_VALUE */
+
+/**
+ * @}
+ */
+
+/** @addtogroup STM32F7xx_System_Private_TypesDefinitions
+ * @{
+ */
+
+/**
+ * @}
+ */
+
+/** @addtogroup STM32F7xx_System_Private_Defines
+ * @{
+ */
+
+/************************* Miscellaneous Configuration ************************/
+
+/*!< Uncomment the following line if you need to relocate your vector Table in
+ Internal SRAM. */
+/* #define VECT_TAB_SRAM */
+#define VECT_TAB_OFFSET 0x00 /*!< Vector Table base offset field.
+ This value must be a multiple of 0x200. */
+/******************************************************************************/
+
+/**
+ * @}
+ */
+
+/** @addtogroup STM32F7xx_System_Private_Macros
+ * @{
+ */
+
+/**
+ * @}
+ */
+
+/** @addtogroup STM32F7xx_System_Private_Variables
+ * @{
+ */
+
+ /* This variable is updated in three ways:
+ 1) by calling CMSIS function SystemCoreClockUpdate()
+ 2) by calling HAL API function HAL_RCC_GetHCLKFreq()
+ 3) each time HAL_RCC_ClockConfig() is called to configure the system clock frequency
+ Note: If you use this function to configure the system clock; then there
+ is no need to call the 2 first functions listed above, since SystemCoreClock
+ variable is updated automatically.
+ */
+ uint32_t SystemCoreClock = 16000000;
+ const uint8_t AHBPrescTable[16] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 6, 7, 8, 9};
+ const uint8_t APBPrescTable[8] = {0, 0, 0, 0, 1, 2, 3, 4};
+
+/**
+ * @}
+ */
+
+/** @addtogroup STM32F7xx_System_Private_FunctionPrototypes
+ * @{
+ */
+
+/**
+ * @}
+ */
+
+/** @addtogroup STM32F7xx_System_Private_Functions
+ * @{
+ */
+
+/**
+ * @brief Setup the microcontroller system
+ * Initialize the Embedded Flash Interface, the PLL and update the
+ * SystemFrequency variable.
+ * @param None
+ * @retval None
+ */
+void SystemInit(void)
+{
+ /* FPU settings ------------------------------------------------------------*/
+#if (__FPU_PRESENT == 1) && (__FPU_USED == 1)
+ SCB->CPACR |= ((3UL << 10*2)|(3UL << 11*2)); /* set CP10 and CP11 Full Access */
+#endif
+
+ /* Configure the Vector Table location add offset address ------------------*/
+#ifdef VECT_TAB_SRAM
+ SCB->VTOR = RAMDTCM_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAM */
+#else
+ SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal FLASH */
+#endif
+}
+
+/**
+ * @brief Update SystemCoreClock variable according to Clock Register Values.
+ * The SystemCoreClock variable contains the core clock (HCLK), it can
+ * be used by the user application to setup the SysTick timer or configure
+ * other parameters.
+ *
+ * @note Each time the core clock (HCLK) changes, this function must be called
+ * to update SystemCoreClock variable value. Otherwise, any configuration
+ * based on this variable will be incorrect.
+ *
+ * @note - The system frequency computed by this function is not the real
+ * frequency in the chip. It is calculated based on the predefined
+ * constant and the selected clock source:
+ *
+ * - If SYSCLK source is HSI, SystemCoreClock will contain the HSI_VALUE(*)
+ *
+ * - If SYSCLK source is HSE, SystemCoreClock will contain the HSE_VALUE(**)
+ *
+ * - If SYSCLK source is PLL, SystemCoreClock will contain the HSE_VALUE(**)
+ * or HSI_VALUE(*) multiplied/divided by the PLL factors.
+ *
+ * (*) HSI_VALUE is a constant defined in stm32f7xx_hal_conf.h file (default value
+ * 16 MHz) but the real value may vary depending on the variations
+ * in voltage and temperature.
+ *
+ * (**) HSE_VALUE is a constant defined in stm32f7xx_hal_conf.h file (default value
+ * 25 MHz), user has to ensure that HSE_VALUE is same as the real
+ * frequency of the crystal used. Otherwise, this function may
+ * have wrong result.
+ *
+ * - The result of this function could be not correct when using fractional
+ * value for HSE crystal.
+ *
+ * @param None
+ * @retval None
+ */
+void SystemCoreClockUpdate(void)
+{
+ uint32_t tmp = 0, pllvco = 0, pllp = 2, pllsource = 0, pllm = 2;
+
+ /* Get SYSCLK source -------------------------------------------------------*/
+ tmp = RCC->CFGR & RCC_CFGR_SWS;
+
+ switch (tmp)
+ {
+ case 0x00: /* HSI used as system clock source */
+ SystemCoreClock = HSI_VALUE;
+ break;
+ case 0x04: /* HSE used as system clock source */
+ SystemCoreClock = HSE_VALUE;
+ break;
+ case 0x08: /* PLL used as system clock source */
+
+ /* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N
+ SYSCLK = PLL_VCO / PLL_P
+ */
+ pllsource = (RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC) >> 22;
+ pllm = RCC->PLLCFGR & RCC_PLLCFGR_PLLM;
+
+ if (pllsource != 0)
+ {
+ /* HSE used as PLL clock source */
+ pllvco = (HSE_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6);
+ }
+ else
+ {
+ /* HSI used as PLL clock source */
+ pllvco = (HSI_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6);
+ }
+
+ pllp = (((RCC->PLLCFGR & RCC_PLLCFGR_PLLP) >>16) + 1 ) *2;
+ SystemCoreClock = pllvco/pllp;
+ break;
+ default:
+ SystemCoreClock = HSI_VALUE;
+ break;
+ }
+ /* Compute HCLK frequency --------------------------------------------------*/
+ /* Get HCLK prescaler */
+ tmp = AHBPrescTable[((RCC->CFGR & RCC_CFGR_HPRE) >> 4)];
+ /* HCLK frequency */
+ SystemCoreClock >>= tmp;
+}
+
+/**
+ * @}
+ */
+
+/**
+ * @}
+ */
+
+/**
+ * @}
+ */
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff --git a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_TrueStudio/Boot/usbd_conf.c b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_TrueStudio/Boot/usbd_conf.c
index 2c7b2f09..6738d157 100644
--- a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_TrueStudio/Boot/usbd_conf.c
+++ b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_TrueStudio/Boot/usbd_conf.c
@@ -504,7 +504,7 @@ USBD_StatusTypeDef USBD_LL_SetUSBAddress(USBD_HandleTypeDef *pdev, uint8_t dev_a
* @param size: Data size
* @retval USBD status
*/
-USBD_StatusTypeDef USBD_LL_Transmit(USBD_HandleTypeDef *pdev, uint8_t ep_addr, uint8_t *pbuf, uint16_t size)
+USBD_StatusTypeDef USBD_LL_Transmit(USBD_HandleTypeDef *pdev, uint8_t ep_addr, uint8_t *pbuf, uint32_t size)
{
HAL_StatusTypeDef hal_status = HAL_OK;
USBD_StatusTypeDef usb_status = USBD_OK;
@@ -524,7 +524,7 @@ USBD_StatusTypeDef USBD_LL_Transmit(USBD_HandleTypeDef *pdev, uint8_t ep_addr, u
* @param size: Data size
* @retval USBD status
*/
-USBD_StatusTypeDef USBD_LL_PrepareReceive(USBD_HandleTypeDef *pdev, uint8_t ep_addr, uint8_t *pbuf, uint16_t size)
+USBD_StatusTypeDef USBD_LL_PrepareReceive(USBD_HandleTypeDef *pdev, uint8_t ep_addr, uint8_t *pbuf, uint32_t size)
{
HAL_StatusTypeDef hal_status = HAL_OK;
USBD_StatusTypeDef usb_status = USBD_OK;
diff --git a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_TrueStudio/Boot/usbd_conf.h b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_TrueStudio/Boot/usbd_conf.h
index 457df6b8..13647fbd 100644
--- a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_TrueStudio/Boot/usbd_conf.h
+++ b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_TrueStudio/Boot/usbd_conf.h
@@ -68,8 +68,6 @@
/*---------- -----------*/
#define USBD_MAX_STR_DESC_SIZ 512U
/*---------- -----------*/
-#define USBD_SUPPORT_USER_STRING 0U
-/*---------- -----------*/
#define USBD_DEBUG_LEVEL 0U
/*---------- -----------*/
#define USBD_LPM_ENABLED 0U
@@ -81,6 +79,9 @@
#define DEVICE_FS 0
#define DEVICE_HS 1
+/* Inform USB core that a full speed device is used. */
+#define USE_USB_FS
+
/**
* @}
*/
diff --git a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_TrueStudio/Boot/usbd_desc.c b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_TrueStudio/Boot/usbd_desc.c
index c26b821d..344676bb 100644
--- a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_TrueStudio/Boot/usbd_desc.c
+++ b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_TrueStudio/Boot/usbd_desc.c
@@ -123,11 +123,6 @@ uint8_t * USBD_FS_ProductStrDescriptor(USBD_SpeedTypeDef speed, uint16_t *length
uint8_t * USBD_FS_SerialStrDescriptor(USBD_SpeedTypeDef speed, uint16_t *length);
uint8_t * USBD_FS_ConfigStrDescriptor(USBD_SpeedTypeDef speed, uint16_t *length);
uint8_t * USBD_FS_InterfaceStrDescriptor(USBD_SpeedTypeDef speed, uint16_t *length);
-
-#ifdef USBD_SUPPORT_USER_STRING_DESC
-uint8_t * USBD_FS_USRStringDesc(USBD_SpeedTypeDef speed, uint8_t idx, uint16_t *length);
-#endif /* USBD_SUPPORT_USER_STRING_DESC */
-
#if (USBD_LPM_ENABLED == 1)
uint8_t * USBD_FS_USR_BOSDescriptor(USBD_SpeedTypeDef speed, uint16_t *length);
#endif /* (USBD_LPM_ENABLED == 1) */
@@ -328,7 +323,9 @@ uint8_t * USBD_FS_SerialStrDescriptor(USBD_SpeedTypeDef speed, uint16_t *length)
/* Update the serial number string descriptor with the data from the unique
* ID */
Get_SerialNum();
-
+ /* USER CODE BEGIN USBD_FS_SerialStrDescriptor */
+
+ /* USER CODE END USBD_FS_SerialStrDescriptor */
return (uint8_t *) USBD_StringSerial;
}
diff --git a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_TrueStudio/Prog/Debug/demoprog_stm32f746.elf b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_TrueStudio/Prog/Debug/demoprog_stm32f746.elf
index c7ea449d..954ad98e 100755
Binary files a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_TrueStudio/Prog/Debug/demoprog_stm32f746.elf and b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_TrueStudio/Prog/Debug/demoprog_stm32f746.elf differ
diff --git a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_TrueStudio/Prog/Debug/demoprog_stm32f746.srec b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_TrueStudio/Prog/Debug/demoprog_stm32f746.srec
index 9fe36072..7f6dc7f2 100755
--- a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_TrueStudio/Prog/Debug/demoprog_stm32f746.srec
+++ b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_TrueStudio/Prog/Debug/demoprog_stm32f746.srec
@@ -1,37 +1,37 @@
S01A000064656D6F70726F675F73746D3332663734362E737265638E
-S3150800800000000520E99E0008399F0008399F0008EE
-S31508008010399F0008399F0008399F000800000000B2
-S31508008020000000000000000000000000399F000862
-S31508008030399F000800000000399F0008719F00085A
-S31508008040399F0008399F0008399F0008399F0008A2
-S31508008050399F0008399F0008399F0008399F000892
-S31508008060399F0008399F0008399F0008399F000882
-S31508008070399F0008399F0008399F0008399F000872
-S31508008080399F0008399F0008399F0008399F000862
-S31508008090399F0008399F0008399F0008399F000852
-S315080080A0399F0008399F0008399F0008399F000842
-S315080080B0399F0008399F0008399F0008399F000832
-S315080080C0399F0008399F0008399F0008399F000822
-S315080080D0399F0008399F0008399F0008399F000812
-S315080080E0399F0008399F0008399F0008399F000802
-S315080080F0399F0008399F0008399F0008399F0008F2
-S31508008100399F0008399F0008399F0008399F0008E1
-S31508008110399F0008399F0008399F0008399F0008D1
-S31508008120399F0008399F0008399F0008399F0008C1
-S31508008130399F0008399F0008399F0008399F0008B1
-S31508008140399F0008399F0008399F0008399F0008A1
-S31508008150399F0008399F0008399F0008399F000891
-S31508008160399F0008399F0008399F0008399F000881
-S31508008170399F0008399F0008399F00080000000051
-S31508008180399F0008399F0008399F0008399F000861
-S31508008190399F0008399F0008399F0008399F000851
-S315080081A0399F0008399F0008399F0008399F000841
-S315080081B0399F0008399F0008399F0008399F000831
-S311080081C0399F0008399F0008EE11AA55E7
+S3150800800000000520699F0008B99F0008B99F00086D
+S31508008010B99F0008B99F0008B99F00080000000032
+S31508008020000000000000000000000000B99F0008E2
+S31508008030B99F000800000000B99F0008F19F0008DA
+S31508008040B99F0008B99F0008B99F0008B99F0008A2
+S31508008050B99F0008B99F0008B99F0008B99F000892
+S31508008060B99F0008B99F0008B99F0008B99F000882
+S31508008070B99F0008B99F0008B99F0008B99F000872
+S31508008080B99F0008B99F0008B99F0008B99F000862
+S31508008090B99F0008B99F0008B99F0008B99F000852
+S315080080A0B99F0008B99F0008B99F0008B99F000842
+S315080080B0B99F0008B99F0008B99F0008B99F000832
+S315080080C0B99F0008B99F0008B99F0008B99F000822
+S315080080D0B99F0008B99F0008B99F0008B99F000812
+S315080080E0B99F0008B99F0008B99F0008B99F000802
+S315080080F0B99F0008B99F0008B99F0008B99F0008F2
+S31508008100B99F0008B99F0008B99F0008B99F0008E1
+S31508008110B99F0008B99F0008B99F0008B99F0008D1
+S31508008120B99F0008B99F0008B99F0008B99F0008C1
+S31508008130B99F0008B99F0008B99F0008B99F0008B1
+S31508008140B99F0008B99F0008B99F0008B99F0008A1
+S31508008150B99F0008B99F0008B99F0008B99F000891
+S31508008160B99F0008B99F0008B99F0008B99F000881
+S31508008170B99F0008B99F0008B99F000800000000D1
+S31508008180B99F0008B99F0008B99F0008B99F000861
+S31508008190B99F0008B99F0008B99F0008B99F000851
+S315080081A0B99F0008B99F0008B99F0008B99F000841
+S315080081B0B99F0008B99F0008B99F0008B99F000831
+S311080081C0B99F0008B99F0008EE11AA55E7
S315080081CC10B5054C237833B9044B13B10448AFF3F7
S315080081DC00800123237010BD0C0000200000000055
-S315080081ECD49F000808B5034B1BB103490348AFF3EA
-S315080081FC008008BD0000000010000020D49F000875
+S315080081EC54A0000808B5034B1BB103490348AFF369
+S315080081FC008008BD000000001000002054A00008F4
S3150800820C53B94AB9002908BF00281CBF4FF0FF31E3
S3150800821C4FF0FF3000F07AB9ADF1080C6DE904CED9
S3150800822C00F006F8DDF804E0DDE9022304B0704737
@@ -83,14 +83,14 @@ S315080084FC91E78146BEE7014678E702383C4445E7F2
S3150800850C084608E7A8F102083D442BE7704700BF68
S3150800851C08B50948094B03604FF4614343600023CF
S3150800852C8360C36003610C2242618361C361036289
-S3150800853C436201F070FB08BD500000200048004063
-S3150800854C2DE9F04104460D461746984601F03EF8CB
+S3150800853C436201F0CAFB08BD500000200048004009
+S3150800854C2DE9F04104460D461746984601F078F891
S3150800855C154BA3FB00308009002201E00132D2B290
S3150800856C112A1ED8114B13F8121003EB420393F879
S3150800857C01E001EB0E0303FB0443B0FBF3FC03FB26
S3150800858C1C06002EEAD11FFA8CF32B80013B9BB2FA
S3150800859CB3F5806FE2D2397088F800E00120BDE8A7
-S315080085ACF0810020BDE8F081D34D6210EC9F0008E5
+S315080085ACF0810020BDE8F081D34D62106CA0000864
S315080085BC70B58CB00025ADF82E508DF82D500CAB3F
S315080085CC03F8045D0DF12D020DF12E014FF4FA702E
S315080085DCFFF7B6FF1A4C1B4B236025766576A576F6
@@ -101,15 +101,15 @@ S3150800861C08964CF6E043019302954FF6E0730393E4
S3150800862C04230493059509960E230A9301A920465B
S3150800863C00F0C2F9204600F055FA0CB070BD00BF28
S3150800864C280000200064004008B5002301220146DA
-S3150800865C034801F031FA08B1002008BD012008BD15
+S3150800865C034801F08AFA08B1002008BD012008BDBC
S3150800866C5000002008B5FFF753FFFFF7A1FF08BD20
S3150800867CBFF34F8F0549CA6802F4E062044B1343F3
S3150800868CCB60BFF34F8F00BFFDE700BF00ED00E0E6
S3150800869C0400FA0508B5214B1B78B3B92048FFF737
S315080086ACD3FF012800D008BD1D4B1B78013BDBB25C
-S315080086BC3F2BF8D801F052FC1A4B18600122174BC5
+S315080086BC3F2BF8D801F092FC1A4B18600122174B85
S315080086CC1A700022184B1A7008BD174B1B78013309
-S315080086DC13481844FFF7B8FF01280AD001F03EFCEE
+S315080086DC13481844FFF7B8FF01280AD001F07EFCAE
S315080086EC104B1B6864339842DDD900220B4B1A7069
S315080086FCD9E70D4A13780133DBB21370084A12789E
S3150800870C9342D0D10021054A1170054A5278FF2AA6
@@ -120,18 +120,18 @@ S3150800874C6763039A9A4204D0002343B90BB05DF8C9
S3150800875C04FB059B0BB10023F7E70123F5E79DF80E
S3150800876C0430FF2BF2D1079B022BEFD1FFF780FFCA
S3150800877C2800002008B5FFF78DFFFFF7D7FF08BDC7
-S3150800878C08B500228021024800F0D0FB08BD00BFC6
-S3150800879C0004024010B501F0E1FB0E4B1B68C31A2E
+S3150800878C08B500228021024800F0D8FB08BD00BFBE
+S3150800879C0004024010B501F021FC0E4B1B68C31AED
S315080087ACB3F5FA7F0CD304460B4B1B784BB9012255
-S315080087BC094B1A708021094800F0B8FB054B1C6060
-S315080087CC10BD0022044B1A708021044800F0AEFB41
+S315080087BC094B1A708021094800F0C0FB054B1C6058
+S315080087CC10BD0022044B1A708021044800F0B6FB39
S315080087DCF4E700BF1C010020180100200004024029
S315080087EC10B504460E4B18784FF47A73B3FBF0F3B6
S315080087FC0C4A1068B0FBF3F000F07EFA68B90F2C3F
S3150800880C01D9012010BD002221464FF0FF3000F09F
S3150800881C43FA054B1C60002010BD012010BD00BF9B
S3150800882C00000020080000200400002008B50320E2
-S3150800883C00F020FA0020FFF7D3FF01F0B9FA002068
+S3150800883C00F020FA0020FFF7D3FF01F0F9FA002028
S3150800884C08BD0000034A1168034B1B780B441360E0
S3150800885C704700BF2001002000000020014B18685B
S3150800886C704700BF200100207047002800F0A18047
@@ -185,7 +185,7 @@ S31508008B5C43F480234362012030BC704700296FD14F
S31508008B6C0468E46814F0030F64D0056801F11B046B
S31508008B7C24012C5904F004049460002C6BD105686C
S31508008B8C01F11B0424012C59640D1460056801F1CC
-S31508008B9C1B0424012D59C5F34005D56005682544E9
+S31508008B9C1B0424012D5905F00205D56005682544EA
S31508008BAC6D6805F00F051561056825446D68C5F3F4
S31508008BBC0725956105682C446468240C546104687F
S31508008BCC0A011444D4F8B8411C7004681444D4F847
@@ -213,309 +213,317 @@ S31508008D1C07221A6070470120704700BF10E000E078
S31508008D2C00ED00E0042805D0054A136823F0040377
S31508008D3C13607047024A136843F0040313607047C4
S31508008D4C10E000E0704708B5FFF7FCFF08BD00000F
-S31508008D5CF0B583B0002437E0092600E0002606FAB1
-S31508008D6C0EF6324302336C4E46F823206B4B1A68C8
-S31508008D7CEB4302EA03064F6817F4803F01D045EA35
-S31508008D8C0206664A1660526803EA02064F6817F42A
-S31508008D9C003F01D045EA0206604A5660926803EA2B
-S31508008DAC02064F6817F4801F01D045EA02065B4A93
-S31508008DBC9660D26813404E6816F4001F01D045EA37
-S31508008DCC0203564AD36001340F2C00F2A380012308
-S31508008DDCA3400A6803EA0205AB42F4D14A68122A90
-S31508008DEC18BF022A12D14FEAD40E0EF1080E50F80B
-S31508008DFC2E2004F00706B6000F27B74022EA070212
-S31508008E0C0F6907FA06F6324340F82E2006684FEA31
-S31508008E1C440E032202FA0EF2D24316404F6807F0AC
-S31508008E2C030707FA0EF73E4306604E68771E112EA7
-S31508008E3C18BF012F01D9122E0FD186681640CF689C
-S31508008E4C07FA0EF73E438660466826EA03034E6821
-S31508008E5CC6F30016A64033434360C3681A408B68B2
-S31508008E6C03FA0EF31A43C2604B6813F0805FAAD05C
-S31508008E7C2B4B5A6C42F480425A645B6C03F4804365
-S31508008E8C0193019BA3089E1C234A52F8262004F042
-S31508008E9C03064FEA860E0F2606FA0EF622EA060295
-S31508008EAC204FB8423FF45AAF1F4EB04222D006F5B7
-S31508008EBC8066B04220D006F58066B0421ED006F514
-S31508008ECC8066B0421CD006F58066B0421AD006F50C
-S31508008EDC8066B04218D006F58066B04216D006F504
-S31508008EEC8066B04214D006F58066B0423FF434AFC3
-S31508008EFC0A2634E7012632E7022630E703262EE750
-S31508008F0C04262CE705262AE7062628E7072626E759
-S31508008F1C082624E703B0F0BD00380140003C0140A8
-S31508008F2C00380240000002400004024012B909044D
-S31508008F3C816170478161704710B582B01B4B1A6C02
-S31508008F4C42F080521A641B6C03F080530193019B08
-S31508008F5C174A136843F480331360FFF77FFC044603
-S31508008F6C134B5B6813F4803F08D1FFF777FC001BA3
-S31508008F7CB0F57A7FF4D9032002B010BD0C4A1368F9
-S31508008F8C43F400331360FFF769FC0446084B5B682F
-S31508008F9C13F4003F07D1FFF761FC001BB0F57A7F8D
-S31508008FACF4D90320E8E70020E6E700BF00380240C2
-S31508008FBC00700040002800F0DB8170B582B00446D2
-S31508008FCC036813F0010F3AD0A24B9B6803F00C030D
-S31508008FDC042B2BD09F4B9B6803F00C03082B20D03B
-S31508008FEC6368B3F5803F50D0002B54D1994B1A685F
-S31508008FFC22F480321A601A6822F480221A60636896
-S3150800900C002B5FD0FFF72AFC0546924B1B6813F41E
-S3150800901C003F14D1FFF722FC401B6428F5D9032026
-S3150800902CABE18C4B5B6813F4800FD9D0894B1B686A
-S3150800903C13F4003F03D06368002B00F09B81236870
-S3150800904C13F0020F64D0834B9B6813F00C0F4DD0B2
-S3150800905C804B9B6803F00C03082B42D0E368002B6B
-S3150800906C79D07C4A136843F001031360FFF7F6FBCB
-S3150800907C0546784B1B6813F0020F63D1FFF7EEFB1E
-S3150800908C401B0228F5D9032077E1724A136843F48A
-S3150800909C80331360B3E7B3F5A02F09D06D4B1A686C
-S315080090AC22F480321A601A6822F480221A60A6E723
-S315080090BC684B1A6842F480221A601A6842F48032A5
-S315080090CC1A609CE7FFF7CAFB0546624B1B6813F44C
-S315080090DC003FB4D0FFF7C2FB401B6428F5D9032028
-S315080090EC4BE15C4B5B6813F4800FB7D1594B1B688B
-S315080090FC13F0020F04D0E368012B01D001203CE1E8
-S3150800910C544A136823F0F803216943EAC103136030
-S3150800911C236813F0080F46D0636983B34D4A536F1F
-S3150800912C43F001035367FFF799FB0546494B5B6F01
-S3150800913C13F0020F37D1FFF791FB401B0228F5D924
-S3150800914C03201AE1434A136823F0F803216943EA1A
-S3150800915CC1031360DCE73F4A136823F0010313606D
-S3150800916CFFF77CFB05463B4B1B6813F0020FCFD071
-S3150800917CFFF774FB401B0228F5D90320FDE0354A9E
-S3150800918C536F23F001035367FFF768FB0546314B12
-S3150800919C5B6F13F0020F06D0FFF760FB401B02282B
-S315080091ACF5D90320E9E0236813F0040F7ED0294B88
-S315080091BC1B6C13F0805F31D1264B1A6C42F080522F
-S315080091CC1A641B6C03F080530193019B0125224BF7
-S315080091DC1B6813F4807F23D0A368012B34D0002B93
-S315080091EC3CD11C4B1A6F22F001021A671A6F22F037
-S315080091FC04021A67A368002B46D0FFF72FFB064616
-S3150800920C144B1B6F13F0020F4FD1FFF727FB801B74
-S3150800921C41F288339842F3D90320AEE00025D6E70D
-S3150800922C0D4A136843F480731360FFF717FB064661
-S3150800923C094B1B6813F4807FCED1FFF70FFB801BFD
-S3150800924C6428F5D9032098E0024A136F43F001030A
-S3150800925C1367CFE70038024000700040052B09D091
-S3150800926C484B1A6F22F001021A671A6F22F0040291
-S3150800927C1A67BFE7434B1A6F42F004021A671A6F54
-S3150800928C42F001021A67B5E7FFF7E8FA06463D4BC6
-S3150800929C1B6F13F0020F08D0FFF7E0FA801B41F2A0
-S315080092AC88339842F3D9032067E0F5B9A369002BF4
-S315080092BC62D0344A926802F00C02082A5FD0022B5C
-S315080092CC19D0304A136823F080731360FFF7C6FA77
-S315080092DC04462C4B1B6813F0007F47D0FFF7BEFAE9
-S315080092EC001B0228F5D9032047E0264A136C23F005
-S315080092FC80531364DAE7234A136823F080731360E8
-S3150800930CFFF7ACFA05461F4B1B6813F0007F06D017
-S3150800931CFFF7A4FA401B0228F5D903202DE0E369D0
-S3150800932C226A1343626A43EA8213A26A5208013A12
-S3150800933C43EA0243E26A43EA026343F00053114AE2
-S3150800934C5360136843F080731360FFF787FA04467B
-S3150800935C0C4B1B6813F0007F06D1FFF77FFA001B36
-S3150800936C0228F5D9032008E0002006E0002004E0D6
-S3150800937C01207047012000E0002002B070BD0120DA
-S3150800938CFBE700BF00380240F8B5314B9B6803F089
-S3150800939C0C03042B59D0082B01D02E48F8BD2C4BA6
-S315080093AC5A6802F03F025B6813F4800F2AD0284BE8
-S315080093BC5B68C3F388131E4600275C010025E41A74
-S315080093CC65EB0705A90141EA9461A001001B61EB55
-S315080093DC0501CB0043EA5073C400A01943EB0701FF
-S315080093EC4B0243EAD0534402204619460023FEF7A3
-S315080093FC07FF174B5B68C3F3014301335B00B0FBF4
-S3150800940CF3F0F8BD124B5B68C3F388131E460027AE
-S3150800941C5C010025E41A65EB0705A90141EA94618C
-S3150800942CA001001B61EB0501CB0043EA5073C40095
-S3150800943CA01943EB07018B0243EA9053840220469A
-S3150800944C19460023FEF7DCFED3E70348F8BD00BF38
-S3150800945C003802400024F40000127A00002800F0BC
-S3150800946CA28070B50446524B1B6803F00F038B425F
-S3150800947C0CD24F4A136823F00F030B43136013687F
-S3150800948C03F00F03994201D0012070BD236813F035
-S3150800949C020F17D013F0040F04D0464A936843F40E
-S315080094ACE0539360236813F0080F04D0414A93687D
-S315080094BC43F4604393603F4A936823F0F003A06833
-S315080094CC034393600D46236813F0010F31D063688C
-S315080094DC012B20D0022B25D0364A126812F0020F27
-S315080094EC63D034498A6822F0030213438B60FFF772
-S315080094FCB5F906462F4B9B6803F00C036268B3EB71
-S3150800950C820F16D0FFF7AAF9801B41F288339842CE
-S3150800951CF0D9032070BD274A126812F4003FE0D137
-S3150800952C012070BD234A126812F0007FD9D10120A0
-S3150800953C70BD1F4B1B6803F00F039D420CD21C4ACF
-S3150800954C136823F00F032B431360136803F00F0300
-S3150800955C9D4201D0012070BD236813F0040F06D07C
-S3150800956C144A936823F4E053E1680B439360236829
-S3150800957C13F0080F07D00F4A936823F46043216948
-S3150800958C43EAC1039360FFF7FFFE0A4B9B68C3F3DC
-S3150800959C0313094AD35CD840084B18600020FFF720
-S315080095AC1FF9002070BD01207047012070BD00BF57
-S315080095BC003C02400038024010A0000808000020B9
-S315080095CC014B1868704700BF0800002008B5FFF764
-S315080095DCF7FF044B9B68C3F38223034AD35CD8403A
-S315080095EC08BD00BF0038024020A0000808B5FFF7E8
-S315080095FCE7FF044B9B68C3F34233034AD35CD8405A
-S3150800960C08BD00BF0038024020A0000870470000C3
-S3150800961C10B5044683680269134342691343C26949
-S3150800962C1343016808689C4A024013430B6022687E
-S3150800963C536823F44053E1680B435360A369226AC9
-S3150800964C134321688A6822F4306213438B602368BB
-S3150800965C924A93422BD0924A93423BD0914A9342D8
-S3150800966C50D0914A934263D0904A934275D0904A0F
-S3150800967C934200F08A808F4A934200F09E808E4A6D
-S3150800968C934200F0B2801023E269B2F5004F00F065
-S3150800969CD480082B00F26F81DFE813F03201470102
-S315080096AC51016D015A016D016D016D016401834B08
-S315080096BCD3F8903003F00303032B09D8DFE803F043
-S315080096CC0204AD060123DFE70423DDE70823DBE705
-S315080096DC1023D9E7794BD3F8903003F00C030C2BF5
-S315080096EC0ED8DFE803F0070D0D0D090D0D0D9C0DB9
-S315080096FC0D0D0B000023C7E70423C5E70823C3E7B2
-S3150800970C1023C1E76D4BD3F8903003F03003102BC0
-S3150800971C0AD006D9202B00F08480302B06D10823DA
-S3150800972CB2E71BB90023AFE70423ADE71023ABE779
-S3150800973C624BD3F8903003F0C003402B09D005D9FF
-S3150800974C802B70D0C02B06D108239DE71BB90023AC
-S3150800975C9AE7042398E7102396E7584BD3F89030EA
-S3150800976C03F44073B3F5807F0BD007D9B3F5007FAC
-S3150800977C5BD0B3F5407F06D1082385E71BB90023D8
-S3150800978C82E7042380E710237EE74C4BD3F890300E
-S3150800979C03F44063B3F5806F0BD007D9B3F5006FAC
-S315080097AC45D0B3F5406F06D108236DE71BB90123E5
-S315080097BC6AE7042368E7102366E7404BD3F8903032
-S315080097CC03F44053B3F5805F0BD007D9B3F5005FAC
-S315080097DC2FD0B3F5405F06D1082355E71BB90023F4
-S315080097EC52E7042350E710234EE7344BD3F8903056
-S315080097FC03F44043B3F5804F0BD007D9B3F5004FAC
-S3150800980C19D0B3F5404F06D108233DE71BB9002301
-S3150800981C3AE7042338E7102336E7022334E7022312
-S3150800982C32E7022330E702232EE702232CE7022332
-S3150800983C2AE7022328E7022326E7082B5DD8DFE868
-S3150800984C03F0051F3F5C485C5C5C5300FFF7BEFEEB
-S3150800985C6268530803EB4003B3FBF2F39BB2002098
-S3150800986CA3F110014FF6EF72914200F287809AB27B
-S3150800987C22F00F02C3F3420313432268D36050E06D
-S3150800988CFFF7B4FE6268530803EB4003B3FBF2F32D
-S3150800989C9BB20020E4E700BFF369FFEF001001401C
-S315080098AC0044004000480040004C00400050004076
-S315080098BC0014014000780040007C0040003802404B
-S315080098CC6268304B03EB5203B3FBF2F39BB20020F6
-S315080098DCC6E7FFF759FD6268530803EB4003B3FB71
-S315080098ECF2F39BB20020BBE76268530803F580339A
-S315080098FCB3FBF2F39BB20020B2E701200023AFE7DB
-S3150800990CFFF764FE626800EB5203B3FBF2F39BB2FB
-S3150800991C0020A3F110014FF6EF72914230D822685D
-S3150800992CD36000232366636610BDFFF75FFE62688B
-S3150800993C00EB5203B3FBF2F39BB20020E9E7626833
-S3150800994C114B03EB5203B3FBF2F39BB20020E0E797
-S3150800995CFFF71AFD626800EB5203B3FBF2F39BB2F6
-S3150800996C0020D6E76268530803F50043B3FBF2F30D
-S3150800997C9BB20020CDE701200023CAE70120D0E7DF
-S3150800998C0120CEE70048E8010024F400436A13F0EE
-S3150800999C010F06D00268536823F40033816A0B431F
-S315080099AC5360436A13F0020F06D00268536823F417
-S315080099BC8033C16A0B435360436A13F0040F06D015
-S315080099CC0268536823F48023016B0B435360436A84
-S315080099DC13F0080F06D00268536823F40043416B52
-S315080099EC0B435360436A13F0100F06D00268936852
-S315080099FC23F48053816B0B439360436A13F0200F57
-S31508009A0C06D00268936823F40053C16B0B4393602A
-S31508009A1C436A13F0400F0AD00268536823F4801384
-S31508009A2C016C0B435360036CB3F5801F0BD0436A70
-S31508009A3C13F0800F06D00268536823F40023816C58
-S31508009A4C0B43536070470268536823F4C003416C98
-S31508009A5C0B435360EBE72DE9F04105460F461646D6
-S31508009A6C9846069C2B68DB6937EA03030CBF01236F
-S31508009A7C0023B3421DD1B4F1FF3FF3D0FEF7EEFE3F
-S31508009A8CA0EB0800844201D3002CEBD12A6813689A
-S31508009A9C23F4D07313602A68936823F00103936048
-S31508009AAC20236B67AB67002385F870300320BDE86D
-S31508009ABCF0810020BDE8F0812DE9F04383B01E4605
-S31508009ACC836F202B03D0022003B0BDE8F083044635
-S31508009ADC0D469046002A18BF002976D090F87030AB
-S31508009AEC012B01D10220EFE7012380F87030002307
-S31508009AFCC36722238367FEF7B1FE0746A4F858808E
-S31508009B0CA4F85A80A368B3F5805F06D0A3B9226976
-S31508009B1C72B9FF22A4F85C2014E0226922B940F23B
-S31508009B2CFF12A4F85C200DE0FF22A4F85C2009E0E3
-S31508009B3C7F22A4F85C2005E0B3F1805F0AD00022EE
-S31508009B4CA4F85C20B4F85C80B3F5805F0CD04FF0B9
-S31508009B5C00091EE022691AB97F22A4F85C20F1E7F5
-S31508009B6C3F22A4F85C20EDE7236913B14FF00009F6
-S31508009B7C0FE0A94600250CE023685B6A08EA030394
-S31508009B8C29F8023BB4F85A309BB2013B9BB2A4F8B5
-S31508009B9C5A30B4F85A309BB28BB100963B46002229
-S31508009BAC20212046FFF757FF88B9002DE4D02368FB
-S31508009BBC5A6A5FFA88F3134005F8013BE2E720235B
-S31508009BCCA367002084F870007EE701207CE7032059
-S31508009BDC7AE710B582B004460023C367FEF73EFE4B
-S31508009BEC2268126812F0080F07D120236367A3674F
-S31508009BFC002084F8700002B010BD6FF07E4300930D
-S31508009C0C034600224FF400112046FFF724FF0028D4
-S31508009C1CEBD00320EFE768B310B50446436F03B3E4
-S31508009C2C242363672268136823F001031360204614
-S31508009C3CFFF7EEFC01281FD0636ABBB9226853688C
-S31508009C4C23F4904353602268936823F02A039360A5
-S31508009C5C2268136843F0010313602046FFF7B9FF27
-S31508009C6C10BD80F87030FFF7D1FCD9E72046FFF716
-S31508009C7C8DFEE3E70120704710BD000010B40F4AB3
-S31508009C8CD2F8883043F47003C2F888300C4B196844
-S31508009C9C41F001011960002098601C6809492140AF
-S31508009CAC196009495960196821F480211960D8602E
-S31508009CBC4FF0006393605DF8044B704700ED00E0CD
-S31508009CCC00380240FFFFF6FE10300024014B024A12
-S31508009CDC9A60704700ED00E00080000800B595B06A
-S31508009CEC3022002108A800F067F900230393049397
-S31508009CFC059306930793214B1A6C42F080521A640B
-S31508009D0C1B6C03F080530193019B1D4B1A6842F49C
-S31508009D1C40421A601B6803F440430293029B0123DA
-S31508009D2C08934FF4A023099302230E934FF4800251
-S31508009D3C0F92082210924FF4D87211921293139321
-S31508009D4C08A8FFF737F900B1FEE7FFF7F5F800B1F9
-S31508009D5CFEE70F23039302230493002305934FF482
-S31508009D6CA05306934FF480530793072103A8FFF7D4
-S31508009D7C75FB00B1FEE715B05DF804FB0038024030
-S31508009D8C0070004008B5FFF7A1FFFEF74FFDFFF77F
-S31508009D9CA5FF00F0CDF8FEF7F3FC08BD08B5FFF7F4
-S31508009DACF1FFFEF75FFCFEF7F5FCFEF7E3FCFAE7BE
-S31508009DBC2DE9F0418CB0464B1A6C42F080521A646D
-S31508009DCC1A6C02F080520192019A5A6C42F4804243
-S31508009DDC5A645A6C02F480420292029A1A6B42F046
-S31508009DEC02021A631A6B02F002020392039A1A6BA6
-S31508009DFC42F008021A631A6B02F008020492049ADB
-S31508009E0C1A6C42F480221A641A6C02F480220592A7
-S31508009E1C059A1A6C42F000721A641B6C03F00073F4
-S31508009E2C0693069B0320FEF725FF002211466FF0CA
-S31508009E3C0B00FEF731FF002211466FF00A00FEF701
-S31508009E4C2BFF002211466FF00900FEF725FF0022B2
-S31508009E5C11466FF00400FEF71FFF002211466FF043
-S31508009E6C0300FEF719FF002211466FF00100FEF7FA
-S31508009E7C13FF002211464FF0FF30FEF70DFF80232B
-S31508009E8C079301230893002409940A94114D07A9F2
-S31508009E9C2846FEF75DFF4FF44078CDF81C80022764
-S31508009EAC0897099403260A9607230B9307A90A48C9
-S31508009EBCFEF74EFFCDF81C80089709940A960923DD
-S31508009ECC0B9307A92846FEF743FF0CB0BDE8F081B3
-S31508009EDC0038024000040240000C0240DFF834D07F
-S31508009EEC002103E00C4B5B58435004310B480C4BD8
-S31508009EFC42189A42F6D30B4A02E0002342F8043B76
-S31508009F0C094B9A42F9D3FFF7B9FE00F031F8FFF77F
-S31508009F1C45FF70470000052038A000080000002007
-S31508009F2C0C0000200C00002024010020FEE7000095
-S31508009F3C08B5FFF745FB084BA3FB00308009FEF775
-S31508009F4CDBFE0420FEF7EEFE002211464FF0FF3032
-S31508009F5CFEF7A2FE08BD00BFD34D621008B5FEF78A
-S31508009F6C7DFC08BD08B5FEF76DFCFEF7ECFE08BDDA
-S31508009F7C70B50D4E0D4CA41BA4100025A54209D195
-S31508009F8C0B4E0C4C00F020F8A41BA4100025A5427F
-S31508009F9C05D170BD56F8253098470135EEE756F8C9
-S31508009FAC253098470135F2E730A0000830A00008A4
-S31508009FBC30A0000834A0000802440346934200D19E
-S31508009FCC704703F8011BF9E7F8B500BFF8BC08BCE5
-S31508009FDC9E467047F8B500BFF8BC08BC9E4670474D
-S31508009FEC05020602060307030803090309040A0403
-S31508009FFC0B040C040C050D050E050F050F061006B3
-S3150800A00C10071008000000000000000001020304FD
-S3110800A01C06070809000000000102030402
-S30D0800A02814E2FF7F01000000AD
-S3090800A030F1810008A4
-S3090800A034CD810008C4
-S3110800A03801000000100000000024F400E5
-S70508009EE96B
+S31508008D5C00230F2B00F2E680F0B583B03AE0092623
+S31508008D6C00E0002606FA0EF6354302326E4E46F839
+S31508008D7C22506E4A1568E24305EA02064F6817F454
+S31508008D8C803F01D044EA0506684D2E606D6802EAFC
+S31508008D9C05064F6817F4003F01D044EA0506634DF3
+S31508008DAC6E60AD6802EA05064F6817F4801F01D09D
+S31508008DBC44EA05065D4DAE60ED682A404E6816F429
+S31508008DCC001F01D044EA0502584CE26001330F2B10
+S31508008DDC00F2A68001229A400C681440A242F5D1F2
+S31508008DEC4D686E1E112D18BF012E01D9122D15D1E5
+S31508008DFC85684FEA430E032707FA0EF725EA070597
+S31508008E0CCE6806FA0EF635438560456825EA0202F1
+S31508008E1C4D68C5F300159D402A434260C6685F003D
+S31508008E2C0322BA40D24316408D68BD402E43C66015
+S31508008E3C4D68122D18BF022D14D14FEAD30C0CF124
+S31508008E4C080C50F82C5003F0070E4FEA8E0E0F261E
+S31508008E5C06FA0EF625EA06050E6906FA0EF63543E7
+S31508008E6C40F82C5005682A404D6805F00305BD40AE
+S31508008E7C2A4302604A6812F0805FA7D02C4A556CC8
+S31508008E8C45F480455564526C02F480420192019A6D
+S31508008E9C9A08961C244D55F8265003F003064FEAFB
+S31508008EAC860E0F2606FA0EF625EA0605214FB84257
+S31508008EBC3FF457AF204EB04222D006F58066B0423A
+S31508008ECC20D006F58066B0421ED006F58066B04204
+S31508008EDC1CD006F58066B0421AD006F58066B042FC
+S31508008EEC18D006F58066B04216D006F58066B042F4
+S31508008EFC14D006F58066B0423FF431AF0A2631E746
+S31508008F0C01262FE702262DE703262BE7042629E759
+S31508008F1C052627E7062625E7072623E7082621E759
+S31508008F2C03B0F0BD704700BF00380140003C01405B
+S31508008F3C00380240000002400004024012B909043D
+S31508008F4C816170478161704710B582B01B4B1A6CF2
+S31508008F5C42F080521A641B6C03F080530193019BF8
+S31508008F6C174A136843F480331360FFF777FC0446FB
+S31508008F7C134B5B6813F4803F08D1FFF76FFC001B9B
+S31508008F8CB0F57A7FF4D9032002B010BD0C4A1368E9
+S31508008F9C43F400331360FFF761FC0446084B5B6827
+S31508008FAC13F4003F07D1FFF759FC001BB0F57A7F85
+S31508008FBCF4D90320E8E70020E6E700BF00380240B2
+S31508008FCC00700040002800F0098270B582B0044693
+S31508008FDC036813F0010F3AD0A24B9B6803F00C03FD
+S31508008FEC042B2BD09F4B9B6803F00C03082B20D02B
+S31508008FFC6368B3F5803F50D0002B54D1994B1A684F
+S3150800900C22F480321A601A6822F480221A60636885
+S3150800901C002B5FD0FFF722FC0546924B1B6813F416
+S3150800902C003F14D1FFF71AFC401B6428F5D903201E
+S3150800903CD9E18C4B5B6813F4800FD9D0894B1B682C
+S3150800904C13F4003F03D06368002B00F0C981236832
+S3150800905C13F0020F64D0834B9B6813F00C0F4DD0A2
+S3150800906C804B9B6803F00C03082B42D0E368002B5B
+S3150800907C79D07C4A136843F001031360FFF7EEFBC3
+S3150800908C0546784B1B6813F0020F63D1FFF7E6FB16
+S3150800909C401B0228F5D90320A5E1724A136843F44C
+S315080090AC80331360B3E7B3F5A02F09D06D4B1A685C
+S315080090BC22F480321A601A6822F480221A60A6E713
+S315080090CC684B1A6842F480221A601A6842F4803295
+S315080090DC1A609CE7FFF7C2FB0546624B1B6813F444
+S315080090EC003FB4D0FFF7BAFB401B6428F5D9032020
+S315080090FC79E15C4B5B6813F4800FB7D1594B1B684D
+S3150800910C13F0020F04D0E368012B01D001206AE1A9
+S3150800911C544A136823F0F803216943EAC103136020
+S3150800912C236813F0080F46D0636983B34D4A536F0F
+S3150800913C43F001035367FFF791FB0546494B5B6FF9
+S3150800914C13F0020F37D1FFF789FB401B0228F5D91C
+S3150800915C032048E1434A136823F0F803216943EADC
+S3150800916CC1031360DCE73F4A136823F0010313605D
+S3150800917CFFF774FB05463B4B1B6813F0020FCFD069
+S3150800918CFFF76CFB401B0228F5D903202BE1354A67
+S3150800919C536F23F001035367FFF760FB0546314B0A
+S315080091AC5B6F13F0020F06D0FFF758FB401B022823
+S315080091BCF5D9032017E1236813F0040F7ED0294B49
+S315080091CC1B6C13F0805F31D1264B1A6C42F080521F
+S315080091DC1A641B6C03F080530193019B0125224BE7
+S315080091EC1B6813F4807F23D0A368012B34D0002B83
+S315080091FC3CD11C4B1A6F22F001021A671A6F22F027
+S3150800920C04021A67A368002B46D0FFF727FB06460D
+S3150800921C144B1B6F13F0020F4FD1FFF71FFB801B6C
+S3150800922C41F288339842F3D90320DCE00025D6E7CF
+S3150800923C0D4A136843F480731360FFF70FFB064659
+S3150800924C094B1B6813F4807FCED1FFF707FB801BF5
+S3150800925C6428F5D90320C6E0024A136F43F00103CC
+S3150800926C1367CFE70038024000700040052B09D081
+S3150800927C604B1A6F22F001021A671A6F22F0040269
+S3150800928C1A67BFE75B4B1A6F42F004021A671A6F2C
+S3150800929C42F001021A67B5E7FFF7E0FA0646554BA6
+S315080092AC1B6F13F0020F08D0FFF7D8FA801B41F298
+S315080092BC88339842F3D9032095E0FDB9A369002BAE
+S315080092CC00F090804B4A926802F00C02082A58D09B
+S315080092DC022B19D0474A136823F080731360FFF7E3
+S315080092ECBDFA0446434B1B6813F0007F47D0FFF7C3
+S315080092FCB5FA001B0228F5D9032074E03D4A136C15
+S3150800930C23F080531364D9E73A4A136823F0807321
+S3150800931C1360FFF7A3FA0546364B1B6813F0007F5C
+S3150800932C06D0FFF79BFA401B0228F5D903205AE012
+S3150800933CE369226A1343626A43EA8213A26A5208F1
+S3150800934C013A43EA0243E26A43EA026343F00053F2
+S3150800935C284A5360136843F080731360FFF77EFA4C
+S3150800936C0446244B1B6813F0007F06D1FFF776FAE8
+S3150800937C001B0228F5D9032035E0002033E0002035
+S3150800938C31E01C4A5268012B2FD002F48003E169A4
+S3150800939C8B4201D0012026E002F03F03216A8B4262
+S315080093AC01D001201FE0616A47F6C0731340B3EB86
+S315080093BC811F01D0012016E002F44031A36A5B0834
+S315080093CC013BB1EB034F01D001200CE002F07062B7
+S315080093DCE36AB2EB036F0AD0012004E00120704760
+S315080093EC012000E0002002B070BD0120FBE7002040
+S315080093FCF9E700BF00380240F8B5314B9B6803F01B
+S3150800940C0C03042B59D0082B01D02E48F8BD2C4B35
+S3150800941C5A6802F03F025B6813F4800F2AD0284B77
+S3150800942C5B68C3F388131E4600275C010025E41A03
+S3150800943C65EB0705A90141EA9461A001001B61EBE4
+S3150800944C0501CB0043EA5073C400A01943EB07018E
+S3150800945C4B0243EAD0534402204619460023FEF732
+S3150800946CCFFE174B5B68C3F3014301335B00B0FBBC
+S3150800947CF3F0F8BD124B5B68C3F388131E4600273E
+S3150800948C5C010025E41A65EB0705A90141EA94611C
+S3150800949CA001001B61EB0501CB0043EA5073C40025
+S315080094ACA01943EB07018B0243EA9053840220462A
+S315080094BC19460023FEF7A4FED3E70348F8BD00BF00
+S315080094CC003802400024F40000127A00002800F04C
+S315080094DCA38070B50446524B1B6803F00F038B42EE
+S315080094EC0CD24F4A136823F00F030B43136013680F
+S315080094FC03F00F03994201D0012070BD236813F0C5
+S3150800950C020F17D013F0040F04D0464A936843F49D
+S3150800951CE0539360236813F0080F04D0414A93680C
+S3150800952C43F4604393603F4A936823F0F003A068C2
+S3150800953C034393600D46236813F0010F31D063681B
+S3150800954C012B20D0022B25D0364A126812F0020FB6
+S3150800955C64D034498A6822F0030213438B60FFF700
+S3150800956C7DF906462F4B9B6803F00C036268B3EB38
+S3150800957C820F16D0FFF772F9801B41F28833984296
+S3150800958CF0D9032070BD274A126812F4003FE0D1C7
+S3150800959C012070BD234A126812F0007FD9D1012030
+S315080095AC70BD1F4B1B6803F00F039D420CD21C4A5F
+S315080095BC136823F00F032B431360136803F00F0390
+S315080095CC9D4201D0012070BD236813F0040F06D00C
+S315080095DC144A936823F4E053E1680B4393602368B9
+S315080095EC13F0080F07D00F4A936823F460432169D8
+S315080095FC43EAC1039360FFF7FFFE0A4B9B68C3F36C
+S3150800960C0313094AD35CD840084B1860084B1868F2
+S3150800961CFFF7E6F8002070BD01207047012070BDE9
+S3150800962C003C02400038024090A0000808000020C8
+S3150800963C04000020014B1868704700BF0800002082
+S3150800964C08B5FFF7F7FF044B9B68C3F38223034A5D
+S3150800965CD35CD84008BD00BF00380240A0A0000863
+S3150800966C08B5FFF7E7FF044B9B68C3F34233034A7D
+S3150800967CD35CD84008BD00BF00380240A0A0000843
+S3150800968C7047000010B504468368026913434269A3
+S3150800969C1343C2691343016808689C4A0240134382
+S315080096AC0B602268536823F44053E1680B435360FC
+S315080096BCA369226A134321688A6822F43062134329
+S315080096CC8B602368924A93422BD0924A93423BD0A2
+S315080096DC914A934250D0914A934263D0904A93420E
+S315080096EC75D0904A934200F08A808F4A934200F0D4
+S315080096FC9E808E4A934200F0B2801023E269B2F53E
+S3150800970C004F00F0D480082B00F26F81DFE813F0CD
+S3150800971C3201470151016D015A016D016D016D014F
+S3150800972C6401834BD3F8903003F00303032B09D859
+S3150800973CDFE803F00204AD060123DFE70423DDE7C7
+S3150800974C0823DBE71023D9E7794BD3F8903003F0DD
+S3150800975C0C030C2B0ED8DFE803F0070D0D0D090DC5
+S3150800976C0D0D9C0D0D0D0B000023C7E70423C5E753
+S3150800977C0823C3E71023C1E76D4BD3F8903003F0E9
+S3150800978C3003102B0AD006D9202B00F08480302BFE
+S3150800979C06D10823B2E71BB90023AFE70423ADE7CC
+S315080097AC1023ABE7624BD3F8903003F0C003402B81
+S315080097BC09D005D9802B70D0C02B06D108239DE77C
+S315080097CC1BB900239AE7042398E7102396E7584B0E
+S315080097DCD3F8903003F44073B3F5807F0BD007D9D8
+S315080097ECB3F5007F5BD0B3F5407F06D1082385E738
+S315080097FC1BB9002382E7042380E710237EE74C4B32
+S3150800980CD3F8903003F44063B3F5806F0BD007D9C7
+S3150800981CB3F5006F45D0B3F5406F06D108236DE755
+S3150800982C1BB901236AE7042368E7102366E7404B54
+S3150800983CD3F8903003F44053B3F5805F0BD007D9B7
+S3150800984CB3F5005F2FD0B3F5405F06D1082355E773
+S3150800985C1BB9002352E7042350E710234EE7344B79
+S3150800986CD3F8903003F44043B3F5804F0BD007D9A7
+S3150800987CB3F5004F19D0B3F5404F06D108233DE791
+S3150800988C1BB900233AE7042338E7102336E70223EB
+S3150800989C34E7022332E7022330E702232EE70223BA
+S315080098AC2CE702232AE7022328E7022326E7082BBC
+S315080098BC5DD8DFE803F0051F3F5C485C5C5C530031
+S315080098CCFFF7BEFE6268530803EB4003B3FBF2F3E3
+S315080098DC9BB20020A3F110014FF6EF72914200F2F1
+S315080098EC87809AB222F00F02C3F34203134322680D
+S315080098FCD36050E0FFF7B4FE6268530803EB4003ED
+S3150800990CB3FBF2F39BB20020E4E700BFF369FFEF69
+S3150800991C001001400044004000480040004C004044
+S3150800992C005000400014014000780040007C0040C4
+S3150800993C003802406268304B03EB5203B3FBF2F378
+S3150800994C9BB20020C6E7FFF757FD6268530803EB86
+S3150800995C4003B3FBF2F39BB20020BBE762685308E3
+S3150800996C03F58033B3FBF2F39BB20020B2E7012078
+S3150800997C0023AFE7FFF764FE626800EB5203B3FB04
+S3150800998CF2F39BB20020A3F110014FF6EF7291424D
+S3150800999C30D82268D36000232366636610BDFFF7B0
+S315080099AC5FFE626800EB5203B3FBF2F39BB2002036
+S315080099BCE9E76268114B03EB5203B3FBF2F39BB274
+S315080099CC0020E0E7FFF718FD626800EB5203B3FBD3
+S315080099DCF2F39BB20020D6E76268530803F50043FE
+S315080099ECB3FBF2F39BB20020CDE701200023CAE7B4
+S315080099FC0120D0E70120CEE70048E8010024F40056
+S31508009A0C436A13F0010F06D00268536823F4003337
+S31508009A1C816A0B435360436A13F0020F06D002683F
+S31508009A2C536823F48033C16A0B435360436A13F0BB
+S31508009A3C040F06D00268536823F48023016B0B438A
+S31508009A4C5360436A13F0080F06D00268536823F470
+S31508009A5C0043416B0B435360436A13F0100F06D057
+S31508009A6C0268936823F48053816B0B439360436AB3
+S31508009A7C13F0200F06D00268936823F40053C16BC9
+S31508009A8C0B439360436A13F0400F0AD0026853687D
+S31508009A9C23F48013016C0B435360036CB3F5801FDE
+S31508009AAC0BD0436A13F0800F06D00268536823F470
+S31508009ABC0023816C0B43536070470268536823F488
+S31508009ACCC003416C0B435360EBE72DE9F0410446A8
+S31508009ADC0F4616469846069D2368DB6937EA030344
+S31508009AEC0CBF01230023B3423CD1B5F1FF3FF3D0A1
+S31508009AFCFEF7B4FEA0EB0800854220D3FDB123681F
+S31508009B0C1A6812F0040FE7D0DA6912F4006FE3D082
+S31508009B1C4FF400621A622268136823F4D073136038
+S31508009B2C2268936823F00103936020236367A36775
+S31508009B3CE367002384F870300320BDE8F0812268BF
+S31508009B4C136823F4D07313602268936823F0010317
+S31508009B5C936020236367A367002384F8703003207F
+S31508009B6CBDE8F0810020BDE8F0812DE9F04383B013
+S31508009B7C1E46836F202B03D0022003B0BDE8F0836A
+S31508009B8C04460D469046002A18BF002977D090F84F
+S31508009B9C7030012B01D10220EFE7012380F87030D9
+S31508009BAC0023C36722238367FEF758FE0746A4F8EB
+S31508009BBC5880A4F85A80A368B3F5805F06D0A3B979
+S31508009BCC226972B9FF22A4F85C2014E0226922B932
+S31508009BDC40F2FF12A4F85C200DE0FF22A4F85C20EA
+S31508009BEC09E07F22A4F85C2005E0B3F1805F0DD074
+S31508009BFC0022A4F85C20B4F85C80B3F5805F0FD023
+S31508009C0C4FF00009002384F870301EE022691AB957
+S31508009C1C7F22A4F85C20EEE73F22A4F85C20EAE752
+S31508009C2C236913B14FF00009ECE7A9460025E9E7CB
+S31508009C3C23685B6A08EA030329F8023BB4F85A302E
+S31508009C4C9BB2013B9BB2A4F85A30B4F85A309BB27B
+S31508009C5C8BB100963B46002220212046FFF735FFA4
+S31508009C6C78B9002DE4D023685A6A5FFA88F3134052
+S31508009C7C05F8013BE2E72023A36700207DE70120D6
+S31508009C8C7BE7032079E710B582B004460023C36747
+S31508009C9CFEF7E4FD2268126812F0080F07D120239C
+S31508009CAC6367A367002084F8700002B010BD6FF0DC
+S31508009CBC7E430093034600224FF400112046FFF71B
+S31508009CCC04FF0028EBD00320EFE768B310B5044671
+S31508009CDC436F03B3242363672268136823F00103D5
+S31508009CEC13602046FFF7CEFC01281FD0636ABBB968
+S31508009CFC2268536823F4904353602268936823F0D0
+S31508009D0C2A0393602268136843F001031360204604
+S31508009D1CFFF7B9FF10BD80F87030FFF7B1FCD9E733
+S31508009D2C2046FFF76DFEE3E70120704710BD0000E3
+S31508009D3C054BD3F8882042F47002C3F888204FF0FC
+S31508009D4C00629A60704700BF00ED00E0014B024AC2
+S31508009D5C9A60704700ED00E00080000800B595B0E9
+S31508009D6C3022002108A800F067F900230393049316
+S31508009D7C059306930793214B1A6C42F080521A648A
+S31508009D8C1B6C03F080530193019B1D4B1A6842F41C
+S31508009D9C40421A601B6803F440430293029B01235A
+S31508009DAC08934FF4A023099302230E934FF48002D1
+S31508009DBC0F92082210924FF4D872119212931393A1
+S31508009DCC08A8FFF7FFF800B1FEE7FFF7BDF800B1EA
+S31508009DDCFEE70F23039302230493002305934FF402
+S31508009DECA05306934FF480530793072103A8FFF754
+S31508009DFC6DFB00B1FEE715B05DF804FB00380240B8
+S31508009E0C0070004008B5FFF7A1FFFEF70FFDFFF73E
+S31508009E1CA5FF00F0CDF8FEF7B3FC08BD08B5FFF7B3
+S31508009E2CF1FFFEF71FFCFEF7B5FCFEF7A3FCFAE7FD
+S31508009E3C2DE9F0418CB0464B1A6C42F080521A64EC
+S31508009E4C1A6C02F080520192019A5A6C42F48042C2
+S31508009E5C5A645A6C02F480420292029A1A6B42F0C5
+S31508009E6C02021A631A6B02F002020392039A1A6B25
+S31508009E7C42F008021A631A6B02F008020492049A5A
+S31508009E8C1A6C42F480221A641A6C02F48022059227
+S31508009E9C059A1A6C42F000721A641B6C03F0007374
+S31508009EAC0693069B0320FEF7E5FE002211466FF08B
+S31508009EBC0B00FEF7F1FE002211466FF00A00FEF7C2
+S31508009ECCEBFE002211466FF00900FEF7E5FE0022B4
+S31508009EDC11466FF00400FEF7DFFE002211466FF004
+S31508009EEC0300FEF7D9FE002211466FF00100FEF7BB
+S31508009EFCD3FE002211464FF0FF30FEF7CDFE80232D
+S31508009F0C079301230893002409940A94114D07A971
+S31508009F1C2846FEF71DFF4FF44078CDF81C80022723
+S31508009F2C0897099403260A9607230B9307A90A4848
+S31508009F3CFEF70EFFCDF81C80089709940A9609239C
+S31508009F4C0B9307A92846FEF703FF0CB0BDE8F08172
+S31508009F5C0038024000040240000C0240DFF834D0FE
+S31508009F6C002103E00C4B5B58435004310B480C4B57
+S31508009F7C42189A42F6D30B4A02E0002342F8043BF5
+S31508009F8C094B9A42F9D3FFF7D3FE00F031F8FFF7E5
+S31508009F9C45FF704700000520B8A000080000002007
+S31508009FAC0C0000200C00002024010020FEE7000015
+S31508009FBC08B5FFF73FFB084BA3FB00308009FEF7FB
+S31508009FCC9BFE0420FEF7AEFE002211464FF0FF3032
+S31508009FDCFEF762FE08BD00BFD34D621008B5FEF74A
+S31508009FEC3DFC08BD08B5FEF72DFCFEF7ACFE08BD1A
+S31508009FFC70B50D4E0D4CA41BA4100025A54209D115
+S3150800A00C0B4E0C4C00F020F8A41BA4100025A542FE
+S3150800A01C05D170BD56F8253098470135EEE756F848
+S3150800A02C253098470135F2E7B0A00008B0A0000823
+S3150800A03CB0A00008B4A0000802440346934200D11D
+S3150800A04C704703F8011BF9E7F8B500BFF8BC08BC64
+S3150800A05C9E467047F8B500BFF8BC08BC9E467047CC
+S3150800A06C05020602060307030803090309040A0482
+S3150800A07C0B040C040C050D050E050F050F06100632
+S3150800A08C100710080000000000000000010203047D
+S3110800A09C06070809000000000102030482
+S30D0800A0A894E1FF7F01000000AE
+S3090800A0B0F181000824
+S3090800A0B4CD81000844
+S3110800A0B801000000100000000024F40065
+S70508009F69EA
diff --git a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_TrueStudio/Prog/lib/CMSIS/Device/ST/STM32F7xx/Include/stm32f746xx.h b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_TrueStudio/Prog/lib/CMSIS/Device/ST/STM32F7xx/Include/stm32f746xx.h
index 5de6c6e1..2c47d3f0 100644
--- a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_TrueStudio/Prog/lib/CMSIS/Device/ST/STM32F7xx/Include/stm32f746xx.h
+++ b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_TrueStudio/Prog/lib/CMSIS/Device/ST/STM32F7xx/Include/stm32f746xx.h
@@ -12,29 +12,13 @@
******************************************************************************
* @attention
*
- * © COPYRIGHT(c) 2016 STMicroelectronics
+ * © Copyright (c) 2016 STMicroelectronics.
+ * All rights reserved.
*
- * Redistribution and use in source and binary forms, with or without modification,
- * are permitted provided that the following conditions are met:
- * 1. Redistributions of source code must retain the above copyright notice,
- * this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright notice,
- * this list of conditions and the following disclaimer in the documentation
- * and/or other materials provided with the distribution.
- * 3. Neither the name of STMicroelectronics nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
- * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
- * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ * This software component is licensed by ST under BSD 3-Clause license,
+ * the "License"; You may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at:
+ * opensource.org/licenses/BSD-3-Clause
*
******************************************************************************
*/
@@ -1433,28 +1417,32 @@ typedef struct
/* Analog to Digital Converter */
/* */
/******************************************************************************/
+#define VREFINT_CAL_ADDR_CMSIS ((uint16_t*) (0x1FF0F44A)) /*!© COPYRIGHT(c) 2016 STMicroelectronics
+ * © Copyright (c) 2016 STMicroelectronics.
+ * All rights reserved.
*
- * Redistribution and use in source and binary forms, with or without modification,
- * are permitted provided that the following conditions are met:
- * 1. Redistributions of source code must retain the above copyright notice,
- * this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright notice,
- * this list of conditions and the following disclaimer in the documentation
- * and/or other materials provided with the distribution.
- * 3. Neither the name of STMicroelectronics nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
- * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
- * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ * This software component is licensed by ST under BSD 3-Clause license,
+ * the "License"; You may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at:
+ * opensource.org/licenses/BSD-3-Clause
*
******************************************************************************
*/
@@ -72,10 +56,10 @@
/* Uncomment the line below according to the target STM32 device used in your
application
*/
-#if !defined (STM32F756xx) && !defined (STM32F746xx) && !defined (STM32F745xx) && !defined (STM32F767xx) && \
- !defined (STM32F769xx) && !defined (STM32F777xx) && !defined (STM32F779xx) && !defined (STM32F722xx) && \
- !defined (STM32F723xx) && !defined (STM32F732xx) && !defined (STM32F733xx) && !defined (STM32F730xx) && \
- !defined (STM32F750xx)
+#if !defined (STM32F756xx) && !defined (STM32F746xx) && !defined (STM32F745xx) && !defined (STM32F765xx) && \
+ !defined (STM32F767xx) && !defined (STM32F769xx) && !defined (STM32F777xx) && !defined (STM32F779xx) && \
+ !defined (STM32F722xx) && !defined (STM32F723xx) && !defined (STM32F732xx) && !defined (STM32F733xx) && \
+ !defined (STM32F730xx) && !defined (STM32F750xx)
/* #define STM32F756xx */ /*!< STM32F756VG, STM32F756ZG, STM32F756ZG, STM32F756IG, STM32F756BG,
STM32F756NG Devices */
@@ -113,11 +97,11 @@
#endif /* USE_HAL_DRIVER */
/**
- * @brief CMSIS Device version number V1.2.4
+ * @brief CMSIS Device version number V1.2.5
*/
#define __STM32F7_CMSIS_VERSION_MAIN (0x01) /*!< [31:24] main version */
#define __STM32F7_CMSIS_VERSION_SUB1 (0x02) /*!< [23:16] sub1 version */
-#define __STM32F7_CMSIS_VERSION_SUB2 (0x04) /*!< [15:8] sub2 version */
+#define __STM32F7_CMSIS_VERSION_SUB2 (0x05) /*!< [15:8] sub2 version */
#define __STM32F7_CMSIS_VERSION_RC (0x00) /*!< [7:0] release candidate */
#define __STM32F7_CMSIS_VERSION ((__STM32F7_CMSIS_VERSION_MAIN << 24)\
|(__STM32F7_CMSIS_VERSION_SUB1 << 16)\
diff --git a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_TrueStudio/Prog/lib/STM32F7xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_TrueStudio/Prog/lib/STM32F7xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h
index 13b68bc2..2d265fb6 100644
--- a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_TrueStudio/Prog/lib/STM32F7xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h
+++ b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_TrueStudio/Prog/lib/STM32F7xx_HAL_Driver/Inc/Legacy/stm32_hal_legacy.h
@@ -7,7 +7,7 @@
******************************************************************************
* @attention
*
- * © Copyright (c) 2018 STMicroelectronics.
+ * © Copyright (c) 2019 STMicroelectronics.
* All rights reserved.
*
* This software component is licensed by ST under BSD 3-Clause license,
@@ -236,6 +236,16 @@
#define DAC_WAVEGENERATION_NOISE DAC_WAVE_NOISE
#define DAC_WAVEGENERATION_TRIANGLE DAC_WAVE_TRIANGLE
+#if defined(STM32G4) || defined(STM32H7)
+#define DAC_CHIPCONNECT_DISABLE DAC_CHIPCONNECT_EXTERNAL
+#define DAC_CHIPCONNECT_ENABLE DAC_CHIPCONNECT_INTERNAL
+#endif
+
+#if defined(STM32L1) || defined(STM32L4) || defined(STM32G0) || defined(STM32L5) || defined(STM32H7) || defined(STM32F4)
+#define HAL_DAC_MSP_INIT_CB_ID HAL_DAC_MSPINIT_CB_ID
+#define HAL_DAC_MSP_DEINIT_CB_ID HAL_DAC_MSPDEINIT_CB_ID
+#endif
+
/**
* @}
*/
@@ -296,8 +306,17 @@
#define HAL_DMAMUX_REQUEST_GEN_FALLING HAL_DMAMUX_REQ_GEN_FALLING
#define HAL_DMAMUX_REQUEST_GEN_RISING_FALLING HAL_DMAMUX_REQ_GEN_RISING_FALLING
+#if defined(STM32L4R5xx) || defined(STM32L4R9xx) || defined(STM32L4R9xx) || defined(STM32L4S5xx) || defined(STM32L4S7xx) || defined(STM32L4S9xx)
+#define DMA_REQUEST_DCMI_PSSI DMA_REQUEST_DCMI
+#endif
+
#endif /* STM32L4 */
+#if defined(STM32G0)
+#define DMA_REQUEST_DAC1_CHANNEL1 DMA_REQUEST_DAC1_CH1
+#define DMA_REQUEST_DAC1_CHANNEL2 DMA_REQUEST_DAC1_CH2
+#endif
+
#if defined(STM32H7)
#define DMA_REQUEST_DAC1 DMA_REQUEST_DAC1_CH1
@@ -355,6 +374,9 @@
#define DFSDM_FILTER_EXT_TRIG_LPTIM2 DFSDM_FILTER_EXT_TRIG_LPTIM2_OUT
#define DFSDM_FILTER_EXT_TRIG_LPTIM3 DFSDM_FILTER_EXT_TRIG_LPTIM3_OUT
+#define DAC_TRIGGER_LP1_OUT DAC_TRIGGER_LPTIM1_OUT
+#define DAC_TRIGGER_LP2_OUT DAC_TRIGGER_LPTIM2_OUT
+
#endif /* STM32H7 */
/**
@@ -450,7 +472,9 @@
#define FLASH_FLAG_SNECCE_BANK2RR FLASH_FLAG_SNECCERR_BANK2
#define FLASH_FLAG_DBECCE_BANK2RR FLASH_FLAG_DBECCERR_BANK2
#define FLASH_FLAG_STRBER_BANK2R FLASH_FLAG_STRBERR_BANK2
-#endif
+#define FLASH_FLAG_WDW FLASH_FLAG_WBNE
+#define OB_WRP_SECTOR_All OB_WRP_SECTOR_ALL
+#endif /* STM32H7 */
/**
* @}
@@ -486,6 +510,13 @@
#define HAL_SYSCFG_FASTMODEPLUS_I2C1 I2C_FASTMODEPLUS_I2C1
#define HAL_SYSCFG_FASTMODEPLUS_I2C2 I2C_FASTMODEPLUS_I2C2
#define HAL_SYSCFG_FASTMODEPLUS_I2C3 I2C_FASTMODEPLUS_I2C3
+#if defined(STM32G4)
+
+#define HAL_SYSCFG_EnableIOAnalogSwitchBooster HAL_SYSCFG_EnableIOSwitchBooster
+#define HAL_SYSCFG_DisableIOAnalogSwitchBooster HAL_SYSCFG_DisableIOSwitchBooster
+#define HAL_SYSCFG_EnableIOAnalogSwitchVDD HAL_SYSCFG_EnableIOSwitchVDD
+#define HAL_SYSCFG_DisableIOAnalogSwitchVDD HAL_SYSCFG_DisableIOSwitchVDD
+#endif /* STM32G4 */
/**
* @}
*/
@@ -494,7 +525,7 @@
/** @defgroup LL_FMC_Aliased_Defines LL FMC Aliased Defines maintained for compatibility purpose
* @{
*/
-#if defined(STM32L4) || defined(STM32F7) || defined(STM32H7)
+#if defined(STM32L4) || defined(STM32F7) || defined(STM32H7) || defined(STM32G4)
#define FMC_NAND_PCC_WAIT_FEATURE_DISABLE FMC_NAND_WAIT_FEATURE_DISABLE
#define FMC_NAND_PCC_WAIT_FEATURE_ENABLE FMC_NAND_WAIT_FEATURE_ENABLE
#define FMC_NAND_PCC_MEM_BUS_WIDTH_8 FMC_NAND_MEM_BUS_WIDTH_8
@@ -547,18 +578,25 @@
#define GPIO_AF9_SDIO2 GPIO_AF9_SDMMC2
#define GPIO_AF10_SDIO2 GPIO_AF10_SDMMC2
#define GPIO_AF11_SDIO2 GPIO_AF11_SDMMC2
-#endif
+
+#if defined (STM32H743xx) || defined (STM32H753xx) || defined (STM32H750xx) || defined (STM32H742xx) || \
+ defined (STM32H745xx) || defined (STM32H755xx) || defined (STM32H747xx) || defined (STM32H757xx)
+#define GPIO_AF10_OTG2_HS GPIO_AF10_OTG2_FS
+#define GPIO_AF10_OTG1_FS GPIO_AF10_OTG1_HS
+#define GPIO_AF12_OTG2_FS GPIO_AF12_OTG1_FS
+#endif /*STM32H743xx || STM32H753xx || STM32H750xx || STM32H742xx || STM32H745xx || STM32H755xx || STM32H747xx || STM32H757xx */
+#endif /* STM32H7 */
#define GPIO_AF0_LPTIM GPIO_AF0_LPTIM1
#define GPIO_AF1_LPTIM GPIO_AF1_LPTIM1
#define GPIO_AF2_LPTIM GPIO_AF2_LPTIM1
-#if defined(STM32L0) || defined(STM32L4) || defined(STM32F4) || defined(STM32F2) || defined(STM32F7) || defined(STM32H7)
+#if defined(STM32L0) || defined(STM32L4) || defined(STM32F4) || defined(STM32F2) || defined(STM32F7) || defined(STM32G4) || defined(STM32H7)
#define GPIO_SPEED_LOW GPIO_SPEED_FREQ_LOW
#define GPIO_SPEED_MEDIUM GPIO_SPEED_FREQ_MEDIUM
#define GPIO_SPEED_FAST GPIO_SPEED_FREQ_HIGH
#define GPIO_SPEED_HIGH GPIO_SPEED_FREQ_VERY_HIGH
-#endif /* STM32L0 || STM32L4 || STM32F4 || STM32F2 || STM32F7 || STM32H7*/
+#endif /* STM32L0 || STM32L4 || STM32F4 || STM32F2 || STM32F7 || STM32G4 || STM32H7*/
#if defined(STM32L1)
#define GPIO_SPEED_VERY_LOW GPIO_SPEED_FREQ_LOW
@@ -599,6 +637,185 @@
#define __HAL_HRTIM_GetClockPrescaler __HAL_HRTIM_GETCLOCKPRESCALER
#define __HAL_HRTIM_SetCompare __HAL_HRTIM_SETCOMPARE
#define __HAL_HRTIM_GetCompare __HAL_HRTIM_GETCOMPARE
+
+#if defined(STM32G4)
+#define HAL_HRTIM_ExternalEventCounterConfig HAL_HRTIM_ExtEventCounterConfig
+#define HAL_HRTIM_ExternalEventCounterEnable HAL_HRTIM_ExtEventCounterEnable
+#define HAL_HRTIM_ExternalEventCounterDisable HAL_HRTIM_ExtEventCounterDisable
+#define HAL_HRTIM_ExternalEventCounterReset HAL_HRTIM_ExtEventCounterReset
+#endif /* STM32G4 */
+
+#if defined(STM32H7)
+#define HRTIM_OUTPUTSET_TIMAEV1_TIMBCMP1 HRTIM_OUTPUTSET_TIMEV_1
+#define HRTIM_OUTPUTSET_TIMAEV2_TIMBCMP2 HRTIM_OUTPUTSET_TIMEV_2
+#define HRTIM_OUTPUTSET_TIMAEV3_TIMCCMP2 HRTIM_OUTPUTSET_TIMEV_3
+#define HRTIM_OUTPUTSET_TIMAEV4_TIMCCMP3 HRTIM_OUTPUTSET_TIMEV_4
+#define HRTIM_OUTPUTSET_TIMAEV5_TIMDCMP1 HRTIM_OUTPUTSET_TIMEV_5
+#define HRTIM_OUTPUTSET_TIMAEV6_TIMDCMP2 HRTIM_OUTPUTSET_TIMEV_6
+#define HRTIM_OUTPUTSET_TIMAEV7_TIMECMP3 HRTIM_OUTPUTSET_TIMEV_7
+#define HRTIM_OUTPUTSET_TIMAEV8_TIMECMP4 HRTIM_OUTPUTSET_TIMEV_8
+#define HRTIM_OUTPUTSET_TIMAEV9_TIMFCMP4 HRTIM_OUTPUTSET_TIMEV_9
+#define HRTIM_OUTPUTSET_TIMBEV1_TIMACMP1 HRTIM_OUTPUTSET_TIMEV_1
+#define HRTIM_OUTPUTSET_TIMBEV2_TIMACMP2 HRTIM_OUTPUTSET_TIMEV_2
+#define HRTIM_OUTPUTSET_TIMBEV3_TIMCCMP3 HRTIM_OUTPUTSET_TIMEV_3
+#define HRTIM_OUTPUTSET_TIMBEV4_TIMCCMP4 HRTIM_OUTPUTSET_TIMEV_4
+#define HRTIM_OUTPUTSET_TIMBEV5_TIMDCMP3 HRTIM_OUTPUTSET_TIMEV_5
+#define HRTIM_OUTPUTSET_TIMBEV6_TIMDCMP4 HRTIM_OUTPUTSET_TIMEV_6
+#define HRTIM_OUTPUTSET_TIMBEV7_TIMECMP1 HRTIM_OUTPUTSET_TIMEV_7
+#define HRTIM_OUTPUTSET_TIMBEV8_TIMECMP2 HRTIM_OUTPUTSET_TIMEV_8
+#define HRTIM_OUTPUTSET_TIMBEV9_TIMFCMP3 HRTIM_OUTPUTSET_TIMEV_9
+#define HRTIM_OUTPUTSET_TIMCEV1_TIMACMP1 HRTIM_OUTPUTSET_TIMEV_1
+#define HRTIM_OUTPUTSET_TIMCEV2_TIMACMP2 HRTIM_OUTPUTSET_TIMEV_2
+#define HRTIM_OUTPUTSET_TIMCEV3_TIMBCMP2 HRTIM_OUTPUTSET_TIMEV_3
+#define HRTIM_OUTPUTSET_TIMCEV4_TIMBCMP3 HRTIM_OUTPUTSET_TIMEV_4
+#define HRTIM_OUTPUTSET_TIMCEV5_TIMDCMP2 HRTIM_OUTPUTSET_TIMEV_5
+#define HRTIM_OUTPUTSET_TIMCEV6_TIMDCMP4 HRTIM_OUTPUTSET_TIMEV_6
+#define HRTIM_OUTPUTSET_TIMCEV7_TIMECMP3 HRTIM_OUTPUTSET_TIMEV_7
+#define HRTIM_OUTPUTSET_TIMCEV8_TIMECMP4 HRTIM_OUTPUTSET_TIMEV_8
+#define HRTIM_OUTPUTSET_TIMCEV9_TIMFCMP2 HRTIM_OUTPUTSET_TIMEV_9
+#define HRTIM_OUTPUTSET_TIMDEV1_TIMACMP1 HRTIM_OUTPUTSET_TIMEV_1
+#define HRTIM_OUTPUTSET_TIMDEV2_TIMACMP4 HRTIM_OUTPUTSET_TIMEV_2
+#define HRTIM_OUTPUTSET_TIMDEV3_TIMBCMP2 HRTIM_OUTPUTSET_TIMEV_3
+#define HRTIM_OUTPUTSET_TIMDEV4_TIMBCMP4 HRTIM_OUTPUTSET_TIMEV_4
+#define HRTIM_OUTPUTSET_TIMDEV5_TIMCCMP4 HRTIM_OUTPUTSET_TIMEV_5
+#define HRTIM_OUTPUTSET_TIMDEV6_TIMECMP1 HRTIM_OUTPUTSET_TIMEV_6
+#define HRTIM_OUTPUTSET_TIMDEV7_TIMECMP4 HRTIM_OUTPUTSET_TIMEV_7
+#define HRTIM_OUTPUTSET_TIMDEV8_TIMFCMP1 HRTIM_OUTPUTSET_TIMEV_8
+#define HRTIM_OUTPUTSET_TIMDEV9_TIMFCMP3 HRTIM_OUTPUTSET_TIMEV_9
+#define HRTIM_OUTPUTSET_TIMEEV1_TIMACMP4 HRTIM_OUTPUTSET_TIMEV_1
+#define HRTIM_OUTPUTSET_TIMEEV2_TIMBCMP3 HRTIM_OUTPUTSET_TIMEV_2
+#define HRTIM_OUTPUTSET_TIMEEV3_TIMBCMP4 HRTIM_OUTPUTSET_TIMEV_3
+#define HRTIM_OUTPUTSET_TIMEEV4_TIMCCMP1 HRTIM_OUTPUTSET_TIMEV_4
+#define HRTIM_OUTPUTSET_TIMEEV5_TIMDCMP2 HRTIM_OUTPUTSET_TIMEV_5
+#define HRTIM_OUTPUTSET_TIMEEV6_TIMDCMP1 HRTIM_OUTPUTSET_TIMEV_6
+#define HRTIM_OUTPUTSET_TIMEEV7_TIMDCMP2 HRTIM_OUTPUTSET_TIMEV_7
+#define HRTIM_OUTPUTSET_TIMEEV8_TIMFCMP3 HRTIM_OUTPUTSET_TIMEV_8
+#define HRTIM_OUTPUTSET_TIMEEV9_TIMFCMP4 HRTIM_OUTPUTSET_TIMEV_9
+#define HRTIM_OUTPUTSET_TIMFEV1_TIMACMP3 HRTIM_OUTPUTSET_TIMEV_1
+#define HRTIM_OUTPUTSET_TIMFEV2_TIMBCMP1 HRTIM_OUTPUTSET_TIMEV_2
+#define HRTIM_OUTPUTSET_TIMFEV3_TIMBCMP4 HRTIM_OUTPUTSET_TIMEV_3
+#define HRTIM_OUTPUTSET_TIMFEV4_TIMCCMP1 HRTIM_OUTPUTSET_TIMEV_4
+#define HRTIM_OUTPUTSET_TIMFEV5_TIMCCMP4 HRTIM_OUTPUTSET_TIMEV_5
+#define HRTIM_OUTPUTSET_TIMFEV6_TIMDCMP3 HRTIM_OUTPUTSET_TIMEV_6
+#define HRTIM_OUTPUTSET_TIMFEV7_TIMDCMP4 HRTIM_OUTPUTSET_TIMEV_7
+#define HRTIM_OUTPUTSET_TIMFEV8_TIMECMP2 HRTIM_OUTPUTSET_TIMEV_8
+#define HRTIM_OUTPUTSET_TIMFEV9_TIMECMP3 HRTIM_OUTPUTSET_TIMEV_9
+
+#define HRTIM_OUTPUTRESET_TIMAEV1_TIMBCMP1 HRTIM_OUTPUTSET_TIMEV_1
+#define HRTIM_OUTPUTRESET_TIMAEV2_TIMBCMP2 HRTIM_OUTPUTSET_TIMEV_2
+#define HRTIM_OUTPUTRESET_TIMAEV3_TIMCCMP2 HRTIM_OUTPUTSET_TIMEV_3
+#define HRTIM_OUTPUTRESET_TIMAEV4_TIMCCMP3 HRTIM_OUTPUTSET_TIMEV_4
+#define HRTIM_OUTPUTRESET_TIMAEV5_TIMDCMP1 HRTIM_OUTPUTSET_TIMEV_5
+#define HRTIM_OUTPUTRESET_TIMAEV6_TIMDCMP2 HRTIM_OUTPUTSET_TIMEV_6
+#define HRTIM_OUTPUTRESET_TIMAEV7_TIMECMP3 HRTIM_OUTPUTSET_TIMEV_7
+#define HRTIM_OUTPUTRESET_TIMAEV8_TIMECMP4 HRTIM_OUTPUTSET_TIMEV_8
+#define HRTIM_OUTPUTRESET_TIMAEV9_TIMFCMP4 HRTIM_OUTPUTSET_TIMEV_9
+#define HRTIM_OUTPUTRESET_TIMBEV1_TIMACMP1 HRTIM_OUTPUTSET_TIMEV_1
+#define HRTIM_OUTPUTRESET_TIMBEV2_TIMACMP2 HRTIM_OUTPUTSET_TIMEV_2
+#define HRTIM_OUTPUTRESET_TIMBEV3_TIMCCMP3 HRTIM_OUTPUTSET_TIMEV_3
+#define HRTIM_OUTPUTRESET_TIMBEV4_TIMCCMP4 HRTIM_OUTPUTSET_TIMEV_4
+#define HRTIM_OUTPUTRESET_TIMBEV5_TIMDCMP3 HRTIM_OUTPUTSET_TIMEV_5
+#define HRTIM_OUTPUTRESET_TIMBEV6_TIMDCMP4 HRTIM_OUTPUTSET_TIMEV_6
+#define HRTIM_OUTPUTRESET_TIMBEV7_TIMECMP1 HRTIM_OUTPUTSET_TIMEV_7
+#define HRTIM_OUTPUTRESET_TIMBEV8_TIMECMP2 HRTIM_OUTPUTSET_TIMEV_8
+#define HRTIM_OUTPUTRESET_TIMBEV9_TIMFCMP3 HRTIM_OUTPUTSET_TIMEV_9
+#define HRTIM_OUTPUTRESET_TIMCEV1_TIMACMP1 HRTIM_OUTPUTSET_TIMEV_1
+#define HRTIM_OUTPUTRESET_TIMCEV2_TIMACMP2 HRTIM_OUTPUTSET_TIMEV_2
+#define HRTIM_OUTPUTRESET_TIMCEV3_TIMBCMP2 HRTIM_OUTPUTSET_TIMEV_3
+#define HRTIM_OUTPUTRESET_TIMCEV4_TIMBCMP3 HRTIM_OUTPUTSET_TIMEV_4
+#define HRTIM_OUTPUTRESET_TIMCEV5_TIMDCMP2 HRTIM_OUTPUTSET_TIMEV_5
+#define HRTIM_OUTPUTRESET_TIMCEV6_TIMDCMP4 HRTIM_OUTPUTSET_TIMEV_6
+#define HRTIM_OUTPUTRESET_TIMCEV7_TIMECMP3 HRTIM_OUTPUTSET_TIMEV_7
+#define HRTIM_OUTPUTRESET_TIMCEV8_TIMECMP4 HRTIM_OUTPUTSET_TIMEV_8
+#define HRTIM_OUTPUTRESET_TIMCEV9_TIMFCMP2 HRTIM_OUTPUTSET_TIMEV_9
+#define HRTIM_OUTPUTRESET_TIMDEV1_TIMACMP1 HRTIM_OUTPUTSET_TIMEV_1
+#define HRTIM_OUTPUTRESET_TIMDEV2_TIMACMP4 HRTIM_OUTPUTSET_TIMEV_2
+#define HRTIM_OUTPUTRESET_TIMDEV3_TIMBCMP2 HRTIM_OUTPUTSET_TIMEV_3
+#define HRTIM_OUTPUTRESET_TIMDEV4_TIMBCMP4 HRTIM_OUTPUTSET_TIMEV_4
+#define HRTIM_OUTPUTRESET_TIMDEV5_TIMCCMP4 HRTIM_OUTPUTSET_TIMEV_5
+#define HRTIM_OUTPUTRESET_TIMDEV6_TIMECMP1 HRTIM_OUTPUTSET_TIMEV_6
+#define HRTIM_OUTPUTRESET_TIMDEV7_TIMECMP4 HRTIM_OUTPUTSET_TIMEV_7
+#define HRTIM_OUTPUTRESET_TIMDEV8_TIMFCMP1 HRTIM_OUTPUTSET_TIMEV_8
+#define HRTIM_OUTPUTRESET_TIMDEV9_TIMFCMP3 HRTIM_OUTPUTSET_TIMEV_9
+#define HRTIM_OUTPUTRESET_TIMEEV1_TIMACMP4 HRTIM_OUTPUTSET_TIMEV_1
+#define HRTIM_OUTPUTRESET_TIMEEV2_TIMBCMP3 HRTIM_OUTPUTSET_TIMEV_2
+#define HRTIM_OUTPUTRESET_TIMEEV3_TIMBCMP4 HRTIM_OUTPUTSET_TIMEV_3
+#define HRTIM_OUTPUTRESET_TIMEEV4_TIMCCMP1 HRTIM_OUTPUTSET_TIMEV_4
+#define HRTIM_OUTPUTRESET_TIMEEV5_TIMDCMP2 HRTIM_OUTPUTSET_TIMEV_5
+#define HRTIM_OUTPUTRESET_TIMEEV6_TIMDCMP1 HRTIM_OUTPUTSET_TIMEV_6
+#define HRTIM_OUTPUTRESET_TIMEEV7_TIMDCMP2 HRTIM_OUTPUTSET_TIMEV_7
+#define HRTIM_OUTPUTRESET_TIMEEV8_TIMFCMP3 HRTIM_OUTPUTSET_TIMEV_8
+#define HRTIM_OUTPUTRESET_TIMEEV9_TIMFCMP4 HRTIM_OUTPUTSET_TIMEV_9
+#define HRTIM_OUTPUTRESET_TIMFEV1_TIMACMP3 HRTIM_OUTPUTSET_TIMEV_1
+#define HRTIM_OUTPUTRESET_TIMFEV2_TIMBCMP1 HRTIM_OUTPUTSET_TIMEV_2
+#define HRTIM_OUTPUTRESET_TIMFEV3_TIMBCMP4 HRTIM_OUTPUTSET_TIMEV_3
+#define HRTIM_OUTPUTRESET_TIMFEV4_TIMCCMP1 HRTIM_OUTPUTSET_TIMEV_4
+#define HRTIM_OUTPUTRESET_TIMFEV5_TIMCCMP4 HRTIM_OUTPUTSET_TIMEV_5
+#define HRTIM_OUTPUTRESET_TIMFEV6_TIMDCMP3 HRTIM_OUTPUTSET_TIMEV_6
+#define HRTIM_OUTPUTRESET_TIMFEV7_TIMDCMP4 HRTIM_OUTPUTSET_TIMEV_7
+#define HRTIM_OUTPUTRESET_TIMFEV8_TIMECMP2 HRTIM_OUTPUTSET_TIMEV_8
+#define HRTIM_OUTPUTRESET_TIMFEV9_TIMECMP3 HRTIM_OUTPUTSET_TIMEV_9
+#endif /* STM32H7 */
+
+#if defined(STM32F3)
+/** @brief Constants defining available sources associated to external events.
+ */
+#define HRTIM_EVENTSRC_1 (0x00000000U)
+#define HRTIM_EVENTSRC_2 (HRTIM_EECR1_EE1SRC_0)
+#define HRTIM_EVENTSRC_3 (HRTIM_EECR1_EE1SRC_1)
+#define HRTIM_EVENTSRC_4 (HRTIM_EECR1_EE1SRC_1 | HRTIM_EECR1_EE1SRC_0)
+
+/** @brief Constants defining the events that can be selected to configure the
+ * set/reset crossbar of a timer output
+ */
+#define HRTIM_OUTPUTSET_TIMEV_1 (HRTIM_SET1R_TIMEVNT1)
+#define HRTIM_OUTPUTSET_TIMEV_2 (HRTIM_SET1R_TIMEVNT2)
+#define HRTIM_OUTPUTSET_TIMEV_3 (HRTIM_SET1R_TIMEVNT3)
+#define HRTIM_OUTPUTSET_TIMEV_4 (HRTIM_SET1R_TIMEVNT4)
+#define HRTIM_OUTPUTSET_TIMEV_5 (HRTIM_SET1R_TIMEVNT5)
+#define HRTIM_OUTPUTSET_TIMEV_6 (HRTIM_SET1R_TIMEVNT6)
+#define HRTIM_OUTPUTSET_TIMEV_7 (HRTIM_SET1R_TIMEVNT7)
+#define HRTIM_OUTPUTSET_TIMEV_8 (HRTIM_SET1R_TIMEVNT8)
+#define HRTIM_OUTPUTSET_TIMEV_9 (HRTIM_SET1R_TIMEVNT9)
+
+#define HRTIM_OUTPUTRESET_TIMEV_1 (HRTIM_RST1R_TIMEVNT1)
+#define HRTIM_OUTPUTRESET_TIMEV_2 (HRTIM_RST1R_TIMEVNT2)
+#define HRTIM_OUTPUTRESET_TIMEV_3 (HRTIM_RST1R_TIMEVNT3)
+#define HRTIM_OUTPUTRESET_TIMEV_4 (HRTIM_RST1R_TIMEVNT4)
+#define HRTIM_OUTPUTRESET_TIMEV_5 (HRTIM_RST1R_TIMEVNT5)
+#define HRTIM_OUTPUTRESET_TIMEV_6 (HRTIM_RST1R_TIMEVNT6)
+#define HRTIM_OUTPUTRESET_TIMEV_7 (HRTIM_RST1R_TIMEVNT7)
+#define HRTIM_OUTPUTRESET_TIMEV_8 (HRTIM_RST1R_TIMEVNT8)
+#define HRTIM_OUTPUTRESET_TIMEV_9 (HRTIM_RST1R_TIMEVNT9)
+
+/** @brief Constants defining the event filtering applied to external events
+ * by a timer
+ */
+#define HRTIM_TIMEVENTFILTER_NONE (0x00000000U)
+#define HRTIM_TIMEVENTFILTER_BLANKINGCMP1 (HRTIM_EEFR1_EE1FLTR_0)
+#define HRTIM_TIMEVENTFILTER_BLANKINGCMP2 (HRTIM_EEFR1_EE1FLTR_1)
+#define HRTIM_TIMEVENTFILTER_BLANKINGCMP3 (HRTIM_EEFR1_EE1FLTR_1 | HRTIM_EEFR1_EE1FLTR_0)
+#define HRTIM_TIMEVENTFILTER_BLANKINGCMP4 (HRTIM_EEFR1_EE1FLTR_2)
+#define HRTIM_TIMEVENTFILTER_BLANKINGFLTR1 (HRTIM_EEFR1_EE1FLTR_2 | HRTIM_EEFR1_EE1FLTR_0)
+#define HRTIM_TIMEVENTFILTER_BLANKINGFLTR2 (HRTIM_EEFR1_EE1FLTR_2 | HRTIM_EEFR1_EE1FLTR_1)
+#define HRTIM_TIMEVENTFILTER_BLANKINGFLTR3 (HRTIM_EEFR1_EE1FLTR_2 | HRTIM_EEFR1_EE1FLTR_1 | HRTIM_EEFR1_EE1FLTR_0)
+#define HRTIM_TIMEVENTFILTER_BLANKINGFLTR4 (HRTIM_EEFR1_EE1FLTR_3)
+#define HRTIM_TIMEVENTFILTER_BLANKINGFLTR5 (HRTIM_EEFR1_EE1FLTR_3 | HRTIM_EEFR1_EE1FLTR_0)
+#define HRTIM_TIMEVENTFILTER_BLANKINGFLTR6 (HRTIM_EEFR1_EE1FLTR_3 | HRTIM_EEFR1_EE1FLTR_1)
+#define HRTIM_TIMEVENTFILTER_BLANKINGFLTR7 (HRTIM_EEFR1_EE1FLTR_3 | HRTIM_EEFR1_EE1FLTR_1 | HRTIM_EEFR1_EE1FLTR_0)
+#define HRTIM_TIMEVENTFILTER_BLANKINGFLTR8 (HRTIM_EEFR1_EE1FLTR_3 | HRTIM_EEFR1_EE1FLTR_2)
+#define HRTIM_TIMEVENTFILTER_WINDOWINGCMP2 (HRTIM_EEFR1_EE1FLTR_3 | HRTIM_EEFR1_EE1FLTR_2 | HRTIM_EEFR1_EE1FLTR_0)
+#define HRTIM_TIMEVENTFILTER_WINDOWINGCMP3 (HRTIM_EEFR1_EE1FLTR_3 | HRTIM_EEFR1_EE1FLTR_2 | HRTIM_EEFR1_EE1FLTR_1)
+#define HRTIM_TIMEVENTFILTER_WINDOWINGTIM (HRTIM_EEFR1_EE1FLTR_3 | HRTIM_EEFR1_EE1FLTR_2 | HRTIM_EEFR1_EE1FLTR_1 | HRTIM_EEFR1_EE1FLTR_0)
+
+/** @brief Constants defining the DLL calibration periods (in micro seconds)
+ */
+#define HRTIM_CALIBRATIONRATE_7300 0x00000000U
+#define HRTIM_CALIBRATIONRATE_910 (HRTIM_DLLCR_CALRTE_0)
+#define HRTIM_CALIBRATIONRATE_114 (HRTIM_DLLCR_CALRTE_1)
+#define HRTIM_CALIBRATIONRATE_14 (HRTIM_DLLCR_CALRTE_1 | HRTIM_DLLCR_CALRTE_0)
+
+#endif /* STM32F3 */
/**
* @}
*/
@@ -738,6 +955,12 @@
#define OPAMP_PGACONNECT_VM0 OPAMP_PGA_CONNECT_INVERTINGINPUT_IO0
#define OPAMP_PGACONNECT_VM1 OPAMP_PGA_CONNECT_INVERTINGINPUT_IO1
+#if defined(STM32L1) || defined(STM32L4) || defined(STM32L5) || defined(STM32H7)
+#define HAL_OPAMP_MSP_INIT_CB_ID HAL_OPAMP_MSPINIT_CB_ID
+#define HAL_OPAMP_MSP_DEINIT_CB_ID HAL_OPAMP_MSPDEINIT_CB_ID
+#endif
+
+
/**
* @}
*/
@@ -753,7 +976,6 @@
#define I2S_FLAG_TXE I2S_FLAG_TXP
#define I2S_FLAG_RXNE I2S_FLAG_RXP
- #define I2S_FLAG_FRE I2S_FLAG_TIFRE
#endif
#if defined(STM32F7)
@@ -824,6 +1046,16 @@
#define RTC_TAMPERPIN_PA0 RTC_TAMPERPIN_POS1
#define RTC_TAMPERPIN_PI8 RTC_TAMPERPIN_POS1
+#if defined(STM32H7)
+#define RTC_TAMPCR_TAMPXE RTC_TAMPER_X
+#define RTC_TAMPCR_TAMPXIE RTC_TAMPER_X_INTERRUPT
+
+#define RTC_TAMPER1_INTERRUPT RTC_IT_TAMP1
+#define RTC_TAMPER2_INTERRUPT RTC_IT_TAMP2
+#define RTC_TAMPER3_INTERRUPT RTC_IT_TAMP3
+#define RTC_ALL_TAMPER_INTERRUPT RTC_IT_TAMPALL
+#endif /* STM32H7 */
+
/**
* @}
*/
@@ -971,6 +1203,24 @@
#define IS_TIM_HALL_INTERFACE_INSTANCE IS_TIM_HALL_SENSOR_INTERFACE_INSTANCE
#endif
+#if defined(STM32H7)
+#define TIM_TIM1_ETR_COMP1_OUT TIM_TIM1_ETR_COMP1
+#define TIM_TIM1_ETR_COMP2_OUT TIM_TIM1_ETR_COMP2
+#define TIM_TIM8_ETR_COMP1_OUT TIM_TIM8_ETR_COMP1
+#define TIM_TIM8_ETR_COMP2_OUT TIM_TIM8_ETR_COMP2
+#define TIM_TIM2_ETR_COMP1_OUT TIM_TIM2_ETR_COMP1
+#define TIM_TIM2_ETR_COMP2_OUT TIM_TIM2_ETR_COMP2
+#define TIM_TIM3_ETR_COMP1_OUT TIM_TIM3_ETR_COMP1
+#define TIM_TIM1_TI1_COMP1_OUT TIM_TIM1_TI1_COMP1
+#define TIM_TIM8_TI1_COMP2_OUT TIM_TIM8_TI1_COMP2
+#define TIM_TIM2_TI4_COMP1_OUT TIM_TIM2_TI4_COMP1
+#define TIM_TIM2_TI4_COMP2_OUT TIM_TIM2_TI4_COMP2
+#define TIM_TIM2_TI4_COMP1COMP2_OUT TIM_TIM2_TI4_COMP1_COMP2
+#define TIM_TIM3_TI1_COMP1_OUT TIM_TIM3_TI1_COMP1
+#define TIM_TIM3_TI1_COMP2_OUT TIM_TIM3_TI1_COMP2
+#define TIM_TIM3_TI1_COMP1COMP2_OUT TIM_TIM3_TI1_COMP1_COMP2
+#endif
+
/**
* @}
*/
@@ -1199,6 +1449,30 @@
#define HASH_HMACKeyType_ShortKey HASH_HMAC_KEYTYPE_SHORTKEY
#define HASH_HMACKeyType_LongKey HASH_HMAC_KEYTYPE_LONGKEY
+
+#if defined(STM32L4) || defined(STM32F4) || defined(STM32F7) || defined(STM32H7)
+
+#define HAL_HASH_MD5_Accumulate HAL_HASH_MD5_Accmlt
+#define HAL_HASH_MD5_Accumulate_End HAL_HASH_MD5_Accmlt_End
+#define HAL_HASH_MD5_Accumulate_IT HAL_HASH_MD5_Accmlt_IT
+#define HAL_HASH_MD5_Accumulate_End_IT HAL_HASH_MD5_Accmlt_End_IT
+
+#define HAL_HASH_SHA1_Accumulate HAL_HASH_SHA1_Accmlt
+#define HAL_HASH_SHA1_Accumulate_End HAL_HASH_SHA1_Accmlt_End
+#define HAL_HASH_SHA1_Accumulate_IT HAL_HASH_SHA1_Accmlt_IT
+#define HAL_HASH_SHA1_Accumulate_End_IT HAL_HASH_SHA1_Accmlt_End_IT
+
+#define HAL_HASHEx_SHA224_Accumulate HAL_HASHEx_SHA224_Accmlt
+#define HAL_HASHEx_SHA224_Accumulate_End HAL_HASHEx_SHA224_Accmlt_End
+#define HAL_HASHEx_SHA224_Accumulate_IT HAL_HASHEx_SHA224_Accmlt_IT
+#define HAL_HASHEx_SHA224_Accumulate_End_IT HAL_HASHEx_SHA224_Accmlt_End_IT
+
+#define HAL_HASHEx_SHA256_Accumulate HAL_HASHEx_SHA256_Accmlt
+#define HAL_HASHEx_SHA256_Accumulate_End HAL_HASHEx_SHA256_Accmlt_End
+#define HAL_HASHEx_SHA256_Accumulate_IT HAL_HASHEx_SHA256_Accmlt_IT
+#define HAL_HASHEx_SHA256_Accumulate_End_IT HAL_HASHEx_SHA256_Accmlt_End_IT
+
+#endif /* STM32L4 || STM32F4 || STM32F7 || STM32H7 */
/**
* @}
*/
@@ -1221,6 +1495,13 @@
#endif
#define HAL_ADC_EnableBuffer_Cmd(cmd) (((cmd)==ENABLE) ? HAL_ADCEx_EnableVREFINT() : HAL_ADCEx_DisableVREFINT())
#define HAL_ADC_EnableBufferSensor_Cmd(cmd) (((cmd)==ENABLE) ? HAL_ADCEx_EnableVREFINTTempSensor() : HAL_ADCEx_DisableVREFINTTempSensor())
+#if defined(STM32H7A3xx) || defined(STM32H7B3xx) || defined(STM32H7B0xx) || defined(STM32H7A3xxQ) || defined(STM32H7B3xxQ) || defined(STM32H7B0xxQ)
+#define HAL_EnableSRDomainDBGStopMode HAL_EnableDomain3DBGStopMode
+#define HAL_DisableSRDomainDBGStopMode HAL_DisableDomain3DBGStopMode
+#define HAL_EnableSRDomainDBGStandbyMode HAL_EnableDomain3DBGStandbyMode
+#define HAL_DisableSRDomainDBGStandbyMode HAL_DisableDomain3DBGStandbyMode
+#endif /* STM32H7A3xx || STM32H7B3xx || STM32H7B0xx || STM32H7A3xxQ || STM32H7B3xxQ || STM32H7B0xxQ */
+
/**
* @}
*/
@@ -1250,16 +1531,18 @@
#define HAL_I2CFastModePlusConfig(SYSCFG_I2CFastModePlus, cmd) (((cmd)==ENABLE)? HAL_I2CEx_EnableFastModePlus(SYSCFG_I2CFastModePlus): HAL_I2CEx_DisableFastModePlus(SYSCFG_I2CFastModePlus))
-#if defined(STM32H7) || defined(STM32WB) || defined(STM32G0) || defined(STM32F4) || defined(STM32F7)
+#if defined(STM32H7) || defined(STM32WB) || defined(STM32G0) || defined(STM32F0) || defined(STM32F1) || defined(STM32F2) || defined(STM32F3) || defined(STM32F4) || defined(STM32F7) || defined(STM32L0) || defined(STM32L4) || defined(STM32L5) || defined(STM32G4)
#define HAL_I2C_Master_Sequential_Transmit_IT HAL_I2C_Master_Seq_Transmit_IT
#define HAL_I2C_Master_Sequential_Receive_IT HAL_I2C_Master_Seq_Receive_IT
#define HAL_I2C_Slave_Sequential_Transmit_IT HAL_I2C_Slave_Seq_Transmit_IT
#define HAL_I2C_Slave_Sequential_Receive_IT HAL_I2C_Slave_Seq_Receive_IT
+#endif /* STM32H7 || STM32WB || STM32G0 || STM32F0 || STM32F1 || STM32F2 || STM32F3 || STM32F4 || STM32F7 || STM32L0 || STM32L4 || STM32L5 || STM32G4 */
+#if defined(STM32H7) || defined(STM32WB) || defined(STM32G0) || defined(STM32F4) || defined(STM32F7) || defined(STM32L0) || defined(STM32L4) || defined(STM32L5) || defined(STM32G4)
#define HAL_I2C_Master_Sequential_Transmit_DMA HAL_I2C_Master_Seq_Transmit_DMA
#define HAL_I2C_Master_Sequential_Receive_DMA HAL_I2C_Master_Seq_Receive_DMA
#define HAL_I2C_Slave_Sequential_Transmit_DMA HAL_I2C_Slave_Seq_Transmit_DMA
#define HAL_I2C_Slave_Sequential_Receive_DMA HAL_I2C_Slave_Seq_Receive_DMA
-#endif /* STM32H7 || STM32WB || STM32G0 || STM32F4 || STM32F7 */
+#endif /* STM32H7 || STM32WB || STM32G0 || STM32F4 || STM32F7 || STM32L0 || STM32L4 || STM32L5 || STM32G4 */
#if defined(STM32F4)
#define HAL_FMPI2C_Master_Sequential_Transmit_IT HAL_FMPI2C_Master_Seq_Transmit_IT
@@ -1278,6 +1561,13 @@
/** @defgroup HAL_PWR_Aliased HAL PWR Aliased maintained for legacy purpose
* @{
*/
+
+#if defined(STM32G0)
+#define HAL_PWR_ConfigPVD HAL_PWREx_ConfigPVD
+#define HAL_PWR_EnablePVD HAL_PWREx_EnablePVD
+#define HAL_PWR_DisablePVD HAL_PWREx_DisablePVD
+#define HAL_PWR_PVD_IRQHandler HAL_PWREx_PVD_IRQHandler
+#endif
#define HAL_PWR_PVDConfig HAL_PWR_ConfigPVD
#define HAL_PWR_DisableBkUpReg HAL_PWREx_DisableBkUpReg
#define HAL_PWR_DisableFlashPowerDown HAL_PWREx_DisableFlashPowerDown
@@ -1350,14 +1640,14 @@
#define HAL_TIM_DMAError TIM_DMAError
#define HAL_TIM_DMACaptureCplt TIM_DMACaptureCplt
#define HAL_TIMEx_DMACommutationCplt TIMEx_DMACommutationCplt
-#if defined(STM32H7) || defined(STM32G0) || defined(STM32F7) || defined(STM32F4) || defined(STM32L0)
+#if defined(STM32H7) || defined(STM32G0) || defined(STM32F0) || defined(STM32F1) || defined(STM32F2) || defined(STM32F3) || defined(STM32F4) || defined(STM32F7) || defined(STM32L0) || defined(STM32L4)
#define HAL_TIM_SlaveConfigSynchronization HAL_TIM_SlaveConfigSynchro
#define HAL_TIM_SlaveConfigSynchronization_IT HAL_TIM_SlaveConfigSynchro_IT
#define HAL_TIMEx_CommutationCallback HAL_TIMEx_CommutCallback
#define HAL_TIMEx_ConfigCommutationEvent HAL_TIMEx_ConfigCommutEvent
#define HAL_TIMEx_ConfigCommutationEvent_IT HAL_TIMEx_ConfigCommutEvent_IT
#define HAL_TIMEx_ConfigCommutationEvent_DMA HAL_TIMEx_ConfigCommutEvent_DMA
-#endif /* STM32H7 || STM32G0 || STM32F7 || STM32F4 || STM32L0 */
+#endif /* STM32H7 || STM32G0 || STM32F0 || STM32F1 || STM32F2 || STM32F3 || STM32F4 || STM32F7 || STM32L0 */
/**
* @}
*/
@@ -2476,12 +2766,28 @@
#define __USB_OTG_FS_CLK_DISABLE __HAL_RCC_USB_OTG_FS_CLK_DISABLE
#define __USB_OTG_FS_CLK_ENABLE __HAL_RCC_USB_OTG_FS_CLK_ENABLE
#define __USB_RELEASE_RESET __HAL_RCC_USB_RELEASE_RESET
+
+#if defined(STM32H7)
+#define __HAL_RCC_WWDG_CLK_DISABLE __HAL_RCC_WWDG1_CLK_DISABLE
+#define __HAL_RCC_WWDG_CLK_ENABLE __HAL_RCC_WWDG1_CLK_ENABLE
+#define __HAL_RCC_WWDG_CLK_SLEEP_DISABLE __HAL_RCC_WWDG1_CLK_SLEEP_DISABLE
+#define __HAL_RCC_WWDG_CLK_SLEEP_ENABLE __HAL_RCC_WWDG1_CLK_SLEEP_ENABLE
+
+#define __HAL_RCC_WWDG_FORCE_RESET ((void)0U) /* Not available on the STM32H7*/
+#define __HAL_RCC_WWDG_RELEASE_RESET ((void)0U) /* Not available on the STM32H7*/
+
+
+#define __HAL_RCC_WWDG_IS_CLK_ENABLED __HAL_RCC_WWDG1_IS_CLK_ENABLED
+#define __HAL_RCC_WWDG_IS_CLK_DISABLED __HAL_RCC_WWDG1_IS_CLK_DISABLED
+#endif
+
#define __WWDG_CLK_DISABLE __HAL_RCC_WWDG_CLK_DISABLE
#define __WWDG_CLK_ENABLE __HAL_RCC_WWDG_CLK_ENABLE
#define __WWDG_CLK_SLEEP_DISABLE __HAL_RCC_WWDG_CLK_SLEEP_DISABLE
#define __WWDG_CLK_SLEEP_ENABLE __HAL_RCC_WWDG_CLK_SLEEP_ENABLE
#define __WWDG_FORCE_RESET __HAL_RCC_WWDG_FORCE_RESET
#define __WWDG_RELEASE_RESET __HAL_RCC_WWDG_RELEASE_RESET
+
#define __TIM21_CLK_ENABLE __HAL_RCC_TIM21_CLK_ENABLE
#define __TIM21_CLK_DISABLE __HAL_RCC_TIM21_CLK_DISABLE
#define __TIM21_FORCE_RESET __HAL_RCC_TIM21_FORCE_RESET
@@ -2814,6 +3120,15 @@
#define __WWDG_IS_CLK_ENABLED __HAL_RCC_WWDG_IS_CLK_ENABLED
#define __WWDG_IS_CLK_DISABLED __HAL_RCC_WWDG_IS_CLK_DISABLED
+#if defined(STM32L1)
+#define __HAL_RCC_CRYP_CLK_DISABLE __HAL_RCC_AES_CLK_DISABLE
+#define __HAL_RCC_CRYP_CLK_ENABLE __HAL_RCC_AES_CLK_ENABLE
+#define __HAL_RCC_CRYP_CLK_SLEEP_DISABLE __HAL_RCC_AES_CLK_SLEEP_DISABLE
+#define __HAL_RCC_CRYP_CLK_SLEEP_ENABLE __HAL_RCC_AES_CLK_SLEEP_ENABLE
+#define __HAL_RCC_CRYP_FORCE_RESET __HAL_RCC_AES_FORCE_RESET
+#define __HAL_RCC_CRYP_RELEASE_RESET __HAL_RCC_AES_RELEASE_RESET
+#endif /* STM32L1 */
+
#if defined(STM32F4)
#define __HAL_RCC_SDMMC1_FORCE_RESET __HAL_RCC_SDIO_FORCE_RESET
#define __HAL_RCC_SDMMC1_RELEASE_RESET __HAL_RCC_SDIO_RELEASE_RESET
@@ -2930,7 +3245,7 @@
#if defined(STM32L4)
#define RCC_RTCCLKSOURCE_NO_CLK RCC_RTCCLKSOURCE_NONE
-#elif defined(STM32WB) || defined(STM32G0)
+#elif defined(STM32WB) || defined(STM32G0) || defined(STM32G4) || defined(STM32L5)
#else
#define RCC_RTCCLKSOURCE_NONE RCC_RTCCLKSOURCE_NO_CLK
#endif
@@ -3058,7 +3373,7 @@
/** @defgroup HAL_RTC_Aliased_Macros HAL RTC Aliased Macros maintained for legacy purpose
* @{
*/
-#if defined (STM32G0) || defined (STM32L412xx) || defined (STM32L422xx) || defined (STM32L4P5xx) || defined (STM32L4Q5xx)
+#if defined (STM32G0) || defined (STM32L5) || defined (STM32L412xx) || defined (STM32L422xx) || defined (STM32L4P5xx) || defined (STM32L4Q5xx) || defined (STM32G4)
#else
#define __HAL_RTC_CLEAR_FLAG __HAL_RTC_EXTI_CLEAR_FLAG
#endif
@@ -3174,14 +3489,14 @@
#define SDIO_IRQHandler SDMMC1_IRQHandler
#endif
-#if defined(STM32F7) || defined(STM32F4) || defined(STM32F2)
+#if defined(STM32F7) || defined(STM32F4) || defined(STM32F2) || defined(STM32L4) || defined(STM32H7)
#define HAL_SD_CardCIDTypedef HAL_SD_CardCIDTypeDef
#define HAL_SD_CardCSDTypedef HAL_SD_CardCSDTypeDef
#define HAL_SD_CardStatusTypedef HAL_SD_CardStatusTypeDef
#define HAL_SD_CardStateTypedef HAL_SD_CardStateTypeDef
#endif
-#if defined(STM32H7)
+#if defined(STM32H7) || defined(STM32L5)
#define HAL_MMCEx_Read_DMADoubleBuffer0CpltCallback HAL_MMCEx_Read_DMADoubleBuf0CpltCallback
#define HAL_MMCEx_Read_DMADoubleBuffer1CpltCallback HAL_MMCEx_Read_DMADoubleBuf1CpltCallback
#define HAL_MMCEx_Write_DMADoubleBuffer0CpltCallback HAL_MMCEx_Write_DMADoubleBuf0CpltCallback
@@ -3421,18 +3736,28 @@
/** @defgroup HAL_HRTIM_Aliased_Functions HAL HRTIM Aliased Functions maintained for legacy purpose
* @{
*/
-#if defined (STM32H7) || defined (STM32F3)
-#define HAL_HRTIM_WaveformCounterStart_IT HAL_HRTIM_WaveformCountStart_IT
-#define HAL_HRTIM_WaveformCounterStart_DMA HAL_HRTIM_WaveformCountStart_DMA
-#define HAL_HRTIM_WaveformCounterStart HAL_HRTIM_WaveformCountStart
-#define HAL_HRTIM_WaveformCounterStop_IT HAL_HRTIM_WaveformCountStop_IT
-#define HAL_HRTIM_WaveformCounterStop_DMA HAL_HRTIM_WaveformCountStop_DMA
-#define HAL_HRTIM_WaveformCounterStop HAL_HRTIM_WaveformCountStop
+#if defined (STM32H7) || defined (STM32G4) || defined (STM32F3)
+#define HAL_HRTIM_WaveformCounterStart_IT HAL_HRTIM_WaveformCountStart_IT
+#define HAL_HRTIM_WaveformCounterStart_DMA HAL_HRTIM_WaveformCountStart_DMA
+#define HAL_HRTIM_WaveformCounterStart HAL_HRTIM_WaveformCountStart
+#define HAL_HRTIM_WaveformCounterStop_IT HAL_HRTIM_WaveformCountStop_IT
+#define HAL_HRTIM_WaveformCounterStop_DMA HAL_HRTIM_WaveformCountStop_DMA
+#define HAL_HRTIM_WaveformCounterStop HAL_HRTIM_WaveformCountStop
#endif
/**
* @}
*/
+/** @defgroup HAL_QSPI_Aliased_Macros HAL QSPI Aliased Macros maintained for legacy purpose
+ * @{
+ */
+#if defined (STM32L4) || defined (STM32F4) || defined (STM32F7)
+#define HAL_QPSI_TIMEOUT_DEFAULT_VALUE HAL_QSPI_TIMEOUT_DEFAULT_VALUE
+#endif /* STM32L4 || STM32F4 || STM32F7 */
+/**
+ * @}
+ */
+
/** @defgroup HAL_PPP_Aliased_Macros HAL PPP Aliased Macros maintained for legacy purpose
* @{
*/
diff --git a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_TrueStudio/Prog/lib/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_exti.h b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_TrueStudio/Prog/lib/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_exti.h
index bf82a38e..c9f137c1 100644
--- a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_TrueStudio/Prog/lib/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_exti.h
+++ b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_TrueStudio/Prog/lib/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_exti.h
@@ -18,8 +18,8 @@
*/
/* Define to prevent recursive inclusion -------------------------------------*/
-#ifndef __STM32F7xx_HAL_EXTI_H
-#define __STM32F7xx_HAL_EXTI_H
+#ifndef STM32F7xx_HAL_EXTI_H
+#define STM32F7xx_HAL_EXTI_H
#ifdef __cplusplus
extern "C" {
@@ -38,14 +38,13 @@ extern "C" {
*/
/* Exported types ------------------------------------------------------------*/
+
/** @defgroup EXTI_Exported_Types EXTI Exported Types
* @{
*/
typedef enum
{
- HAL_EXTI_COMMON_CB_ID = 0x00U,
- HAL_EXTI_RISING_CB_ID = 0x01U,
- HAL_EXTI_FALLING_CB_ID = 0x02U,
+ HAL_EXTI_COMMON_CB_ID = 0x00U
} EXTI_CallbackIDTypeDef;
/**
@@ -68,6 +67,9 @@ typedef struct
This parameter can be a combination of @ref EXTI_Mode */
uint32_t Trigger; /*!< The Exti Trigger to be configured. This parameter
can be a value of @ref EXTI_Trigger */
+ uint32_t GPIOSel; /*!< The Exti GPIO multiplexer selection to be configured.
+ This parameter is only possible for line 0 to 15. It
+ can be a value of @ref EXTI_GPIOSel */
} EXTI_ConfigTypeDef;
/**
@@ -82,48 +84,36 @@ typedef struct
/** @defgroup EXTI_Line EXTI Line
* @{
*/
-#define EXTI_LINE_0 EXTI_IMR_IM0 /*!< External interrupt line 0 */
-#define EXTI_LINE_1 EXTI_IMR_IM1 /*!< External interrupt line 1 */
-#define EXTI_LINE_2 EXTI_IMR_IM2 /*!< External interrupt line 2 */
-#define EXTI_LINE_3 EXTI_IMR_IM3 /*!< External interrupt line 3 */
-#define EXTI_LINE_4 EXTI_IMR_IM4 /*!< External interrupt line 4 */
-#define EXTI_LINE_5 EXTI_IMR_IM5 /*!< External interrupt line 5 */
-#define EXTI_LINE_6 EXTI_IMR_IM6 /*!< External interrupt line 6 */
-#define EXTI_LINE_7 EXTI_IMR_IM7 /*!< External interrupt line 7 */
-#define EXTI_LINE_8 EXTI_IMR_IM8 /*!< External interrupt line 8 */
-#define EXTI_LINE_9 EXTI_IMR_IM9 /*!< External interrupt line 9 */
-#define EXTI_LINE_10 EXTI_IMR_IM10 /*!< External interrupt line 10 */
-#define EXTI_LINE_11 EXTI_IMR_IM11 /*!< External interrupt line 11 */
-#define EXTI_LINE_12 EXTI_IMR_IM12 /*!< External interrupt line 12 */
-#define EXTI_LINE_13 EXTI_IMR_IM13 /*!< External interrupt line 13 */
-#define EXTI_LINE_14 EXTI_IMR_IM14 /*!< External interrupt line 14 */
-#define EXTI_LINE_15 EXTI_IMR_IM15 /*!< External interrupt line 15 */
-#if defined(EXTI_IMR_IM16)
-#define EXTI_LINE_16 EXTI_IMR_IM16 /*!< External interrupt line 16 Connected to the PVD Output */
-#endif /* EXTI_IMR_IM16 */
-#if defined(EXTI_IMR_IM17)
-#define EXTI_LINE_17 EXTI_IMR_IM17 /*!< External interrupt line 17 Connected to the RTC Alarm event */
-#endif /* EXTI_IMR_IM17 */
-#if defined(EXTI_IMR_IM18)
-#define EXTI_LINE_18 EXTI_IMR_IM18 /*!< External interrupt line 18 Connected to the USB OTG FS Wakeup from suspend event */
-#endif /* EXTI_IMR_IM18 */
-#if defined(EXTI_IMR_IM19)
-#define EXTI_LINE_19 EXTI_IMR_IM19 /*!< External interrupt line 19 Connected to the Ethernet Wakeup event */
-#endif /* EXTI_IMR_IM19 */
-#if defined(EXTI_IMR_IM20)
-#define EXTI_LINE_20 EXTI_IMR_IM20 /*!< External interrupt line 20 Connected to the USB OTG HS (configured in FS) Wakeup event */
-#endif /* EXTI_IMR_IM20 */
-#if defined(EXTI_IMR_IM21)
-#define EXTI_LINE_21 EXTI_IMR_IM21 /*!< External interrupt line 21 Connected to the RTC Tamper and Time Stamp events */
-#endif /* EXTI_IMR_IM21 */
-#if defined(EXTI_IMR_IM22)
-#define EXTI_LINE_22 EXTI_IMR_IM22 /*!< External interrupt line 22 Connected to the RTC Wakeup event */
-#endif /* EXTI_IMR_IM22 */
-#if defined(EXTI_IMR_IM23)
-#define EXTI_LINE_23 EXTI_IMR_IM23 /*!< External interrupt line 23 Connected to the LPTIM Wakeup event */
-#endif /* EXTI_IMR_IM23 */
+#define EXTI_LINE_0 (EXTI_GPIO | 0x00u) /*!< External interrupt line 0 */
+#define EXTI_LINE_1 (EXTI_GPIO | 0x01u) /*!< External interrupt line 1 */
+#define EXTI_LINE_2 (EXTI_GPIO | 0x02u) /*!< External interrupt line 2 */
+#define EXTI_LINE_3 (EXTI_GPIO | 0x03u) /*!< External interrupt line 3 */
+#define EXTI_LINE_4 (EXTI_GPIO | 0x04u) /*!< External interrupt line 4 */
+#define EXTI_LINE_5 (EXTI_GPIO | 0x05u) /*!< External interrupt line 5 */
+#define EXTI_LINE_6 (EXTI_GPIO | 0x06u) /*!< External interrupt line 6 */
+#define EXTI_LINE_7 (EXTI_GPIO | 0x07u) /*!< External interrupt line 7 */
+#define EXTI_LINE_8 (EXTI_GPIO | 0x08u) /*!< External interrupt line 8 */
+#define EXTI_LINE_9 (EXTI_GPIO | 0x09u) /*!< External interrupt line 9 */
+#define EXTI_LINE_10 (EXTI_GPIO | 0x0Au) /*!< External interrupt line 10 */
+#define EXTI_LINE_11 (EXTI_GPIO | 0x0Bu) /*!< External interrupt line 11 */
+#define EXTI_LINE_12 (EXTI_GPIO | 0x0Cu) /*!< External interrupt line 12 */
+#define EXTI_LINE_13 (EXTI_GPIO | 0x0Du) /*!< External interrupt line 13 */
+#define EXTI_LINE_14 (EXTI_GPIO | 0x0Eu) /*!< External interrupt line 14 */
+#define EXTI_LINE_15 (EXTI_GPIO | 0x0Fu) /*!< External interrupt line 15 */
+#define EXTI_LINE_16 (EXTI_CONFIG | 0x10u) /*!< External interrupt line 16 Connected to the PVD Output */
+#define EXTI_LINE_17 (EXTI_CONFIG | 0x11u) /*!< External interrupt line 17 Connected to the RTC Alarm event */
+#define EXTI_LINE_18 (EXTI_CONFIG | 0x12u) /*!< External interrupt line 18 Connected to the USB OTG FS Wakeup from suspend event */
+#if defined(ETH)
+#define EXTI_LINE_19 (EXTI_CONFIG | 0x13u) /*!< External interrupt line 19 Connected to the Ethernet Wakeup event */
+#else
+#define EXTI_LINE_19 (EXTI_RESERVED | 0x13u) /*!< No interrupt supported in this line */
+#endif /* ETH */
+#define EXTI_LINE_20 (EXTI_CONFIG | 0x14u) /*!< External interrupt line 20 Connected to the USB OTG HS (configured in FS) Wakeup event */
+#define EXTI_LINE_21 (EXTI_CONFIG | 0x15u) /*!< External interrupt line 21 Connected to the RTC Tamper and Time Stamp events */
+#define EXTI_LINE_22 (EXTI_CONFIG | 0x16u) /*!< External interrupt line 22 Connected to the RTC Wakeup event */
+#define EXTI_LINE_23 (EXTI_CONFIG | 0x17u) /*!< External interrupt line 23 Connected to the LPTIM Wakeup event */
#if defined(EXTI_IMR_IM24)
-#define EXTI_LINE_24 EXTI_IMR_IM24 /*!< External interrupt line 24 Connected to the MDIO Slave global Interrupt Wakeup event */
+#define EXTI_LINE_24 (EXTI_CONFIG | 0x18u) /*!< External interrupt line 24 Connected to the MDIO Slave global Interrupt Wakeup event */
#endif /* EXTI_IMR_IM24 */
/**
* @}
@@ -142,6 +132,7 @@ typedef struct
/** @defgroup EXTI_Trigger EXTI Trigger
* @{
*/
+
#define EXTI_TRIGGER_NONE 0x00000000u
#define EXTI_TRIGGER_RISING 0x00000001u
#define EXTI_TRIGGER_FALLING 0x00000002u
@@ -150,6 +141,24 @@ typedef struct
* @}
*/
+/** @defgroup EXTI_GPIOSel EXTI GPIOSel
+ * @brief
+ * @{
+ */
+#define EXTI_GPIOA 0x00000000u
+#define EXTI_GPIOB 0x00000001u
+#define EXTI_GPIOC 0x00000002u
+#define EXTI_GPIOD 0x00000003u
+#define EXTI_GPIOE 0x00000004u
+#define EXTI_GPIOF 0x00000005u
+#define EXTI_GPIOG 0x00000006u
+#define EXTI_GPIOH 0x00000007u
+#define EXTI_GPIOI 0x00000008u
+#define EXTI_GPIOJ 0x00000009u
+#if defined (GPIOK)
+#define EXTI_GPIOK 0x0000000Au
+#endif /* GPIOK */
+
/**
* @}
*/
@@ -167,6 +176,20 @@ typedef struct
/** @defgroup EXTI_Private_Constants EXTI Private Constants
* @{
*/
+/**
+ * @brief EXTI Line property definition
+ */
+#define EXTI_PROPERTY_SHIFT 24u
+#define EXTI_CONFIG (0x02uL << EXTI_PROPERTY_SHIFT)
+#define EXTI_GPIO ((0x04uL << EXTI_PROPERTY_SHIFT) | EXTI_CONFIG)
+#define EXTI_RESERVED (0x08uL << EXTI_PROPERTY_SHIFT)
+#define EXTI_PROPERTY_MASK (EXTI_CONFIG | EXTI_GPIO)
+
+/**
+ * @brief EXTI bit usage
+ */
+#define EXTI_PIN_MASK 0x0000001Fu
+
/**
* @brief EXTI Mask for interrupt & event mode
*/
@@ -175,12 +198,17 @@ typedef struct
/**
* @brief EXTI Mask for trigger possibilities
*/
-#define EXTI_TRIGGER_MASK (EXTI_TRIGGER_RISING | EXTI_TRIGGER_FALLING | EXTI_TRIGGER_RISING_FALLING)
+#define EXTI_TRIGGER_MASK (EXTI_TRIGGER_RISING | EXTI_TRIGGER_FALLING)
/**
* @brief EXTI Line number
*/
+#if defined(EXTI_IMR_IM24)
#define EXTI_LINE_NB 25u
+#else
+#define EXTI_LINE_NB 24u
+#endif /* EXTI_IMR_IM24 */
+
/**
* @}
@@ -190,16 +218,47 @@ typedef struct
/** @defgroup EXTI_Private_Macros EXTI Private Macros
* @{
*/
-#define IS_EXTI_LINE(__LINE__) ((((__LINE__) & ~EXTI_IMR_IM) == 0x00U) && (__LINE__))
+#define IS_EXTI_LINE(__LINE__) ((((__LINE__) & ~(EXTI_PROPERTY_MASK | EXTI_PIN_MASK)) == 0x00u) && \
+ ((((__LINE__) & EXTI_PROPERTY_MASK) == EXTI_CONFIG) || \
+ (((__LINE__) & EXTI_PROPERTY_MASK) == EXTI_GPIO)) && \
+ (((__LINE__) & EXTI_PIN_MASK) < EXTI_LINE_NB))
-#define IS_EXTI_MODE(__LINE__) ((((__LINE__) & ~EXTI_MODE_MASK) == 0x00U))
+#define IS_EXTI_MODE(__LINE__) ((((__LINE__) & EXTI_MODE_MASK) != 0x00u) && \
+ (((__LINE__) & ~EXTI_MODE_MASK) == 0x00u))
-#define IS_EXTI_TRIGGER(__LINE__) (((__LINE__) & ~EXTI_TRIGGER_MASK) == 0x00U)
+#define IS_EXTI_TRIGGER(__LINE__) (((__LINE__) & ~EXTI_TRIGGER_MASK) == 0x00u)
#define IS_EXTI_PENDING_EDGE(__LINE__) (((__LINE__) == EXTI_TRIGGER_FALLING) || \
((__LINE__) == EXTI_TRIGGER_RISING) || \
((__LINE__) == EXTI_TRIGGER_RISING_FALLING))
+#define IS_EXTI_CONFIG_LINE(__LINE__) (((__LINE__) & EXTI_CONFIG) != 0x00u)
+
+#if defined (GPIOK)
+#define IS_EXTI_GPIO_PORT(__PORT__) (((__PORT__) == EXTI_GPIOA) || \
+ ((__PORT__) == EXTI_GPIOB) || \
+ ((__PORT__) == EXTI_GPIOC) || \
+ ((__PORT__) == EXTI_GPIOD) || \
+ ((__PORT__) == EXTI_GPIOE) || \
+ ((__PORT__) == EXTI_GPIOF) || \
+ ((__PORT__) == EXTI_GPIOG) || \
+ ((__PORT__) == EXTI_GPIOH) || \
+ ((__PORT__) == EXTI_GPIOI) || \
+ ((__PORT__) == EXTI_GPIOJ) || \
+ ((__PORT__) == EXTI_GPIOK))
+#else
+#define IS_EXTI_GPIO_PORT(__PORT__) (((__PORT__) == EXTI_GPIOA) || \
+ ((__PORT__) == EXTI_GPIOB) || \
+ ((__PORT__) == EXTI_GPIOC) || \
+ ((__PORT__) == EXTI_GPIOD) || \
+ ((__PORT__) == EXTI_GPIOE) || \
+ ((__PORT__) == EXTI_GPIOF) || \
+ ((__PORT__) == EXTI_GPIOG) || \
+ ((__PORT__) == EXTI_GPIOH) || \
+ ((__PORT__) == EXTI_GPIOI) || \
+ ((__PORT__) == EXTI_GPIOJ))
+#endif /* GPIOK */
+
#define IS_EXTI_GPIO_PIN(__PIN__) ((__PIN__) < 16U)
/**
* @}
@@ -255,6 +314,6 @@ void HAL_EXTI_GenerateSWI(EXTI_HandleTypeDef *hexti);
}
#endif
-#endif /* __STM32F7xx_HAL_EXTI_H */
+#endif /* STM32F7xx_HAL_EXTI_H */
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
diff --git a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_TrueStudio/Prog/lib/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_gpio.h b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_TrueStudio/Prog/lib/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_gpio.h
index 3d9de6e2..08e0acb2 100644
--- a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_TrueStudio/Prog/lib/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_gpio.h
+++ b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_TrueStudio/Prog/lib/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_gpio.h
@@ -262,7 +262,7 @@ void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin);
* @{
*/
#define IS_GPIO_PIN_ACTION(ACTION) (((ACTION) == GPIO_PIN_RESET) || ((ACTION) == GPIO_PIN_SET))
-#define IS_GPIO_PIN(__PIN__) ((((__PIN__) & GPIO_PIN_MASK) != (uint32_t)0x00))
+#define IS_GPIO_PIN(__PIN__) ((((uint32_t)(__PIN__) & GPIO_PIN_MASK) != 0x00U))
#define IS_GPIO_MODE(MODE) (((MODE) == GPIO_MODE_INPUT) ||\
((MODE) == GPIO_MODE_OUTPUT_PP) ||\
((MODE) == GPIO_MODE_OUTPUT_OD) ||\
diff --git a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_TrueStudio/Prog/lib/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_i2c_ex.h b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_TrueStudio/Prog/lib/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_i2c_ex.h
index d5d75314..83037894 100644
--- a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_TrueStudio/Prog/lib/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_i2c_ex.h
+++ b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_TrueStudio/Prog/lib/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_i2c_ex.h
@@ -167,6 +167,9 @@ void HAL_I2CEx_DisableFastModePlus(uint32_t ConfigFastModePlus);
(((__CONFIG__) & I2C_FASTMODEPLUS_PB9) == I2C_FASTMODEPLUS_PB9) || \
(((__CONFIG__) & I2C_FASTMODEPLUS_I2C1) == I2C_FASTMODEPLUS_I2C1))
#endif /* SYSCFG_PMC_I2C1_FMP && SYSCFG_PMC_I2C2_FMP && SYSCFG_PMC_I2C3_FMP && SYSCFG_PMC_I2C4_FMP */
+
+
+
/**
* @}
*/
diff --git a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_TrueStudio/Prog/lib/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_tim.h b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_TrueStudio/Prog/lib/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_tim.h
index 6a29ae50..ab067a59 100644
--- a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_TrueStudio/Prog/lib/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_tim.h
+++ b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_TrueStudio/Prog/lib/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_tim.h
@@ -167,7 +167,7 @@ typedef struct
This parameter can be a value of @ref TIM_Encoder_Mode */
uint32_t IC1Polarity; /*!< Specifies the active edge of the input signal.
- This parameter can be a value of @ref TIM_Input_Capture_Polarity */
+ This parameter can be a value of @ref TIM_Encoder_Input_Polarity */
uint32_t IC1Selection; /*!< Specifies the input.
This parameter can be a value of @ref TIM_Input_Capture_Selection */
@@ -179,7 +179,7 @@ typedef struct
This parameter can be a number between Min_Data = 0x0 and Max_Data = 0xF */
uint32_t IC2Polarity; /*!< Specifies the active edge of the input signal.
- This parameter can be a value of @ref TIM_Input_Capture_Polarity */
+ This parameter can be a value of @ref TIM_Encoder_Input_Polarity */
uint32_t IC2Selection; /*!< Specifies the input.
This parameter can be a value of @ref TIM_Input_Capture_Selection */
@@ -235,7 +235,12 @@ typedef struct
uint32_t MasterOutputTrigger2; /*!< Trigger output2 (TRGO2) selection
This parameter can be a value of @ref TIM_Master_Mode_Selection_2 */
uint32_t MasterSlaveMode; /*!< Master/slave mode selection
- This parameter can be a value of @ref TIM_Master_Slave_Mode */
+ This parameter can be a value of @ref TIM_Master_Slave_Mode
+ @note When the Master/slave mode is enabled, the effect of
+ an event on the trigger input (TRGI) is delayed to allow a
+ perfect synchronization between the current timer and its
+ slaves (through TRGO). It is not mandatory in case of timer
+ synchronization mode. */
} TIM_MasterConfigTypeDef;
/**
@@ -518,6 +523,15 @@ typedef void (*pTIM_CallbackTypeDef)(TIM_HandleTypeDef *htim); /*!< pointer to
* @}
*/
+/** @defgroup TIM_Update_Interrupt_Flag_Remap TIM Update Interrupt Flag Remap
+ * @{
+ */
+#define TIM_UIFREMAP_DISABLE 0x00000000U /*!< Update interrupt flag remap disabled */
+#define TIM_UIFREMAP_ENABLE TIM_CR1_UIFREMAP /*!< Update interrupt flag remap enabled */
+/**
+ * @}
+ */
+
/** @defgroup TIM_ClockDivision TIM Clock Division
* @{
*/
@@ -611,6 +625,15 @@ typedef void (*pTIM_CallbackTypeDef)(TIM_HandleTypeDef *htim); /*!< pointer to
* @}
*/
+/** @defgroup TIM_Encoder_Input_Polarity TIM Encoder Input Polarity
+ * @{
+ */
+#define TIM_ENCODERINPUTPOLARITY_RISING TIM_INPUTCHANNELPOLARITY_RISING /*!< Encoder input with rising edge polarity */
+#define TIM_ENCODERINPUTPOLARITY_FALLING TIM_INPUTCHANNELPOLARITY_FALLING /*!< Encoder input with falling edge polarity */
+/**
+ * @}
+ */
+
/** @defgroup TIM_Input_Capture_Selection TIM Input Capture Selection
* @{
*/
@@ -1119,15 +1142,15 @@ typedef void (*pTIM_CallbackTypeDef)(TIM_HandleTypeDef *htim); /*!< pointer to
* @retval None
*/
#define __HAL_TIM_DISABLE(__HANDLE__) \
- do { \
- if (((__HANDLE__)->Instance->CCER & TIM_CCER_CCxE_MASK) == 0UL) \
- { \
- if(((__HANDLE__)->Instance->CCER & TIM_CCER_CCxNE_MASK) == 0UL) \
- { \
- (__HANDLE__)->Instance->CR1 &= ~(TIM_CR1_CEN); \
- } \
- } \
- } while(0)
+ do { \
+ if (((__HANDLE__)->Instance->CCER & TIM_CCER_CCxE_MASK) == 0UL) \
+ { \
+ if(((__HANDLE__)->Instance->CCER & TIM_CCER_CCxNE_MASK) == 0UL) \
+ { \
+ (__HANDLE__)->Instance->CR1 &= ~(TIM_CR1_CEN); \
+ } \
+ } \
+ } while(0)
/**
* @brief Disable the TIM main Output.
@@ -1136,15 +1159,15 @@ typedef void (*pTIM_CallbackTypeDef)(TIM_HandleTypeDef *htim); /*!< pointer to
* @note The Main Output Enable of a timer instance is disabled only if all the CCx and CCxN channels have been disabled
*/
#define __HAL_TIM_MOE_DISABLE(__HANDLE__) \
- do { \
- if (((__HANDLE__)->Instance->CCER & TIM_CCER_CCxE_MASK) == 0UL) \
- { \
- if(((__HANDLE__)->Instance->CCER & TIM_CCER_CCxNE_MASK) == 0UL) \
- { \
- (__HANDLE__)->Instance->BDTR &= ~(TIM_BDTR_MOE); \
- } \
- } \
- } while(0)
+ do { \
+ if (((__HANDLE__)->Instance->CCER & TIM_CCER_CCxE_MASK) == 0UL) \
+ { \
+ if(((__HANDLE__)->Instance->CCER & TIM_CCER_CCxNE_MASK) == 0UL) \
+ { \
+ (__HANDLE__)->Instance->BDTR &= ~(TIM_BDTR_MOE); \
+ } \
+ } \
+ } while(0)
/**
* @brief Disable the TIM main Output.
@@ -1279,7 +1302,8 @@ typedef void (*pTIM_CallbackTypeDef)(TIM_HandleTypeDef *htim); /*!< pointer to
* @arg TIM_IT_BREAK: Break interrupt
* @retval The state of TIM_IT (SET or RESET).
*/
-#define __HAL_TIM_GET_IT_SOURCE(__HANDLE__, __INTERRUPT__) ((((__HANDLE__)->Instance->DIER & (__INTERRUPT__)) == (__INTERRUPT__)) ? SET : RESET)
+#define __HAL_TIM_GET_IT_SOURCE(__HANDLE__, __INTERRUPT__) ((((__HANDLE__)->Instance->DIER & (__INTERRUPT__)) \
+ == (__INTERRUPT__)) ? SET : RESET)
/** @brief Clear the TIM interrupt pending bits.
* @param __HANDLE__ TIM handle
@@ -1297,6 +1321,31 @@ typedef void (*pTIM_CallbackTypeDef)(TIM_HandleTypeDef *htim); /*!< pointer to
*/
#define __HAL_TIM_CLEAR_IT(__HANDLE__, __INTERRUPT__) ((__HANDLE__)->Instance->SR = ~(__INTERRUPT__))
+/**
+ * @brief Force a continuous copy of the update interrupt flag (UIF) into the timer counter register (bit 31).
+ * @note This allows both the counter value and a potential roll-over condition signalled by the UIFCPY flag to be read in an atomic way.
+ * @param __HANDLE__ TIM handle.
+ * @retval None
+mode.
+ */
+#define __HAL_TIM_UIFREMAP_ENABLE(__HANDLE__) (((__HANDLE__)->Instance->CR1 |= TIM_CR1_UIFREMAP))
+
+/**
+ * @brief Disable update interrupt flag (UIF) remapping.
+ * @param __HANDLE__ TIM handle.
+ * @retval None
+mode.
+ */
+#define __HAL_TIM_UIFREMAP_DISABLE(__HANDLE__) (((__HANDLE__)->Instance->CR1 &= ~TIM_CR1_UIFREMAP))
+
+/**
+ * @brief Get update interrupt flag (UIF) copy status.
+ * @param __COUNTER__ Counter value.
+ * @retval The state of UIFCPY (TRUE or FALSE).
+mode.
+ */
+#define __HAL_TIM_GET_UIFCPY(__COUNTER__) (((__COUNTER__) & (TIM_CNT_UIFCPY)) == (TIM_CNT_UIFCPY))
+
/**
* @brief Indicates whether or not the TIM Counter is used as downcounter.
* @param __HANDLE__ TIM handle.
@@ -1316,6 +1365,8 @@ mode.
/**
* @brief Set the TIM Counter Register value on runtime.
+ * Note Please check if the bit 31 of CNT register is used as UIF copy or not, this may affect the counter range in case of 32 bits counter TIM instance.
+ * Bit 31 of CNT can be enabled/disabled using __HAL_TIM_UIFREMAP_ENABLE()/__HAL_TIM_UIFREMAP_DISABLE() macros.
* @param __HANDLE__ TIM handle.
* @param __COUNTER__ specifies the Counter register new value.
* @retval None
@@ -1327,8 +1378,7 @@ mode.
* @param __HANDLE__ TIM handle.
* @retval 16-bit or 32-bit value of the timer counter register (TIMx_CNT)
*/
-#define __HAL_TIM_GET_COUNTER(__HANDLE__) \
- ((__HANDLE__)->Instance->CNT)
+#define __HAL_TIM_GET_COUNTER(__HANDLE__) ((__HANDLE__)->Instance->CNT)
/**
* @brief Set the TIM Autoreload Register value on runtime without calling another time any Init function.
@@ -1337,18 +1387,17 @@ mode.
* @retval None
*/
#define __HAL_TIM_SET_AUTORELOAD(__HANDLE__, __AUTORELOAD__) \
- do{ \
- (__HANDLE__)->Instance->ARR = (__AUTORELOAD__); \
- (__HANDLE__)->Init.Period = (__AUTORELOAD__); \
- } while(0)
+ do{ \
+ (__HANDLE__)->Instance->ARR = (__AUTORELOAD__); \
+ (__HANDLE__)->Init.Period = (__AUTORELOAD__); \
+ } while(0)
/**
* @brief Get the TIM Autoreload Register value on runtime.
* @param __HANDLE__ TIM handle.
* @retval 16-bit or 32-bit value of the timer auto-reload register(TIMx_ARR)
*/
-#define __HAL_TIM_GET_AUTORELOAD(__HANDLE__) \
- ((__HANDLE__)->Instance->ARR)
+#define __HAL_TIM_GET_AUTORELOAD(__HANDLE__) ((__HANDLE__)->Instance->ARR)
/**
* @brief Set the TIM Clock Division value on runtime without calling another time any Init function.
@@ -1361,11 +1410,11 @@ mode.
* @retval None
*/
#define __HAL_TIM_SET_CLOCKDIVISION(__HANDLE__, __CKD__) \
- do{ \
- (__HANDLE__)->Instance->CR1 &= (~TIM_CR1_CKD); \
- (__HANDLE__)->Instance->CR1 |= (__CKD__); \
- (__HANDLE__)->Init.ClockDivision = (__CKD__); \
- } while(0)
+ do{ \
+ (__HANDLE__)->Instance->CR1 &= (~TIM_CR1_CKD); \
+ (__HANDLE__)->Instance->CR1 |= (__CKD__); \
+ (__HANDLE__)->Init.ClockDivision = (__CKD__); \
+ } while(0)
/**
* @brief Get the TIM Clock Division value on runtime.
@@ -1375,8 +1424,7 @@ mode.
* @arg TIM_CLOCKDIVISION_DIV2: tDTS=2*tCK_INT
* @arg TIM_CLOCKDIVISION_DIV4: tDTS=4*tCK_INT
*/
-#define __HAL_TIM_GET_CLOCKDIVISION(__HANDLE__) \
- ((__HANDLE__)->Instance->CR1 & TIM_CR1_CKD)
+#define __HAL_TIM_GET_CLOCKDIVISION(__HANDLE__) ((__HANDLE__)->Instance->CR1 & TIM_CR1_CKD)
/**
* @brief Set the TIM Input Capture prescaler on runtime without calling another time HAL_TIM_IC_ConfigChannel() function.
@@ -1396,10 +1444,10 @@ mode.
* @retval None
*/
#define __HAL_TIM_SET_ICPRESCALER(__HANDLE__, __CHANNEL__, __ICPSC__) \
- do{ \
- TIM_RESET_ICPRESCALERVALUE((__HANDLE__), (__CHANNEL__)); \
- TIM_SET_ICPRESCALERVALUE((__HANDLE__), (__CHANNEL__), (__ICPSC__)); \
- } while(0)
+ do{ \
+ TIM_RESET_ICPRESCALERVALUE((__HANDLE__), (__CHANNEL__)); \
+ TIM_SET_ICPRESCALERVALUE((__HANDLE__), (__CHANNEL__), (__ICPSC__)); \
+ } while(0)
/**
* @brief Get the TIM Input Capture prescaler on runtime.
@@ -1437,12 +1485,12 @@ mode.
* @retval None
*/
#define __HAL_TIM_SET_COMPARE(__HANDLE__, __CHANNEL__, __COMPARE__) \
-(((__CHANNEL__) == TIM_CHANNEL_1) ? ((__HANDLE__)->Instance->CCR1 = (__COMPARE__)) :\
- ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCR2 = (__COMPARE__)) :\
- ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCR3 = (__COMPARE__)) :\
- ((__CHANNEL__) == TIM_CHANNEL_4) ? ((__HANDLE__)->Instance->CCR4 = (__COMPARE__)) :\
- ((__CHANNEL__) == TIM_CHANNEL_5) ? ((__HANDLE__)->Instance->CCR5 = (__COMPARE__)) :\
- ((__HANDLE__)->Instance->CCR6 = (__COMPARE__)))
+ (((__CHANNEL__) == TIM_CHANNEL_1) ? ((__HANDLE__)->Instance->CCR1 = (__COMPARE__)) :\
+ ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCR2 = (__COMPARE__)) :\
+ ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCR3 = (__COMPARE__)) :\
+ ((__CHANNEL__) == TIM_CHANNEL_4) ? ((__HANDLE__)->Instance->CCR4 = (__COMPARE__)) :\
+ ((__CHANNEL__) == TIM_CHANNEL_5) ? ((__HANDLE__)->Instance->CCR5 = (__COMPARE__)) :\
+ ((__HANDLE__)->Instance->CCR6 = (__COMPARE__)))
/**
* @brief Get the TIM Capture Compare Register value on runtime.
@@ -1458,12 +1506,12 @@ mode.
* @retval 16-bit or 32-bit value of the capture/compare register (TIMx_CCRy)
*/
#define __HAL_TIM_GET_COMPARE(__HANDLE__, __CHANNEL__) \
-(((__CHANNEL__) == TIM_CHANNEL_1) ? ((__HANDLE__)->Instance->CCR1) :\
- ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCR2) :\
- ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCR3) :\
- ((__CHANNEL__) == TIM_CHANNEL_4) ? ((__HANDLE__)->Instance->CCR4) :\
- ((__CHANNEL__) == TIM_CHANNEL_5) ? ((__HANDLE__)->Instance->CCR5) :\
- ((__HANDLE__)->Instance->CCR6))
+ (((__CHANNEL__) == TIM_CHANNEL_1) ? ((__HANDLE__)->Instance->CCR1) :\
+ ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCR2) :\
+ ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCR3) :\
+ ((__CHANNEL__) == TIM_CHANNEL_4) ? ((__HANDLE__)->Instance->CCR4) :\
+ ((__CHANNEL__) == TIM_CHANNEL_5) ? ((__HANDLE__)->Instance->CCR5) :\
+ ((__HANDLE__)->Instance->CCR6))
/**
* @brief Set the TIM Output compare preload.
@@ -1479,12 +1527,12 @@ mode.
* @retval None
*/
#define __HAL_TIM_ENABLE_OCxPRELOAD(__HANDLE__, __CHANNEL__) \
- (((__CHANNEL__) == TIM_CHANNEL_1) ? ((__HANDLE__)->Instance->CCMR1 |= TIM_CCMR1_OC1PE) :\
- ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCMR1 |= TIM_CCMR1_OC2PE) :\
- ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCMR2 |= TIM_CCMR2_OC3PE) :\
- ((__CHANNEL__) == TIM_CHANNEL_4) ? ((__HANDLE__)->Instance->CCMR2 |= TIM_CCMR2_OC4PE) :\
- ((__CHANNEL__) == TIM_CHANNEL_5) ? ((__HANDLE__)->Instance->CCMR3 |= TIM_CCMR3_OC5PE) :\
- ((__HANDLE__)->Instance->CCMR3 |= TIM_CCMR3_OC6PE))
+ (((__CHANNEL__) == TIM_CHANNEL_1) ? ((__HANDLE__)->Instance->CCMR1 |= TIM_CCMR1_OC1PE) :\
+ ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCMR1 |= TIM_CCMR1_OC2PE) :\
+ ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCMR2 |= TIM_CCMR2_OC3PE) :\
+ ((__CHANNEL__) == TIM_CHANNEL_4) ? ((__HANDLE__)->Instance->CCMR2 |= TIM_CCMR2_OC4PE) :\
+ ((__CHANNEL__) == TIM_CHANNEL_5) ? ((__HANDLE__)->Instance->CCMR3 |= TIM_CCMR3_OC5PE) :\
+ ((__HANDLE__)->Instance->CCMR3 |= TIM_CCMR3_OC6PE))
/**
* @brief Reset the TIM Output compare preload.
@@ -1500,12 +1548,62 @@ mode.
* @retval None
*/
#define __HAL_TIM_DISABLE_OCxPRELOAD(__HANDLE__, __CHANNEL__) \
- (((__CHANNEL__) == TIM_CHANNEL_1) ? ((__HANDLE__)->Instance->CCMR1 &= (uint16_t)~TIM_CCMR1_OC1PE) :\
- ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCMR1 &= (uint16_t)~TIM_CCMR1_OC2PE) :\
- ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCMR2 &= (uint16_t)~TIM_CCMR2_OC3PE) :\
- ((__CHANNEL__) == TIM_CHANNEL_4) ? ((__HANDLE__)->Instance->CCMR2 &= (uint16_t)~TIM_CCMR2_OC4PE) :\
- ((__CHANNEL__) == TIM_CHANNEL_5) ? ((__HANDLE__)->Instance->CCMR3 &= (uint16_t)~TIM_CCMR3_OC5PE) :\
- ((__HANDLE__)->Instance->CCMR3 &= (uint16_t)~TIM_CCMR3_OC6PE))
+ (((__CHANNEL__) == TIM_CHANNEL_1) ? ((__HANDLE__)->Instance->CCMR1 &= ~TIM_CCMR1_OC1PE) :\
+ ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCMR1 &= ~TIM_CCMR1_OC2PE) :\
+ ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCMR2 &= ~TIM_CCMR2_OC3PE) :\
+ ((__CHANNEL__) == TIM_CHANNEL_4) ? ((__HANDLE__)->Instance->CCMR2 &= ~TIM_CCMR2_OC4PE) :\
+ ((__CHANNEL__) == TIM_CHANNEL_5) ? ((__HANDLE__)->Instance->CCMR3 &= ~TIM_CCMR3_OC5PE) :\
+ ((__HANDLE__)->Instance->CCMR3 &= ~TIM_CCMR3_OC6PE))
+
+/**
+ * @brief Enable fast mode for a given channel.
+ * @param __HANDLE__ TIM handle.
+ * @param __CHANNEL__ TIM Channels to be configured.
+ * This parameter can be one of the following values:
+ * @arg TIM_CHANNEL_1: TIM Channel 1 selected
+ * @arg TIM_CHANNEL_2: TIM Channel 2 selected
+ * @arg TIM_CHANNEL_3: TIM Channel 3 selected
+ * @arg TIM_CHANNEL_4: TIM Channel 4 selected
+ * @arg TIM_CHANNEL_5: TIM Channel 5 selected
+ * @arg TIM_CHANNEL_6: TIM Channel 6 selected
+ * @note When fast mode is enabled an active edge on the trigger input acts
+ * like a compare match on CCx output. Delay to sample the trigger
+ * input and to activate CCx output is reduced to 3 clock cycles.
+ * @note Fast mode acts only if the channel is configured in PWM1 or PWM2 mode.
+ * @retval None
+ */
+#define __HAL_TIM_ENABLE_OCxFAST(__HANDLE__, __CHANNEL__) \
+ (((__CHANNEL__) == TIM_CHANNEL_1) ? ((__HANDLE__)->Instance->CCMR1 |= TIM_CCMR1_OC1FE) :\
+ ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCMR1 |= TIM_CCMR1_OC2FE) :\
+ ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCMR2 |= TIM_CCMR2_OC3FE) :\
+ ((__CHANNEL__) == TIM_CHANNEL_4) ? ((__HANDLE__)->Instance->CCMR2 |= TIM_CCMR2_OC4FE) :\
+ ((__CHANNEL__) == TIM_CHANNEL_5) ? ((__HANDLE__)->Instance->CCMR3 |= TIM_CCMR3_OC5FE) :\
+ ((__HANDLE__)->Instance->CCMR3 |= TIM_CCMR3_OC6FE))
+
+/**
+ * @brief Disable fast mode for a given channel.
+ * @param __HANDLE__ TIM handle.
+ * @param __CHANNEL__ TIM Channels to be configured.
+ * This parameter can be one of the following values:
+ * @arg TIM_CHANNEL_1: TIM Channel 1 selected
+ * @arg TIM_CHANNEL_2: TIM Channel 2 selected
+ * @arg TIM_CHANNEL_3: TIM Channel 3 selected
+ * @arg TIM_CHANNEL_4: TIM Channel 4 selected
+ * @arg TIM_CHANNEL_5: TIM Channel 5 selected
+ * @arg TIM_CHANNEL_6: TIM Channel 6 selected
+ * @note When fast mode is disabled CCx output behaves normally depending
+ * on counter and CCRx values even when the trigger is ON. The minimum
+ * delay to activate CCx output when an active edge occurs on the
+ * trigger input is 5 clock cycles.
+ * @retval None
+ */
+#define __HAL_TIM_DISABLE_OCxFAST(__HANDLE__, __CHANNEL__) \
+ (((__CHANNEL__) == TIM_CHANNEL_1) ? ((__HANDLE__)->Instance->CCMR1 &= ~TIM_CCMR1_OC1FE) :\
+ ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCMR1 &= ~TIM_CCMR1_OC2FE) :\
+ ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCMR2 &= ~TIM_CCMR2_OC3FE) :\
+ ((__CHANNEL__) == TIM_CHANNEL_4) ? ((__HANDLE__)->Instance->CCMR2 &= ~TIM_CCMR2_OC4FE) :\
+ ((__CHANNEL__) == TIM_CHANNEL_5) ? ((__HANDLE__)->Instance->CCMR3 &= ~TIM_CCMR3_OC5FE) :\
+ ((__HANDLE__)->Instance->CCMR3 &= ~TIM_CCMR3_OC6FE))
/**
* @brief Set the Update Request Source (URS) bit of the TIMx_CR1 register.
@@ -1515,8 +1613,7 @@ mode.
* enabled)
* @retval None
*/
-#define __HAL_TIM_URS_ENABLE(__HANDLE__) \
- ((__HANDLE__)->Instance->CR1|= TIM_CR1_URS)
+#define __HAL_TIM_URS_ENABLE(__HANDLE__) ((__HANDLE__)->Instance->CR1|= TIM_CR1_URS)
/**
* @brief Reset the Update Request Source (URS) bit of the TIMx_CR1 register.
@@ -1529,8 +1626,7 @@ mode.
* _ Update generation through the slave mode controller
* @retval None
*/
-#define __HAL_TIM_URS_DISABLE(__HANDLE__) \
- ((__HANDLE__)->Instance->CR1&=~TIM_CR1_URS)
+#define __HAL_TIM_URS_DISABLE(__HANDLE__) ((__HANDLE__)->Instance->CR1&=~TIM_CR1_URS)
/**
* @brief Set the TIM Capture x input polarity on runtime.
@@ -1548,10 +1644,10 @@ mode.
* @retval None
*/
#define __HAL_TIM_SET_CAPTUREPOLARITY(__HANDLE__, __CHANNEL__, __POLARITY__) \
- do{ \
- TIM_RESET_CAPTUREPOLARITY((__HANDLE__), (__CHANNEL__)); \
- TIM_SET_CAPTUREPOLARITY((__HANDLE__), (__CHANNEL__), (__POLARITY__)); \
- }while(0)
+ do{ \
+ TIM_RESET_CAPTUREPOLARITY((__HANDLE__), (__CHANNEL__)); \
+ TIM_SET_CAPTUREPOLARITY((__HANDLE__), (__CHANNEL__), (__POLARITY__)); \
+ }while(0)
/**
* @}
@@ -1579,29 +1675,29 @@ mode.
((__MODE__) == TIM_CLEARINPUTSOURCE_ETR))
#if defined(TIM_AF1_BKINE)&&defined(TIM_AF2_BKINE)
-#define IS_TIM_DMA_BASE(__BASE__) (((__BASE__) == TIM_DMABASE_CR1) || \
- ((__BASE__) == TIM_DMABASE_CR2) || \
- ((__BASE__) == TIM_DMABASE_SMCR) || \
- ((__BASE__) == TIM_DMABASE_DIER) || \
- ((__BASE__) == TIM_DMABASE_SR) || \
- ((__BASE__) == TIM_DMABASE_EGR) || \
- ((__BASE__) == TIM_DMABASE_CCMR1) || \
- ((__BASE__) == TIM_DMABASE_CCMR2) || \
- ((__BASE__) == TIM_DMABASE_CCER) || \
- ((__BASE__) == TIM_DMABASE_CNT) || \
- ((__BASE__) == TIM_DMABASE_PSC) || \
- ((__BASE__) == TIM_DMABASE_ARR) || \
- ((__BASE__) == TIM_DMABASE_RCR) || \
- ((__BASE__) == TIM_DMABASE_CCR1) || \
- ((__BASE__) == TIM_DMABASE_CCR2) || \
- ((__BASE__) == TIM_DMABASE_CCR3) || \
- ((__BASE__) == TIM_DMABASE_CCR4) || \
- ((__BASE__) == TIM_DMABASE_BDTR) || \
- ((__BASE__) == TIM_DMABASE_OR) || \
- ((__BASE__) == TIM_DMABASE_CCMR3) || \
- ((__BASE__) == TIM_DMABASE_CCR5) || \
- ((__BASE__) == TIM_DMABASE_CCR6) || \
- ((__BASE__) == TIM_DMABASE_AF1) || \
+#define IS_TIM_DMA_BASE(__BASE__) (((__BASE__) == TIM_DMABASE_CR1) || \
+ ((__BASE__) == TIM_DMABASE_CR2) || \
+ ((__BASE__) == TIM_DMABASE_SMCR) || \
+ ((__BASE__) == TIM_DMABASE_DIER) || \
+ ((__BASE__) == TIM_DMABASE_SR) || \
+ ((__BASE__) == TIM_DMABASE_EGR) || \
+ ((__BASE__) == TIM_DMABASE_CCMR1) || \
+ ((__BASE__) == TIM_DMABASE_CCMR2) || \
+ ((__BASE__) == TIM_DMABASE_CCER) || \
+ ((__BASE__) == TIM_DMABASE_CNT) || \
+ ((__BASE__) == TIM_DMABASE_PSC) || \
+ ((__BASE__) == TIM_DMABASE_ARR) || \
+ ((__BASE__) == TIM_DMABASE_RCR) || \
+ ((__BASE__) == TIM_DMABASE_CCR1) || \
+ ((__BASE__) == TIM_DMABASE_CCR2) || \
+ ((__BASE__) == TIM_DMABASE_CCR3) || \
+ ((__BASE__) == TIM_DMABASE_CCR4) || \
+ ((__BASE__) == TIM_DMABASE_BDTR) || \
+ ((__BASE__) == TIM_DMABASE_OR) || \
+ ((__BASE__) == TIM_DMABASE_CCMR3) || \
+ ((__BASE__) == TIM_DMABASE_CCR5) || \
+ ((__BASE__) == TIM_DMABASE_CCR6) || \
+ ((__BASE__) == TIM_DMABASE_AF1) || \
((__BASE__) == TIM_DMABASE_AF2))
#else
#define IS_TIM_DMA_BASE(__BASE__) (((__BASE__) == TIM_DMABASE_CR1) || \
@@ -1636,6 +1732,9 @@ mode.
((__MODE__) == TIM_COUNTERMODE_CENTERALIGNED2) || \
((__MODE__) == TIM_COUNTERMODE_CENTERALIGNED3))
+#define IS_TIM_UIFREMAP_MODE(__MODE__) (((__MODE__) == TIM_UIFREMAP_DISABLE) || \
+ ((__MODE__) == TIM_UIFREMAP_ENALE))
+
#define IS_TIM_CLOCKDIVISION_DIV(__DIV__) (((__DIV__) == TIM_CLOCKDIVISION_DIV1) || \
((__DIV__) == TIM_CLOCKDIVISION_DIV2) || \
((__DIV__) == TIM_CLOCKDIVISION_DIV4))
@@ -1658,6 +1757,9 @@ mode.
#define IS_TIM_OCNIDLE_STATE(__STATE__) (((__STATE__) == TIM_OCNIDLESTATE_SET) || \
((__STATE__) == TIM_OCNIDLESTATE_RESET))
+#define IS_TIM_ENCODERINPUT_POLARITY(__POLARITY__) (((__POLARITY__) == TIM_ENCODERINPUTPOLARITY_RISING) || \
+ ((__POLARITY__) == TIM_ENCODERINPUTPOLARITY_FALLING))
+
#define IS_TIM_IC_POLARITY(__POLARITY__) (((__POLARITY__) == TIM_ICPOLARITY_RISING) || \
((__POLARITY__) == TIM_ICPOLARITY_FALLING) || \
((__POLARITY__) == TIM_ICPOLARITY_BOTHEDGE))
@@ -1876,28 +1978,28 @@ mode.
((__TRIGGER__) == TIM_SLAVEMODE_COMBINED_RESETTRIGGER))
#define TIM_SET_ICPRESCALERVALUE(__HANDLE__, __CHANNEL__, __ICPSC__) \
-(((__CHANNEL__) == TIM_CHANNEL_1) ? ((__HANDLE__)->Instance->CCMR1 |= (__ICPSC__)) :\
- ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCMR1 |= ((__ICPSC__) << 8U)) :\
- ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCMR2 |= (__ICPSC__)) :\
- ((__HANDLE__)->Instance->CCMR2 |= ((__ICPSC__) << 8U)))
+ (((__CHANNEL__) == TIM_CHANNEL_1) ? ((__HANDLE__)->Instance->CCMR1 |= (__ICPSC__)) :\
+ ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCMR1 |= ((__ICPSC__) << 8U)) :\
+ ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCMR2 |= (__ICPSC__)) :\
+ ((__HANDLE__)->Instance->CCMR2 |= ((__ICPSC__) << 8U)))
#define TIM_RESET_ICPRESCALERVALUE(__HANDLE__, __CHANNEL__) \
-(((__CHANNEL__) == TIM_CHANNEL_1) ? ((__HANDLE__)->Instance->CCMR1 &= (uint16_t)~TIM_CCMR1_IC1PSC) :\
- ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCMR1 &= (uint16_t)~TIM_CCMR1_IC2PSC) :\
- ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCMR2 &= (uint16_t)~TIM_CCMR2_IC3PSC) :\
- ((__HANDLE__)->Instance->CCMR2 &= (uint16_t)~TIM_CCMR2_IC4PSC))
+ (((__CHANNEL__) == TIM_CHANNEL_1) ? ((__HANDLE__)->Instance->CCMR1 &= ~TIM_CCMR1_IC1PSC) :\
+ ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCMR1 &= ~TIM_CCMR1_IC2PSC) :\
+ ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCMR2 &= ~TIM_CCMR2_IC3PSC) :\
+ ((__HANDLE__)->Instance->CCMR2 &= ~TIM_CCMR2_IC4PSC))
#define TIM_SET_CAPTUREPOLARITY(__HANDLE__, __CHANNEL__, __POLARITY__) \
-(((__CHANNEL__) == TIM_CHANNEL_1) ? ((__HANDLE__)->Instance->CCER |= (__POLARITY__)) :\
- ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCER |= ((__POLARITY__) << 4U)) :\
- ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCER |= ((__POLARITY__) << 8U)) :\
- ((__HANDLE__)->Instance->CCER |= (((__POLARITY__) << 12U))))
+ (((__CHANNEL__) == TIM_CHANNEL_1) ? ((__HANDLE__)->Instance->CCER |= (__POLARITY__)) :\
+ ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCER |= ((__POLARITY__) << 4U)) :\
+ ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCER |= ((__POLARITY__) << 8U)) :\
+ ((__HANDLE__)->Instance->CCER |= (((__POLARITY__) << 12U))))
#define TIM_RESET_CAPTUREPOLARITY(__HANDLE__, __CHANNEL__) \
-(((__CHANNEL__) == TIM_CHANNEL_1) ? ((__HANDLE__)->Instance->CCER &= (uint16_t)~(TIM_CCER_CC1P | TIM_CCER_CC1NP)) :\
- ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCER &= (uint16_t)~(TIM_CCER_CC2P | TIM_CCER_CC2NP)) :\
- ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCER &= (uint16_t)~(TIM_CCER_CC3P | TIM_CCER_CC3NP)) :\
- ((__HANDLE__)->Instance->CCER &= (uint16_t)~(TIM_CCER_CC4P | TIM_CCER_CC4NP)))
+ (((__CHANNEL__) == TIM_CHANNEL_1) ? ((__HANDLE__)->Instance->CCER &= ~(TIM_CCER_CC1P | TIM_CCER_CC1NP)) :\
+ ((__CHANNEL__) == TIM_CHANNEL_2) ? ((__HANDLE__)->Instance->CCER &= ~(TIM_CCER_CC2P | TIM_CCER_CC2NP)) :\
+ ((__CHANNEL__) == TIM_CHANNEL_3) ? ((__HANDLE__)->Instance->CCER &= ~(TIM_CCER_CC3P | TIM_CCER_CC3NP)) :\
+ ((__HANDLE__)->Instance->CCER &= ~(TIM_CCER_CC4P | TIM_CCER_CC4NP)))
/**
* @}
@@ -2035,7 +2137,8 @@ HAL_StatusTypeDef HAL_TIM_Encoder_Stop(TIM_HandleTypeDef *htim, uint32_t Channel
HAL_StatusTypeDef HAL_TIM_Encoder_Start_IT(TIM_HandleTypeDef *htim, uint32_t Channel);
HAL_StatusTypeDef HAL_TIM_Encoder_Stop_IT(TIM_HandleTypeDef *htim, uint32_t Channel);
/* Non-Blocking mode: DMA */
-HAL_StatusTypeDef HAL_TIM_Encoder_Start_DMA(TIM_HandleTypeDef *htim, uint32_t Channel, uint32_t *pData1, uint32_t *pData2, uint16_t Length);
+HAL_StatusTypeDef HAL_TIM_Encoder_Start_DMA(TIM_HandleTypeDef *htim, uint32_t Channel, uint32_t *pData1,
+ uint32_t *pData2, uint16_t Length);
HAL_StatusTypeDef HAL_TIM_Encoder_Stop_DMA(TIM_HandleTypeDef *htim, uint32_t Channel);
/**
* @}
@@ -2059,17 +2162,19 @@ void HAL_TIM_IRQHandler(TIM_HandleTypeDef *htim);
HAL_StatusTypeDef HAL_TIM_OC_ConfigChannel(TIM_HandleTypeDef *htim, TIM_OC_InitTypeDef *sConfig, uint32_t Channel);
HAL_StatusTypeDef HAL_TIM_PWM_ConfigChannel(TIM_HandleTypeDef *htim, TIM_OC_InitTypeDef *sConfig, uint32_t Channel);
HAL_StatusTypeDef HAL_TIM_IC_ConfigChannel(TIM_HandleTypeDef *htim, TIM_IC_InitTypeDef *sConfig, uint32_t Channel);
-HAL_StatusTypeDef HAL_TIM_OnePulse_ConfigChannel(TIM_HandleTypeDef *htim, TIM_OnePulse_InitTypeDef *sConfig, uint32_t OutputChannel, uint32_t InputChannel);
-HAL_StatusTypeDef HAL_TIM_ConfigOCrefClear(TIM_HandleTypeDef *htim, TIM_ClearInputConfigTypeDef *sClearInputConfig, uint32_t Channel);
+HAL_StatusTypeDef HAL_TIM_OnePulse_ConfigChannel(TIM_HandleTypeDef *htim, TIM_OnePulse_InitTypeDef *sConfig,
+ uint32_t OutputChannel, uint32_t InputChannel);
+HAL_StatusTypeDef HAL_TIM_ConfigOCrefClear(TIM_HandleTypeDef *htim, TIM_ClearInputConfigTypeDef *sClearInputConfig,
+ uint32_t Channel);
HAL_StatusTypeDef HAL_TIM_ConfigClockSource(TIM_HandleTypeDef *htim, TIM_ClockConfigTypeDef *sClockSourceConfig);
HAL_StatusTypeDef HAL_TIM_ConfigTI1Input(TIM_HandleTypeDef *htim, uint32_t TI1_Selection);
HAL_StatusTypeDef HAL_TIM_SlaveConfigSynchro(TIM_HandleTypeDef *htim, TIM_SlaveConfigTypeDef *sSlaveConfig);
HAL_StatusTypeDef HAL_TIM_SlaveConfigSynchro_IT(TIM_HandleTypeDef *htim, TIM_SlaveConfigTypeDef *sSlaveConfig);
-HAL_StatusTypeDef HAL_TIM_DMABurst_WriteStart(TIM_HandleTypeDef *htim, uint32_t BurstBaseAddress, uint32_t BurstRequestSrc, \
- uint32_t *BurstBuffer, uint32_t BurstLength);
+HAL_StatusTypeDef HAL_TIM_DMABurst_WriteStart(TIM_HandleTypeDef *htim, uint32_t BurstBaseAddress,
+ uint32_t BurstRequestSrc, uint32_t *BurstBuffer, uint32_t BurstLength);
HAL_StatusTypeDef HAL_TIM_DMABurst_WriteStop(TIM_HandleTypeDef *htim, uint32_t BurstRequestSrc);
-HAL_StatusTypeDef HAL_TIM_DMABurst_ReadStart(TIM_HandleTypeDef *htim, uint32_t BurstBaseAddress, uint32_t BurstRequestSrc, \
- uint32_t *BurstBuffer, uint32_t BurstLength);
+HAL_StatusTypeDef HAL_TIM_DMABurst_ReadStart(TIM_HandleTypeDef *htim, uint32_t BurstBaseAddress,
+ uint32_t BurstRequestSrc, uint32_t *BurstBuffer, uint32_t BurstLength);
HAL_StatusTypeDef HAL_TIM_DMABurst_ReadStop(TIM_HandleTypeDef *htim, uint32_t BurstRequestSrc);
HAL_StatusTypeDef HAL_TIM_GenerateEvent(TIM_HandleTypeDef *htim, uint32_t EventSource);
uint32_t HAL_TIM_ReadCapturedValue(TIM_HandleTypeDef *htim, uint32_t Channel);
@@ -2095,7 +2200,8 @@ void HAL_TIM_ErrorCallback(TIM_HandleTypeDef *htim);
/* Callbacks Register/UnRegister functions ***********************************/
#if (USE_HAL_TIM_REGISTER_CALLBACKS == 1)
-HAL_StatusTypeDef HAL_TIM_RegisterCallback(TIM_HandleTypeDef *htim, HAL_TIM_CallbackIDTypeDef CallbackID, pTIM_CallbackTypeDef pCallback);
+HAL_StatusTypeDef HAL_TIM_RegisterCallback(TIM_HandleTypeDef *htim, HAL_TIM_CallbackIDTypeDef CallbackID,
+ pTIM_CallbackTypeDef pCallback);
HAL_StatusTypeDef HAL_TIM_UnRegisterCallback(TIM_HandleTypeDef *htim, HAL_TIM_CallbackIDTypeDef CallbackID);
#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */
@@ -2125,8 +2231,8 @@ HAL_TIM_StateTypeDef HAL_TIM_Encoder_GetState(TIM_HandleTypeDef *htim);
/* Private functions----------------------------------------------------------*/
/** @defgroup TIM_Private_Functions TIM Private Functions
-* @{
-*/
+ * @{
+ */
void TIM_Base_SetConfig(TIM_TypeDef *TIMx, TIM_Base_InitTypeDef *Structure);
void TIM_TI1_SetConfig(TIM_TypeDef *TIMx, uint32_t TIM_ICPolarity, uint32_t TIM_ICSelection, uint32_t TIM_ICFilter);
void TIM_OC2_SetConfig(TIM_TypeDef *TIMx, TIM_OC_InitTypeDef *OC_Config);
@@ -2145,8 +2251,8 @@ void TIM_ResetCallback(TIM_HandleTypeDef *htim);
#endif /* USE_HAL_TIM_REGISTER_CALLBACKS */
/**
-* @}
-*/
+ * @}
+ */
/* End of private functions --------------------------------------------------*/
/**
diff --git a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_TrueStudio/Prog/lib/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_tim_ex.h b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_TrueStudio/Prog/lib/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_tim_ex.h
index 598f5c6e..b8d3472e 100644
--- a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_TrueStudio/Prog/lib/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_tim_ex.h
+++ b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_TrueStudio/Prog/lib/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_tim_ex.h
@@ -201,9 +201,9 @@ TIMEx_BreakInputConfigTypeDef;
*/
/** @addtogroup TIMEx_Exported_Functions_Group1 Extended Timer Hall Sensor functions
- * @brief Timer Hall Sensor functions
- * @{
- */
+ * @brief Timer Hall Sensor functions
+ * @{
+ */
/* Timer Hall Sensor functions **********************************************/
HAL_StatusTypeDef HAL_TIMEx_HallSensor_Init(TIM_HandleTypeDef *htim, TIM_HallSensor_InitTypeDef *sConfig);
HAL_StatusTypeDef HAL_TIMEx_HallSensor_DeInit(TIM_HandleTypeDef *htim);
@@ -225,9 +225,9 @@ HAL_StatusTypeDef HAL_TIMEx_HallSensor_Stop_DMA(TIM_HandleTypeDef *htim);
*/
/** @addtogroup TIMEx_Exported_Functions_Group2 Extended Timer Complementary Output Compare functions
- * @brief Timer Complementary Output Compare functions
- * @{
- */
+ * @brief Timer Complementary Output Compare functions
+ * @{
+ */
/* Timer Complementary Output Compare functions *****************************/
/* Blocking mode: Polling */
HAL_StatusTypeDef HAL_TIMEx_OCN_Start(TIM_HandleTypeDef *htim, uint32_t Channel);
@@ -245,9 +245,9 @@ HAL_StatusTypeDef HAL_TIMEx_OCN_Stop_DMA(TIM_HandleTypeDef *htim, uint32_t Chann
*/
/** @addtogroup TIMEx_Exported_Functions_Group3 Extended Timer Complementary PWM functions
- * @brief Timer Complementary PWM functions
- * @{
- */
+ * @brief Timer Complementary PWM functions
+ * @{
+ */
/* Timer Complementary PWM functions ****************************************/
/* Blocking mode: Polling */
HAL_StatusTypeDef HAL_TIMEx_PWMN_Start(TIM_HandleTypeDef *htim, uint32_t Channel);
@@ -264,9 +264,9 @@ HAL_StatusTypeDef HAL_TIMEx_PWMN_Stop_DMA(TIM_HandleTypeDef *htim, uint32_t Chan
*/
/** @addtogroup TIMEx_Exported_Functions_Group4 Extended Timer Complementary One Pulse functions
- * @brief Timer Complementary One Pulse functions
- * @{
- */
+ * @brief Timer Complementary One Pulse functions
+ * @{
+ */
/* Timer Complementary One Pulse functions **********************************/
/* Blocking mode: Polling */
HAL_StatusTypeDef HAL_TIMEx_OnePulseN_Start(TIM_HandleTypeDef *htim, uint32_t OutputChannel);
@@ -280,17 +280,23 @@ HAL_StatusTypeDef HAL_TIMEx_OnePulseN_Stop_IT(TIM_HandleTypeDef *htim, uint32_t
*/
/** @addtogroup TIMEx_Exported_Functions_Group5 Extended Peripheral Control functions
- * @brief Peripheral Control functions
- * @{
- */
+ * @brief Peripheral Control functions
+ * @{
+ */
/* Extended Control functions ************************************************/
-HAL_StatusTypeDef HAL_TIMEx_ConfigCommutEvent(TIM_HandleTypeDef *htim, uint32_t InputTrigger, uint32_t CommutationSource);
-HAL_StatusTypeDef HAL_TIMEx_ConfigCommutEvent_IT(TIM_HandleTypeDef *htim, uint32_t InputTrigger, uint32_t CommutationSource);
-HAL_StatusTypeDef HAL_TIMEx_ConfigCommutEvent_DMA(TIM_HandleTypeDef *htim, uint32_t InputTrigger, uint32_t CommutationSource);
-HAL_StatusTypeDef HAL_TIMEx_MasterConfigSynchronization(TIM_HandleTypeDef *htim, TIM_MasterConfigTypeDef *sMasterConfig);
-HAL_StatusTypeDef HAL_TIMEx_ConfigBreakDeadTime(TIM_HandleTypeDef *htim, TIM_BreakDeadTimeConfigTypeDef *sBreakDeadTimeConfig);
+HAL_StatusTypeDef HAL_TIMEx_ConfigCommutEvent(TIM_HandleTypeDef *htim, uint32_t InputTrigger,
+ uint32_t CommutationSource);
+HAL_StatusTypeDef HAL_TIMEx_ConfigCommutEvent_IT(TIM_HandleTypeDef *htim, uint32_t InputTrigger,
+ uint32_t CommutationSource);
+HAL_StatusTypeDef HAL_TIMEx_ConfigCommutEvent_DMA(TIM_HandleTypeDef *htim, uint32_t InputTrigger,
+ uint32_t CommutationSource);
+HAL_StatusTypeDef HAL_TIMEx_MasterConfigSynchronization(TIM_HandleTypeDef *htim,
+ TIM_MasterConfigTypeDef *sMasterConfig);
+HAL_StatusTypeDef HAL_TIMEx_ConfigBreakDeadTime(TIM_HandleTypeDef *htim,
+ TIM_BreakDeadTimeConfigTypeDef *sBreakDeadTimeConfig);
#if defined(TIM_BREAK_INPUT_SUPPORT)
-HAL_StatusTypeDef HAL_TIMEx_ConfigBreakInput(TIM_HandleTypeDef *htim, uint32_t BreakInput, TIMEx_BreakInputConfigTypeDef *sBreakInputConfig);
+HAL_StatusTypeDef HAL_TIMEx_ConfigBreakInput(TIM_HandleTypeDef *htim, uint32_t BreakInput,
+ TIMEx_BreakInputConfigTypeDef *sBreakInputConfig);
#endif /* TIM_BREAK_INPUT_SUPPORT */
HAL_StatusTypeDef HAL_TIMEx_GroupChannel5(TIM_HandleTypeDef *htim, uint32_t Channels);
HAL_StatusTypeDef HAL_TIMEx_RemapConfig(TIM_HandleTypeDef *htim, uint32_t Remap);
@@ -327,7 +333,7 @@ HAL_TIM_StateTypeDef HAL_TIMEx_HallSensor_GetState(TIM_HandleTypeDef *htim);
/* End of exported functions -------------------------------------------------*/
/* Private functions----------------------------------------------------------*/
-/** @defgroup TIMEx_Private_Functions TIM Extended Private Functions
+/** @addtogroup TIMEx_Private_Functions TIMEx Private Functions
* @{
*/
void TIMEx_DMACommutationCplt(DMA_HandleTypeDef *hdma);
diff --git a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_TrueStudio/Prog/lib/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_uart.h b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_TrueStudio/Prog/lib/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_uart.h
index 4209206e..473ff95e 100644
--- a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_TrueStudio/Prog/lib/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_uart.h
+++ b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_TrueStudio/Prog/lib/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_uart.h
@@ -125,8 +125,6 @@ typedef struct
This parameter can be a value of @ref UART_MSB_First. */
} UART_AdvFeatureInitTypeDef;
-
-
/**
* @brief HAL UART State definition
* @note HAL UART State value is a combination of 2 different substates: gState and RxState (see @ref UART_State_Definition).
@@ -206,10 +204,9 @@ typedef struct __UART_HandleTypeDef
uint16_t Mask; /*!< UART Rx RDR register mask */
+ void (*RxISR)(struct __UART_HandleTypeDef *huart); /*!< Function pointer on Rx IRQ handler */
- void (*RxISR)(struct __UART_HandleTypeDef *huart); /*!< Function pointer on Rx IRQ handler */
-
- void (*TxISR)(struct __UART_HandleTypeDef *huart); /*!< Function pointer on Tx IRQ handler */
+ void (*TxISR)(struct __UART_HandleTypeDef *huart); /*!< Function pointer on Tx IRQ handler */
DMA_HandleTypeDef *hdmatx; /*!< UART Tx DMA Handle parameters */
@@ -313,8 +310,10 @@ typedef void (*pUART_CallbackTypeDef)(UART_HandleTypeDef *huart); /*!< pointer
#define HAL_UART_ERROR_FE ((uint32_t)0x00000004U) /*!< Frame error */
#define HAL_UART_ERROR_ORE ((uint32_t)0x00000008U) /*!< Overrun error */
#define HAL_UART_ERROR_DMA ((uint32_t)0x00000010U) /*!< DMA transfer error */
+#define HAL_UART_ERROR_RTO ((uint32_t)0x00000020U) /*!< Receiver Timeout error */
+
#if (USE_HAL_UART_REGISTER_CALLBACKS == 1)
-#define HAL_UART_ERROR_INVALID_CALLBACK ((uint32_t)0x00000020U) /*!< Invalid Callback error */
+#define HAL_UART_ERROR_INVALID_CALLBACK ((uint32_t)0x00000040U) /*!< Invalid Callback error */
#endif /* USE_HAL_UART_REGISTER_CALLBACKS */
/**
* @}
@@ -400,11 +399,11 @@ typedef void (*pUART_CallbackTypeDef)(UART_HandleTypeDef *huart); /*!< pointer
* @}
*/
-/** @defgroup UART_Receiver_TimeOut UART Receiver TimeOut
+/** @defgroup UART_Receiver_Timeout UART Receiver Timeout
* @{
*/
-#define UART_RECEIVER_TIMEOUT_DISABLE 0x00000000U /*!< UART receiver timeout disable */
-#define UART_RECEIVER_TIMEOUT_ENABLE USART_CR2_RTOEN /*!< UART receiver timeout enable */
+#define UART_RECEIVER_TIMEOUT_DISABLE 0x00000000U /*!< UART Receiver Timeout disable */
+#define UART_RECEIVER_TIMEOUT_ENABLE USART_CR2_RTOEN /*!< UART Receiver Timeout enable */
/**
* @}
*/
@@ -562,6 +561,17 @@ typedef void (*pUART_CallbackTypeDef)(UART_HandleTypeDef *huart); /*!< pointer
/**
* @}
*/
+#if defined(USART_CR1_UESM)
+
+/** @defgroup UART_Stop_Mode_Enable UART Advanced Feature Stop Mode Enable
+ * @{
+ */
+#define UART_ADVFEATURE_STOPMODE_DISABLE 0x00000000U /*!< UART stop mode disable */
+#define UART_ADVFEATURE_STOPMODE_ENABLE USART_CR1_UESM /*!< UART stop mode enable */
+/**
+ * @}
+ */
+#endif /* USART_CR1_UESM */
/** @defgroup UART_Mute_Mode UART Advanced Feature Mute Mode Enable
* @{
@@ -579,6 +589,18 @@ typedef void (*pUART_CallbackTypeDef)(UART_HandleTypeDef *huart); /*!< pointer
/**
* @}
*/
+#if defined(USART_CR1_UESM)
+
+/** @defgroup UART_WakeUp_from_Stop_Selection UART WakeUp From Stop Selection
+ * @{
+ */
+#define UART_WAKEUP_ON_ADDRESS 0x00000000U /*!< UART wake-up on address */
+#define UART_WAKEUP_ON_STARTBIT USART_CR3_WUS_1 /*!< UART wake-up on start bit */
+#define UART_WAKEUP_ON_READDATA_NONEMPTY USART_CR3_WUS /*!< UART wake-up on receive data register not empty or RXFIFO is not empty */
+/**
+ * @}
+ */
+#endif /* USART_CR1_UESM */
/** @defgroup UART_DriverEnable_Polarity UART DriverEnable Polarity
* @{
@@ -626,13 +648,20 @@ typedef void (*pUART_CallbackTypeDef)(UART_HandleTypeDef *huart); /*!< pointer
* - 0xXXXX : Flag mask in the ISR register
* @{
*/
+#if defined(USART_ISR_REACK)
+#define UART_FLAG_REACK USART_ISR_REACK /*!< UART receive enable acknowledge flag */
+#endif /* USART_ISR_REACK */
#define UART_FLAG_TEACK USART_ISR_TEACK /*!< UART transmit enable acknowledge flag */
+#if defined(USART_CR1_UESM)
+#define UART_FLAG_WUF USART_ISR_WUF /*!< UART wake-up from stop mode flag */
+#endif /* USART_CR1_UESM */
#define UART_FLAG_RWU USART_ISR_RWU /*!< UART receiver wake-up from mute mode flag */
#define UART_FLAG_SBKF USART_ISR_SBKF /*!< UART send break flag */
#define UART_FLAG_CMF USART_ISR_CMF /*!< UART character match flag */
#define UART_FLAG_BUSY USART_ISR_BUSY /*!< UART busy flag */
#define UART_FLAG_ABRF USART_ISR_ABRF /*!< UART auto Baud rate flag */
#define UART_FLAG_ABRE USART_ISR_ABRE /*!< UART auto Baud rate error */
+#define UART_FLAG_RTOF USART_ISR_RTOF /*!< UART receiver timeout flag */
#define UART_FLAG_CTS USART_ISR_CTS /*!< UART clear to send flag */
#define UART_FLAG_CTSIF USART_ISR_CTSIF /*!< UART clear to send interrupt flag */
#define UART_FLAG_LBDF USART_ISR_LBDF /*!< UART LIN break detection flag */
@@ -674,6 +703,10 @@ typedef void (*pUART_CallbackTypeDef)(UART_HandleTypeDef *huart); /*!< pointer
#define UART_IT_LBD 0x0846U /*!< UART LIN break detection interruption */
#define UART_IT_CTS 0x096AU /*!< UART CTS interruption */
#define UART_IT_CM 0x112EU /*!< UART character match interruption */
+#if defined(USART_CR1_UESM)
+#define UART_IT_WUF 0x1476U /*!< UART wake-up from stop mode interruption */
+#endif /* USART_CR1_UESM */
+#define UART_IT_RTO 0x0B3AU /*!< UART receiver timeout interruption */
#define UART_IT_ERR 0x0060U /*!< UART error interruption */
@@ -689,13 +722,17 @@ typedef void (*pUART_CallbackTypeDef)(UART_HandleTypeDef *huart); /*!< pointer
*/
#define UART_CLEAR_PEF USART_ICR_PECF /*!< Parity Error Clear Flag */
#define UART_CLEAR_FEF USART_ICR_FECF /*!< Framing Error Clear Flag */
-#define UART_CLEAR_NEF USART_ICR_NCF /*!< Noise Error detected Clear Flag */
+#define UART_CLEAR_NEF USART_ICR_NCF /*!< Noise Error detected Clear Flag */
#define UART_CLEAR_OREF USART_ICR_ORECF /*!< Overrun Error Clear Flag */
#define UART_CLEAR_IDLEF USART_ICR_IDLECF /*!< IDLE line detected Clear Flag */
#define UART_CLEAR_TCF USART_ICR_TCCF /*!< Transmission Complete Clear Flag */
#define UART_CLEAR_LBDF USART_ICR_LBDCF /*!< LIN Break Detection Clear Flag */
#define UART_CLEAR_CTSF USART_ICR_CTSCF /*!< CTS Interrupt Clear Flag */
#define UART_CLEAR_CMF USART_ICR_CMCF /*!< Character Match Clear Flag */
+#if defined(USART_CR1_UESM)
+#define UART_CLEAR_WUF USART_ICR_WUCF /*!< Wake Up from stop mode Clear Flag */
+#endif /* USART_CR1_UESM */
+#define UART_CLEAR_RTOF USART_ICR_RTOCF /*!< UART receiver timeout clear flag */
/**
* @}
*/
@@ -734,9 +771,9 @@ typedef void (*pUART_CallbackTypeDef)(UART_HandleTypeDef *huart); /*!< pointer
*/
#define __HAL_UART_FLUSH_DRREGISTER(__HANDLE__) \
do{ \
- SET_BIT((__HANDLE__)->Instance->RQR, UART_RXDATA_FLUSH_REQUEST); \
- SET_BIT((__HANDLE__)->Instance->RQR, UART_TXDATA_FLUSH_REQUEST); \
- } while(0U)
+ SET_BIT((__HANDLE__)->Instance->RQR, UART_RXDATA_FLUSH_REQUEST); \
+ SET_BIT((__HANDLE__)->Instance->RQR, UART_TXDATA_FLUSH_REQUEST); \
+ } while(0U)
/** @brief Clear the specified UART pending flag.
* @param __HANDLE__ specifies the UART Handle.
@@ -748,9 +785,13 @@ typedef void (*pUART_CallbackTypeDef)(UART_HandleTypeDef *huart); /*!< pointer
* @arg @ref UART_CLEAR_OREF Overrun Error Clear Flag
* @arg @ref UART_CLEAR_IDLEF IDLE line detected Clear Flag
* @arg @ref UART_CLEAR_TCF Transmission Complete Clear Flag
+ * @arg @ref UART_CLEAR_RTOF Receiver Timeout clear flag
* @arg @ref UART_CLEAR_LBDF LIN Break Detection Clear Flag
* @arg @ref UART_CLEAR_CTSF CTS Interrupt Clear Flag
* @arg @ref UART_CLEAR_CMF Character Match Clear Flag
+#if defined(USART_CR1_UESM)
+ * @arg @ref UART_CLEAR_WUF Wake Up from stop mode Clear Flag
+#endif
* @retval None
*/
#define __HAL_UART_CLEAR_FLAG(__HANDLE__, __FLAG__) ((__HANDLE__)->Instance->ICR = (__FLAG__))
@@ -790,7 +831,13 @@ typedef void (*pUART_CallbackTypeDef)(UART_HandleTypeDef *huart); /*!< pointer
* @param __HANDLE__ specifies the UART Handle.
* @param __FLAG__ specifies the flag to check.
* This parameter can be one of the following values:
+#if defined(USART_ISR_REACK)
+ * @arg @ref UART_FLAG_REACK Receive enable acknowledge flag
+#endif
* @arg @ref UART_FLAG_TEACK Transmit enable acknowledge flag
+ #if defined(USART_CR1_UESM)
+ * @arg @ref UART_FLAG_WUF Wake up from stop mode flag
+ #endif
* @arg @ref UART_FLAG_RWU Receiver wake up flag (if the UART in mute mode)
* @arg @ref UART_FLAG_SBKF Send Break flag
* @arg @ref UART_FLAG_CMF Character match flag
@@ -802,6 +849,7 @@ typedef void (*pUART_CallbackTypeDef)(UART_HandleTypeDef *huart); /*!< pointer
* @arg @ref UART_FLAG_TXE Transmit data register empty flag
* @arg @ref UART_FLAG_TC Transmission Complete flag
* @arg @ref UART_FLAG_RXNE Receive data register not empty flag
+ * @arg @ref UART_FLAG_RTOF Receiver Timeout flag
* @arg @ref UART_FLAG_IDLE Idle Line detection flag
* @arg @ref UART_FLAG_ORE Overrun Error flag
* @arg @ref UART_FLAG_NE Noise Error flag
@@ -815,12 +863,16 @@ typedef void (*pUART_CallbackTypeDef)(UART_HandleTypeDef *huart); /*!< pointer
* @param __HANDLE__ specifies the UART Handle.
* @param __INTERRUPT__ specifies the UART interrupt source to enable.
* This parameter can be one of the following values:
+#if defined(USART_CR1_UESM)
+ * @arg @ref UART_IT_WUF Wakeup from stop mode interrupt
+#endif
* @arg @ref UART_IT_CM Character match interrupt
* @arg @ref UART_IT_CTS CTS change interrupt
* @arg @ref UART_IT_LBD LIN Break detection interrupt
* @arg @ref UART_IT_TXE Transmit Data Register empty interrupt
* @arg @ref UART_IT_TC Transmission complete interrupt
* @arg @ref UART_IT_RXNE Receive Data register not empty interrupt
+ * @arg @ref UART_IT_RTO Receive Timeout interrupt
* @arg @ref UART_IT_IDLE Idle line detection interrupt
* @arg @ref UART_IT_PE Parity Error interrupt
* @arg @ref UART_IT_ERR Error interrupt (frame error, noise error, overrun error)
@@ -835,12 +887,16 @@ typedef void (*pUART_CallbackTypeDef)(UART_HandleTypeDef *huart); /*!< pointer
* @param __HANDLE__ specifies the UART Handle.
* @param __INTERRUPT__ specifies the UART interrupt source to disable.
* This parameter can be one of the following values:
+#if defined(USART_CR1_UESM)
+ * @arg @ref UART_IT_WUF Wakeup from stop mode interrupt
+#endif
* @arg @ref UART_IT_CM Character match interrupt
* @arg @ref UART_IT_CTS CTS change interrupt
* @arg @ref UART_IT_LBD LIN Break detection interrupt
* @arg @ref UART_IT_TXE Transmit Data Register empty interrupt
* @arg @ref UART_IT_TC Transmission complete interrupt
* @arg @ref UART_IT_RXNE Receive Data register not empty interrupt
+ * @arg @ref UART_IT_RTO Receive Timeout interrupt
* @arg @ref UART_IT_IDLE Idle line detection interrupt
* @arg @ref UART_IT_PE Parity Error interrupt
* @arg @ref UART_IT_ERR Error interrupt (Frame error, noise error, overrun error)
@@ -854,37 +910,46 @@ typedef void (*pUART_CallbackTypeDef)(UART_HandleTypeDef *huart); /*!< pointer
* @param __HANDLE__ specifies the UART Handle.
* @param __INTERRUPT__ specifies the UART interrupt to check.
* This parameter can be one of the following values:
+#if defined(USART_CR1_UESM)
+ * @arg @ref UART_IT_WUF Wakeup from stop mode interrupt
+#endif
* @arg @ref UART_IT_CM Character match interrupt
* @arg @ref UART_IT_CTS CTS change interrupt
* @arg @ref UART_IT_LBD LIN Break detection interrupt
* @arg @ref UART_IT_TXE Transmit Data Register empty interrupt
* @arg @ref UART_IT_TC Transmission complete interrupt
* @arg @ref UART_IT_RXNE Receive Data register not empty interrupt
+ * @arg @ref UART_IT_RTO Receive Timeout interrupt
* @arg @ref UART_IT_IDLE Idle line detection interrupt
* @arg @ref UART_IT_PE Parity Error interrupt
* @arg @ref UART_IT_ERR Error interrupt (Frame error, noise error, overrun error)
* @retval The new state of __INTERRUPT__ (SET or RESET).
*/
-#define __HAL_UART_GET_IT(__HANDLE__, __INTERRUPT__) ((((__HANDLE__)->Instance->ISR & (1U << ((__INTERRUPT__)>> 8U))) != RESET) ? SET : RESET)
+#define __HAL_UART_GET_IT(__HANDLE__, __INTERRUPT__) ((((__HANDLE__)->Instance->ISR\
+ & (1U << ((__INTERRUPT__)>> 8U))) != RESET) ? SET : RESET)
/** @brief Check whether the specified UART interrupt source is enabled or not.
* @param __HANDLE__ specifies the UART Handle.
* @param __INTERRUPT__ specifies the UART interrupt source to check.
* This parameter can be one of the following values:
+#if defined(USART_CR1_UESM)
+ * @arg @ref UART_IT_WUF Wakeup from stop mode interrupt
+#endif
* @arg @ref UART_IT_CM Character match interrupt
* @arg @ref UART_IT_CTS CTS change interrupt
* @arg @ref UART_IT_LBD LIN Break detection interrupt
* @arg @ref UART_IT_TXE Transmit Data Register empty interrupt
* @arg @ref UART_IT_TC Transmission complete interrupt
* @arg @ref UART_IT_RXNE Receive Data register not empty interrupt
+ * @arg @ref UART_IT_RTO Receive Timeout interrupt
* @arg @ref UART_IT_IDLE Idle line detection interrupt
* @arg @ref UART_IT_PE Parity Error interrupt
* @arg @ref UART_IT_ERR Error interrupt (Frame error, noise error, overrun error)
* @retval The new state of __INTERRUPT__ (SET or RESET).
*/
#define __HAL_UART_GET_IT_SOURCE(__HANDLE__, __INTERRUPT__) ((((((((uint8_t)(__INTERRUPT__)) >> 5U) == 1U) ? (__HANDLE__)->Instance->CR1 : \
- (((((uint8_t)(__INTERRUPT__)) >> 5U) == 2U) ? (__HANDLE__)->Instance->CR2 : \
- (__HANDLE__)->Instance->CR3)) & (1U << (((uint16_t)(__INTERRUPT__)) & UART_IT_MASK))) != RESET) ? SET : RESET)
+ (((((uint8_t)(__INTERRUPT__)) >> 5U) == 2U) ? (__HANDLE__)->Instance->CR2 : \
+ (__HANDLE__)->Instance->CR3)) & (1U << (((uint16_t)(__INTERRUPT__)) & UART_IT_MASK))) != RESET) ? SET : RESET)
/** @brief Clear the specified UART ISR flag, in setting the proper ICR register flag.
* @param __HANDLE__ specifies the UART Handle.
@@ -896,10 +961,14 @@ typedef void (*pUART_CallbackTypeDef)(UART_HandleTypeDef *huart); /*!< pointer
* @arg @ref UART_CLEAR_NEF Noise detected Clear Flag
* @arg @ref UART_CLEAR_OREF Overrun Error Clear Flag
* @arg @ref UART_CLEAR_IDLEF IDLE line detected Clear Flag
+ * @arg @ref UART_CLEAR_RTOF Receiver timeout clear flag
* @arg @ref UART_CLEAR_TCF Transmission Complete Clear Flag
* @arg @ref UART_CLEAR_LBDF LIN Break Detection Clear Flag
* @arg @ref UART_CLEAR_CTSF CTS Interrupt Clear Flag
* @arg @ref UART_CLEAR_CMF Character Match Clear Flag
+ #if defined(USART_CR1_UESM)
+ * @arg @ref UART_CLEAR_WUF Wake Up from stop mode Clear Flag
+#endif
* @retval None
*/
#define __HAL_UART_CLEAR_IT(__HANDLE__, __IT_CLEAR__) ((__HANDLE__)->Instance->ICR = (uint32_t)(__IT_CLEAR__))
@@ -1083,10 +1152,10 @@ typedef void (*pUART_CallbackTypeDef)(UART_HandleTypeDef *huart); /*!< pointer
* @retval SET (__CONTROL__ is valid) or RESET (__CONTROL__ is invalid)
*/
#define IS_UART_HARDWARE_FLOW_CONTROL(__CONTROL__)\
- (((__CONTROL__) == UART_HWCONTROL_NONE) || \
- ((__CONTROL__) == UART_HWCONTROL_RTS) || \
- ((__CONTROL__) == UART_HWCONTROL_CTS) || \
- ((__CONTROL__) == UART_HWCONTROL_RTS_CTS))
+ (((__CONTROL__) == UART_HWCONTROL_NONE) || \
+ ((__CONTROL__) == UART_HWCONTROL_RTS) || \
+ ((__CONTROL__) == UART_HWCONTROL_CTS) || \
+ ((__CONTROL__) == UART_HWCONTROL_RTS_CTS))
/**
* @brief Ensure that UART communication mode is valid.
@@ -1134,8 +1203,15 @@ typedef void (*pUART_CallbackTypeDef)(UART_HandleTypeDef *huart); /*!< pointer
* @param __TIMEOUT__ UART receiver timeout setting.
* @retval SET (__TIMEOUT__ is valid) or RESET (__TIMEOUT__ is invalid)
*/
-#define IS_UART_RECEIVER_TIMEOUT(__TIMEOUT__) (((__TIMEOUT__) == UART_RECEIVER_TIMEOUT_DISABLE) || \
- ((__TIMEOUT__) == UART_RECEIVER_TIMEOUT_ENABLE))
+#define IS_UART_RECEIVER_TIMEOUT(__TIMEOUT__) (((__TIMEOUT__) == UART_RECEIVER_TIMEOUT_DISABLE) || \
+ ((__TIMEOUT__) == UART_RECEIVER_TIMEOUT_ENABLE))
+
+/** @brief Check the receiver timeout value.
+ * @note The maximum UART receiver timeout value is 0xFFFFFF.
+ * @param __TIMEOUTVALUE__ receiver timeout value.
+ * @retval Test result (TRUE or FALSE)
+ */
+#define IS_UART_RECEIVER_TIMEOUT_VALUE(__TIMEOUTVALUE__) ((__TIMEOUTVALUE__) <= 0xFFFFFFU)
/**
* @brief Ensure that UART LIN state is valid.
@@ -1275,6 +1351,16 @@ typedef void (*pUART_CallbackTypeDef)(UART_HandleTypeDef *huart); /*!< pointer
#define IS_UART_ADVFEATURE_MSBFIRST(__MSBFIRST__) (((__MSBFIRST__) == UART_ADVFEATURE_MSBFIRST_DISABLE) || \
((__MSBFIRST__) == UART_ADVFEATURE_MSBFIRST_ENABLE))
+#if defined(USART_CR1_UESM)
+/**
+ * @brief Ensure that UART stop mode state is valid.
+ * @param __STOPMODE__ UART stop mode state.
+ * @retval SET (__STOPMODE__ is valid) or RESET (__STOPMODE__ is invalid)
+ */
+#define IS_UART_ADVFEATURE_STOPMODE(__STOPMODE__) (((__STOPMODE__) == UART_ADVFEATURE_STOPMODE_DISABLE) || \
+ ((__STOPMODE__) == UART_ADVFEATURE_STOPMODE_ENABLE))
+
+#endif /* USART_CR1_UESM */
/**
* @brief Ensure that UART mute mode state is valid.
* @param __MUTE__ UART mute mode state.
@@ -1282,6 +1368,17 @@ typedef void (*pUART_CallbackTypeDef)(UART_HandleTypeDef *huart); /*!< pointer
*/
#define IS_UART_MUTE_MODE(__MUTE__) (((__MUTE__) == UART_ADVFEATURE_MUTEMODE_DISABLE) || \
((__MUTE__) == UART_ADVFEATURE_MUTEMODE_ENABLE))
+#if defined(USART_CR1_UESM)
+
+/**
+ * @brief Ensure that UART wake-up selection is valid.
+ * @param __WAKE__ UART wake-up selection.
+ * @retval SET (__WAKE__ is valid) or RESET (__WAKE__ is invalid)
+ */
+#define IS_UART_WAKEUP_SELECTION(__WAKE__) (((__WAKE__) == UART_WAKEUP_ON_ADDRESS) || \
+ ((__WAKE__) == UART_WAKEUP_ON_STARTBIT) || \
+ ((__WAKE__) == UART_WAKEUP_ON_READDATA_NONEMPTY))
+#endif /* USART_CR1_UESM */
/**
* @brief Ensure that UART driver enable polarity is valid.
@@ -1320,7 +1417,8 @@ void HAL_UART_MspDeInit(UART_HandleTypeDef *huart);
/* Callbacks Register/UnRegister functions ***********************************/
#if (USE_HAL_UART_REGISTER_CALLBACKS == 1)
-HAL_StatusTypeDef HAL_UART_RegisterCallback(UART_HandleTypeDef *huart, HAL_UART_CallbackIDTypeDef CallbackID, pUART_CallbackTypeDef pCallback);
+HAL_StatusTypeDef HAL_UART_RegisterCallback(UART_HandleTypeDef *huart, HAL_UART_CallbackIDTypeDef CallbackID,
+ pUART_CallbackTypeDef pCallback);
HAL_StatusTypeDef HAL_UART_UnRegisterCallback(UART_HandleTypeDef *huart, HAL_UART_CallbackIDTypeDef CallbackID);
#endif /* USE_HAL_UART_REGISTER_CALLBACKS */
@@ -1369,6 +1467,10 @@ void HAL_UART_AbortReceiveCpltCallback(UART_HandleTypeDef *huart);
*/
/* Peripheral Control functions ************************************************/
+void HAL_UART_ReceiverTimeout_Config(UART_HandleTypeDef *huart, uint32_t TimeoutValue);
+HAL_StatusTypeDef HAL_UART_EnableReceiverTimeout(UART_HandleTypeDef *huart);
+HAL_StatusTypeDef HAL_UART_DisableReceiverTimeout(UART_HandleTypeDef *huart);
+
HAL_StatusTypeDef HAL_LIN_SendBreak(UART_HandleTypeDef *huart);
HAL_StatusTypeDef HAL_MultiProcessor_EnableMuteMode(UART_HandleTypeDef *huart);
HAL_StatusTypeDef HAL_MultiProcessor_DisableMuteMode(UART_HandleTypeDef *huart);
@@ -1405,7 +1507,8 @@ void UART_InitCallbacksToDefault(UART_HandleTypeDef *huart);
#endif /* USE_HAL_UART_REGISTER_CALLBACKS */
HAL_StatusTypeDef UART_SetConfig(UART_HandleTypeDef *huart);
HAL_StatusTypeDef UART_CheckIdleState(UART_HandleTypeDef *huart);
-HAL_StatusTypeDef UART_WaitOnFlagUntilTimeout(UART_HandleTypeDef *huart, uint32_t Flag, FlagStatus Status, uint32_t Tickstart, uint32_t Timeout);
+HAL_StatusTypeDef UART_WaitOnFlagUntilTimeout(UART_HandleTypeDef *huart, uint32_t Flag, FlagStatus Status,
+ uint32_t Tickstart, uint32_t Timeout);
void UART_AdvFeatureConfig(UART_HandleTypeDef *huart);
/**
diff --git a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_TrueStudio/Prog/lib/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_uart_ex.h b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_TrueStudio/Prog/lib/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_uart_ex.h
index a5907f57..866a490f 100644
--- a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_TrueStudio/Prog/lib/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_uart_ex.h
+++ b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_TrueStudio/Prog/lib/STM32F7xx_HAL_Driver/Inc/stm32f7xx_hal_uart_ex.h
@@ -41,7 +41,24 @@ extern "C" {
* @{
*/
+#if defined(USART_CR1_UESM)
+/**
+ * @brief UART wake up from stop mode parameters
+ */
+typedef struct
+{
+ uint32_t WakeUpEvent; /*!< Specifies which event will activate the Wakeup from Stop mode flag (WUF).
+ This parameter can be a value of @ref UART_WakeUp_from_Stop_Selection.
+ If set to UART_WAKEUP_ON_ADDRESS, the two other fields below must
+ be filled up. */
+ uint16_t AddressLength; /*!< Specifies whether the address is 4 or 7-bit long.
+ This parameter can be a value of @ref UARTEx_WakeUp_Address_Length. */
+
+ uint8_t Address; /*!< UART/USART node address (7-bit long max). */
+} UART_WakeUpTypeDef;
+
+#endif /* USART_CR1_UESM */
/**
* @}
*/
@@ -54,9 +71,9 @@ extern "C" {
/** @defgroup UARTEx_Word_Length UARTEx Word Length
* @{
*/
-#define UART_WORDLENGTH_7B USART_CR1_M1 /*!< 7-bit long UART frame */
-#define UART_WORDLENGTH_8B 0x00000000U /*!< 8-bit long UART frame */
-#define UART_WORDLENGTH_9B USART_CR1_M0 /*!< 9-bit long UART frame */
+#define UART_WORDLENGTH_7B USART_CR1_M1 /*!< 7-bit long UART frame */
+#define UART_WORDLENGTH_8B 0x00000000U /*!< 8-bit long UART frame */
+#define UART_WORDLENGTH_9B USART_CR1_M0 /*!< 9-bit long UART frame */
/**
* @}
*/
@@ -64,13 +81,12 @@ extern "C" {
/** @defgroup UARTEx_WakeUp_Address_Length UARTEx WakeUp Address Length
* @{
*/
-#define UART_ADDRESS_DETECT_4B 0x00000000U /*!< 4-bit long wake-up address */
-#define UART_ADDRESS_DETECT_7B USART_CR2_ADDM7 /*!< 7-bit long wake-up address */
+#define UART_ADDRESS_DETECT_4B 0x00000000U /*!< 4-bit long wake-up address */
+#define UART_ADDRESS_DETECT_7B USART_CR2_ADDM7 /*!< 7-bit long wake-up address */
/**
* @}
*/
-
/**
* @}
*/
@@ -86,7 +102,8 @@ extern "C" {
*/
/* Initialization and de-initialization functions ****************************/
-HAL_StatusTypeDef HAL_RS485Ex_Init(UART_HandleTypeDef *huart, uint32_t Polarity, uint32_t AssertionTime, uint32_t DeassertionTime);
+HAL_StatusTypeDef HAL_RS485Ex_Init(UART_HandleTypeDef *huart, uint32_t Polarity, uint32_t AssertionTime,
+ uint32_t DeassertionTime);
/**
* @}
@@ -96,6 +113,10 @@ HAL_StatusTypeDef HAL_RS485Ex_Init(UART_HandleTypeDef *huart, uint32_t Polarity,
* @{
*/
+#if defined(USART_CR1_UESM)
+void HAL_UARTEx_WakeupCallback(UART_HandleTypeDef *huart);
+
+#endif /* USART_CR1_UESM */
/**
* @}
@@ -106,8 +127,20 @@ HAL_StatusTypeDef HAL_RS485Ex_Init(UART_HandleTypeDef *huart, uint32_t Polarity,
*/
/* Peripheral Control functions **********************************************/
+#if defined(USART_CR1_UESM)
+HAL_StatusTypeDef HAL_UARTEx_StopModeWakeUpSourceConfig(UART_HandleTypeDef *huart, UART_WakeUpTypeDef WakeUpSelection);
+HAL_StatusTypeDef HAL_UARTEx_EnableStopMode(UART_HandleTypeDef *huart);
+HAL_StatusTypeDef HAL_UARTEx_DisableStopMode(UART_HandleTypeDef *huart);
+
+#endif/* USART_CR1_UESM */
+#if defined(USART_CR3_UCESM)
+HAL_StatusTypeDef HAL_UARTEx_EnableClockStopMode(UART_HandleTypeDef *huart);
+HAL_StatusTypeDef HAL_UARTEx_DisableClockStopMode(UART_HandleTypeDef *huart);
+
+#endif /* USART_CR3_UCESM */
HAL_StatusTypeDef HAL_MultiProcessorEx_AddressLength_Set(UART_HandleTypeDef *huart, uint32_t AddressLength);
+
/**
* @}
*/
@@ -126,12 +159,12 @@ HAL_StatusTypeDef HAL_MultiProcessorEx_AddressLength_Set(UART_HandleTypeDef *hua
* @param __CLOCKSOURCE__ output variable.
* @retval UART clocking source, written in __CLOCKSOURCE__.
*/
-#define UART_GETCLOCKSOURCE(__HANDLE__,__CLOCKSOURCE__) \
+#define UART_GETCLOCKSOURCE(__HANDLE__,__CLOCKSOURCE__) \
do { \
if((__HANDLE__)->Instance == USART1) \
{ \
- switch(__HAL_RCC_GET_USART1_SOURCE()) \
- { \
+ switch(__HAL_RCC_GET_USART1_SOURCE()) \
+ { \
case RCC_USART1CLKSOURCE_PCLK2: \
(__CLOCKSOURCE__) = UART_CLOCKSOURCE_PCLK2; \
break; \
@@ -147,12 +180,12 @@ HAL_StatusTypeDef HAL_MultiProcessorEx_AddressLength_Set(UART_HandleTypeDef *hua
default: \
(__CLOCKSOURCE__) = UART_CLOCKSOURCE_UNDEFINED; \
break; \
- } \
+ } \
} \
else if((__HANDLE__)->Instance == USART2) \
{ \
- switch(__HAL_RCC_GET_USART2_SOURCE()) \
- { \
+ switch(__HAL_RCC_GET_USART2_SOURCE()) \
+ { \
case RCC_USART2CLKSOURCE_PCLK1: \
(__CLOCKSOURCE__) = UART_CLOCKSOURCE_PCLK1; \
break; \
@@ -168,12 +201,12 @@ HAL_StatusTypeDef HAL_MultiProcessorEx_AddressLength_Set(UART_HandleTypeDef *hua
default: \
(__CLOCKSOURCE__) = UART_CLOCKSOURCE_UNDEFINED; \
break; \
- } \
+ } \
} \
else if((__HANDLE__)->Instance == USART3) \
{ \
- switch(__HAL_RCC_GET_USART3_SOURCE()) \
- { \
+ switch(__HAL_RCC_GET_USART3_SOURCE()) \
+ { \
case RCC_USART3CLKSOURCE_PCLK1: \
(__CLOCKSOURCE__) = UART_CLOCKSOURCE_PCLK1; \
break; \
@@ -189,12 +222,12 @@ HAL_StatusTypeDef HAL_MultiProcessorEx_AddressLength_Set(UART_HandleTypeDef *hua
default: \
(__CLOCKSOURCE__) = UART_CLOCKSOURCE_UNDEFINED; \
break; \
- } \
+ } \
} \
else if((__HANDLE__)->Instance == UART4) \
{ \
- switch(__HAL_RCC_GET_UART4_SOURCE()) \
- { \
+ switch(__HAL_RCC_GET_UART4_SOURCE()) \
+ { \
case RCC_UART4CLKSOURCE_PCLK1: \
(__CLOCKSOURCE__) = UART_CLOCKSOURCE_PCLK1; \
break; \
@@ -210,12 +243,12 @@ HAL_StatusTypeDef HAL_MultiProcessorEx_AddressLength_Set(UART_HandleTypeDef *hua
default: \
(__CLOCKSOURCE__) = UART_CLOCKSOURCE_UNDEFINED; \
break; \
- } \
+ } \
} \
else if ((__HANDLE__)->Instance == UART5) \
{ \
- switch(__HAL_RCC_GET_UART5_SOURCE()) \
- { \
+ switch(__HAL_RCC_GET_UART5_SOURCE()) \
+ { \
case RCC_UART5CLKSOURCE_PCLK1: \
(__CLOCKSOURCE__) = UART_CLOCKSOURCE_PCLK1; \
break; \
@@ -231,12 +264,12 @@ HAL_StatusTypeDef HAL_MultiProcessorEx_AddressLength_Set(UART_HandleTypeDef *hua
default: \
(__CLOCKSOURCE__) = UART_CLOCKSOURCE_UNDEFINED; \
break; \
- } \
+ } \
} \
else if((__HANDLE__)->Instance == USART6) \
{ \
- switch(__HAL_RCC_GET_USART6_SOURCE()) \
- { \
+ switch(__HAL_RCC_GET_USART6_SOURCE()) \
+ { \
case RCC_USART6CLKSOURCE_PCLK2: \
(__CLOCKSOURCE__) = UART_CLOCKSOURCE_PCLK2; \
break; \
@@ -252,12 +285,12 @@ HAL_StatusTypeDef HAL_MultiProcessorEx_AddressLength_Set(UART_HandleTypeDef *hua
default: \
(__CLOCKSOURCE__) = UART_CLOCKSOURCE_UNDEFINED; \
break; \
- } \
+ } \
} \
else if ((__HANDLE__)->Instance == UART7) \
{ \
- switch(__HAL_RCC_GET_UART7_SOURCE()) \
- { \
+ switch(__HAL_RCC_GET_UART7_SOURCE()) \
+ { \
case RCC_UART7CLKSOURCE_PCLK1: \
(__CLOCKSOURCE__) = UART_CLOCKSOURCE_PCLK1; \
break; \
@@ -273,12 +306,12 @@ HAL_StatusTypeDef HAL_MultiProcessorEx_AddressLength_Set(UART_HandleTypeDef *hua
default: \
(__CLOCKSOURCE__) = UART_CLOCKSOURCE_UNDEFINED; \
break; \
- } \
+ } \
} \
else if ((__HANDLE__)->Instance == UART8) \
{ \
- switch(__HAL_RCC_GET_UART8_SOURCE()) \
- { \
+ switch(__HAL_RCC_GET_UART8_SOURCE()) \
+ { \
case RCC_UART8CLKSOURCE_PCLK1: \
(__CLOCKSOURCE__) = UART_CLOCKSOURCE_PCLK1; \
break; \
@@ -294,7 +327,7 @@ HAL_StatusTypeDef HAL_MultiProcessorEx_AddressLength_Set(UART_HandleTypeDef *hua
default: \
(__CLOCKSOURCE__) = UART_CLOCKSOURCE_UNDEFINED; \
break; \
- } \
+ } \
} \
else \
{ \
@@ -313,44 +346,44 @@ HAL_StatusTypeDef HAL_MultiProcessorEx_AddressLength_Set(UART_HandleTypeDef *hua
*/
#define UART_MASK_COMPUTATION(__HANDLE__) \
do { \
- if ((__HANDLE__)->Init.WordLength == UART_WORDLENGTH_9B) \
- { \
- if ((__HANDLE__)->Init.Parity == UART_PARITY_NONE) \
- { \
+ if ((__HANDLE__)->Init.WordLength == UART_WORDLENGTH_9B) \
+ { \
+ if ((__HANDLE__)->Init.Parity == UART_PARITY_NONE) \
+ { \
(__HANDLE__)->Mask = 0x01FFU ; \
- } \
- else \
- { \
+ } \
+ else \
+ { \
(__HANDLE__)->Mask = 0x00FFU ; \
- } \
- } \
- else if ((__HANDLE__)->Init.WordLength == UART_WORDLENGTH_8B) \
- { \
- if ((__HANDLE__)->Init.Parity == UART_PARITY_NONE) \
- { \
+ } \
+ } \
+ else if ((__HANDLE__)->Init.WordLength == UART_WORDLENGTH_8B) \
+ { \
+ if ((__HANDLE__)->Init.Parity == UART_PARITY_NONE) \
+ { \
(__HANDLE__)->Mask = 0x00FFU ; \
- } \
- else \
- { \
+ } \
+ else \
+ { \
(__HANDLE__)->Mask = 0x007FU ; \
- } \
- } \
- else if ((__HANDLE__)->Init.WordLength == UART_WORDLENGTH_7B) \
- { \
- if ((__HANDLE__)->Init.Parity == UART_PARITY_NONE) \
- { \
+ } \
+ } \
+ else if ((__HANDLE__)->Init.WordLength == UART_WORDLENGTH_7B) \
+ { \
+ if ((__HANDLE__)->Init.Parity == UART_PARITY_NONE) \
+ { \
(__HANDLE__)->Mask = 0x007FU ; \
- } \
- else \
- { \
+ } \
+ else \
+ { \
(__HANDLE__)->Mask = 0x003FU ; \
- } \
- } \
- else \
- { \
- (__HANDLE__)->Mask = 0x0000U; \
- } \
-} while(0U)
+ } \
+ } \
+ else \
+ { \
+ (__HANDLE__)->Mask = 0x0000U; \
+ } \
+ } while(0U)
/**
* @brief Ensure that UART frame length is valid.
@@ -369,7 +402,6 @@ HAL_StatusTypeDef HAL_MultiProcessorEx_AddressLength_Set(UART_HandleTypeDef *hua
#define IS_UART_ADDRESSLENGTH_DETECT(__ADDRESS__) (((__ADDRESS__) == UART_ADDRESS_DETECT_4B) || \
((__ADDRESS__) == UART_ADDRESS_DETECT_7B))
-
/**
* @}
*/
diff --git a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_TrueStudio/Prog/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal.c b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_TrueStudio/Prog/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal.c
index 81a39d76..48bbd535 100644
--- a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_TrueStudio/Prog/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal.c
+++ b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_TrueStudio/Prog/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal.c
@@ -50,11 +50,11 @@
* @{
*/
/**
- * @brief STM32F7xx HAL Driver version number V1.2.7
+ * @brief STM32F7xx HAL Driver version number V1.2.8
*/
#define __STM32F7xx_HAL_VERSION_MAIN (0x01) /*!< [31:24] main version */
#define __STM32F7xx_HAL_VERSION_SUB1 (0x02) /*!< [23:16] sub1 version */
-#define __STM32F7xx_HAL_VERSION_SUB2 (0x07) /*!< [15:8] sub2 version */
+#define __STM32F7xx_HAL_VERSION_SUB2 (0x08) /*!< [15:8] sub2 version */
#define __STM32F7xx_HAL_VERSION_RC (0x00) /*!< [7:0] release candidate */
#define __STM32F7xx_HAL_VERSION ((__STM32F7xx_HAL_VERSION_MAIN << 24)\
|(__STM32F7xx_HAL_VERSION_SUB1 << 16)\
@@ -319,14 +319,26 @@ uint32_t HAL_GetTickPrio(void)
HAL_StatusTypeDef HAL_SetTickFreq(HAL_TickFreqTypeDef Freq)
{
HAL_StatusTypeDef status = HAL_OK;
+ HAL_TickFreqTypeDef prevTickFreq;
+
assert_param(IS_TICKFREQ(Freq));
if (uwTickFreq != Freq)
{
+ /* Back up uwTickFreq frequency */
+ prevTickFreq = uwTickFreq;
+
+ /* Update uwTickFreq global variable used by HAL_InitTick() */
uwTickFreq = Freq;
/* Apply the new tick Freq */
status = HAL_InitTick(uwTickPrio);
+
+ if (status != HAL_OK)
+ {
+ /* Restore previous tick frequency */
+ uwTickFreq = prevTickFreq;
+ }
}
return status;
diff --git a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_TrueStudio/Prog/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_can.c b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_TrueStudio/Prog/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_can.c
index 6978c4da..a381dfc4 100644
--- a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_TrueStudio/Prog/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_can.c
+++ b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_TrueStudio/Prog/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_can.c
@@ -1556,7 +1556,7 @@ HAL_StatusTypeDef HAL_CAN_GetRxMessage(CAN_HandleTypeDef *hcan, uint32_t RxFifo,
{
pHeader->ExtId = ((CAN_RI0R_EXID | CAN_RI0R_STID) & hcan->Instance->sFIFOMailBox[RxFifo].RIR) >> CAN_RI0R_EXID_Pos;
}
- pHeader->RTR = (CAN_RI0R_RTR & hcan->Instance->sFIFOMailBox[RxFifo].RIR) >> CAN_RI0R_RTR_Pos;
+ pHeader->RTR = (CAN_RI0R_RTR & hcan->Instance->sFIFOMailBox[RxFifo].RIR);
pHeader->DLC = (CAN_RDT0R_DLC & hcan->Instance->sFIFOMailBox[RxFifo].RDTR) >> CAN_RDT0R_DLC_Pos;
pHeader->FilterMatchIndex = (CAN_RDT0R_FMI & hcan->Instance->sFIFOMailBox[RxFifo].RDTR) >> CAN_RDT0R_FMI_Pos;
pHeader->Timestamp = (CAN_RDT0R_TIME & hcan->Instance->sFIFOMailBox[RxFifo].RDTR) >> CAN_RDT0R_TIME_Pos;
diff --git a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_TrueStudio/Prog/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_exti.c b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_TrueStudio/Prog/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_exti.c
index 07e53536..246f4562 100644
--- a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_TrueStudio/Prog/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_exti.c
+++ b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_TrueStudio/Prog/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_exti.c
@@ -85,7 +85,6 @@
/* Includes ------------------------------------------------------------------*/
#include "stm32f7xx_hal.h"
-#include "stm32f7xx_hal_exti.h"
/** @addtogroup STM32F7xx_HAL_Driver
* @{
@@ -105,7 +104,7 @@
#ifdef HAL_EXTI_MODULE_ENABLED
/* Private typedef -----------------------------------------------------------*/
-/* Private defines ------------------------------------------------------------*/
+/* Private defines -----------------------------------------------------------*/
/** @defgroup EXTI_Private_Constants EXTI Private Constants
* @{
*/
@@ -144,6 +143,8 @@
HAL_StatusTypeDef HAL_EXTI_SetConfigLine(EXTI_HandleTypeDef *hexti, EXTI_ConfigTypeDef *pExtiConfig)
{
uint32_t regval;
+ uint32_t linepos;
+ uint32_t maskline;
/* Check null pointer */
if ((hexti == NULL) || (pExtiConfig == NULL))
@@ -154,37 +155,77 @@ HAL_StatusTypeDef HAL_EXTI_SetConfigLine(EXTI_HandleTypeDef *hexti, EXTI_ConfigT
/* Check parameters */
assert_param(IS_EXTI_LINE(pExtiConfig->Line));
assert_param(IS_EXTI_MODE(pExtiConfig->Mode));
- assert_param(IS_EXTI_TRIGGER(pExtiConfig->Trigger));
-
+
/* Assign line number to handle */
hexti->Line = pExtiConfig->Line;
-
- /* Clear EXTI line configuration */
- EXTI->IMR &= ~pExtiConfig->Line;
- EXTI->EMR &= ~pExtiConfig->Line;
-
- /* Select the Mode for the selected external interrupts */
- regval = (uint32_t)EXTI_BASE;
- regval += pExtiConfig->Mode;
- *(__IO uint32_t *) regval |= pExtiConfig->Line;
-
- /* Clear Rising Falling edge configuration */
- EXTI->RTSR &= ~pExtiConfig->Line;
- EXTI->FTSR &= ~pExtiConfig->Line;
-
- /* Select the trigger for the selected external interrupts */
- if (pExtiConfig->Trigger == EXTI_TRIGGER_RISING_FALLING)
+
+ /* Compute line mask */
+ linepos = (pExtiConfig->Line & EXTI_PIN_MASK);
+ maskline = (1uL << linepos);
+
+ /* Configure triggers for configurable lines */
+ if ((pExtiConfig->Line & EXTI_CONFIG) != 0x00u)
{
- /* Rising Falling edge */
- EXTI->RTSR |= pExtiConfig->Line;
- EXTI->FTSR |= pExtiConfig->Line;
+ assert_param(IS_EXTI_TRIGGER(pExtiConfig->Trigger));
+
+ /* Configure rising trigger */
+ /* Mask or set line */
+ if ((pExtiConfig->Trigger & EXTI_TRIGGER_RISING) != 0x00u)
+ {
+ EXTI->RTSR |= maskline;
+ }
+ else
+ {
+ EXTI->RTSR &= ~maskline;
+ }
+
+ /* Configure falling trigger */
+ /* Mask or set line */
+ if ((pExtiConfig->Trigger & EXTI_TRIGGER_FALLING) != 0x00u)
+ {
+ EXTI->FTSR |= maskline;
+ }
+ else
+ {
+ EXTI->FTSR &= ~maskline;
+ }
+
+
+ /* Configure gpio port selection in case of gpio exti line */
+ if ((pExtiConfig->Line & EXTI_GPIO) == EXTI_GPIO)
+ {
+ assert_param(IS_EXTI_GPIO_PORT(pExtiConfig->GPIOSel));
+ assert_param(IS_EXTI_GPIO_PIN(linepos));
+
+ regval = SYSCFG->EXTICR[linepos >> 2u];
+ regval &= ~(SYSCFG_EXTICR1_EXTI0 << (SYSCFG_EXTICR1_EXTI1_Pos * (linepos & 0x03u)));
+ regval |= (pExtiConfig->GPIOSel << (SYSCFG_EXTICR1_EXTI1_Pos * (linepos & 0x03u)));
+ SYSCFG->EXTICR[linepos >> 2u] = regval;
+ }
+ }
+
+ /* Configure interrupt mode : read current mode */
+ /* Mask or set line */
+ if ((pExtiConfig->Mode & EXTI_MODE_INTERRUPT) != 0x00u)
+ {
+ EXTI->IMR |= maskline;
}
else
{
- regval = (uint32_t)EXTI_BASE;
- regval += pExtiConfig->Trigger;
- *(__IO uint32_t *) regval |= pExtiConfig->Line;
+ EXTI->IMR &= ~maskline;
}
+
+ /* Configure event mode : read current mode */
+ /* Mask or set line */
+ if ((pExtiConfig->Mode & EXTI_MODE_EVENT) != 0x00u)
+ {
+ EXTI->EMR |= maskline;
+ }
+ else
+ {
+ EXTI->EMR &= ~maskline;
+ }
+
return HAL_OK;
}
@@ -196,6 +237,10 @@ HAL_StatusTypeDef HAL_EXTI_SetConfigLine(EXTI_HandleTypeDef *hexti, EXTI_ConfigT
*/
HAL_StatusTypeDef HAL_EXTI_GetConfigLine(EXTI_HandleTypeDef *hexti, EXTI_ConfigTypeDef *pExtiConfig)
{
+ uint32_t regval;
+ uint32_t linepos;
+ uint32_t maskline;
+
/* Check null pointer */
if ((hexti == NULL) || (pExtiConfig == NULL))
{
@@ -208,41 +253,67 @@ HAL_StatusTypeDef HAL_EXTI_GetConfigLine(EXTI_HandleTypeDef *hexti, EXTI_ConfigT
/* Store handle line number to configuration structure */
pExtiConfig->Line = hexti->Line;
- /* Get EXTI mode to configiguration structure */
- if ((EXTI->IMR & hexti->Line) == hexti->Line)
+ /* Compute line mask */
+ linepos = (pExtiConfig->Line & EXTI_PIN_MASK);
+ maskline = (1uL << linepos);
+
+ /* 1] Get core mode : interrupt */
+
+ /* Check if selected line is enable */
+ if ((EXTI->IMR & maskline) != 0x00u)
{
pExtiConfig->Mode = EXTI_MODE_INTERRUPT;
}
- else if ((EXTI->EMR & hexti->Line) == hexti->Line)
- {
- pExtiConfig->Mode = EXTI_MODE_EVENT;
- }
else
{
- /* No MODE selected */
- pExtiConfig->Mode = 0x0Bu;
+ pExtiConfig->Mode = EXTI_MODE_NONE;
}
- /* Get EXTI Trigger to configiguration structure */
- if ((EXTI->RTSR & hexti->Line) == hexti->Line)
+ /* Get event mode */
+ /* Check if selected line is enable */
+ if ((EXTI->EMR & maskline) != 0x00u)
{
- if ((EXTI->FTSR & hexti->Line) == hexti->Line)
- {
- pExtiConfig->Trigger = EXTI_TRIGGER_RISING_FALLING;
- }
- else
+ pExtiConfig->Mode |= EXTI_MODE_EVENT;
+ }
+
+ /* 2] Get trigger for configurable lines : rising */
+ if ((pExtiConfig->Line & EXTI_CONFIG) != 0x00u)
+ {
+ /* Check if configuration of selected line is enable */
+ if ((EXTI->RTSR & maskline) != 0x00u)
{
pExtiConfig->Trigger = EXTI_TRIGGER_RISING;
}
- }
- else if ((EXTI->FTSR & hexti->Line) == hexti->Line)
- {
- pExtiConfig->Trigger = EXTI_TRIGGER_FALLING;
+ else
+ {
+ pExtiConfig->Trigger = EXTI_TRIGGER_NONE;
+ }
+
+ /* Get falling configuration */
+ /* Check if configuration of selected line is enable */
+ if ((EXTI->FTSR & maskline) != 0x00u)
+ {
+ pExtiConfig->Trigger |= EXTI_TRIGGER_FALLING;
+ }
+
+ /* Get Gpio port selection for gpio lines */
+ if ((pExtiConfig->Line & EXTI_GPIO) == EXTI_GPIO)
+ {
+ assert_param(IS_EXTI_GPIO_PIN(linepos));
+
+ regval = SYSCFG->EXTICR[linepos >> 2u];
+ pExtiConfig->GPIOSel = ((regval << (SYSCFG_EXTICR1_EXTI1_Pos * (3uL - (linepos & 0x03u)))) >> 24);
+ }
+ else
+ {
+ pExtiConfig->GPIOSel = 0x00u;
+ }
}
else
{
/* No Trigger selected */
- pExtiConfig->Trigger = 0x00u;
+ pExtiConfig->Trigger = EXTI_TRIGGER_NONE;
+ pExtiConfig->GPIOSel = 0x00u;
}
return HAL_OK;
@@ -255,6 +326,10 @@ HAL_StatusTypeDef HAL_EXTI_GetConfigLine(EXTI_HandleTypeDef *hexti, EXTI_ConfigT
*/
HAL_StatusTypeDef HAL_EXTI_ClearConfigLine(EXTI_HandleTypeDef *hexti)
{
+ uint32_t regval;
+ uint32_t linepos;
+ uint32_t maskline;
+
/* Check null pointer */
if (hexti == NULL)
{
@@ -264,15 +339,32 @@ HAL_StatusTypeDef HAL_EXTI_ClearConfigLine(EXTI_HandleTypeDef *hexti)
/* Check the parameter */
assert_param(IS_EXTI_LINE(hexti->Line));
+ /* compute line mask */
+ linepos = (hexti->Line & EXTI_PIN_MASK);
+ maskline = (1uL << linepos);
+
/* 1] Clear interrupt mode */
- EXTI->IMR = (EXTI->IMR & ~hexti->Line);
+ EXTI->IMR = (EXTI->IMR & ~maskline);
/* 2] Clear event mode */
- EXTI->EMR = (EXTI->EMR & ~hexti->Line);
+ EXTI->EMR = (EXTI->EMR & ~maskline);
- /* 3] Clear triggers */
- EXTI->RTSR = (EXTI->RTSR & ~hexti->Line);
- EXTI->FTSR = (EXTI->FTSR & ~hexti->Line);
+ /* 3] Clear triggers in case of configurable lines */
+ if ((hexti->Line & EXTI_CONFIG) != 0x00u)
+ {
+ EXTI->RTSR = (EXTI->RTSR & ~maskline);
+ EXTI->FTSR = (EXTI->FTSR & ~maskline);
+
+ /* Get Gpio port selection for gpio lines */
+ if ((hexti->Line & EXTI_GPIO) == EXTI_GPIO)
+ {
+ assert_param(IS_EXTI_GPIO_PIN(linepos));
+
+ regval = SYSCFG->EXTICR[linepos >> 2u];
+ regval &= ~(SYSCFG_EXTICR1_EXTI0 << (SYSCFG_EXTICR1_EXTI1_Pos * (linepos & 0x03u)));
+ SYSCFG->EXTICR[linepos >> 2u] = regval;
+ }
+ }
return HAL_OK;
}
@@ -352,17 +444,18 @@ HAL_StatusTypeDef HAL_EXTI_GetHandle(EXTI_HandleTypeDef *hexti, uint32_t ExtiLin
*/
void HAL_EXTI_IRQHandler(EXTI_HandleTypeDef *hexti)
{
- __IO uint32_t *regaddr;
uint32_t regval;
+ uint32_t maskline;
+
+ /* Compute line mask */
+ maskline = (1uL << (hexti->Line & EXTI_PIN_MASK));
/* Get pending bit */
- regaddr = (&EXTI->PR);
- regval = (*regaddr & hexti->Line);
-
+ regval = (EXTI->PR & maskline);
if (regval != 0x00u)
{
/* Clear pending bit */
- *regaddr = hexti->Line;
+ EXTI->PR = maskline;
/* Call callback */
if (hexti->PendingCallback != NULL)
@@ -383,19 +476,21 @@ void HAL_EXTI_IRQHandler(EXTI_HandleTypeDef *hexti)
*/
uint32_t HAL_EXTI_GetPending(EXTI_HandleTypeDef *hexti, uint32_t Edge)
{
- __IO uint32_t *regaddr;
uint32_t regval;
+ uint32_t linepos;
+ uint32_t maskline;
/* Check parameters */
assert_param(IS_EXTI_LINE(hexti->Line));
+ assert_param(IS_EXTI_CONFIG_LINE(hexti->Line));
assert_param(IS_EXTI_PENDING_EDGE(Edge));
- /* Get pending bit */
- regaddr = &EXTI->PR;
+ /* Compute line mask */
+ linepos = (hexti->Line & EXTI_PIN_MASK);
+ maskline = (1uL << linepos);
/* return 1 if bit is set else 0 */
- regval = ((*regaddr & hexti->Line) >> POSITION_VAL(hexti->Line));
-
+ regval = ((EXTI->PR & maskline) >> linepos);
return regval;
}
@@ -410,12 +505,18 @@ uint32_t HAL_EXTI_GetPending(EXTI_HandleTypeDef *hexti, uint32_t Edge)
*/
void HAL_EXTI_ClearPending(EXTI_HandleTypeDef *hexti, uint32_t Edge)
{
+ uint32_t maskline;
+
/* Check parameters */
assert_param(IS_EXTI_LINE(hexti->Line));
+ assert_param(IS_EXTI_CONFIG_LINE(hexti->Line));
assert_param(IS_EXTI_PENDING_EDGE(Edge));
-
+
+ /* Compute line mask */
+ maskline = (1uL << (hexti->Line & EXTI_PIN_MASK));
+
/* Clear Pending bit */
- EXTI->PR = hexti->Line;
+ EXTI->PR = maskline;
}
/**
@@ -425,10 +526,17 @@ void HAL_EXTI_ClearPending(EXTI_HandleTypeDef *hexti, uint32_t Edge)
*/
void HAL_EXTI_GenerateSWI(EXTI_HandleTypeDef *hexti)
{
+ uint32_t maskline;
+
/* Check parameters */
assert_param(IS_EXTI_LINE(hexti->Line));
+ assert_param(IS_EXTI_CONFIG_LINE(hexti->Line));
- EXTI->SWIER = hexti->Line;
+ /* Compute line mask */
+ maskline = (1uL << (hexti->Line & EXTI_PIN_MASK));
+
+ /* Generate Software interrupt */
+ EXTI->SWIER = maskline;
}
/**
diff --git a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_TrueStudio/Prog/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_gpio.c b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_TrueStudio/Prog/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_gpio.c
index ffc617dd..0afa1df1 100644
--- a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_TrueStudio/Prog/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_gpio.c
+++ b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_TrueStudio/Prog/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_gpio.c
@@ -190,25 +190,6 @@ void HAL_GPIO_Init(GPIO_TypeDef *GPIOx, GPIO_InitTypeDef *GPIO_Init)
if(iocurrent == ioposition)
{
/*--------------------- GPIO Mode Configuration ------------------------*/
- /* In case of Alternate function mode selection */
- if((GPIO_Init->Mode == GPIO_MODE_AF_PP) || (GPIO_Init->Mode == GPIO_MODE_AF_OD))
- {
- /* Check the Alternate function parameter */
- assert_param(IS_GPIO_AF(GPIO_Init->Alternate));
-
- /* Configure Alternate function mapped with the current IO */
- temp = GPIOx->AFR[position >> 3];
- temp &= ~((uint32_t)0xF << ((uint32_t)(position & (uint32_t)0x07) * 4)) ;
- temp |= ((uint32_t)(GPIO_Init->Alternate) << (((uint32_t)position & (uint32_t)0x07) * 4));
- GPIOx->AFR[position >> 3] = temp;
- }
-
- /* Configure IO Direction mode (Input, Output, Alternate or Analog) */
- temp = GPIOx->MODER;
- temp &= ~(GPIO_MODER_MODER0 << (position * 2));
- temp |= ((GPIO_Init->Mode & GPIO_MODE) << (position * 2));
- GPIOx->MODER = temp;
-
/* In case of Output or Alternate function mode selection */
if((GPIO_Init->Mode == GPIO_MODE_OUTPUT_PP) || (GPIO_Init->Mode == GPIO_MODE_AF_PP) ||
(GPIO_Init->Mode == GPIO_MODE_OUTPUT_OD) || (GPIO_Init->Mode == GPIO_MODE_AF_OD))
@@ -234,6 +215,25 @@ void HAL_GPIO_Init(GPIO_TypeDef *GPIOx, GPIO_InitTypeDef *GPIO_Init)
temp |= ((GPIO_Init->Pull) << (position * 2));
GPIOx->PUPDR = temp;
+ /* In case of Alternate function mode selection */
+ if((GPIO_Init->Mode == GPIO_MODE_AF_PP) || (GPIO_Init->Mode == GPIO_MODE_AF_OD))
+ {
+ /* Check the Alternate function parameter */
+ assert_param(IS_GPIO_AF(GPIO_Init->Alternate));
+
+ /* Configure Alternate function mapped with the current IO */
+ temp = GPIOx->AFR[position >> 3];
+ temp &= ~((uint32_t)0xF << ((uint32_t)(position & (uint32_t)0x07) * 4)) ;
+ temp |= ((uint32_t)(GPIO_Init->Alternate) << (((uint32_t)position & (uint32_t)0x07) * 4));
+ GPIOx->AFR[position >> 3] = temp;
+ }
+
+ /* Configure IO Direction mode (Input, Output, Alternate or Analog) */
+ temp = GPIOx->MODER;
+ temp &= ~(GPIO_MODER_MODER0 << (position * 2));
+ temp |= ((GPIO_Init->Mode & GPIO_MODE) << (position * 2));
+ GPIOx->MODER = temp;
+
/*--------------------- EXTI Mode Configuration ------------------------*/
/* Configure the External Interrupt or event for the current IO */
if((GPIO_Init->Mode & EXTI_MODE) == EXTI_MODE)
@@ -300,7 +300,7 @@ void HAL_GPIO_DeInit(GPIO_TypeDef *GPIOx, uint32_t GPIO_Pin)
/* Check the parameters */
assert_param(IS_GPIO_ALL_INSTANCE(GPIOx));
-
+
/* Configure the port pins */
for(position = 0; position < GPIO_NUMBER; position++)
{
@@ -316,10 +316,6 @@ void HAL_GPIO_DeInit(GPIO_TypeDef *GPIOx, uint32_t GPIO_Pin)
tmp &= (((uint32_t)0x0F) << (4 * (position & 0x03)));
if(tmp == ((uint32_t)(GPIO_GET_INDEX(GPIOx)) << (4 * (position & 0x03))))
{
- /* Configure the External Interrupt or event for the current IO */
- tmp = ((uint32_t)0x0F) << (4 * (position & 0x03));
- SYSCFG->EXTICR[position >> 2] &= ~tmp;
-
/* Clear EXTI line configuration */
EXTI->IMR &= ~((uint32_t)iocurrent);
EXTI->EMR &= ~((uint32_t)iocurrent);
@@ -327,6 +323,10 @@ void HAL_GPIO_DeInit(GPIO_TypeDef *GPIOx, uint32_t GPIO_Pin)
/* Clear Rising Falling edge configuration */
EXTI->RTSR &= ~((uint32_t)iocurrent);
EXTI->FTSR &= ~((uint32_t)iocurrent);
+
+ /* Configure the External Interrupt or event for the current IO */
+ tmp = ((uint32_t)0x0F) << (4 * (position & 0x03));
+ SYSCFG->EXTICR[position >> 2] &= ~tmp;
}
/*------------------------- GPIO Mode Configuration --------------------*/
/* Configure IO Direction in Input Floating Mode */
@@ -335,14 +335,14 @@ void HAL_GPIO_DeInit(GPIO_TypeDef *GPIOx, uint32_t GPIO_Pin)
/* Configure the default Alternate Function in current IO */
GPIOx->AFR[position >> 3] &= ~((uint32_t)0xF << ((uint32_t)(position & (uint32_t)0x07) * 4)) ;
- /* Configure the default value for IO Speed */
- GPIOx->OSPEEDR &= ~(GPIO_OSPEEDER_OSPEEDR0 << (position * 2));
+ /* Deactivate the Pull-up and Pull-down resistor for the current IO */
+ GPIOx->PUPDR &= ~(GPIO_PUPDR_PUPDR0 << (position * 2));
/* Configure the default value IO Output Type */
GPIOx->OTYPER &= ~(GPIO_OTYPER_OT_0 << position) ;
- /* Deactivate the Pull-up and Pull-down resistor for the current IO */
- GPIOx->PUPDR &= ~(GPIO_PUPDR_PUPDR0 << (position * 2));
+ /* Configure the default value for IO Speed */
+ GPIOx->OSPEEDR &= ~(GPIO_OSPEEDER_OSPEEDR0 << (position * 2));
}
}
}
@@ -431,13 +431,13 @@ void HAL_GPIO_TogglePin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
/* Check the parameters */
assert_param(IS_GPIO_PIN(GPIO_Pin));
- if ((GPIOx->ODR & GPIO_Pin) == GPIO_Pin)
+ if ((GPIOx->ODR & GPIO_Pin) != 0X00u)
{
GPIOx->BSRR = (uint32_t)GPIO_Pin << GPIO_NUMBER;
}
else
{
- GPIOx->BSRR = GPIO_Pin;
+ GPIOx->BSRR = (uint32_t)GPIO_Pin;
}
}
@@ -467,10 +467,11 @@ HAL_StatusTypeDef HAL_GPIO_LockPin(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin)
GPIOx->LCKR = GPIO_Pin;
/* Set LCKx bit(s): LCKK='1' + LCK[15-0] */
GPIOx->LCKR = tmp;
- /* Read LCKK bit*/
+ /* Read LCKR register. This read is mandatory to complete key lock sequence */
tmp = GPIOx->LCKR;
- if((GPIOx->LCKR & GPIO_LCKR_LCKK) != RESET)
+ /* Read again in order to confirm lock is active */
+ if((GPIOx->LCKR & GPIO_LCKR_LCKK) != RESET)
{
return HAL_OK;
}
diff --git a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_TrueStudio/Prog/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_i2c.c b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_TrueStudio/Prog/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_i2c.c
index 775bff23..ef049ec4 100644
--- a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_TrueStudio/Prog/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_i2c.c
+++ b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_TrueStudio/Prog/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_i2c.c
@@ -223,12 +223,12 @@
*** Callback registration ***
=============================================
-
+ [..]
The compilation flag USE_HAL_I2C_REGISTER_CALLBACKS when set to 1
allows the user to configure dynamically the driver callbacks.
Use Functions @ref HAL_I2C_RegisterCallback() or @ref HAL_I2C_RegisterAddrCallback()
to register an interrupt callback.
-
+ [..]
Function @ref HAL_I2C_RegisterCallback() allows to register following callbacks:
(+) MasterTxCpltCallback : callback for Master transmission end of transfer.
(+) MasterRxCpltCallback : callback for Master reception end of transfer.
@@ -243,9 +243,9 @@
(+) MspDeInitCallback : callback for Msp DeInit.
This function takes as parameters the HAL peripheral handle, the Callback ID
and a pointer to the user callback function.
-
+ [..]
For specific callback AddrCallback use dedicated register callbacks : @ref HAL_I2C_RegisterAddrCallback().
-
+ [..]
Use function @ref HAL_I2C_UnRegisterCallback to reset a callback to the default
weak function.
@ref HAL_I2C_UnRegisterCallback takes as parameters the HAL peripheral handle,
@@ -262,9 +262,9 @@
(+) AbortCpltCallback : callback for abort completion process.
(+) MspInitCallback : callback for Msp Init.
(+) MspDeInitCallback : callback for Msp DeInit.
-
+ [..]
For callback AddrCallback use dedicated register callbacks : @ref HAL_I2C_UnRegisterAddrCallback().
-
+ [..]
By default, after the @ref HAL_I2C_Init() and when the state is @ref HAL_I2C_STATE_RESET
all callbacks are set to the corresponding weak functions:
examples @ref HAL_I2C_MasterTxCpltCallback(), @ref HAL_I2C_MasterRxCpltCallback().
@@ -273,7 +273,7 @@
these callbacks are null (not registered beforehand).
If MspInit or MspDeInit are not null, the @ref HAL_I2C_Init()/ @ref HAL_I2C_DeInit()
keep and use the user MspInit/MspDeInit callbacks (registered beforehand) whatever the state.
-
+ [..]
Callbacks can be registered/unregistered in @ref HAL_I2C_STATE_READY state only.
Exception done MspInit/MspDeInit functions that can be registered/unregistered
in @ref HAL_I2C_STATE_READY or @ref HAL_I2C_STATE_RESET state,
@@ -281,7 +281,7 @@
Then, the user first registers the MspInit/MspDeInit user callbacks
using @ref HAL_I2C_RegisterCallback() before calling @ref HAL_I2C_DeInit()
or @ref HAL_I2C_Init() function.
-
+ [..]
When the compilation flag USE_HAL_I2C_REGISTER_CALLBACKS is set to 0 or
not defined, the callback registration feature is not available and all callbacks
are set to the corresponding weak functions.
@@ -4737,6 +4737,13 @@ static HAL_StatusTypeDef I2C_Slave_ISR_IT(struct __I2C_HandleTypeDef *hi2c, uint
/* Process locked */
__HAL_LOCK(hi2c);
+ /* Check if STOPF is set */
+ if ((I2C_CHECK_FLAG(tmpITFlags, I2C_FLAG_STOPF) != RESET) && (I2C_CHECK_IT_SOURCE(ITSources, I2C_IT_STOPI) != RESET))
+ {
+ /* Call I2C Slave complete process */
+ I2C_ITSlaveCplt(hi2c, tmpITFlags);
+ }
+
if ((I2C_CHECK_FLAG(tmpITFlags, I2C_FLAG_AF) != RESET) && (I2C_CHECK_IT_SOURCE(ITSources, I2C_IT_NACKI) != RESET))
{
/* Check that I2C transfer finished */
@@ -4788,9 +4795,6 @@ static HAL_StatusTypeDef I2C_Slave_ISR_IT(struct __I2C_HandleTypeDef *hi2c, uint
{
if (hi2c->XferCount > 0U)
{
- /* Remove RXNE flag on temporary variable as read done */
- tmpITFlags &= ~I2C_FLAG_RXNE;
-
/* Read data from RXDR */
*hi2c->pBuffPtr = (uint8_t)hi2c->Instance->RXDR;
@@ -4844,13 +4848,6 @@ static HAL_StatusTypeDef I2C_Slave_ISR_IT(struct __I2C_HandleTypeDef *hi2c, uint
/* Nothing to do */
}
- /* Check if STOPF is set */
- if ((I2C_CHECK_FLAG(tmpITFlags, I2C_FLAG_STOPF) != RESET) && (I2C_CHECK_IT_SOURCE(ITSources, I2C_IT_STOPI) != RESET))
- {
- /* Call I2C Slave complete process */
- I2C_ITSlaveCplt(hi2c, tmpITFlags);
- }
-
/* Process Unlocked */
__HAL_UNLOCK(hi2c);
@@ -5008,6 +5005,13 @@ static HAL_StatusTypeDef I2C_Slave_ISR_DMA(struct __I2C_HandleTypeDef *hi2c, uin
/* Process locked */
__HAL_LOCK(hi2c);
+ /* Check if STOPF is set */
+ if ((I2C_CHECK_FLAG(ITFlags, I2C_FLAG_STOPF) != RESET) && (I2C_CHECK_IT_SOURCE(ITSources, I2C_IT_STOPI) != RESET))
+ {
+ /* Call I2C Slave complete process */
+ I2C_ITSlaveCplt(hi2c, ITFlags);
+ }
+
if ((I2C_CHECK_FLAG(ITFlags, I2C_FLAG_AF) != RESET) && (I2C_CHECK_IT_SOURCE(ITSources, I2C_IT_NACKI) != RESET))
{
/* Check that I2C transfer finished */
@@ -5092,11 +5096,6 @@ static HAL_StatusTypeDef I2C_Slave_ISR_DMA(struct __I2C_HandleTypeDef *hi2c, uin
{
I2C_ITAddrCplt(hi2c, ITFlags);
}
- else if ((I2C_CHECK_FLAG(ITFlags, I2C_FLAG_STOPF) != RESET) && (I2C_CHECK_IT_SOURCE(ITSources, I2C_IT_STOPI) != RESET))
- {
- /* Call I2C Slave complete process */
- I2C_ITSlaveCplt(hi2c, ITFlags);
- }
else
{
/* Nothing to do */
diff --git a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_TrueStudio/Prog/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_rcc.c b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_TrueStudio/Prog/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_rcc.c
index bf33cff4..d63a6f4e 100644
--- a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_TrueStudio/Prog/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_rcc.c
+++ b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_TrueStudio/Prog/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_rcc.c
@@ -317,7 +317,7 @@ HAL_StatusTypeDef HAL_RCC_DeInit(void)
SystemCoreClock = HSI_VALUE;
/* Adapt Systick interrupt period */
- if(HAL_InitTick(TICK_INT_PRIORITY) != HAL_OK)
+ if (HAL_InitTick(uwTickPrio) != HAL_OK)
{
return HAL_ERROR;
}
@@ -344,10 +344,11 @@ HAL_StatusTypeDef HAL_RCC_DeInit(void)
HAL_StatusTypeDef HAL_RCC_OscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct)
{
uint32_t tickstart;
+ uint32_t pll_config;
FlagStatus pwrclkchanged = RESET;
/* Check Null pointer */
- if(RCC_OscInitStruct == NULL)
+ if (RCC_OscInitStruct == NULL)
{
return HAL_ERROR;
}
@@ -356,15 +357,15 @@ HAL_StatusTypeDef HAL_RCC_OscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct)
assert_param(IS_RCC_OSCILLATORTYPE(RCC_OscInitStruct->OscillatorType));
/*------------------------------- HSE Configuration ------------------------*/
- if(((RCC_OscInitStruct->OscillatorType) & RCC_OSCILLATORTYPE_HSE) == RCC_OSCILLATORTYPE_HSE)
+ if (((RCC_OscInitStruct->OscillatorType) & RCC_OSCILLATORTYPE_HSE) == RCC_OSCILLATORTYPE_HSE)
{
/* Check the parameters */
assert_param(IS_RCC_HSE(RCC_OscInitStruct->HSEState));
/* When the HSE is used as system clock or clock source for PLL, It can not be disabled */
- if((__HAL_RCC_GET_SYSCLK_SOURCE() == RCC_SYSCLKSOURCE_STATUS_HSE)
- || ((__HAL_RCC_GET_SYSCLK_SOURCE() == RCC_SYSCLKSOURCE_STATUS_PLLCLK) && ((RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC) == RCC_PLLCFGR_PLLSRC_HSE)))
+ if ((__HAL_RCC_GET_SYSCLK_SOURCE() == RCC_SYSCLKSOURCE_STATUS_HSE)
+ || ((__HAL_RCC_GET_SYSCLK_SOURCE() == RCC_SYSCLKSOURCE_STATUS_PLLCLK) && ((RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC) == RCC_PLLCFGR_PLLSRC_HSE)))
{
- if((__HAL_RCC_GET_FLAG(RCC_FLAG_HSERDY) != RESET) && (RCC_OscInitStruct->HSEState == RCC_HSE_OFF))
+ if ((__HAL_RCC_GET_FLAG(RCC_FLAG_HSERDY) != RESET) && (RCC_OscInitStruct->HSEState == RCC_HSE_OFF))
{
return HAL_ERROR;
}
@@ -375,15 +376,15 @@ HAL_StatusTypeDef HAL_RCC_OscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct)
__HAL_RCC_HSE_CONFIG(RCC_OscInitStruct->HSEState);
/* Check the HSE State */
- if(RCC_OscInitStruct->HSEState != RCC_HSE_OFF)
+ if (RCC_OscInitStruct->HSEState != RCC_HSE_OFF)
{
/* Get Start Tick*/
tickstart = HAL_GetTick();
/* Wait till HSE is ready */
- while(__HAL_RCC_GET_FLAG(RCC_FLAG_HSERDY) == RESET)
+ while (__HAL_RCC_GET_FLAG(RCC_FLAG_HSERDY) == RESET)
{
- if((HAL_GetTick() - tickstart ) > HSE_TIMEOUT_VALUE)
+ if ((HAL_GetTick() - tickstart) > HSE_TIMEOUT_VALUE)
{
return HAL_TIMEOUT;
}
@@ -395,9 +396,9 @@ HAL_StatusTypeDef HAL_RCC_OscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct)
tickstart = HAL_GetTick();
/* Wait till HSE is bypassed or disabled */
- while(__HAL_RCC_GET_FLAG(RCC_FLAG_HSERDY) != RESET)
+ while (__HAL_RCC_GET_FLAG(RCC_FLAG_HSERDY) != RESET)
{
- if((HAL_GetTick() - tickstart ) > HSE_TIMEOUT_VALUE)
+ if ((HAL_GetTick() - tickstart) > HSE_TIMEOUT_VALUE)
{
return HAL_TIMEOUT;
}
@@ -406,18 +407,18 @@ HAL_StatusTypeDef HAL_RCC_OscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct)
}
}
/*----------------------------- HSI Configuration --------------------------*/
- if(((RCC_OscInitStruct->OscillatorType) & RCC_OSCILLATORTYPE_HSI) == RCC_OSCILLATORTYPE_HSI)
+ if (((RCC_OscInitStruct->OscillatorType) & RCC_OSCILLATORTYPE_HSI) == RCC_OSCILLATORTYPE_HSI)
{
/* Check the parameters */
assert_param(IS_RCC_HSI(RCC_OscInitStruct->HSIState));
assert_param(IS_RCC_CALIBRATION_VALUE(RCC_OscInitStruct->HSICalibrationValue));
/* Check if HSI is used as system clock or as PLL source when PLL is selected as system clock */
- if((__HAL_RCC_GET_SYSCLK_SOURCE() == RCC_SYSCLKSOURCE_STATUS_HSI)
- || ((__HAL_RCC_GET_SYSCLK_SOURCE() == RCC_SYSCLKSOURCE_STATUS_PLLCLK) && ((RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC) == RCC_PLLCFGR_PLLSRC_HSI)))
+ if ((__HAL_RCC_GET_SYSCLK_SOURCE() == RCC_SYSCLKSOURCE_STATUS_HSI)
+ || ((__HAL_RCC_GET_SYSCLK_SOURCE() == RCC_SYSCLKSOURCE_STATUS_PLLCLK) && ((RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC) == RCC_PLLCFGR_PLLSRC_HSI)))
{
/* When HSI is used as system clock it will not disabled */
- if((__HAL_RCC_GET_FLAG(RCC_FLAG_HSIRDY) != RESET) && (RCC_OscInitStruct->HSIState != RCC_HSI_ON))
+ if ((__HAL_RCC_GET_FLAG(RCC_FLAG_HSIRDY) != RESET) && (RCC_OscInitStruct->HSIState != RCC_HSI_ON))
{
return HAL_ERROR;
}
@@ -431,7 +432,7 @@ HAL_StatusTypeDef HAL_RCC_OscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct)
else
{
/* Check the HSI State */
- if((RCC_OscInitStruct->HSIState)!= RCC_HSI_OFF)
+ if ((RCC_OscInitStruct->HSIState) != RCC_HSI_OFF)
{
/* Enable the Internal High Speed oscillator (HSI). */
__HAL_RCC_HSI_ENABLE();
@@ -440,9 +441,9 @@ HAL_StatusTypeDef HAL_RCC_OscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct)
tickstart = HAL_GetTick();
/* Wait till HSI is ready */
- while(__HAL_RCC_GET_FLAG(RCC_FLAG_HSIRDY) == RESET)
+ while (__HAL_RCC_GET_FLAG(RCC_FLAG_HSIRDY) == RESET)
{
- if((HAL_GetTick() - tickstart ) > HSI_TIMEOUT_VALUE)
+ if ((HAL_GetTick() - tickstart) > HSI_TIMEOUT_VALUE)
{
return HAL_TIMEOUT;
}
@@ -460,9 +461,9 @@ HAL_StatusTypeDef HAL_RCC_OscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct)
tickstart = HAL_GetTick();
/* Wait till HSI is ready */
- while(__HAL_RCC_GET_FLAG(RCC_FLAG_HSIRDY) != RESET)
+ while (__HAL_RCC_GET_FLAG(RCC_FLAG_HSIRDY) != RESET)
{
- if((HAL_GetTick() - tickstart ) > HSI_TIMEOUT_VALUE)
+ if ((HAL_GetTick() - tickstart) > HSI_TIMEOUT_VALUE)
{
return HAL_TIMEOUT;
}
@@ -471,13 +472,13 @@ HAL_StatusTypeDef HAL_RCC_OscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct)
}
}
/*------------------------------ LSI Configuration -------------------------*/
- if(((RCC_OscInitStruct->OscillatorType) & RCC_OSCILLATORTYPE_LSI) == RCC_OSCILLATORTYPE_LSI)
+ if (((RCC_OscInitStruct->OscillatorType) & RCC_OSCILLATORTYPE_LSI) == RCC_OSCILLATORTYPE_LSI)
{
/* Check the parameters */
assert_param(IS_RCC_LSI(RCC_OscInitStruct->LSIState));
/* Check the LSI State */
- if((RCC_OscInitStruct->LSIState)!= RCC_LSI_OFF)
+ if ((RCC_OscInitStruct->LSIState) != RCC_LSI_OFF)
{
/* Enable the Internal Low Speed oscillator (LSI). */
__HAL_RCC_LSI_ENABLE();
@@ -486,9 +487,9 @@ HAL_StatusTypeDef HAL_RCC_OscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct)
tickstart = HAL_GetTick();
/* Wait till LSI is ready */
- while(__HAL_RCC_GET_FLAG(RCC_FLAG_LSIRDY) == RESET)
+ while (__HAL_RCC_GET_FLAG(RCC_FLAG_LSIRDY) == RESET)
{
- if((HAL_GetTick() - tickstart ) > LSI_TIMEOUT_VALUE)
+ if ((HAL_GetTick() - tickstart) > LSI_TIMEOUT_VALUE)
{
return HAL_TIMEOUT;
}
@@ -503,9 +504,9 @@ HAL_StatusTypeDef HAL_RCC_OscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct)
tickstart = HAL_GetTick();
/* Wait till LSI is ready */
- while(__HAL_RCC_GET_FLAG(RCC_FLAG_LSIRDY) != RESET)
+ while (__HAL_RCC_GET_FLAG(RCC_FLAG_LSIRDY) != RESET)
{
- if((HAL_GetTick() - tickstart ) > LSI_TIMEOUT_VALUE)
+ if ((HAL_GetTick() - tickstart) > LSI_TIMEOUT_VALUE)
{
return HAL_TIMEOUT;
}
@@ -513,21 +514,21 @@ HAL_StatusTypeDef HAL_RCC_OscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct)
}
}
/*------------------------------ LSE Configuration -------------------------*/
- if(((RCC_OscInitStruct->OscillatorType) & RCC_OSCILLATORTYPE_LSE) == RCC_OSCILLATORTYPE_LSE)
+ if (((RCC_OscInitStruct->OscillatorType) & RCC_OSCILLATORTYPE_LSE) == RCC_OSCILLATORTYPE_LSE)
{
/* Check the parameters */
assert_param(IS_RCC_LSE(RCC_OscInitStruct->LSEState));
/* Update LSE configuration in Backup Domain control register */
/* Requires to enable write access to Backup Domain of necessary */
- if(__HAL_RCC_PWR_IS_CLK_DISABLED())
+ if (__HAL_RCC_PWR_IS_CLK_DISABLED())
{
/* Enable Power Clock*/
__HAL_RCC_PWR_CLK_ENABLE();
pwrclkchanged = SET;
}
- if(HAL_IS_BIT_CLR(PWR->CR1, PWR_CR1_DBP))
+ if (HAL_IS_BIT_CLR(PWR->CR1, PWR_CR1_DBP))
{
/* Enable write access to Backup domain */
PWR->CR1 |= PWR_CR1_DBP;
@@ -535,9 +536,9 @@ HAL_StatusTypeDef HAL_RCC_OscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct)
/* Wait for Backup domain Write protection disable */
tickstart = HAL_GetTick();
- while(HAL_IS_BIT_CLR(PWR->CR1, PWR_CR1_DBP))
+ while (HAL_IS_BIT_CLR(PWR->CR1, PWR_CR1_DBP))
{
- if((HAL_GetTick() - tickstart ) > RCC_DBP_TIMEOUT_VALUE)
+ if ((HAL_GetTick() - tickstart) > RCC_DBP_TIMEOUT_VALUE)
{
return HAL_TIMEOUT;
}
@@ -547,15 +548,15 @@ HAL_StatusTypeDef HAL_RCC_OscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct)
/* Set the new LSE configuration -----------------------------------------*/
__HAL_RCC_LSE_CONFIG(RCC_OscInitStruct->LSEState);
/* Check the LSE State */
- if((RCC_OscInitStruct->LSEState) != RCC_LSE_OFF)
+ if ((RCC_OscInitStruct->LSEState) != RCC_LSE_OFF)
{
/* Get Start Tick*/
tickstart = HAL_GetTick();
/* Wait till LSE is ready */
- while(__HAL_RCC_GET_FLAG(RCC_FLAG_LSERDY) == RESET)
+ while (__HAL_RCC_GET_FLAG(RCC_FLAG_LSERDY) == RESET)
{
- if((HAL_GetTick() - tickstart ) > RCC_LSE_TIMEOUT_VALUE)
+ if ((HAL_GetTick() - tickstart) > RCC_LSE_TIMEOUT_VALUE)
{
return HAL_TIMEOUT;
}
@@ -567,9 +568,9 @@ HAL_StatusTypeDef HAL_RCC_OscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct)
tickstart = HAL_GetTick();
/* Wait till LSE is ready */
- while(__HAL_RCC_GET_FLAG(RCC_FLAG_LSERDY) != RESET)
+ while (__HAL_RCC_GET_FLAG(RCC_FLAG_LSERDY) != RESET)
{
- if((HAL_GetTick() - tickstart ) > RCC_LSE_TIMEOUT_VALUE)
+ if ((HAL_GetTick() - tickstart) > RCC_LSE_TIMEOUT_VALUE)
{
return HAL_TIMEOUT;
}
@@ -577,7 +578,7 @@ HAL_StatusTypeDef HAL_RCC_OscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct)
}
/* Restore clock configuration if changed */
- if(pwrclkchanged == SET)
+ if (pwrclkchanged == SET)
{
__HAL_RCC_PWR_CLK_DISABLE();
}
@@ -588,9 +589,9 @@ HAL_StatusTypeDef HAL_RCC_OscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct)
if ((RCC_OscInitStruct->PLL.PLLState) != RCC_PLL_NONE)
{
/* Check if the PLL is used as system clock or not */
- if(__HAL_RCC_GET_SYSCLK_SOURCE() != RCC_SYSCLKSOURCE_STATUS_PLLCLK)
+ if (__HAL_RCC_GET_SYSCLK_SOURCE() != RCC_SYSCLKSOURCE_STATUS_PLLCLK)
{
- if((RCC_OscInitStruct->PLL.PLLState) == RCC_PLL_ON)
+ if ((RCC_OscInitStruct->PLL.PLLState) == RCC_PLL_ON)
{
/* Check the parameters */
assert_param(IS_RCC_PLLSOURCE(RCC_OscInitStruct->PLL.PLLSource));
@@ -609,9 +610,9 @@ HAL_StatusTypeDef HAL_RCC_OscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct)
tickstart = HAL_GetTick();
/* Wait till PLL is ready */
- while(__HAL_RCC_GET_FLAG(RCC_FLAG_PLLRDY) != RESET)
+ while (__HAL_RCC_GET_FLAG(RCC_FLAG_PLLRDY) != RESET)
{
- if((HAL_GetTick() - tickstart ) > PLL_TIMEOUT_VALUE)
+ if ((HAL_GetTick() - tickstart) > PLL_TIMEOUT_VALUE)
{
return HAL_TIMEOUT;
}
@@ -640,9 +641,9 @@ HAL_StatusTypeDef HAL_RCC_OscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct)
tickstart = HAL_GetTick();
/* Wait till PLL is ready */
- while(__HAL_RCC_GET_FLAG(RCC_FLAG_PLLRDY) == RESET)
+ while (__HAL_RCC_GET_FLAG(RCC_FLAG_PLLRDY) == RESET)
{
- if((HAL_GetTick() - tickstart ) > PLL_TIMEOUT_VALUE)
+ if ((HAL_GetTick() - tickstart) > PLL_TIMEOUT_VALUE)
{
return HAL_TIMEOUT;
}
@@ -657,9 +658,9 @@ HAL_StatusTypeDef HAL_RCC_OscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct)
tickstart = HAL_GetTick();
/* Wait till PLL is ready */
- while(__HAL_RCC_GET_FLAG(RCC_FLAG_PLLRDY) != RESET)
+ while (__HAL_RCC_GET_FLAG(RCC_FLAG_PLLRDY) != RESET)
{
- if((HAL_GetTick() - tickstart ) > PLL_TIMEOUT_VALUE)
+ if ((HAL_GetTick() - tickstart) > PLL_TIMEOUT_VALUE)
{
return HAL_TIMEOUT;
}
@@ -668,7 +669,27 @@ HAL_StatusTypeDef HAL_RCC_OscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct)
}
else
{
- return HAL_ERROR;
+ /* Do not return HAL_ERROR if request repeats the current configuration */
+ pll_config = RCC->PLLCFGR;
+#if defined (RCC_PLLCFGR_PLLR)
+ if (((RCC_OscInitStruct->PLL.PLLState) == RCC_PLL_OFF) ||
+ (READ_BIT(pll_config, RCC_PLLCFGR_PLLSRC) != RCC_OscInitStruct->PLL.PLLSource) ||
+ (READ_BIT(pll_config, RCC_PLLCFGR_PLLM) != RCC_OscInitStruct->PLL.PLLM) ||
+ (READ_BIT(pll_config, RCC_PLLCFGR_PLLN) != (RCC_OscInitStruct->PLL.PLLN << RCC_PLLCFGR_PLLN_Pos)) ||
+ (READ_BIT(pll_config, RCC_PLLCFGR_PLLP) != ((((RCC_OscInitStruct->PLL.PLLP) >> 1U) - 1U) << RCC_PLLCFGR_PLLP_Pos)) ||
+ (READ_BIT(pll_config, RCC_PLLCFGR_PLLQ) != (RCC_OscInitStruct->PLL.PLLQ << RCC_PLLCFGR_PLLQ_Pos)) ||
+ (READ_BIT(pll_config, RCC_PLLCFGR_PLLR) != (RCC_OscInitStruct->PLL.PLLR << RCC_PLLCFGR_PLLR_Pos)))
+#else
+ if (((RCC_OscInitStruct->PLL.PLLState) == RCC_PLL_OFF) ||
+ (READ_BIT(pll_config, RCC_PLLCFGR_PLLSRC) != RCC_OscInitStruct->PLL.PLLSource) ||
+ (READ_BIT(pll_config, RCC_PLLCFGR_PLLM) != RCC_OscInitStruct->PLL.PLLM) ||
+ (READ_BIT(pll_config, RCC_PLLCFGR_PLLN) != (RCC_OscInitStruct->PLL.PLLN << RCC_PLLCFGR_PLLN_Pos)) ||
+ (READ_BIT(pll_config, RCC_PLLCFGR_PLLP) != ((((RCC_OscInitStruct->PLL.PLLP) >> 1U) - 1U) << RCC_PLLCFGR_PLLP_Pos)) ||
+ (READ_BIT(pll_config, RCC_PLLCFGR_PLLQ) != (RCC_OscInitStruct->PLL.PLLQ << RCC_PLLCFGR_PLLQ_Pos)))
+#endif
+ {
+ return HAL_ERROR;
+ }
}
}
return HAL_OK;
@@ -705,7 +726,7 @@ HAL_StatusTypeDef HAL_RCC_ClockConfig(RCC_ClkInitTypeDef *RCC_ClkInitStruct, ui
uint32_t tickstart = 0;
/* Check Null pointer */
- if(RCC_ClkInitStruct == NULL)
+ if (RCC_ClkInitStruct == NULL)
{
return HAL_ERROR;
}
@@ -719,30 +740,30 @@ HAL_StatusTypeDef HAL_RCC_ClockConfig(RCC_ClkInitTypeDef *RCC_ClkInitStruct, ui
(HCLK) and the supply voltage of the device. */
/* Increasing the CPU frequency */
- if(FLatency > __HAL_FLASH_GET_LATENCY())
+ if (FLatency > __HAL_FLASH_GET_LATENCY())
{
/* Program the new number of wait states to the LATENCY bits in the FLASH_ACR register */
__HAL_FLASH_SET_LATENCY(FLatency);
/* Check that the new number of wait states is taken into account to access the Flash
memory by reading the FLASH_ACR register */
- if(__HAL_FLASH_GET_LATENCY() != FLatency)
+ if (__HAL_FLASH_GET_LATENCY() != FLatency)
{
return HAL_ERROR;
}
}
/*-------------------------- HCLK Configuration --------------------------*/
- if(((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_HCLK) == RCC_CLOCKTYPE_HCLK)
+ if (((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_HCLK) == RCC_CLOCKTYPE_HCLK)
{
/* Set the highest APBx dividers in order to ensure that we do not go through
a non-spec phase whatever we decrease or increase HCLK. */
- if(((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_PCLK1) == RCC_CLOCKTYPE_PCLK1)
+ if (((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_PCLK1) == RCC_CLOCKTYPE_PCLK1)
{
MODIFY_REG(RCC->CFGR, RCC_CFGR_PPRE1, RCC_HCLK_DIV16);
}
- if(((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_PCLK2) == RCC_CLOCKTYPE_PCLK2)
+ if (((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_PCLK2) == RCC_CLOCKTYPE_PCLK2)
{
MODIFY_REG(RCC->CFGR, RCC_CFGR_PPRE2, (RCC_HCLK_DIV16 << 3));
}
@@ -753,24 +774,24 @@ HAL_StatusTypeDef HAL_RCC_ClockConfig(RCC_ClkInitTypeDef *RCC_ClkInitStruct, ui
}
/*------------------------- SYSCLK Configuration ---------------------------*/
- if(((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_SYSCLK) == RCC_CLOCKTYPE_SYSCLK)
+ if (((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_SYSCLK) == RCC_CLOCKTYPE_SYSCLK)
{
assert_param(IS_RCC_SYSCLKSOURCE(RCC_ClkInitStruct->SYSCLKSource));
/* HSE is selected as System Clock Source */
- if(RCC_ClkInitStruct->SYSCLKSource == RCC_SYSCLKSOURCE_HSE)
+ if (RCC_ClkInitStruct->SYSCLKSource == RCC_SYSCLKSOURCE_HSE)
{
/* Check the HSE ready flag */
- if(__HAL_RCC_GET_FLAG(RCC_FLAG_HSERDY) == RESET)
+ if (__HAL_RCC_GET_FLAG(RCC_FLAG_HSERDY) == RESET)
{
return HAL_ERROR;
}
}
/* PLL is selected as System Clock Source */
- else if(RCC_ClkInitStruct->SYSCLKSource == RCC_SYSCLKSOURCE_PLLCLK)
+ else if (RCC_ClkInitStruct->SYSCLKSource == RCC_SYSCLKSOURCE_PLLCLK)
{
/* Check the PLL ready flag */
- if(__HAL_RCC_GET_FLAG(RCC_FLAG_PLLRDY) == RESET)
+ if (__HAL_RCC_GET_FLAG(RCC_FLAG_PLLRDY) == RESET)
{
return HAL_ERROR;
}
@@ -779,7 +800,7 @@ HAL_StatusTypeDef HAL_RCC_ClockConfig(RCC_ClkInitTypeDef *RCC_ClkInitStruct, ui
else
{
/* Check the HSI ready flag */
- if(__HAL_RCC_GET_FLAG(RCC_FLAG_HSIRDY) == RESET)
+ if (__HAL_RCC_GET_FLAG(RCC_FLAG_HSIRDY) == RESET)
{
return HAL_ERROR;
}
@@ -800,38 +821,38 @@ HAL_StatusTypeDef HAL_RCC_ClockConfig(RCC_ClkInitTypeDef *RCC_ClkInitStruct, ui
}
/* Decreasing the number of wait states because of lower CPU frequency */
- if(FLatency < __HAL_FLASH_GET_LATENCY())
+ if (FLatency < __HAL_FLASH_GET_LATENCY())
{
/* Program the new number of wait states to the LATENCY bits in the FLASH_ACR register */
__HAL_FLASH_SET_LATENCY(FLatency);
/* Check that the new number of wait states is taken into account to access the Flash
memory by reading the FLASH_ACR register */
- if(__HAL_FLASH_GET_LATENCY() != FLatency)
+ if (__HAL_FLASH_GET_LATENCY() != FLatency)
{
return HAL_ERROR;
}
}
/*-------------------------- PCLK1 Configuration ---------------------------*/
- if(((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_PCLK1) == RCC_CLOCKTYPE_PCLK1)
+ if (((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_PCLK1) == RCC_CLOCKTYPE_PCLK1)
{
assert_param(IS_RCC_PCLK(RCC_ClkInitStruct->APB1CLKDivider));
MODIFY_REG(RCC->CFGR, RCC_CFGR_PPRE1, RCC_ClkInitStruct->APB1CLKDivider);
}
/*-------------------------- PCLK2 Configuration ---------------------------*/
- if(((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_PCLK2) == RCC_CLOCKTYPE_PCLK2)
+ if (((RCC_ClkInitStruct->ClockType) & RCC_CLOCKTYPE_PCLK2) == RCC_CLOCKTYPE_PCLK2)
{
assert_param(IS_RCC_PCLK(RCC_ClkInitStruct->APB2CLKDivider));
MODIFY_REG(RCC->CFGR, RCC_CFGR_PPRE2, ((RCC_ClkInitStruct->APB2CLKDivider) << 3));
}
/* Update the SystemCoreClock global variable */
- SystemCoreClock = HAL_RCC_GetSysClockFreq() >> AHBPrescTable[(RCC->CFGR & RCC_CFGR_HPRE)>> RCC_CFGR_HPRE_Pos];
+ SystemCoreClock = HAL_RCC_GetSysClockFreq() >> AHBPrescTable[(RCC->CFGR & RCC_CFGR_HPRE) >> RCC_CFGR_HPRE_Pos];
/* Configure the source of time base considering new system clocks settings*/
- HAL_InitTick (TICK_INT_PRIORITY);
+ HAL_InitTick(uwTickPrio);
return HAL_OK;
}
@@ -888,7 +909,7 @@ void HAL_RCC_MCOConfig(uint32_t RCC_MCOx, uint32_t RCC_MCOSource, uint32_t RCC_M
assert_param(IS_RCC_MCO(RCC_MCOx));
assert_param(IS_RCC_MCODIV(RCC_MCODiv));
/* RCC_MCO1 */
- if(RCC_MCOx == RCC_MCO1)
+ if (RCC_MCOx == RCC_MCO1)
{
assert_param(IS_RCC_MCO1SOURCE(RCC_MCOSource));
@@ -990,7 +1011,7 @@ uint32_t HAL_RCC_GetSysClockFreq(void)
case RCC_SYSCLKSOURCE_STATUS_HSI: /* HSI used as system clock source */
{
sysclockfreq = HSI_VALUE;
- break;
+ break;
}
case RCC_SYSCLKSOURCE_STATUS_HSE: /* HSE used as system clock source */
{
@@ -1005,16 +1026,16 @@ uint32_t HAL_RCC_GetSysClockFreq(void)
if (__HAL_RCC_GET_PLL_OSCSOURCE() != RCC_PLLCFGR_PLLSRC_HSI)
{
/* HSE used as PLL clock source */
- pllvco = (uint32_t) ((((uint64_t) HSE_VALUE * ((uint64_t) ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> RCC_PLLCFGR_PLLN_Pos)))) / (uint64_t)pllm);
+ pllvco = (uint32_t)((((uint64_t) HSE_VALUE * ((uint64_t)((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> RCC_PLLCFGR_PLLN_Pos)))) / (uint64_t)pllm);
}
else
{
/* HSI used as PLL clock source */
- pllvco = (uint32_t) ((((uint64_t) HSI_VALUE * ((uint64_t) ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> RCC_PLLCFGR_PLLN_Pos)))) / (uint64_t)pllm);
+ pllvco = (uint32_t)((((uint64_t) HSI_VALUE * ((uint64_t)((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> RCC_PLLCFGR_PLLN_Pos)))) / (uint64_t)pllm);
}
- pllp = ((((RCC->PLLCFGR & RCC_PLLCFGR_PLLP) >> RCC_PLLCFGR_PLLP_Pos) + 1 ) *2);
+ pllp = ((((RCC->PLLCFGR & RCC_PLLCFGR_PLLP) >> RCC_PLLCFGR_PLLP_Pos) + 1) * 2);
- sysclockfreq = pllvco/pllp;
+ sysclockfreq = pllvco / pllp;
break;
}
default:
@@ -1047,7 +1068,7 @@ uint32_t HAL_RCC_GetHCLKFreq(void)
uint32_t HAL_RCC_GetPCLK1Freq(void)
{
/* Get HCLK source and Compute PCLK1 frequency ---------------------------*/
- return (HAL_RCC_GetHCLKFreq() >> APBPrescTable[(RCC->CFGR & RCC_CFGR_PPRE1)>> RCC_CFGR_PPRE1_Pos]);
+ return (HAL_RCC_GetHCLKFreq() >> APBPrescTable[(RCC->CFGR & RCC_CFGR_PPRE1) >> RCC_CFGR_PPRE1_Pos]);
}
/**
@@ -1059,7 +1080,7 @@ uint32_t HAL_RCC_GetPCLK1Freq(void)
uint32_t HAL_RCC_GetPCLK2Freq(void)
{
/* Get HCLK source and Compute PCLK2 frequency ---------------------------*/
- return (HAL_RCC_GetHCLKFreq()>> APBPrescTable[(RCC->CFGR & RCC_CFGR_PPRE2)>> RCC_CFGR_PPRE2_Pos]);
+ return (HAL_RCC_GetHCLKFreq() >> APBPrescTable[(RCC->CFGR & RCC_CFGR_PPRE2) >> RCC_CFGR_PPRE2_Pos]);
}
/**
@@ -1075,11 +1096,11 @@ void HAL_RCC_GetOscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct)
RCC_OscInitStruct->OscillatorType = RCC_OSCILLATORTYPE_HSE | RCC_OSCILLATORTYPE_HSI | RCC_OSCILLATORTYPE_LSE | RCC_OSCILLATORTYPE_LSI;
/* Get the HSE configuration -----------------------------------------------*/
- if((RCC->CR &RCC_CR_HSEBYP) == RCC_CR_HSEBYP)
+ if ((RCC->CR & RCC_CR_HSEBYP) == RCC_CR_HSEBYP)
{
RCC_OscInitStruct->HSEState = RCC_HSE_BYPASS;
}
- else if((RCC->CR &RCC_CR_HSEON) == RCC_CR_HSEON)
+ else if ((RCC->CR & RCC_CR_HSEON) == RCC_CR_HSEON)
{
RCC_OscInitStruct->HSEState = RCC_HSE_ON;
}
@@ -1089,7 +1110,7 @@ void HAL_RCC_GetOscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct)
}
/* Get the HSI configuration -----------------------------------------------*/
- if((RCC->CR &RCC_CR_HSION) == RCC_CR_HSION)
+ if ((RCC->CR & RCC_CR_HSION) == RCC_CR_HSION)
{
RCC_OscInitStruct->HSIState = RCC_HSI_ON;
}
@@ -1098,14 +1119,14 @@ void HAL_RCC_GetOscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct)
RCC_OscInitStruct->HSIState = RCC_HSI_OFF;
}
- RCC_OscInitStruct->HSICalibrationValue = (uint32_t)((RCC->CR &RCC_CR_HSITRIM) >> RCC_CR_HSITRIM_Pos);
+ RCC_OscInitStruct->HSICalibrationValue = (uint32_t)((RCC->CR & RCC_CR_HSITRIM) >> RCC_CR_HSITRIM_Pos);
/* Get the LSE configuration -----------------------------------------------*/
- if((RCC->BDCR &RCC_BDCR_LSEBYP) == RCC_BDCR_LSEBYP)
+ if ((RCC->BDCR & RCC_BDCR_LSEBYP) == RCC_BDCR_LSEBYP)
{
RCC_OscInitStruct->LSEState = RCC_LSE_BYPASS;
}
- else if((RCC->BDCR &RCC_BDCR_LSEON) == RCC_BDCR_LSEON)
+ else if ((RCC->BDCR & RCC_BDCR_LSEON) == RCC_BDCR_LSEON)
{
RCC_OscInitStruct->LSEState = RCC_LSE_ON;
}
@@ -1115,7 +1136,7 @@ void HAL_RCC_GetOscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct)
}
/* Get the LSI configuration -----------------------------------------------*/
- if((RCC->CSR &RCC_CSR_LSION) == RCC_CSR_LSION)
+ if ((RCC->CSR & RCC_CSR_LSION) == RCC_CSR_LSION)
{
RCC_OscInitStruct->LSIState = RCC_LSI_ON;
}
@@ -1125,7 +1146,7 @@ void HAL_RCC_GetOscConfig(RCC_OscInitTypeDef *RCC_OscInitStruct)
}
/* Get the PLL configuration -----------------------------------------------*/
- if((RCC->CR &RCC_CR_PLLON) == RCC_CR_PLLON)
+ if ((RCC->CR & RCC_CR_PLLON) == RCC_CR_PLLON)
{
RCC_OscInitStruct->PLL.PLLState = RCC_PLL_ON;
}
@@ -1180,7 +1201,7 @@ void HAL_RCC_GetClockConfig(RCC_ClkInitTypeDef *RCC_ClkInitStruct, uint32_t *pF
void HAL_RCC_NMI_IRQHandler(void)
{
/* Check RCC CSSF flag */
- if(__HAL_RCC_GET_IT(RCC_IT_CSS))
+ if (__HAL_RCC_GET_IT(RCC_IT_CSS))
{
/* RCC Clock Security System interrupt user callback */
HAL_RCC_CSSCallback();
diff --git a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_TrueStudio/Prog/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_tim.c b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_TrueStudio/Prog/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_tim.c
index c4676923..29de7d5b 100644
--- a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_TrueStudio/Prog/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_tim.c
+++ b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_TrueStudio/Prog/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_tim.c
@@ -98,18 +98,22 @@
*** Callback registration ***
=============================================
+ [..]
The compilation define USE_HAL_TIM_REGISTER_CALLBACKS when set to 1
allows the user to configure dynamically the driver callbacks.
+ [..]
Use Function @ref HAL_TIM_RegisterCallback() to register a callback.
@ref HAL_TIM_RegisterCallback() takes as parameters the HAL peripheral handle,
the Callback ID and a pointer to the user callback function.
+ [..]
Use function @ref HAL_TIM_UnRegisterCallback() to reset a callback to the default
weak function.
@ref HAL_TIM_UnRegisterCallback takes as parameters the HAL peripheral handle,
and the Callback ID.
+ [..]
These functions allow to register/unregister following callbacks:
(+) Base_MspInitCallback : TIM Base Msp Init Callback.
(+) Base_MspDeInitCallback : TIM Base Msp DeInit Callback.
@@ -140,15 +144,18 @@
(+) BreakCallback : TIM Break Callback.
(+) Break2Callback : TIM Break2 Callback.
+ [..]
By default, after the Init and when the state is HAL_TIM_STATE_RESET
all interrupt callbacks are set to the corresponding weak functions:
examples @ref HAL_TIM_TriggerCallback(), @ref HAL_TIM_ErrorCallback().
+ [..]
Exception done for MspInit and MspDeInit functions that are reset to the legacy weak
functionalities in the Init / DeInit only when these callbacks are null
(not registered beforehand). If not, MspInit or MspDeInit are not null, the Init / DeInit
keep and use the user MspInit / MspDeInit callbacks(registered beforehand)
+ [..]
Callbacks can be registered / unregistered in HAL_TIM_STATE_READY state only.
Exception done MspInit / MspDeInit that can be registered / unregistered
in HAL_TIM_STATE_READY or HAL_TIM_STATE_RESET state,
@@ -156,6 +163,7 @@ all interrupt callbacks are set to the corresponding weak functions:
In that case first register the MspInit/MspDeInit user callbacks
using @ref HAL_TIM_RegisterCallback() before calling DeInit or Init function.
+ [..]
When The compilation define USE_HAL_TIM_REGISTER_CALLBACKS is set to 0 or
not defined, the callback registration feature is not available and all callbacks
are set to the corresponding weak functions.
@@ -216,7 +224,7 @@ static void TIM_DMAPeriodElapsedHalfCplt(DMA_HandleTypeDef *hdma);
static void TIM_DMATriggerCplt(DMA_HandleTypeDef *hdma);
static void TIM_DMATriggerHalfCplt(DMA_HandleTypeDef *hdma);
static HAL_StatusTypeDef TIM_SlaveTimer_SetConfig(TIM_HandleTypeDef *htim,
- TIM_SlaveConfigTypeDef *sSlaveConfig);
+ TIM_SlaveConfigTypeDef *sSlaveConfig);
/**
* @}
*/
@@ -227,8 +235,8 @@ static HAL_StatusTypeDef TIM_SlaveTimer_SetConfig(TIM_HandleTypeDef *htim,
*/
/** @defgroup TIM_Exported_Functions_Group1 TIM Time Base functions
- * @brief Time Base functions
- *
+ * @brief Time Base functions
+ *
@verbatim
==============================================================================
##### Time Base functions #####
@@ -482,11 +490,11 @@ HAL_StatusTypeDef HAL_TIM_Base_Start_DMA(TIM_HandleTypeDef *htim, uint32_t *pDat
/* Check the parameters */
assert_param(IS_TIM_DMA_INSTANCE(htim->Instance));
- if ((htim->State == HAL_TIM_STATE_BUSY))
+ if (htim->State == HAL_TIM_STATE_BUSY)
{
return HAL_BUSY;
}
- else if ((htim->State == HAL_TIM_STATE_READY))
+ else if (htim->State == HAL_TIM_STATE_READY)
{
if ((pData == NULL) && (Length > 0U))
{
@@ -559,8 +567,8 @@ HAL_StatusTypeDef HAL_TIM_Base_Stop_DMA(TIM_HandleTypeDef *htim)
*/
/** @defgroup TIM_Exported_Functions_Group2 TIM Output Compare functions
- * @brief TIM Output Compare functions
- *
+ * @brief TIM Output Compare functions
+ *
@verbatim
==============================================================================
##### TIM Output Compare functions #####
@@ -929,16 +937,16 @@ HAL_StatusTypeDef HAL_TIM_OC_Stop_IT(TIM_HandleTypeDef *htim, uint32_t Channel)
*/
HAL_StatusTypeDef HAL_TIM_OC_Start_DMA(TIM_HandleTypeDef *htim, uint32_t Channel, uint32_t *pData, uint16_t Length)
{
- uint32_t tmpsmcr;
+ uint32_t tmpsmcr;
/* Check the parameters */
assert_param(IS_TIM_CCX_INSTANCE(htim->Instance, Channel));
- if ((htim->State == HAL_TIM_STATE_BUSY))
+ if (htim->State == HAL_TIM_STATE_BUSY)
{
return HAL_BUSY;
}
- else if ((htim->State == HAL_TIM_STATE_READY))
+ else if (htim->State == HAL_TIM_STATE_READY)
{
if ((pData == NULL) && (Length > 0U))
{
@@ -1136,8 +1144,8 @@ HAL_StatusTypeDef HAL_TIM_OC_Stop_DMA(TIM_HandleTypeDef *htim, uint32_t Channel)
*/
/** @defgroup TIM_Exported_Functions_Group3 TIM PWM functions
- * @brief TIM PWM functions
- *
+ * @brief TIM PWM functions
+ *
@verbatim
==============================================================================
##### TIM PWM functions #####
@@ -1513,11 +1521,11 @@ HAL_StatusTypeDef HAL_TIM_PWM_Start_DMA(TIM_HandleTypeDef *htim, uint32_t Channe
/* Check the parameters */
assert_param(IS_TIM_CCX_INSTANCE(htim->Instance, Channel));
- if ((htim->State == HAL_TIM_STATE_BUSY))
+ if (htim->State == HAL_TIM_STATE_BUSY)
{
return HAL_BUSY;
}
- else if ((htim->State == HAL_TIM_STATE_READY))
+ else if (htim->State == HAL_TIM_STATE_READY)
{
if ((pData == NULL) && (Length > 0U))
{
@@ -1714,8 +1722,8 @@ HAL_StatusTypeDef HAL_TIM_PWM_Stop_DMA(TIM_HandleTypeDef *htim, uint32_t Channel
*/
/** @defgroup TIM_Exported_Functions_Group4 TIM Input Capture functions
- * @brief TIM Input Capture functions
- *
+ * @brief TIM Input Capture functions
+ *
@verbatim
==============================================================================
##### TIM Input Capture functions #####
@@ -2061,11 +2069,11 @@ HAL_StatusTypeDef HAL_TIM_IC_Start_DMA(TIM_HandleTypeDef *htim, uint32_t Channel
assert_param(IS_TIM_CCX_INSTANCE(htim->Instance, Channel));
assert_param(IS_TIM_DMA_CC_INSTANCE(htim->Instance));
- if ((htim->State == HAL_TIM_STATE_BUSY))
+ if (htim->State == HAL_TIM_STATE_BUSY)
{
return HAL_BUSY;
}
- else if ((htim->State == HAL_TIM_STATE_READY))
+ else if (htim->State == HAL_TIM_STATE_READY)
{
if ((pData == NULL) && (Length > 0U))
{
@@ -2249,8 +2257,8 @@ HAL_StatusTypeDef HAL_TIM_IC_Stop_DMA(TIM_HandleTypeDef *htim, uint32_t Channel)
*/
/** @defgroup TIM_Exported_Functions_Group5 TIM One Pulse functions
- * @brief TIM One Pulse functions
- *
+ * @brief TIM One Pulse functions
+ *
@verbatim
==============================================================================
##### TIM One Pulse functions #####
@@ -2563,8 +2571,8 @@ HAL_StatusTypeDef HAL_TIM_OnePulse_Stop_IT(TIM_HandleTypeDef *htim, uint32_t Out
*/
/** @defgroup TIM_Exported_Functions_Group6 TIM Encoder functions
- * @brief TIM Encoder functions
- *
+ * @brief TIM Encoder functions
+ *
@verbatim
==============================================================================
##### TIM Encoder functions #####
@@ -2609,15 +2617,15 @@ HAL_StatusTypeDef HAL_TIM_Encoder_Init(TIM_HandleTypeDef *htim, TIM_Encoder_Ini
}
/* Check the parameters */
+ assert_param(IS_TIM_ENCODER_INTERFACE_INSTANCE(htim->Instance));
assert_param(IS_TIM_COUNTER_MODE(htim->Init.CounterMode));
assert_param(IS_TIM_CLOCKDIVISION_DIV(htim->Init.ClockDivision));
assert_param(IS_TIM_AUTORELOAD_PRELOAD(htim->Init.AutoReloadPreload));
- assert_param(IS_TIM_CC2_INSTANCE(htim->Instance));
assert_param(IS_TIM_ENCODER_MODE(sConfig->EncoderMode));
assert_param(IS_TIM_IC_SELECTION(sConfig->IC1Selection));
assert_param(IS_TIM_IC_SELECTION(sConfig->IC2Selection));
- assert_param(IS_TIM_IC_POLARITY(sConfig->IC1Polarity));
- assert_param(IS_TIM_IC_POLARITY(sConfig->IC2Polarity));
+ assert_param(IS_TIM_ENCODERINPUT_POLARITY(sConfig->IC1Polarity));
+ assert_param(IS_TIM_ENCODERINPUT_POLARITY(sConfig->IC2Polarity));
assert_param(IS_TIM_IC_PRESCALER(sConfig->IC1Prescaler));
assert_param(IS_TIM_IC_PRESCALER(sConfig->IC2Prescaler));
assert_param(IS_TIM_IC_FILTER(sConfig->IC1Filter));
@@ -2775,7 +2783,7 @@ __weak void HAL_TIM_Encoder_MspDeInit(TIM_HandleTypeDef *htim)
HAL_StatusTypeDef HAL_TIM_Encoder_Start(TIM_HandleTypeDef *htim, uint32_t Channel)
{
/* Check the parameters */
- assert_param(IS_TIM_CC2_INSTANCE(htim->Instance));
+ assert_param(IS_TIM_ENCODER_INTERFACE_INSTANCE(htim->Instance));
/* Enable the encoder interface channels */
switch (Channel)
@@ -2819,7 +2827,7 @@ HAL_StatusTypeDef HAL_TIM_Encoder_Start(TIM_HandleTypeDef *htim, uint32_t Channe
HAL_StatusTypeDef HAL_TIM_Encoder_Stop(TIM_HandleTypeDef *htim, uint32_t Channel)
{
/* Check the parameters */
- assert_param(IS_TIM_CC2_INSTANCE(htim->Instance));
+ assert_param(IS_TIM_ENCODER_INTERFACE_INSTANCE(htim->Instance));
/* Disable the Input Capture channels 1 and 2
(in the EncoderInterface the two possible channels that can be used are TIM_CHANNEL_1 and TIM_CHANNEL_2) */
@@ -2865,7 +2873,7 @@ HAL_StatusTypeDef HAL_TIM_Encoder_Stop(TIM_HandleTypeDef *htim, uint32_t Channel
HAL_StatusTypeDef HAL_TIM_Encoder_Start_IT(TIM_HandleTypeDef *htim, uint32_t Channel)
{
/* Check the parameters */
- assert_param(IS_TIM_CC2_INSTANCE(htim->Instance));
+ assert_param(IS_TIM_ENCODER_INTERFACE_INSTANCE(htim->Instance));
/* Enable the encoder interface channels */
/* Enable the capture compare Interrupts 1 and/or 2 */
@@ -2915,7 +2923,7 @@ HAL_StatusTypeDef HAL_TIM_Encoder_Start_IT(TIM_HandleTypeDef *htim, uint32_t Cha
HAL_StatusTypeDef HAL_TIM_Encoder_Stop_IT(TIM_HandleTypeDef *htim, uint32_t Channel)
{
/* Check the parameters */
- assert_param(IS_TIM_CC2_INSTANCE(htim->Instance));
+ assert_param(IS_TIM_ENCODER_INTERFACE_INSTANCE(htim->Instance));
/* Disable the Input Capture channels 1 and 2
(in the EncoderInterface the two possible channels that can be used are TIM_CHANNEL_1 and TIM_CHANNEL_2) */
@@ -2966,16 +2974,17 @@ HAL_StatusTypeDef HAL_TIM_Encoder_Stop_IT(TIM_HandleTypeDef *htim, uint32_t Chan
* @param Length The length of data to be transferred from TIM peripheral to memory.
* @retval HAL status
*/
-HAL_StatusTypeDef HAL_TIM_Encoder_Start_DMA(TIM_HandleTypeDef *htim, uint32_t Channel, uint32_t *pData1, uint32_t *pData2, uint16_t Length)
+HAL_StatusTypeDef HAL_TIM_Encoder_Start_DMA(TIM_HandleTypeDef *htim, uint32_t Channel, uint32_t *pData1,
+ uint32_t *pData2, uint16_t Length)
{
/* Check the parameters */
- assert_param(IS_TIM_DMA_CC_INSTANCE(htim->Instance));
+ assert_param(IS_TIM_ENCODER_INTERFACE_INSTANCE(htim->Instance));
- if ((htim->State == HAL_TIM_STATE_BUSY))
+ if (htim->State == HAL_TIM_STATE_BUSY)
{
return HAL_BUSY;
}
- else if ((htim->State == HAL_TIM_STATE_READY))
+ else if (htim->State == HAL_TIM_STATE_READY)
{
if ((((pData1 == NULL) || (pData2 == NULL))) && (Length > 0U))
{
@@ -3103,7 +3112,7 @@ HAL_StatusTypeDef HAL_TIM_Encoder_Start_DMA(TIM_HandleTypeDef *htim, uint32_t Ch
HAL_StatusTypeDef HAL_TIM_Encoder_Stop_DMA(TIM_HandleTypeDef *htim, uint32_t Channel)
{
/* Check the parameters */
- assert_param(IS_TIM_DMA_CC_INSTANCE(htim->Instance));
+ assert_param(IS_TIM_ENCODER_INTERFACE_INSTANCE(htim->Instance));
/* Disable the Input Capture channels 1 and 2
(in the EncoderInterface the two possible channels that can be used are TIM_CHANNEL_1 and TIM_CHANNEL_2) */
@@ -3149,8 +3158,8 @@ HAL_StatusTypeDef HAL_TIM_Encoder_Stop_DMA(TIM_HandleTypeDef *htim, uint32_t Cha
* @}
*/
/** @defgroup TIM_Exported_Functions_Group7 TIM IRQ handler management
- * @brief TIM IRQ handler management
- *
+ * @brief TIM IRQ handler management
+ *
@verbatim
==============================================================================
##### IRQ handler management #####
@@ -3363,8 +3372,8 @@ void HAL_TIM_IRQHandler(TIM_HandleTypeDef *htim)
*/
/** @defgroup TIM_Exported_Functions_Group8 TIM Peripheral Control functions
- * @brief TIM Peripheral Control functions
- *
+ * @brief TIM Peripheral Control functions
+ *
@verbatim
==============================================================================
##### Peripheral Control functions #####
@@ -3738,9 +3747,14 @@ HAL_StatusTypeDef HAL_TIM_PWM_ConfigChannel(TIM_HandleTypeDef *htim,
* This parameter can be one of the following values:
* @arg TIM_CHANNEL_1: TIM Channel 1 selected
* @arg TIM_CHANNEL_2: TIM Channel 2 selected
+ * @note To output a waveform with a minimum delay user can enable the fast
+ * mode by calling the @ref __HAL_TIM_ENABLE_OCxFAST macro. Then CCx
+ * output is forced in response to the edge detection on TIx input,
+ * without taking in account the comparison.
* @retval HAL status
*/
-HAL_StatusTypeDef HAL_TIM_OnePulse_ConfigChannel(TIM_HandleTypeDef *htim, TIM_OnePulse_InitTypeDef *sConfig, uint32_t OutputChannel, uint32_t InputChannel)
+HAL_StatusTypeDef HAL_TIM_OnePulse_ConfigChannel(TIM_HandleTypeDef *htim, TIM_OnePulse_InitTypeDef *sConfig,
+ uint32_t OutputChannel, uint32_t InputChannel)
{
TIM_OC_InitTypeDef temp1;
@@ -3894,11 +3908,11 @@ HAL_StatusTypeDef HAL_TIM_DMABurst_WriteStart(TIM_HandleTypeDef *htim, uint32_t
assert_param(IS_TIM_DMA_SOURCE(BurstRequestSrc));
assert_param(IS_TIM_DMA_LENGTH(BurstLength));
- if ((htim->State == HAL_TIM_STATE_BUSY))
+ if (htim->State == HAL_TIM_STATE_BUSY)
{
return HAL_BUSY;
}
- else if ((htim->State == HAL_TIM_STATE_READY))
+ else if (htim->State == HAL_TIM_STATE_READY)
{
if ((BurstBuffer == NULL) && (BurstLength > 0U))
{
@@ -3941,7 +3955,8 @@ HAL_StatusTypeDef HAL_TIM_DMABurst_WriteStart(TIM_HandleTypeDef *htim, uint32_t
htim->hdma[TIM_DMA_ID_CC1]->XferErrorCallback = TIM_DMAError ;
/* Enable the DMA stream */
- if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC1], (uint32_t)BurstBuffer, (uint32_t)&htim->Instance->DMAR, ((BurstLength) >> 8U) + 1U) != HAL_OK)
+ if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC1], (uint32_t)BurstBuffer,
+ (uint32_t)&htim->Instance->DMAR, ((BurstLength) >> 8U) + 1U) != HAL_OK)
{
return HAL_ERROR;
}
@@ -3957,7 +3972,8 @@ HAL_StatusTypeDef HAL_TIM_DMABurst_WriteStart(TIM_HandleTypeDef *htim, uint32_t
htim->hdma[TIM_DMA_ID_CC2]->XferErrorCallback = TIM_DMAError ;
/* Enable the DMA stream */
- if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC2], (uint32_t)BurstBuffer, (uint32_t)&htim->Instance->DMAR, ((BurstLength) >> 8U) + 1U) != HAL_OK)
+ if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC2], (uint32_t)BurstBuffer,
+ (uint32_t)&htim->Instance->DMAR, ((BurstLength) >> 8U) + 1U) != HAL_OK)
{
return HAL_ERROR;
}
@@ -3973,7 +3989,8 @@ HAL_StatusTypeDef HAL_TIM_DMABurst_WriteStart(TIM_HandleTypeDef *htim, uint32_t
htim->hdma[TIM_DMA_ID_CC3]->XferErrorCallback = TIM_DMAError ;
/* Enable the DMA stream */
- if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC3], (uint32_t)BurstBuffer, (uint32_t)&htim->Instance->DMAR, ((BurstLength) >> 8U) + 1U) != HAL_OK)
+ if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC3], (uint32_t)BurstBuffer,
+ (uint32_t)&htim->Instance->DMAR, ((BurstLength) >> 8U) + 1U) != HAL_OK)
{
return HAL_ERROR;
}
@@ -3989,7 +4006,8 @@ HAL_StatusTypeDef HAL_TIM_DMABurst_WriteStart(TIM_HandleTypeDef *htim, uint32_t
htim->hdma[TIM_DMA_ID_CC4]->XferErrorCallback = TIM_DMAError ;
/* Enable the DMA stream */
- if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC4], (uint32_t)BurstBuffer, (uint32_t)&htim->Instance->DMAR, ((BurstLength) >> 8U) + 1U) != HAL_OK)
+ if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_CC4], (uint32_t)BurstBuffer,
+ (uint32_t)&htim->Instance->DMAR, ((BurstLength) >> 8U) + 1U) != HAL_OK)
{
return HAL_ERROR;
}
@@ -4005,7 +4023,8 @@ HAL_StatusTypeDef HAL_TIM_DMABurst_WriteStart(TIM_HandleTypeDef *htim, uint32_t
htim->hdma[TIM_DMA_ID_COMMUTATION]->XferErrorCallback = TIM_DMAError ;
/* Enable the DMA stream */
- if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_COMMUTATION], (uint32_t)BurstBuffer, (uint32_t)&htim->Instance->DMAR, ((BurstLength) >> 8U) + 1U) != HAL_OK)
+ if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_COMMUTATION], (uint32_t)BurstBuffer,
+ (uint32_t)&htim->Instance->DMAR, ((BurstLength) >> 8U) + 1U) != HAL_OK)
{
return HAL_ERROR;
}
@@ -4021,7 +4040,8 @@ HAL_StatusTypeDef HAL_TIM_DMABurst_WriteStart(TIM_HandleTypeDef *htim, uint32_t
htim->hdma[TIM_DMA_ID_TRIGGER]->XferErrorCallback = TIM_DMAError ;
/* Enable the DMA stream */
- if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_TRIGGER], (uint32_t)BurstBuffer, (uint32_t)&htim->Instance->DMAR, ((BurstLength) >> 8U) + 1U) != HAL_OK)
+ if (HAL_DMA_Start_IT(htim->hdma[TIM_DMA_ID_TRIGGER], (uint32_t)BurstBuffer,
+ (uint32_t)&htim->Instance->DMAR, ((BurstLength) >> 8U) + 1U) != HAL_OK)
{
return HAL_ERROR;
}
@@ -4151,8 +4171,8 @@ HAL_StatusTypeDef HAL_TIM_DMABurst_WriteStop(TIM_HandleTypeDef *htim, uint32_t B
* @note This function should be used only when BurstLength is equal to DMA data transfer length.
* @retval HAL status
*/
-HAL_StatusTypeDef HAL_TIM_DMABurst_ReadStart(TIM_HandleTypeDef *htim, uint32_t BurstBaseAddress, uint32_t BurstRequestSrc,
- uint32_t *BurstBuffer, uint32_t BurstLength)
+HAL_StatusTypeDef HAL_TIM_DMABurst_ReadStart(TIM_HandleTypeDef *htim, uint32_t BurstBaseAddress,
+ uint32_t BurstRequestSrc, uint32_t *BurstBuffer, uint32_t BurstLength)
{
/* Check the parameters */
assert_param(IS_TIM_DMABURST_INSTANCE(htim->Instance));
@@ -4160,11 +4180,11 @@ HAL_StatusTypeDef HAL_TIM_DMABurst_ReadStart(TIM_HandleTypeDef *htim, uint32_t B
assert_param(IS_TIM_DMA_SOURCE(BurstRequestSrc));
assert_param(IS_TIM_DMA_LENGTH(BurstLength));
- if ((htim->State == HAL_TIM_STATE_BUSY))
+ if (htim->State == HAL_TIM_STATE_BUSY)
{
return HAL_BUSY;
}
- else if ((htim->State == HAL_TIM_STATE_READY))
+ else if (htim->State == HAL_TIM_STATE_READY)
{
if ((BurstBuffer == NULL) && (BurstLength > 0U))
{
@@ -4465,7 +4485,7 @@ HAL_StatusTypeDef HAL_TIM_ConfigOCrefClear(TIM_HandleTypeDef *htim,
/* When OCRef clear feature is used with ETR source, ETR prescaler must be off */
if (sClearInputConfig->ClearInputPrescaler != TIM_CLEARINPUTPRESCALER_DIV1)
{
- htim->State = HAL_TIM_STATE_READY;
+ htim->State = HAL_TIM_STATE_READY;
__HAL_UNLOCK(htim);
return HAL_ERROR;
}
@@ -4780,9 +4800,9 @@ HAL_StatusTypeDef HAL_TIM_SlaveConfigSynchro(TIM_HandleTypeDef *htim, TIM_SlaveC
htim->State = HAL_TIM_STATE_BUSY;
- if(TIM_SlaveTimer_SetConfig(htim, sSlaveConfig) != HAL_OK)
+ if (TIM_SlaveTimer_SetConfig(htim, sSlaveConfig) != HAL_OK)
{
- htim->State = HAL_TIM_STATE_READY;
+ htim->State = HAL_TIM_STATE_READY;
__HAL_UNLOCK(htim);
return HAL_ERROR;
}
@@ -4810,7 +4830,7 @@ HAL_StatusTypeDef HAL_TIM_SlaveConfigSynchro(TIM_HandleTypeDef *htim, TIM_SlaveC
* @retval HAL status
*/
HAL_StatusTypeDef HAL_TIM_SlaveConfigSynchro_IT(TIM_HandleTypeDef *htim,
- TIM_SlaveConfigTypeDef *sSlaveConfig)
+ TIM_SlaveConfigTypeDef *sSlaveConfig)
{
/* Check the parameters */
assert_param(IS_TIM_SLAVE_INSTANCE(htim->Instance));
@@ -4821,9 +4841,9 @@ HAL_StatusTypeDef HAL_TIM_SlaveConfigSynchro_IT(TIM_HandleTypeDef *htim,
htim->State = HAL_TIM_STATE_BUSY;
- if(TIM_SlaveTimer_SetConfig(htim, sSlaveConfig) != HAL_OK)
+ if (TIM_SlaveTimer_SetConfig(htim, sSlaveConfig) != HAL_OK)
{
- htim->State = HAL_TIM_STATE_READY;
+ htim->State = HAL_TIM_STATE_READY;
__HAL_UNLOCK(htim);
return HAL_ERROR;
}
@@ -4913,8 +4933,8 @@ uint32_t HAL_TIM_ReadCapturedValue(TIM_HandleTypeDef *htim, uint32_t Channel)
*/
/** @defgroup TIM_Exported_Functions_Group9 TIM Callbacks functions
- * @brief TIM Callbacks functions
- *
+ * @brief TIM Callbacks functions
+ *
@verbatim
==============================================================================
##### TIM Callbacks functions #####
@@ -5118,7 +5138,8 @@ __weak void HAL_TIM_ErrorCallback(TIM_HandleTypeDef *htim)
* @param pCallback pointer to the callback function
* @retval status
*/
-HAL_StatusTypeDef HAL_TIM_RegisterCallback(TIM_HandleTypeDef *htim, HAL_TIM_CallbackIDTypeDef CallbackID, pTIM_CallbackTypeDef pCallback)
+HAL_StatusTypeDef HAL_TIM_RegisterCallback(TIM_HandleTypeDef *htim, HAL_TIM_CallbackIDTypeDef CallbackID,
+ pTIM_CallbackTypeDef pCallback)
{
HAL_StatusTypeDef status = HAL_OK;
@@ -5578,8 +5599,8 @@ HAL_StatusTypeDef HAL_TIM_UnRegisterCallback(TIM_HandleTypeDef *htim, HAL_TIM_Ca
*/
/** @defgroup TIM_Exported_Functions_Group10 TIM Peripheral State functions
- * @brief TIM Peripheral State functions
- *
+ * @brief TIM Peripheral State functions
+ *
@verbatim
==============================================================================
##### Peripheral State functions #####
@@ -6365,7 +6386,7 @@ static void TIM_OC6_SetConfig(TIM_TypeDef *TIMx,
* @retval None
*/
static HAL_StatusTypeDef TIM_SlaveTimer_SetConfig(TIM_HandleTypeDef *htim,
- TIM_SlaveConfigTypeDef *sSlaveConfig)
+ TIM_SlaveConfigTypeDef *sSlaveConfig)
{
uint32_t tmpsmcr;
uint32_t tmpccmr1;
diff --git a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_TrueStudio/Prog/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_tim_ex.c b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_TrueStudio/Prog/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_tim_ex.c
index 271f11ec..f2d976ae 100644
--- a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_TrueStudio/Prog/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_tim_ex.c
+++ b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_TrueStudio/Prog/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_tim_ex.c
@@ -73,7 +73,7 @@
* opensource.org/licenses/BSD-3-Clause
*
******************************************************************************
-*/
+ */
/* Includes ------------------------------------------------------------------*/
#include "stm32f7xx_hal.h"
@@ -397,11 +397,11 @@ HAL_StatusTypeDef HAL_TIMEx_HallSensor_Start_DMA(TIM_HandleTypeDef *htim, uint32
/* Check the parameters */
assert_param(IS_TIM_HALL_SENSOR_INTERFACE_INSTANCE(htim->Instance));
- if ((htim->State == HAL_TIM_STATE_BUSY))
+ if (htim->State == HAL_TIM_STATE_BUSY)
{
return HAL_BUSY;
}
- else if ((htim->State == HAL_TIM_STATE_READY))
+ else if (htim->State == HAL_TIM_STATE_READY)
{
if (((uint32_t)pData == 0U) && (Length > 0U))
{
@@ -709,11 +709,11 @@ HAL_StatusTypeDef HAL_TIMEx_OCN_Start_DMA(TIM_HandleTypeDef *htim, uint32_t Chan
/* Check the parameters */
assert_param(IS_TIM_CCXN_INSTANCE(htim->Instance, Channel));
- if ((htim->State == HAL_TIM_STATE_BUSY))
+ if (htim->State == HAL_TIM_STATE_BUSY)
{
return HAL_BUSY;
}
- else if ((htim->State == HAL_TIM_STATE_READY))
+ else if (htim->State == HAL_TIM_STATE_READY)
{
if (((uint32_t)pData == 0U) && (Length > 0U))
{
@@ -1117,11 +1117,11 @@ HAL_StatusTypeDef HAL_TIMEx_PWMN_Start_DMA(TIM_HandleTypeDef *htim, uint32_t Cha
/* Check the parameters */
assert_param(IS_TIM_CCXN_INSTANCE(htim->Instance, Channel));
- if ((htim->State == HAL_TIM_STATE_BUSY))
+ if (htim->State == HAL_TIM_STATE_BUSY)
{
return HAL_BUSY;
}
- else if ((htim->State == HAL_TIM_STATE_READY))
+ else if (htim->State == HAL_TIM_STATE_READY)
{
if (((uint32_t)pData == 0U) && (Length > 0U))
{
@@ -1466,7 +1466,8 @@ HAL_StatusTypeDef HAL_TIMEx_OnePulseN_Stop_IT(TIM_HandleTypeDef *htim, uint32_t
* @arg TIM_COMMUTATION_SOFTWARE: Commutation source is set by software using the COMG bit
* @retval HAL status
*/
-HAL_StatusTypeDef HAL_TIMEx_ConfigCommutEvent(TIM_HandleTypeDef *htim, uint32_t InputTrigger, uint32_t CommutationSource)
+HAL_StatusTypeDef HAL_TIMEx_ConfigCommutEvent(TIM_HandleTypeDef *htim, uint32_t InputTrigger,
+ uint32_t CommutationSource)
{
/* Check the parameters */
assert_param(IS_TIM_COMMUTATION_EVENT_INSTANCE(htim->Instance));
@@ -1521,7 +1522,8 @@ HAL_StatusTypeDef HAL_TIMEx_ConfigCommutEvent(TIM_HandleTypeDef *htim, uint32_t
* @arg TIM_COMMUTATION_SOFTWARE: Commutation source is set by software using the COMG bit
* @retval HAL status
*/
-HAL_StatusTypeDef HAL_TIMEx_ConfigCommutEvent_IT(TIM_HandleTypeDef *htim, uint32_t InputTrigger, uint32_t CommutationSource)
+HAL_StatusTypeDef HAL_TIMEx_ConfigCommutEvent_IT(TIM_HandleTypeDef *htim, uint32_t InputTrigger,
+ uint32_t CommutationSource)
{
/* Check the parameters */
assert_param(IS_TIM_COMMUTATION_EVENT_INSTANCE(htim->Instance));
@@ -1577,7 +1579,8 @@ HAL_StatusTypeDef HAL_TIMEx_ConfigCommutEvent_IT(TIM_HandleTypeDef *htim, uint32
* @arg TIM_COMMUTATION_SOFTWARE: Commutation source is set by software using the COMG bit
* @retval HAL status
*/
-HAL_StatusTypeDef HAL_TIMEx_ConfigCommutEvent_DMA(TIM_HandleTypeDef *htim, uint32_t InputTrigger, uint32_t CommutationSource)
+HAL_StatusTypeDef HAL_TIMEx_ConfigCommutEvent_DMA(TIM_HandleTypeDef *htim, uint32_t InputTrigger,
+ uint32_t CommutationSource)
{
/* Check the parameters */
assert_param(IS_TIM_COMMUTATION_EVENT_INSTANCE(htim->Instance));
@@ -1632,7 +1635,7 @@ HAL_StatusTypeDef HAL_TIMEx_MasterConfigSynchronization(TIM_HandleTypeDef *htim,
uint32_t tmpsmcr;
/* Check the parameters */
- assert_param(IS_TIM_SYNCHRO_INSTANCE(htim->Instance));
+ assert_param(IS_TIM_MASTER_INSTANCE(htim->Instance));
assert_param(IS_TIM_TRGO_SOURCE(sMasterConfig->MasterOutputTrigger));
assert_param(IS_TIM_MSM_STATE(sMasterConfig->MasterSlaveMode));
@@ -1665,16 +1668,19 @@ HAL_StatusTypeDef HAL_TIMEx_MasterConfigSynchronization(TIM_HandleTypeDef *htim,
/* Select the TRGO source */
tmpcr2 |= sMasterConfig->MasterOutputTrigger;
- /* Reset the MSM Bit */
- tmpsmcr &= ~TIM_SMCR_MSM;
- /* Set master mode */
- tmpsmcr |= sMasterConfig->MasterSlaveMode;
-
/* Update TIMx CR2 */
htim->Instance->CR2 = tmpcr2;
- /* Update TIMx SMCR */
- htim->Instance->SMCR = tmpsmcr;
+ if (IS_TIM_SLAVE_INSTANCE(htim->Instance))
+ {
+ /* Reset the MSM Bit */
+ tmpsmcr &= ~TIM_SMCR_MSM;
+ /* Set master mode */
+ tmpsmcr |= sMasterConfig->MasterSlaveMode;
+
+ /* Update TIMx SMCR */
+ htim->Instance->SMCR = tmpsmcr;
+ }
/* Change the htim state */
htim->State = HAL_TIM_STATE_READY;
@@ -1690,6 +1696,9 @@ HAL_StatusTypeDef HAL_TIMEx_MasterConfigSynchronization(TIM_HandleTypeDef *htim,
* @param htim TIM handle
* @param sBreakDeadTimeConfig pointer to a TIM_ConfigBreakDeadConfigTypeDef structure that
* contains the BDTR Register configuration information for the TIM peripheral.
+ * @note Interrupts can be generated when an active level is detected on the
+ * break input, the break 2 input or the system break input. Break
+ * interrupt can be enabled by calling the @ref __HAL_TIM_ENABLE_IT macro.
* @retval HAL status
*/
HAL_StatusTypeDef HAL_TIMEx_ConfigBreakDeadTime(TIM_HandleTypeDef *htim,
@@ -1763,10 +1772,10 @@ HAL_StatusTypeDef HAL_TIMEx_ConfigBreakInput(TIM_HandleTypeDef *htim,
{
uint32_t tmporx;
- uint32_t bkin_enable_mask = 0U;
- uint32_t bkin_polarity_mask = 0U;
- uint32_t bkin_enable_bitpos = 0U;
- uint32_t bkin_polarity_bitpos = 0U;
+ uint32_t bkin_enable_mask;
+ uint32_t bkin_polarity_mask;
+ uint32_t bkin_enable_bitpos;
+ uint32_t bkin_polarity_bitpos;
/* Check the parameters */
assert_param(IS_TIM_BREAK_INSTANCE(htim->Instance));
@@ -1800,11 +1809,19 @@ HAL_StatusTypeDef HAL_TIMEx_ConfigBreakInput(TIM_HandleTypeDef *htim,
{
bkin_enable_mask = TIM1_AF1_BKDF1BKE;
bkin_enable_bitpos = 8;
+ bkin_polarity_mask = 0U;
+ bkin_polarity_bitpos = 0U;
break;
}
default:
+ {
+ bkin_enable_mask = 0U;
+ bkin_polarity_mask = 0U;
+ bkin_enable_bitpos = 0U;
+ bkin_polarity_bitpos = 0U;
break;
+ }
}
switch (BreakInput)
@@ -2054,7 +2071,7 @@ HAL_TIM_StateTypeDef HAL_TIMEx_HallSensor_GetState(TIM_HandleTypeDef *htim)
*/
/* Private functions ---------------------------------------------------------*/
-/** @defgroup TIMEx_Private_Functions TIM Extended Private Functions
+/** @defgroup TIMEx_Private_Functions TIMEx Private Functions
* @{
*/
diff --git a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_TrueStudio/Prog/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_uart.c b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_TrueStudio/Prog/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_uart.c
index 76efbf84..25a901fe 100644
--- a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_TrueStudio/Prog/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_uart.c
+++ b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_TrueStudio/Prog/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_uart.c
@@ -326,7 +326,6 @@ HAL_StatusTypeDef HAL_UART_Init(UART_HandleTypeDef *huart)
huart->gState = HAL_UART_STATE_BUSY;
- /* Disable the Peripheral */
__HAL_UART_DISABLE(huart);
/* Set the UART Communication parameters */
@@ -346,7 +345,6 @@ HAL_StatusTypeDef HAL_UART_Init(UART_HandleTypeDef *huart)
CLEAR_BIT(huart->Instance->CR2, (USART_CR2_LINEN | USART_CR2_CLKEN));
CLEAR_BIT(huart->Instance->CR3, (USART_CR3_SCEN | USART_CR3_HDSEL | USART_CR3_IREN));
- /* Enable the Peripheral */
__HAL_UART_ENABLE(huart);
/* TEACK and/or REACK to check before moving huart->gState and huart->RxState to Ready */
@@ -393,7 +391,6 @@ HAL_StatusTypeDef HAL_HalfDuplex_Init(UART_HandleTypeDef *huart)
huart->gState = HAL_UART_STATE_BUSY;
- /* Disable the Peripheral */
__HAL_UART_DISABLE(huart);
/* Set the UART Communication parameters */
@@ -416,7 +413,6 @@ HAL_StatusTypeDef HAL_HalfDuplex_Init(UART_HandleTypeDef *huart)
/* Enable the Half-Duplex mode by setting the HDSEL bit in the CR3 register */
SET_BIT(huart->Instance->CR3, USART_CR3_HDSEL);
- /* Enable the Peripheral */
__HAL_UART_ENABLE(huart);
/* TEACK and/or REACK to check before moving huart->gState and huart->RxState to Ready */
@@ -481,7 +477,6 @@ HAL_StatusTypeDef HAL_LIN_Init(UART_HandleTypeDef *huart, uint32_t BreakDetectLe
huart->gState = HAL_UART_STATE_BUSY;
- /* Disable the Peripheral */
__HAL_UART_DISABLE(huart);
/* Set the UART Communication parameters */
@@ -507,7 +502,6 @@ HAL_StatusTypeDef HAL_LIN_Init(UART_HandleTypeDef *huart, uint32_t BreakDetectLe
/* Set the USART LIN Break detection length. */
MODIFY_REG(huart->Instance->CR2, USART_CR2_LBDL, BreakDetectLength);
- /* Enable the Peripheral */
__HAL_UART_ENABLE(huart);
/* TEACK and/or REACK to check before moving huart->gState and huart->RxState to Ready */
@@ -567,7 +561,6 @@ HAL_StatusTypeDef HAL_MultiProcessor_Init(UART_HandleTypeDef *huart, uint8_t Add
huart->gState = HAL_UART_STATE_BUSY;
- /* Disable the Peripheral */
__HAL_UART_DISABLE(huart);
/* Set the UART Communication parameters */
@@ -596,7 +589,6 @@ HAL_StatusTypeDef HAL_MultiProcessor_Init(UART_HandleTypeDef *huart, uint8_t Add
/* Set the wake up method by setting the WAKE bit in the CR1 register */
MODIFY_REG(huart->Instance->CR1, USART_CR1_WAKE, WakeUpMethod);
- /* Enable the Peripheral */
__HAL_UART_ENABLE(huart);
/* TEACK and/or REACK to check before moving huart->gState and huart->RxState to Ready */
@@ -622,7 +614,6 @@ HAL_StatusTypeDef HAL_UART_DeInit(UART_HandleTypeDef *huart)
huart->gState = HAL_UART_STATE_BUSY;
- /* Disable the Peripheral */
__HAL_UART_DISABLE(huart);
huart->Instance->CR1 = 0x0U;
@@ -645,7 +636,6 @@ HAL_StatusTypeDef HAL_UART_DeInit(UART_HandleTypeDef *huart)
huart->gState = HAL_UART_STATE_RESET;
huart->RxState = HAL_UART_STATE_RESET;
- /* Process Unlock */
__HAL_UNLOCK(huart);
return HAL_OK;
@@ -704,18 +694,18 @@ __weak void HAL_UART_MspDeInit(UART_HandleTypeDef *huart)
* @param pCallback pointer to the Callback function
* @retval HAL status
*/
-HAL_StatusTypeDef HAL_UART_RegisterCallback(UART_HandleTypeDef *huart, HAL_UART_CallbackIDTypeDef CallbackID, pUART_CallbackTypeDef pCallback)
+HAL_StatusTypeDef HAL_UART_RegisterCallback(UART_HandleTypeDef *huart, HAL_UART_CallbackIDTypeDef CallbackID,
+ pUART_CallbackTypeDef pCallback)
{
HAL_StatusTypeDef status = HAL_OK;
if (pCallback == NULL)
{
- /* Update the error code */
huart->ErrorCode |= HAL_UART_ERROR_INVALID_CALLBACK;
return HAL_ERROR;
}
- /* Process locked */
+
__HAL_LOCK(huart);
if (huart->gState == HAL_UART_STATE_READY)
@@ -768,10 +758,8 @@ HAL_StatusTypeDef HAL_UART_RegisterCallback(UART_HandleTypeDef *huart, HAL_UART_
break;
default :
- /* Update the error code */
huart->ErrorCode |= HAL_UART_ERROR_INVALID_CALLBACK;
- /* Return error status */
status = HAL_ERROR;
break;
}
@@ -789,24 +777,19 @@ HAL_StatusTypeDef HAL_UART_RegisterCallback(UART_HandleTypeDef *huart, HAL_UART_
break;
default :
- /* Update the error code */
huart->ErrorCode |= HAL_UART_ERROR_INVALID_CALLBACK;
- /* Return error status */
status = HAL_ERROR;
break;
}
}
else
{
- /* Update the error code */
huart->ErrorCode |= HAL_UART_ERROR_INVALID_CALLBACK;
- /* Return error status */
status = HAL_ERROR;
}
- /* Release Lock */
__HAL_UNLOCK(huart);
return status;
@@ -837,7 +820,6 @@ HAL_StatusTypeDef HAL_UART_UnRegisterCallback(UART_HandleTypeDef *huart, HAL_UAR
{
HAL_StatusTypeDef status = HAL_OK;
- /* Process locked */
__HAL_LOCK(huart);
if (HAL_UART_STATE_READY == huart->gState)
@@ -876,6 +858,12 @@ HAL_StatusTypeDef HAL_UART_UnRegisterCallback(UART_HandleTypeDef *huart, HAL_UAR
huart->AbortReceiveCpltCallback = HAL_UART_AbortReceiveCpltCallback; /* Legacy weak AbortReceiveCpltCallback */
break;
+#if defined(USART_CR1_UESM)
+ case HAL_UART_WAKEUP_CB_ID :
+ huart->WakeupCallback = HAL_UARTEx_WakeupCallback; /* Legacy weak WakeupCallback */
+ break;
+
+#endif /* USART_CR1_UESM */
case HAL_UART_MSPINIT_CB_ID :
huart->MspInitCallback = HAL_UART_MspInit; /* Legacy weak MspInitCallback */
break;
@@ -885,10 +873,8 @@ HAL_StatusTypeDef HAL_UART_UnRegisterCallback(UART_HandleTypeDef *huart, HAL_UAR
break;
default :
- /* Update the error code */
huart->ErrorCode |= HAL_UART_ERROR_INVALID_CALLBACK;
- /* Return error status */
status = HAL_ERROR;
break;
}
@@ -906,24 +892,19 @@ HAL_StatusTypeDef HAL_UART_UnRegisterCallback(UART_HandleTypeDef *huart, HAL_UAR
break;
default :
- /* Update the error code */
huart->ErrorCode |= HAL_UART_ERROR_INVALID_CALLBACK;
- /* Return error status */
status = HAL_ERROR;
break;
}
}
else
{
- /* Update the error code */
huart->ErrorCode |= HAL_UART_ERROR_INVALID_CALLBACK;
- /* Return error status */
status = HAL_ERROR;
}
- /* Release Lock */
__HAL_UNLOCK(huart);
return status;
@@ -992,6 +973,11 @@ HAL_StatusTypeDef HAL_UART_UnRegisterCallback(UART_HandleTypeDef *huart, HAL_UAR
(+) HAL_UART_AbortCpltCallback()
(+) HAL_UART_AbortTransmitCpltCallback()
(+) HAL_UART_AbortReceiveCpltCallback()
+#if defined(USART_CR1_UESM)
+
+ (#) Wakeup from Stop mode Callback:
+ (+) HAL_UARTEx_WakeupCallback()
+#endif
(#) In Non-Blocking mode transfers, possible errors are split into 2 categories.
Errors are handled as follows :
@@ -1013,9 +999,12 @@ HAL_StatusTypeDef HAL_UART_UnRegisterCallback(UART_HandleTypeDef *huart, HAL_UAR
/**
* @brief Send an amount of data in blocking mode.
+ * @note When UART parity is not enabled (PCE = 0), and Word Length is configured to 9 bits (M1-M0 = 01),
+ * the sent data is handled as a set of u16. In this case, Size must indicate the number
+ * of u16 provided through pData.
* @param huart UART handle.
- * @param pData Pointer to data buffer.
- * @param Size Amount of data to be sent.
+ * @param pData Pointer to data buffer (u8 or u16 data elements).
+ * @param Size Amount of data elements (u8 or u16) to be sent.
* @param Timeout Timeout duration.
* @retval HAL status
*/
@@ -1033,7 +1022,6 @@ HAL_StatusTypeDef HAL_UART_Transmit(UART_HandleTypeDef *huart, uint8_t *pData, u
return HAL_ERROR;
}
- /* Process Locked */
__HAL_LOCK(huart);
huart->ErrorCode = HAL_UART_ERROR_NONE;
@@ -1045,7 +1033,7 @@ HAL_StatusTypeDef HAL_UART_Transmit(UART_HandleTypeDef *huart, uint8_t *pData, u
huart->TxXferSize = Size;
huart->TxXferCount = Size;
- /* In case of 9bits/No Parity transfer, pData needs to be handled as a uint16_t pointer */
+ /* In case of 9bits/No Parity transfer, pData needs to be handled as a uint16_t pointer */
if ((huart->Init.WordLength == UART_WORDLENGTH_9B) && (huart->Init.Parity == UART_PARITY_NONE))
{
pdata8bits = NULL;
@@ -1057,6 +1045,8 @@ HAL_StatusTypeDef HAL_UART_Transmit(UART_HandleTypeDef *huart, uint8_t *pData, u
pdata16bits = NULL;
}
+ __HAL_UNLOCK(huart);
+
while (huart->TxXferCount > 0U)
{
if (UART_WaitOnFlagUntilTimeout(huart, UART_FLAG_TXE, RESET, tickstart, Timeout) != HAL_OK)
@@ -1084,9 +1074,6 @@ HAL_StatusTypeDef HAL_UART_Transmit(UART_HandleTypeDef *huart, uint8_t *pData, u
/* At end of Tx process, restore huart->gState to Ready */
huart->gState = HAL_UART_STATE_READY;
- /* Process Unlocked */
- __HAL_UNLOCK(huart);
-
return HAL_OK;
}
else
@@ -1097,9 +1084,12 @@ HAL_StatusTypeDef HAL_UART_Transmit(UART_HandleTypeDef *huart, uint8_t *pData, u
/**
* @brief Receive an amount of data in blocking mode.
+ * @note When UART parity is not enabled (PCE = 0), and Word Length is configured to 9 bits (M1-M0 = 01),
+ * the received data is handled as a set of u16. In this case, Size must indicate the number
+ * of u16 available through pData.
* @param huart UART handle.
- * @param pData Pointer to data buffer.
- * @param Size Amount of data to be received.
+ * @param pData Pointer to data buffer (u8 or u16 data elements).
+ * @param Size Amount of data elements (u8 or u16) to be received.
* @param Timeout Timeout duration.
* @retval HAL status
*/
@@ -1118,7 +1108,6 @@ HAL_StatusTypeDef HAL_UART_Receive(UART_HandleTypeDef *huart, uint8_t *pData, ui
return HAL_ERROR;
}
- /* Process Locked */
__HAL_LOCK(huart);
huart->ErrorCode = HAL_UART_ERROR_NONE;
@@ -1146,6 +1135,8 @@ HAL_StatusTypeDef HAL_UART_Receive(UART_HandleTypeDef *huart, uint8_t *pData, ui
pdata16bits = NULL;
}
+ __HAL_UNLOCK(huart);
+
/* as long as data have to be received */
while (huart->RxXferCount > 0U)
{
@@ -1169,9 +1160,6 @@ HAL_StatusTypeDef HAL_UART_Receive(UART_HandleTypeDef *huart, uint8_t *pData, ui
/* At end of Rx process, restore huart->RxState to Ready */
huart->RxState = HAL_UART_STATE_READY;
- /* Process Unlocked */
- __HAL_UNLOCK(huart);
-
return HAL_OK;
}
else
@@ -1182,9 +1170,12 @@ HAL_StatusTypeDef HAL_UART_Receive(UART_HandleTypeDef *huart, uint8_t *pData, ui
/**
* @brief Send an amount of data in interrupt mode.
+ * @note When UART parity is not enabled (PCE = 0), and Word Length is configured to 9 bits (M1-M0 = 01),
+ * the sent data is handled as a set of u16. In this case, Size must indicate the number
+ * of u16 provided through pData.
* @param huart UART handle.
- * @param pData Pointer to data buffer.
- * @param Size Amount of data to be sent.
+ * @param pData Pointer to data buffer (u8 or u16 data elements).
+ * @param Size Amount of data elements (u8 or u16) to be sent.
* @retval HAL status
*/
HAL_StatusTypeDef HAL_UART_Transmit_IT(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size)
@@ -1197,7 +1188,6 @@ HAL_StatusTypeDef HAL_UART_Transmit_IT(UART_HandleTypeDef *huart, uint8_t *pData
return HAL_ERROR;
}
- /* Process Locked */
__HAL_LOCK(huart);
huart->pTxBuffPtr = pData;
@@ -1218,7 +1208,6 @@ HAL_StatusTypeDef HAL_UART_Transmit_IT(UART_HandleTypeDef *huart, uint8_t *pData
huart->TxISR = UART_TxISR_8BIT;
}
- /* Process Unlocked */
__HAL_UNLOCK(huart);
/* Enable the Transmit Data Register Empty interrupt */
@@ -1234,9 +1223,12 @@ HAL_StatusTypeDef HAL_UART_Transmit_IT(UART_HandleTypeDef *huart, uint8_t *pData
/**
* @brief Receive an amount of data in interrupt mode.
+ * @note When UART parity is not enabled (PCE = 0), and Word Length is configured to 9 bits (M1-M0 = 01),
+ * the received data is handled as a set of u16. In this case, Size must indicate the number
+ * of u16 available through pData.
* @param huart UART handle.
- * @param pData Pointer to data buffer.
- * @param Size Amount of data to be received.
+ * @param pData Pointer to data buffer (u8 or u16 data elements).
+ * @param Size Amount of data elements (u8 or u16) to be received.
* @retval HAL status
*/
HAL_StatusTypeDef HAL_UART_Receive_IT(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size)
@@ -1249,7 +1241,6 @@ HAL_StatusTypeDef HAL_UART_Receive_IT(UART_HandleTypeDef *huart, uint8_t *pData,
return HAL_ERROR;
}
- /* Process Locked */
__HAL_LOCK(huart);
huart->pRxBuffPtr = pData;
@@ -1276,7 +1267,6 @@ HAL_StatusTypeDef HAL_UART_Receive_IT(UART_HandleTypeDef *huart, uint8_t *pData,
huart->RxISR = UART_RxISR_8BIT;
}
- /* Process Unlocked */
__HAL_UNLOCK(huart);
/* Enable the UART Parity Error interrupt and Data Register Not Empty interrupt */
@@ -1292,9 +1282,12 @@ HAL_StatusTypeDef HAL_UART_Receive_IT(UART_HandleTypeDef *huart, uint8_t *pData,
/**
* @brief Send an amount of data in DMA mode.
+ * @note When UART parity is not enabled (PCE = 0), and Word Length is configured to 9 bits (M1-M0 = 01),
+ * the sent data is handled as a set of u16. In this case, Size must indicate the number
+ * of u16 provided through pData.
* @param huart UART handle.
- * @param pData Pointer to data buffer.
- * @param Size Amount of data to be sent.
+ * @param pData Pointer to data buffer (u8 or u16 data elements).
+ * @param Size Amount of data elements (u8 or u16) to be sent.
* @retval HAL status
*/
HAL_StatusTypeDef HAL_UART_Transmit_DMA(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size)
@@ -1307,7 +1300,6 @@ HAL_StatusTypeDef HAL_UART_Transmit_DMA(UART_HandleTypeDef *huart, uint8_t *pDat
return HAL_ERROR;
}
- /* Process Locked */
__HAL_LOCK(huart);
huart->pTxBuffPtr = pData;
@@ -1337,7 +1329,6 @@ HAL_StatusTypeDef HAL_UART_Transmit_DMA(UART_HandleTypeDef *huart, uint8_t *pDat
/* Set error code to DMA */
huart->ErrorCode = HAL_UART_ERROR_DMA;
- /* Process Unlocked */
__HAL_UNLOCK(huart);
/* Restore huart->gState to ready */
@@ -1349,7 +1340,6 @@ HAL_StatusTypeDef HAL_UART_Transmit_DMA(UART_HandleTypeDef *huart, uint8_t *pDat
/* Clear the TC flag in the ICR register */
__HAL_UART_CLEAR_FLAG(huart, UART_CLEAR_TCF);
- /* Process Unlocked */
__HAL_UNLOCK(huart);
/* Enable the DMA transfer for transmit request by setting the DMAT bit
@@ -1368,9 +1358,12 @@ HAL_StatusTypeDef HAL_UART_Transmit_DMA(UART_HandleTypeDef *huart, uint8_t *pDat
* @brief Receive an amount of data in DMA mode.
* @note When the UART parity is enabled (PCE = 1), the received data contain
* the parity bit (MSB position).
+ * @note When UART parity is not enabled (PCE = 0), and Word Length is configured to 9 bits (M1-M0 = 01),
+ * the received data is handled as a set of u16. In this case, Size must indicate the number
+ * of u16 available through pData.
* @param huart UART handle.
- * @param pData Pointer to data buffer.
- * @param Size Amount of data to be received.
+ * @param pData Pointer to data buffer (u8 or u16 data elements).
+ * @param Size Amount of data elements (u8 or u16) to be received.
* @retval HAL status
*/
HAL_StatusTypeDef HAL_UART_Receive_DMA(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size)
@@ -1383,7 +1376,6 @@ HAL_StatusTypeDef HAL_UART_Receive_DMA(UART_HandleTypeDef *huart, uint8_t *pData
return HAL_ERROR;
}
- /* Process Locked */
__HAL_LOCK(huart);
huart->pRxBuffPtr = pData;
@@ -1412,7 +1404,6 @@ HAL_StatusTypeDef HAL_UART_Receive_DMA(UART_HandleTypeDef *huart, uint8_t *pData
/* Set error code to DMA */
huart->ErrorCode = HAL_UART_ERROR_DMA;
- /* Process Unlocked */
__HAL_UNLOCK(huart);
/* Restore huart->gState to ready */
@@ -1421,7 +1412,6 @@ HAL_StatusTypeDef HAL_UART_Receive_DMA(UART_HandleTypeDef *huart, uint8_t *pData
return HAL_ERROR;
}
}
- /* Process Unlocked */
__HAL_UNLOCK(huart);
/* Enable the UART Parity Error Interrupt */
@@ -1452,7 +1442,6 @@ HAL_StatusTypeDef HAL_UART_DMAPause(UART_HandleTypeDef *huart)
const HAL_UART_StateTypeDef gstate = huart->gState;
const HAL_UART_StateTypeDef rxstate = huart->RxState;
- /* Process Locked */
__HAL_LOCK(huart);
if ((HAL_IS_BIT_SET(huart->Instance->CR3, USART_CR3_DMAT)) &&
@@ -1472,7 +1461,6 @@ HAL_StatusTypeDef HAL_UART_DMAPause(UART_HandleTypeDef *huart)
CLEAR_BIT(huart->Instance->CR3, USART_CR3_DMAR);
}
- /* Process Unlocked */
__HAL_UNLOCK(huart);
return HAL_OK;
@@ -1485,7 +1473,6 @@ HAL_StatusTypeDef HAL_UART_DMAPause(UART_HandleTypeDef *huart)
*/
HAL_StatusTypeDef HAL_UART_DMAResume(UART_HandleTypeDef *huart)
{
- /* Process Locked */
__HAL_LOCK(huart);
if (huart->gState == HAL_UART_STATE_BUSY_TX)
@@ -1506,7 +1493,6 @@ HAL_StatusTypeDef HAL_UART_DMAResume(UART_HandleTypeDef *huart)
SET_BIT(huart->Instance->CR3, USART_CR3_DMAR);
}
- /* Process Unlocked */
__HAL_UNLOCK(huart);
return HAL_OK;
@@ -1591,7 +1577,7 @@ HAL_StatusTypeDef HAL_UART_DMAStop(UART_HandleTypeDef *huart)
* - Set handle State to READY
* @note This procedure is executed in blocking mode : when exiting function, Abort is considered as completed.
* @retval HAL status
-*/
+ */
HAL_StatusTypeDef HAL_UART_Abort(UART_HandleTypeDef *huart)
{
/* Disable TXEIE, TCIE, RXNE, PE and ERR (Frame error, noise error, overrun error) interrupts */
@@ -1663,7 +1649,6 @@ HAL_StatusTypeDef HAL_UART_Abort(UART_HandleTypeDef *huart)
huart->gState = HAL_UART_STATE_READY;
huart->RxState = HAL_UART_STATE_READY;
- /* Reset Handle ErrorCode to No Error */
huart->ErrorCode = HAL_UART_ERROR_NONE;
return HAL_OK;
@@ -1680,7 +1665,7 @@ HAL_StatusTypeDef HAL_UART_Abort(UART_HandleTypeDef *huart)
* - Set handle State to READY
* @note This procedure is executed in blocking mode : when exiting function, Abort is considered as completed.
* @retval HAL status
-*/
+ */
HAL_StatusTypeDef HAL_UART_AbortTransmit(UART_HandleTypeDef *huart)
{
/* Disable TXEIE and TCIE interrupts */
@@ -1732,7 +1717,7 @@ HAL_StatusTypeDef HAL_UART_AbortTransmit(UART_HandleTypeDef *huart)
* - Set handle State to READY
* @note This procedure is executed in blocking mode : when exiting function, Abort is considered as completed.
* @retval HAL status
-*/
+ */
HAL_StatusTypeDef HAL_UART_AbortReceive(UART_HandleTypeDef *huart)
{
/* Disable RXNE, PE and ERR (Frame error, noise error, overrun error) interrupts */
@@ -1792,7 +1777,7 @@ HAL_StatusTypeDef HAL_UART_AbortReceive(UART_HandleTypeDef *huart)
* @note This procedure is executed in Interrupt mode, meaning that abort procedure could be
* considered as completed only when user abort complete callback is executed (not when exiting function).
* @retval HAL status
-*/
+ */
HAL_StatusTypeDef HAL_UART_Abort_IT(UART_HandleTypeDef *huart)
{
uint32_t abortcplt = 1U;
@@ -1931,7 +1916,7 @@ HAL_StatusTypeDef HAL_UART_Abort_IT(UART_HandleTypeDef *huart)
* @note This procedure is executed in Interrupt mode, meaning that abort procedure could be
* considered as completed only when user abort complete callback is executed (not when exiting function).
* @retval HAL status
-*/
+ */
HAL_StatusTypeDef HAL_UART_AbortTransmit_IT(UART_HandleTypeDef *huart)
{
/* Disable interrupts */
@@ -2015,7 +2000,7 @@ HAL_StatusTypeDef HAL_UART_AbortTransmit_IT(UART_HandleTypeDef *huart)
* @note This procedure is executed in Interrupt mode, meaning that abort procedure could be
* considered as completed only when user abort complete callback is executed (not when exiting function).
* @retval HAL status
-*/
+ */
HAL_StatusTypeDef HAL_UART_AbortReceive_IT(UART_HandleTypeDef *huart)
{
/* Disable RXNE, PE and ERR (Frame error, noise error, overrun error) interrupts */
@@ -2110,7 +2095,7 @@ void HAL_UART_IRQHandler(UART_HandleTypeDef *huart)
uint32_t errorcode;
/* If no error occurs */
- errorflags = (isrflags & (uint32_t)(USART_ISR_PE | USART_ISR_FE | USART_ISR_ORE | USART_ISR_NE));
+ errorflags = (isrflags & (uint32_t)(USART_ISR_PE | USART_ISR_FE | USART_ISR_ORE | USART_ISR_NE | USART_ISR_RTOF));
if (errorflags == 0U)
{
/* UART in mode Receiver ---------------------------------------------------*/
@@ -2164,10 +2149,18 @@ void HAL_UART_IRQHandler(UART_HandleTypeDef *huart)
huart->ErrorCode |= HAL_UART_ERROR_ORE;
}
- /* Call UART Error Call back function if need be --------------------------*/
+ /* UART Receiver Timeout interrupt occurred ---------------------------------*/
+ if (((isrflags & USART_ISR_RTOF) != 0U) && ((cr1its & USART_CR1_RTOIE) != 0U))
+ {
+ __HAL_UART_CLEAR_FLAG(huart, UART_CLEAR_RTOF);
+
+ huart->ErrorCode |= HAL_UART_ERROR_RTO;
+ }
+
+ /* Call UART Error Call back function if need be ----------------------------*/
if (huart->ErrorCode != HAL_UART_ERROR_NONE)
{
- /* UART in mode Receiver ---------------------------------------------------*/
+ /* UART in mode Receiver --------------------------------------------------*/
if (((isrflags & USART_ISR_RXNE) != 0U)
&& ((cr1its & USART_CR1_RXNEIE) != 0U))
{
@@ -2177,11 +2170,14 @@ void HAL_UART_IRQHandler(UART_HandleTypeDef *huart)
}
}
- /* If Overrun error occurs, or if any error occurs in DMA mode reception,
- consider error as blocking */
+ /* If Error is to be considered as blocking :
+ - Receiver Timeout error in Reception
+ - Overrun error in Reception
+ - any error occurs in DMA mode reception
+ */
errorcode = huart->ErrorCode;
if ((HAL_IS_BIT_SET(huart->Instance->CR3, USART_CR3_DMAR)) ||
- ((errorcode & HAL_UART_ERROR_ORE) != 0U))
+ ((errorcode & (HAL_UART_ERROR_RTO | HAL_UART_ERROR_ORE)) != 0U))
{
/* Blocking error : transfer is aborted
Set the UART state ready to be able to start again the process,
@@ -2249,6 +2245,26 @@ void HAL_UART_IRQHandler(UART_HandleTypeDef *huart)
return;
} /* End if some error occurs */
+#if defined(USART_CR1_UESM)
+
+ /* UART wakeup from Stop mode interrupt occurred ---------------------------*/
+ if (((isrflags & USART_ISR_WUF) != 0U) && ((cr3its & USART_CR3_WUFIE) != 0U))
+ {
+ __HAL_UART_CLEAR_FLAG(huart, UART_CLEAR_WUF);
+
+ /* UART Rx state is not reset as a reception process might be ongoing.
+ If UART handle state fields need to be reset to READY, this could be done in Wakeup callback */
+
+#if (USE_HAL_UART_REGISTER_CALLBACKS == 1)
+ /* Call registered Wakeup Callback */
+ huart->WakeupCallback(huart);
+#else
+ /* Call legacy weak Wakeup Callback */
+ HAL_UARTEx_WakeupCallback(huart);
+#endif /* USE_HAL_UART_REGISTER_CALLBACKS */
+ return;
+ }
+#endif /* USART_CR1_UESM */
/* UART in mode Transmitter ------------------------------------------------*/
if (((isrflags & USART_ISR_TXE) != 0U)
@@ -2390,6 +2406,23 @@ __weak void HAL_UART_AbortReceiveCpltCallback(UART_HandleTypeDef *huart)
*/
}
+#if defined(USART_CR1_UESM)
+/**
+ * @brief UART wakeup from Stop mode callback.
+ * @param huart UART handle.
+ * @retval None
+ */
+__weak void HAL_UARTEx_WakeupCallback(UART_HandleTypeDef *huart)
+{
+ /* Prevent unused argument(s) compilation warning */
+ UNUSED(huart);
+
+ /* NOTE : This function should not be modified, when the callback is needed,
+ the HAL_UARTEx_WakeupCallback can be implemented in the user file.
+ */
+}
+
+#endif /* USART_CR1_UESM */
/**
* @}
*/
@@ -2403,6 +2436,9 @@ __weak void HAL_UART_AbortReceiveCpltCallback(UART_HandleTypeDef *huart)
===============================================================================
[..]
This subsection provides a set of functions allowing to control the UART.
+ (+) HAL_UART_ReceiverTimeout_Config() API allows to configure the receiver timeout value on the fly
+ (+) HAL_UART_EnableReceiverTimeout() API enables the receiver timeout feature
+ (+) HAL_UART_DisableReceiverTimeout() API disables the receiver timeout feature
(+) HAL_MultiProcessor_EnableMuteMode() API enables mute mode
(+) HAL_MultiProcessor_DisableMuteMode() API disables mute mode
(+) HAL_MultiProcessor_EnterMuteMode() API enters mute mode
@@ -2416,6 +2452,82 @@ __weak void HAL_UART_AbortReceiveCpltCallback(UART_HandleTypeDef *huart)
* @{
*/
+/**
+ * @brief Update on the fly the receiver timeout value in RTOR register.
+ * @param huart Pointer to a UART_HandleTypeDef structure that contains
+ * the configuration information for the specified UART module.
+ * @param TimeoutValue receiver timeout value in number of baud blocks. The timeout
+ * value must be less or equal to 0x0FFFFFFFF.
+ * @retval None
+ */
+void HAL_UART_ReceiverTimeout_Config(UART_HandleTypeDef *huart, uint32_t TimeoutValue)
+{
+ assert_param(IS_UART_RECEIVER_TIMEOUT_VALUE(TimeoutValue));
+ MODIFY_REG(huart->Instance->RTOR, USART_RTOR_RTO, TimeoutValue);
+}
+
+/**
+ * @brief Enable the UART receiver timeout feature.
+ * @param huart Pointer to a UART_HandleTypeDef structure that contains
+ * the configuration information for the specified UART module.
+ * @retval HAL status
+ */
+HAL_StatusTypeDef HAL_UART_EnableReceiverTimeout(UART_HandleTypeDef *huart)
+{
+ if (huart->gState == HAL_UART_STATE_READY)
+ {
+ /* Process Locked */
+ __HAL_LOCK(huart);
+
+ huart->gState = HAL_UART_STATE_BUSY;
+
+ /* Set the USART RTOEN bit */
+ SET_BIT(huart->Instance->CR2, USART_CR2_RTOEN);
+
+ huart->gState = HAL_UART_STATE_READY;
+
+ /* Process Unlocked */
+ __HAL_UNLOCK(huart);
+
+ return HAL_OK;
+ }
+ else
+ {
+ return HAL_BUSY;
+ }
+}
+
+/**
+ * @brief Disable the UART receiver timeout feature.
+ * @param huart Pointer to a UART_HandleTypeDef structure that contains
+ * the configuration information for the specified UART module.
+ * @retval HAL status
+ */
+HAL_StatusTypeDef HAL_UART_DisableReceiverTimeout(UART_HandleTypeDef *huart)
+{
+ if (huart->gState == HAL_UART_STATE_READY)
+ {
+ /* Process Locked */
+ __HAL_LOCK(huart);
+
+ huart->gState = HAL_UART_STATE_BUSY;
+
+ /* Clear the USART RTOEN bit */
+ CLEAR_BIT(huart->Instance->CR2, USART_CR2_RTOEN);
+
+ huart->gState = HAL_UART_STATE_READY;
+
+ /* Process Unlocked */
+ __HAL_UNLOCK(huart);
+
+ return HAL_OK;
+ }
+ else
+ {
+ return HAL_BUSY;
+ }
+}
+
/**
* @brief Enable UART in mute mode (does not mean UART enters mute mode;
* to enter mute mode, HAL_MultiProcessor_EnterMuteMode() API must be called).
@@ -2424,7 +2536,6 @@ __weak void HAL_UART_AbortReceiveCpltCallback(UART_HandleTypeDef *huart)
*/
HAL_StatusTypeDef HAL_MultiProcessor_EnableMuteMode(UART_HandleTypeDef *huart)
{
- /* Process Locked */
__HAL_LOCK(huart);
huart->gState = HAL_UART_STATE_BUSY;
@@ -2445,7 +2556,6 @@ HAL_StatusTypeDef HAL_MultiProcessor_EnableMuteMode(UART_HandleTypeDef *huart)
*/
HAL_StatusTypeDef HAL_MultiProcessor_DisableMuteMode(UART_HandleTypeDef *huart)
{
- /* Process Locked */
__HAL_LOCK(huart);
huart->gState = HAL_UART_STATE_BUSY;
@@ -2476,7 +2586,6 @@ void HAL_MultiProcessor_EnterMuteMode(UART_HandleTypeDef *huart)
*/
HAL_StatusTypeDef HAL_HalfDuplex_EnableTransmitter(UART_HandleTypeDef *huart)
{
- /* Process Locked */
__HAL_LOCK(huart);
huart->gState = HAL_UART_STATE_BUSY;
@@ -2488,7 +2597,6 @@ HAL_StatusTypeDef HAL_HalfDuplex_EnableTransmitter(UART_HandleTypeDef *huart)
huart->gState = HAL_UART_STATE_READY;
- /* Process Unlocked */
__HAL_UNLOCK(huart);
return HAL_OK;
@@ -2501,7 +2609,6 @@ HAL_StatusTypeDef HAL_HalfDuplex_EnableTransmitter(UART_HandleTypeDef *huart)
*/
HAL_StatusTypeDef HAL_HalfDuplex_EnableReceiver(UART_HandleTypeDef *huart)
{
- /* Process Locked */
__HAL_LOCK(huart);
huart->gState = HAL_UART_STATE_BUSY;
@@ -2513,7 +2620,6 @@ HAL_StatusTypeDef HAL_HalfDuplex_EnableReceiver(UART_HandleTypeDef *huart)
huart->gState = HAL_UART_STATE_READY;
- /* Process Unlocked */
__HAL_UNLOCK(huart);
return HAL_OK;
@@ -2530,7 +2636,6 @@ HAL_StatusTypeDef HAL_LIN_SendBreak(UART_HandleTypeDef *huart)
/* Check the parameters */
assert_param(IS_UART_LIN_INSTANCE(huart->Instance));
- /* Process Locked */
__HAL_LOCK(huart);
huart->gState = HAL_UART_STATE_BUSY;
@@ -2540,7 +2645,6 @@ HAL_StatusTypeDef HAL_LIN_SendBreak(UART_HandleTypeDef *huart)
huart->gState = HAL_UART_STATE_READY;
- /* Process Unlocked */
__HAL_UNLOCK(huart);
return HAL_OK;
@@ -2551,8 +2655,8 @@ HAL_StatusTypeDef HAL_LIN_SendBreak(UART_HandleTypeDef *huart)
*/
/** @defgroup UART_Exported_Functions_Group4 Peripheral State and Error functions
- * @brief UART Peripheral State functions
- *
+ * @brief UART Peripheral State functions
+ *
@verbatim
==============================================================================
##### Peripheral State and Error functions #####
@@ -2574,7 +2678,8 @@ HAL_StatusTypeDef HAL_LIN_SendBreak(UART_HandleTypeDef *huart)
*/
HAL_UART_StateTypeDef HAL_UART_GetState(UART_HandleTypeDef *huart)
{
- uint32_t temp1, temp2;
+ uint32_t temp1;
+ uint32_t temp2;
temp1 = huart->gState;
temp2 = huart->RxState;
@@ -2586,7 +2691,7 @@ HAL_UART_StateTypeDef HAL_UART_GetState(UART_HandleTypeDef *huart)
* @param huart Pointer to a UART_HandleTypeDef structure that contains
* the configuration information for the specified UART.
* @retval UART Error Code
-*/
+ */
uint32_t HAL_UART_GetError(UART_HandleTypeDef *huart)
{
return huart->ErrorCode;
@@ -2620,6 +2725,9 @@ void UART_InitCallbacksToDefault(UART_HandleTypeDef *huart)
huart->AbortCpltCallback = HAL_UART_AbortCpltCallback; /* Legacy weak AbortCpltCallback */
huart->AbortTransmitCpltCallback = HAL_UART_AbortTransmitCpltCallback; /* Legacy weak AbortTransmitCpltCallback */
huart->AbortReceiveCpltCallback = HAL_UART_AbortReceiveCpltCallback; /* Legacy weak AbortReceiveCpltCallback */
+#if defined(USART_CR1_UESM)
+ huart->WakeupCallback = HAL_UARTEx_WakeupCallback; /* Legacy weak WakeupCallback */
+#endif /* USART_CR1_UESM */
}
#endif /* USE_HAL_UART_REGISTER_CALLBACKS */
@@ -2636,6 +2744,7 @@ HAL_StatusTypeDef UART_SetConfig(UART_HandleTypeDef *huart)
UART_ClockSourceTypeDef clocksource;
uint32_t usartdiv = 0x00000000U;
HAL_StatusTypeDef ret = HAL_OK;
+ uint32_t pclk;
/* Check the parameters */
assert_param(IS_UART_BAUDRATE(huart->Init.BaudRate));
@@ -2683,21 +2792,23 @@ HAL_StatusTypeDef UART_SetConfig(UART_HandleTypeDef *huart)
switch (clocksource)
{
case UART_CLOCKSOURCE_PCLK1:
- usartdiv = (uint16_t)(UART_DIV_SAMPLING8(HAL_RCC_GetPCLK1Freq(), huart->Init.BaudRate));
+ pclk = HAL_RCC_GetPCLK1Freq();
+ usartdiv = (uint16_t)(UART_DIV_SAMPLING8(pclk, huart->Init.BaudRate));
break;
case UART_CLOCKSOURCE_PCLK2:
- usartdiv = (uint16_t)(UART_DIV_SAMPLING8(HAL_RCC_GetPCLK2Freq(), huart->Init.BaudRate));
+ pclk = HAL_RCC_GetPCLK2Freq();
+ usartdiv = (uint16_t)(UART_DIV_SAMPLING8(pclk, huart->Init.BaudRate));
break;
case UART_CLOCKSOURCE_HSI:
usartdiv = (uint16_t)(UART_DIV_SAMPLING8(HSI_VALUE, huart->Init.BaudRate));
break;
case UART_CLOCKSOURCE_SYSCLK:
- usartdiv = (uint16_t)(UART_DIV_SAMPLING8(HAL_RCC_GetSysClockFreq(), huart->Init.BaudRate));
+ pclk = HAL_RCC_GetSysClockFreq();
+ usartdiv = (uint16_t)(UART_DIV_SAMPLING8(pclk, huart->Init.BaudRate));
break;
case UART_CLOCKSOURCE_LSE:
usartdiv = (uint16_t)(UART_DIV_SAMPLING8(LSE_VALUE, huart->Init.BaudRate));
break;
- case UART_CLOCKSOURCE_UNDEFINED:
default:
ret = HAL_ERROR;
break;
@@ -2720,21 +2831,23 @@ HAL_StatusTypeDef UART_SetConfig(UART_HandleTypeDef *huart)
switch (clocksource)
{
case UART_CLOCKSOURCE_PCLK1:
- usartdiv = (uint16_t)(UART_DIV_SAMPLING16(HAL_RCC_GetPCLK1Freq(), huart->Init.BaudRate));
+ pclk = HAL_RCC_GetPCLK1Freq();
+ usartdiv = (uint16_t)(UART_DIV_SAMPLING16(pclk, huart->Init.BaudRate));
break;
case UART_CLOCKSOURCE_PCLK2:
- usartdiv = (uint16_t)(UART_DIV_SAMPLING16(HAL_RCC_GetPCLK2Freq(), huart->Init.BaudRate));
+ pclk = HAL_RCC_GetPCLK2Freq();
+ usartdiv = (uint16_t)(UART_DIV_SAMPLING16(pclk, huart->Init.BaudRate));
break;
case UART_CLOCKSOURCE_HSI:
usartdiv = (uint16_t)(UART_DIV_SAMPLING16(HSI_VALUE, huart->Init.BaudRate));
break;
case UART_CLOCKSOURCE_SYSCLK:
- usartdiv = (uint16_t)(UART_DIV_SAMPLING16(HAL_RCC_GetSysClockFreq(), huart->Init.BaudRate));
+ pclk = HAL_RCC_GetSysClockFreq();
+ usartdiv = (uint16_t)(UART_DIV_SAMPLING16(pclk, huart->Init.BaudRate));
break;
case UART_CLOCKSOURCE_LSE:
usartdiv = (uint16_t)(UART_DIV_SAMPLING16(LSE_VALUE, huart->Init.BaudRate));
break;
- case UART_CLOCKSOURCE_UNDEFINED:
default:
ret = HAL_ERROR;
break;
@@ -2858,12 +2971,24 @@ HAL_StatusTypeDef UART_CheckIdleState(UART_HandleTypeDef *huart)
return HAL_TIMEOUT;
}
}
+#if defined(USART_ISR_REACK)
+
+ /* Check if the Receiver is enabled */
+ if ((huart->Instance->CR1 & USART_CR1_RE) == USART_CR1_RE)
+ {
+ /* Wait until REACK flag is set */
+ if (UART_WaitOnFlagUntilTimeout(huart, USART_ISR_REACK, RESET, tickstart, HAL_UART_TIMEOUT_VALUE) != HAL_OK)
+ {
+ /* Timeout occurred */
+ return HAL_TIMEOUT;
+ }
+ }
+#endif
/* Initialize the UART State */
huart->gState = HAL_UART_STATE_READY;
huart->RxState = HAL_UART_STATE_READY;
- /* Process Unlocked */
__HAL_UNLOCK(huart);
return HAL_OK;
@@ -2878,7 +3003,8 @@ HAL_StatusTypeDef UART_CheckIdleState(UART_HandleTypeDef *huart)
* @param Timeout Timeout duration
* @retval HAL status
*/
-HAL_StatusTypeDef UART_WaitOnFlagUntilTimeout(UART_HandleTypeDef *huart, uint32_t Flag, FlagStatus Status, uint32_t Tickstart, uint32_t Timeout)
+HAL_StatusTypeDef UART_WaitOnFlagUntilTimeout(UART_HandleTypeDef *huart, uint32_t Flag, FlagStatus Status,
+ uint32_t Tickstart, uint32_t Timeout)
{
/* Wait until flag is set */
while ((__HAL_UART_GET_FLAG(huart, Flag) ? SET : RESET) == Status)
@@ -2895,11 +3021,32 @@ HAL_StatusTypeDef UART_WaitOnFlagUntilTimeout(UART_HandleTypeDef *huart, uint32_
huart->gState = HAL_UART_STATE_READY;
huart->RxState = HAL_UART_STATE_READY;
- /* Process Unlocked */
__HAL_UNLOCK(huart);
return HAL_TIMEOUT;
}
+
+ if (READ_BIT(huart->Instance->CR1, USART_CR1_RE) != 0U)
+ {
+ if (__HAL_UART_GET_FLAG(huart, UART_FLAG_RTOF) == SET)
+ {
+ /* Clear Receiver Timeout flag*/
+ __HAL_UART_CLEAR_FLAG(huart, UART_CLEAR_RTOF);
+
+ /* Disable TXE, RXNE, PE and ERR (Frame error, noise error, overrun error) interrupts for the interrupt process */
+ CLEAR_BIT(huart->Instance->CR1, (USART_CR1_RXNEIE | USART_CR1_PEIE | USART_CR1_TXEIE));
+ CLEAR_BIT(huart->Instance->CR3, USART_CR3_EIE);
+
+ huart->gState = HAL_UART_STATE_READY;
+ huart->RxState = HAL_UART_STATE_READY;
+ huart->ErrorCode = HAL_UART_ERROR_RTO;
+
+ /* Process Unlocked */
+ __HAL_UNLOCK(huart);
+
+ return HAL_TIMEOUT;
+ }
+ }
}
}
return HAL_OK;
diff --git a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_TrueStudio/Prog/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_uart_ex.c b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_TrueStudio/Prog/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_uart_ex.c
index 415fb56b..fcbcf4fd 100644
--- a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_TrueStudio/Prog/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_uart_ex.c
+++ b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_TrueStudio/Prog/lib/STM32F7xx_HAL_Driver/Src/stm32f7xx_hal_uart_ex.c
@@ -57,6 +57,9 @@
/** @defgroup UARTEx_Private_Functions UARTEx Private Functions
* @{
*/
+#if defined(USART_CR1_UESM)
+static void UARTEx_Wakeup_AddressConfig(UART_HandleTypeDef *huart, UART_WakeUpTypeDef WakeUpSelection);
+#endif /* USART_CR1_UESM */
/**
* @}
*/
@@ -144,7 +147,8 @@
* oversampling rate).
* @retval HAL status
*/
-HAL_StatusTypeDef HAL_RS485Ex_Init(UART_HandleTypeDef *huart, uint32_t Polarity, uint32_t AssertionTime, uint32_t DeassertionTime)
+HAL_StatusTypeDef HAL_RS485Ex_Init(UART_HandleTypeDef *huart, uint32_t Polarity, uint32_t AssertionTime,
+ uint32_t DeassertionTime)
{
uint32_t temp;
@@ -224,42 +228,74 @@ HAL_StatusTypeDef HAL_RS485Ex_Init(UART_HandleTypeDef *huart, uint32_t Polarity,
* @}
*/
-/** @defgroup UARTEx_Exported_Functions_Group2 IO operation functions
- * @brief Extended functions
- *
-@verbatim
- ===============================================================================
- ##### IO operation functions #####
- ===============================================================================
- This subsection provides a set of Wakeup and FIFO mode related callback functions.
-
-@endverbatim
- * @{
- */
-
-
-/**
- * @}
- */
/** @defgroup UARTEx_Exported_Functions_Group3 Peripheral Control functions
* @brief Extended Peripheral Control functions
- *
+ *
@verbatim
===============================================================================
##### Peripheral Control functions #####
===============================================================================
[..] This section provides the following functions:
+ (+) HAL_UARTEx_EnableClockStopMode() API enables the UART clock (HSI or LSE only) during stop mode
+ (+) HAL_UARTEx_DisableClockStopMode() API disables the above functionality
(+) HAL_MultiProcessorEx_AddressLength_Set() API optionally sets the UART node address
detection length to more than 4 bits for multiprocessor address mark wake up.
+#if defined(USART_CR1_UESM)
+ (+) HAL_UARTEx_StopModeWakeUpSourceConfig() API defines the wake-up from stop mode
+ trigger: address match, Start Bit detection or RXNE bit status.
+ (+) HAL_UARTEx_EnableStopMode() API enables the UART to wake up the MCU from stop mode
+ (+) HAL_UARTEx_DisableStopMode() API disables the above functionality
+#endif
@endverbatim
* @{
*/
+#if defined(USART_CR3_UCESM)
+/**
+ * @brief Keep UART Clock enabled when in Stop Mode.
+ * @note When the USART clock source is configured to be LSE or HSI, it is possible to keep enabled
+ * this clock during STOP mode by setting the UCESM bit in USART_CR3 control register.
+ * @note When LPUART is used to wakeup from stop with LSE is selected as LPUART clock source,
+ * and desired baud rate is 9600 baud, the bit UCESM bit in LPUART_CR3 control register must be set.
+ * @param huart UART handle.
+ * @retval HAL status
+ */
+HAL_StatusTypeDef HAL_UARTEx_EnableClockStopMode(UART_HandleTypeDef *huart)
+{
+ /* Process Locked */
+ __HAL_LOCK(huart);
+ /* Set UCESM bit */
+ SET_BIT(huart->Instance->CR3, USART_CR3_UCESM);
+ /* Process Unlocked */
+ __HAL_UNLOCK(huart);
+ return HAL_OK;
+}
+
+/**
+ * @brief Disable UART Clock when in Stop Mode.
+ * @param huart UART handle.
+ * @retval HAL status
+ */
+HAL_StatusTypeDef HAL_UARTEx_DisableClockStopMode(UART_HandleTypeDef *huart)
+{
+ /* Process Locked */
+ __HAL_LOCK(huart);
+
+ /* Clear UCESM bit */
+ CLEAR_BIT(huart->Instance->CR3, USART_CR3_UCESM);
+
+ /* Process Unlocked */
+ __HAL_UNLOCK(huart);
+
+ return HAL_OK;
+}
+
+#endif /* USART_CR3_UCESM */
/**
* @brief By default in multiprocessor mode, when the wake up method is set
* to address mark, the UART handles only 4-bit long addresses detection;
@@ -299,8 +335,108 @@ HAL_StatusTypeDef HAL_MultiProcessorEx_AddressLength_Set(UART_HandleTypeDef *hua
return (UART_CheckIdleState(huart));
}
+#if defined(USART_CR1_UESM)
+/**
+ * @brief Set Wakeup from Stop mode interrupt flag selection.
+ * @note It is the application responsibility to enable the interrupt used as
+ * usart_wkup interrupt source before entering low-power mode.
+ * @param huart UART handle.
+ * @param WakeUpSelection Address match, Start Bit detection or RXNE/RXFNE bit status.
+ * This parameter can be one of the following values:
+ * @arg @ref UART_WAKEUP_ON_ADDRESS
+ * @arg @ref UART_WAKEUP_ON_STARTBIT
+ * @arg @ref UART_WAKEUP_ON_READDATA_NONEMPTY
+ * @retval HAL status
+ */
+HAL_StatusTypeDef HAL_UARTEx_StopModeWakeUpSourceConfig(UART_HandleTypeDef *huart, UART_WakeUpTypeDef WakeUpSelection)
+{
+ HAL_StatusTypeDef status = HAL_OK;
+ uint32_t tickstart;
+ /* check the wake-up from stop mode UART instance */
+ assert_param(IS_UART_WAKEUP_FROMSTOP_INSTANCE(huart->Instance));
+ /* check the wake-up selection parameter */
+ assert_param(IS_UART_WAKEUP_SELECTION(WakeUpSelection.WakeUpEvent));
+ /* Process Locked */
+ __HAL_LOCK(huart);
+
+ huart->gState = HAL_UART_STATE_BUSY;
+
+ /* Disable the Peripheral */
+ __HAL_UART_DISABLE(huart);
+
+ /* Set the wake-up selection scheme */
+ MODIFY_REG(huart->Instance->CR3, USART_CR3_WUS, WakeUpSelection.WakeUpEvent);
+
+ if (WakeUpSelection.WakeUpEvent == UART_WAKEUP_ON_ADDRESS)
+ {
+ UARTEx_Wakeup_AddressConfig(huart, WakeUpSelection);
+ }
+
+ /* Enable the Peripheral */
+ __HAL_UART_ENABLE(huart);
+
+ /* Init tickstart for timeout managment*/
+ tickstart = HAL_GetTick();
+
+ /* Wait until REACK flag is set */
+ if (UART_WaitOnFlagUntilTimeout(huart, USART_ISR_REACK, RESET, tickstart, HAL_UART_TIMEOUT_VALUE) != HAL_OK)
+ {
+ status = HAL_TIMEOUT;
+ }
+ else
+ {
+ /* Initialize the UART State */
+ huart->gState = HAL_UART_STATE_READY;
+ }
+
+ /* Process Unlocked */
+ __HAL_UNLOCK(huart);
+
+ return status;
+}
+
+/**
+ * @brief Enable UART Stop Mode.
+ * @note The UART is able to wake up the MCU from Stop 1 mode as long as UART clock is HSI or LSE.
+ * @param huart UART handle.
+ * @retval HAL status
+ */
+HAL_StatusTypeDef HAL_UARTEx_EnableStopMode(UART_HandleTypeDef *huart)
+{
+ /* Process Locked */
+ __HAL_LOCK(huart);
+
+ /* Set UESM bit */
+ SET_BIT(huart->Instance->CR1, USART_CR1_UESM);
+
+ /* Process Unlocked */
+ __HAL_UNLOCK(huart);
+
+ return HAL_OK;
+}
+
+/**
+ * @brief Disable UART Stop Mode.
+ * @param huart UART handle.
+ * @retval HAL status
+ */
+HAL_StatusTypeDef HAL_UARTEx_DisableStopMode(UART_HandleTypeDef *huart)
+{
+ /* Process Locked */
+ __HAL_LOCK(huart);
+
+ /* Clear UESM bit */
+ CLEAR_BIT(huart->Instance->CR1, USART_CR1_UESM);
+
+ /* Process Unlocked */
+ __HAL_UNLOCK(huart);
+
+ return HAL_OK;
+}
+
+#endif /* USART_CR1_UESM */
/**
* @}
*/
@@ -312,6 +448,25 @@ HAL_StatusTypeDef HAL_MultiProcessorEx_AddressLength_Set(UART_HandleTypeDef *hua
/** @addtogroup UARTEx_Private_Functions
* @{
*/
+#if defined(USART_CR1_UESM)
+
+/**
+ * @brief Initialize the UART wake-up from stop mode parameters when triggered by address detection.
+ * @param huart UART handle.
+ * @param WakeUpSelection UART wake up from stop mode parameters.
+ * @retval None
+ */
+static void UARTEx_Wakeup_AddressConfig(UART_HandleTypeDef *huart, UART_WakeUpTypeDef WakeUpSelection)
+{
+ assert_param(IS_UART_ADDRESSLENGTH_DETECT(WakeUpSelection.AddressLength));
+
+ /* Set the USART address length */
+ MODIFY_REG(huart->Instance->CR2, USART_CR2_ADDM7, WakeUpSelection.AddressLength);
+
+ /* Set the USART address node */
+ MODIFY_REG(huart->Instance->CR2, USART_CR2_ADD, ((uint32_t)WakeUpSelection.Address << UART_CR2_ADDRESS_LSB_POS));
+}
+#endif /* USART_CR1_UESM */
/**
* @}
diff --git a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_TrueStudio/Prog/lib/system_stm32f7xx.c b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_TrueStudio/Prog/lib/system_stm32f7xx.c
index cb4e5662..7282bc83 100644
--- a/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_TrueStudio/Prog/lib/system_stm32f7xx.c
+++ b/Target/Demo/ARMCM7_STM32F7_Nucleo_F746ZG_TrueStudio/Prog/lib/system_stm32f7xx.c
@@ -1,278 +1,244 @@
-/**
- ******************************************************************************
- * @file system_stm32f7xx.c
- * @author MCD Application Team
- * @brief CMSIS Cortex-M7 Device Peripheral Access Layer System Source File.
- *
- * This file provides two functions and one global variable to be called from
- * user application:
- * - SystemInit(): This function is called at startup just after reset and
- * before branch to main program. This call is made inside
- * the "startup_stm32f7xx.s" file.
- *
- * - SystemCoreClock variable: Contains the core clock (HCLK), it can be used
- * by the user application to setup the SysTick
- * timer or configure other parameters.
- *
- * - SystemCoreClockUpdate(): Updates the variable SystemCoreClock and must
- * be called whenever the core clock is changed
- * during program execution.
- *
- *
- ******************************************************************************
- * @attention
- *
- * © COPYRIGHT 2016 STMicroelectronics
- *
- * Redistribution and use in source and binary forms, with or without modification,
- * are permitted provided that the following conditions are met:
- * 1. Redistributions of source code must retain the above copyright notice,
- * this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright notice,
- * this list of conditions and the following disclaimer in the documentation
- * and/or other materials provided with the distribution.
- * 3. Neither the name of STMicroelectronics nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
- * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
- * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- ******************************************************************************
- */
-
-/** @addtogroup CMSIS
- * @{
- */
-
-/** @addtogroup stm32f7xx_system
- * @{
- */
-
-/** @addtogroup STM32F7xx_System_Private_Includes
- * @{
- */
-
-#include "stm32f7xx.h"
-
-#if !defined (HSE_VALUE)
- #define HSE_VALUE ((uint32_t)25000000) /*!< Default value of the External oscillator in Hz */
-#endif /* HSE_VALUE */
-
-#if !defined (HSI_VALUE)
- #define HSI_VALUE ((uint32_t)16000000) /*!< Value of the Internal oscillator in Hz*/
-#endif /* HSI_VALUE */
-
-/**
- * @}
- */
-
-/** @addtogroup STM32F7xx_System_Private_TypesDefinitions
- * @{
- */
-
-/**
- * @}
- */
-
-/** @addtogroup STM32F7xx_System_Private_Defines
- * @{
- */
-
-/************************* Miscellaneous Configuration ************************/
-
-/*!< Uncomment the following line if you need to relocate your vector Table in
- Internal SRAM. */
-/* #define VECT_TAB_SRAM */
-#define VECT_TAB_OFFSET 0x00 /*!< Vector Table base offset field.
- This value must be a multiple of 0x200. */
-/******************************************************************************/
-
-/**
- * @}
- */
-
-/** @addtogroup STM32F7xx_System_Private_Macros
- * @{
- */
-
-/**
- * @}
- */
-
-/** @addtogroup STM32F7xx_System_Private_Variables
- * @{
- */
-
- /* This variable is updated in three ways:
- 1) by calling CMSIS function SystemCoreClockUpdate()
- 2) by calling HAL API function HAL_RCC_GetHCLKFreq()
- 3) each time HAL_RCC_ClockConfig() is called to configure the system clock frequency
- Note: If you use this function to configure the system clock; then there
- is no need to call the 2 first functions listed above, since SystemCoreClock
- variable is updated automatically.
- */
- uint32_t SystemCoreClock = 16000000;
- const uint8_t AHBPrescTable[16] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 6, 7, 8, 9};
- const uint8_t APBPrescTable[8] = {0, 0, 0, 0, 1, 2, 3, 4};
-
-/**
- * @}
- */
-
-/** @addtogroup STM32F7xx_System_Private_FunctionPrototypes
- * @{
- */
-
-/**
- * @}
- */
-
-/** @addtogroup STM32F7xx_System_Private_Functions
- * @{
- */
-
-/**
- * @brief Setup the microcontroller system
- * Initialize the Embedded Flash Interface, the PLL and update the
- * SystemFrequency variable.
- * @param None
- * @retval None
- */
-void SystemInit(void)
-{
- /* FPU settings ------------------------------------------------------------*/
- #if (__FPU_PRESENT == 1) && (__FPU_USED == 1)
- SCB->CPACR |= ((3UL << 10*2)|(3UL << 11*2)); /* set CP10 and CP11 Full Access */
- #endif
- /* Reset the RCC clock configuration to the default reset state ------------*/
- /* Set HSION bit */
- RCC->CR |= (uint32_t)0x00000001;
-
- /* Reset CFGR register */
- RCC->CFGR = 0x00000000;
-
- /* Reset HSEON, CSSON and PLLON bits */
- RCC->CR &= (uint32_t)0xFEF6FFFF;
-
- /* Reset PLLCFGR register */
- RCC->PLLCFGR = 0x24003010;
-
- /* Reset HSEBYP bit */
- RCC->CR &= (uint32_t)0xFFFBFFFF;
-
- /* Disable all interrupts */
- RCC->CIR = 0x00000000;
-
- /* Configure the Vector Table location add offset address ------------------*/
-#ifdef VECT_TAB_SRAM
- SCB->VTOR = RAMDTCM_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAM */
-#else
- SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal FLASH */
-#endif
-}
-
-/**
- * @brief Update SystemCoreClock variable according to Clock Register Values.
- * The SystemCoreClock variable contains the core clock (HCLK), it can
- * be used by the user application to setup the SysTick timer or configure
- * other parameters.
- *
- * @note Each time the core clock (HCLK) changes, this function must be called
- * to update SystemCoreClock variable value. Otherwise, any configuration
- * based on this variable will be incorrect.
- *
- * @note - The system frequency computed by this function is not the real
- * frequency in the chip. It is calculated based on the predefined
- * constant and the selected clock source:
- *
- * - If SYSCLK source is HSI, SystemCoreClock will contain the HSI_VALUE(*)
- *
- * - If SYSCLK source is HSE, SystemCoreClock will contain the HSE_VALUE(**)
- *
- * - If SYSCLK source is PLL, SystemCoreClock will contain the HSE_VALUE(**)
- * or HSI_VALUE(*) multiplied/divided by the PLL factors.
- *
- * (*) HSI_VALUE is a constant defined in stm32f7xx_hal_conf.h file (default value
- * 16 MHz) but the real value may vary depending on the variations
- * in voltage and temperature.
- *
- * (**) HSE_VALUE is a constant defined in stm32f7xx_hal_conf.h file (default value
- * 25 MHz), user has to ensure that HSE_VALUE is same as the real
- * frequency of the crystal used. Otherwise, this function may
- * have wrong result.
- *
- * - The result of this function could be not correct when using fractional
- * value for HSE crystal.
- *
- * @param None
- * @retval None
- */
-void SystemCoreClockUpdate(void)
-{
- uint32_t tmp = 0, pllvco = 0, pllp = 2, pllsource = 0, pllm = 2;
-
- /* Get SYSCLK source -------------------------------------------------------*/
- tmp = RCC->CFGR & RCC_CFGR_SWS;
-
- switch (tmp)
- {
- case 0x00: /* HSI used as system clock source */
- SystemCoreClock = HSI_VALUE;
- break;
- case 0x04: /* HSE used as system clock source */
- SystemCoreClock = HSE_VALUE;
- break;
- case 0x08: /* PLL used as system clock source */
-
- /* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N
- SYSCLK = PLL_VCO / PLL_P
- */
- pllsource = (RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC) >> 22;
- pllm = RCC->PLLCFGR & RCC_PLLCFGR_PLLM;
-
- if (pllsource != 0)
- {
- /* HSE used as PLL clock source */
- pllvco = (HSE_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6);
- }
- else
- {
- /* HSI used as PLL clock source */
- pllvco = (HSI_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6);
- }
-
- pllp = (((RCC->PLLCFGR & RCC_PLLCFGR_PLLP) >>16) + 1 ) *2;
- SystemCoreClock = pllvco/pllp;
- break;
- default:
- SystemCoreClock = HSI_VALUE;
- break;
- }
- /* Compute HCLK frequency --------------------------------------------------*/
- /* Get HCLK prescaler */
- tmp = AHBPrescTable[((RCC->CFGR & RCC_CFGR_HPRE) >> 4)];
- /* HCLK frequency */
- SystemCoreClock >>= tmp;
-}
-
-/**
- * @}
- */
-
-/**
- * @}
- */
-
-/**
- * @}
- */
-/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
+/**
+ ******************************************************************************
+ * @file system_stm32f7xx.c
+ * @author MCD Application Team
+ * @brief CMSIS Cortex-M7 Device Peripheral Access Layer System Source File.
+ *
+ * This file provides two functions and one global variable to be called from
+ * user application:
+ * - SystemInit(): This function is called at startup just after reset and
+ * before branch to main program. This call is made inside
+ * the "startup_stm32f7xx.s" file.
+ *
+ * - SystemCoreClock variable: Contains the core clock (HCLK), it can be used
+ * by the user application to setup the SysTick
+ * timer or configure other parameters.
+ *
+ * - SystemCoreClockUpdate(): Updates the variable SystemCoreClock and must
+ * be called whenever the core clock is changed
+ * during program execution.
+ *
+ *
+ ******************************************************************************
+ * @attention
+ *
+ * © Copyright (c) 2016 STMicroelectronics.
+ * All rights reserved.
+ *
+ * This software component is licensed by ST under BSD 3-Clause license,
+ * the "License"; You may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at:
+ * opensource.org/licenses/BSD-3-Clause
+ *
+ ******************************************************************************
+ */
+
+/** @addtogroup CMSIS
+ * @{
+ */
+
+/** @addtogroup stm32f7xx_system
+ * @{
+ */
+
+/** @addtogroup STM32F7xx_System_Private_Includes
+ * @{
+ */
+
+#include "stm32f7xx.h"
+
+#if !defined (HSE_VALUE)
+ #define HSE_VALUE ((uint32_t)25000000) /*!< Default value of the External oscillator in Hz */
+#endif /* HSE_VALUE */
+
+#if !defined (HSI_VALUE)
+ #define HSI_VALUE ((uint32_t)16000000) /*!< Value of the Internal oscillator in Hz*/
+#endif /* HSI_VALUE */
+
+/**
+ * @}
+ */
+
+/** @addtogroup STM32F7xx_System_Private_TypesDefinitions
+ * @{
+ */
+
+/**
+ * @}
+ */
+
+/** @addtogroup STM32F7xx_System_Private_Defines
+ * @{
+ */
+
+/************************* Miscellaneous Configuration ************************/
+
+/*!< Uncomment the following line if you need to relocate your vector Table in
+ Internal SRAM. */
+/* #define VECT_TAB_SRAM */
+#define VECT_TAB_OFFSET 0x00 /*!< Vector Table base offset field.
+ This value must be a multiple of 0x200. */
+/******************************************************************************/
+
+/**
+ * @}
+ */
+
+/** @addtogroup STM32F7xx_System_Private_Macros
+ * @{
+ */
+
+/**
+ * @}
+ */
+
+/** @addtogroup STM32F7xx_System_Private_Variables
+ * @{
+ */
+
+ /* This variable is updated in three ways:
+ 1) by calling CMSIS function SystemCoreClockUpdate()
+ 2) by calling HAL API function HAL_RCC_GetHCLKFreq()
+ 3) each time HAL_RCC_ClockConfig() is called to configure the system clock frequency
+ Note: If you use this function to configure the system clock; then there
+ is no need to call the 2 first functions listed above, since SystemCoreClock
+ variable is updated automatically.
+ */
+ uint32_t SystemCoreClock = 16000000;
+ const uint8_t AHBPrescTable[16] = {0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 6, 7, 8, 9};
+ const uint8_t APBPrescTable[8] = {0, 0, 0, 0, 1, 2, 3, 4};
+
+/**
+ * @}
+ */
+
+/** @addtogroup STM32F7xx_System_Private_FunctionPrototypes
+ * @{
+ */
+
+/**
+ * @}
+ */
+
+/** @addtogroup STM32F7xx_System_Private_Functions
+ * @{
+ */
+
+/**
+ * @brief Setup the microcontroller system
+ * Initialize the Embedded Flash Interface, the PLL and update the
+ * SystemFrequency variable.
+ * @param None
+ * @retval None
+ */
+void SystemInit(void)
+{
+ /* FPU settings ------------------------------------------------------------*/
+#if (__FPU_PRESENT == 1) && (__FPU_USED == 1)
+ SCB->CPACR |= ((3UL << 10*2)|(3UL << 11*2)); /* set CP10 and CP11 Full Access */
+#endif
+
+ /* Configure the Vector Table location add offset address ------------------*/
+#ifdef VECT_TAB_SRAM
+ SCB->VTOR = RAMDTCM_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal SRAM */
+#else
+ SCB->VTOR = FLASH_BASE | VECT_TAB_OFFSET; /* Vector Table Relocation in Internal FLASH */
+#endif
+}
+
+/**
+ * @brief Update SystemCoreClock variable according to Clock Register Values.
+ * The SystemCoreClock variable contains the core clock (HCLK), it can
+ * be used by the user application to setup the SysTick timer or configure
+ * other parameters.
+ *
+ * @note Each time the core clock (HCLK) changes, this function must be called
+ * to update SystemCoreClock variable value. Otherwise, any configuration
+ * based on this variable will be incorrect.
+ *
+ * @note - The system frequency computed by this function is not the real
+ * frequency in the chip. It is calculated based on the predefined
+ * constant and the selected clock source:
+ *
+ * - If SYSCLK source is HSI, SystemCoreClock will contain the HSI_VALUE(*)
+ *
+ * - If SYSCLK source is HSE, SystemCoreClock will contain the HSE_VALUE(**)
+ *
+ * - If SYSCLK source is PLL, SystemCoreClock will contain the HSE_VALUE(**)
+ * or HSI_VALUE(*) multiplied/divided by the PLL factors.
+ *
+ * (*) HSI_VALUE is a constant defined in stm32f7xx_hal_conf.h file (default value
+ * 16 MHz) but the real value may vary depending on the variations
+ * in voltage and temperature.
+ *
+ * (**) HSE_VALUE is a constant defined in stm32f7xx_hal_conf.h file (default value
+ * 25 MHz), user has to ensure that HSE_VALUE is same as the real
+ * frequency of the crystal used. Otherwise, this function may
+ * have wrong result.
+ *
+ * - The result of this function could be not correct when using fractional
+ * value for HSE crystal.
+ *
+ * @param None
+ * @retval None
+ */
+void SystemCoreClockUpdate(void)
+{
+ uint32_t tmp = 0, pllvco = 0, pllp = 2, pllsource = 0, pllm = 2;
+
+ /* Get SYSCLK source -------------------------------------------------------*/
+ tmp = RCC->CFGR & RCC_CFGR_SWS;
+
+ switch (tmp)
+ {
+ case 0x00: /* HSI used as system clock source */
+ SystemCoreClock = HSI_VALUE;
+ break;
+ case 0x04: /* HSE used as system clock source */
+ SystemCoreClock = HSE_VALUE;
+ break;
+ case 0x08: /* PLL used as system clock source */
+
+ /* PLL_VCO = (HSE_VALUE or HSI_VALUE / PLL_M) * PLL_N
+ SYSCLK = PLL_VCO / PLL_P
+ */
+ pllsource = (RCC->PLLCFGR & RCC_PLLCFGR_PLLSRC) >> 22;
+ pllm = RCC->PLLCFGR & RCC_PLLCFGR_PLLM;
+
+ if (pllsource != 0)
+ {
+ /* HSE used as PLL clock source */
+ pllvco = (HSE_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6);
+ }
+ else
+ {
+ /* HSI used as PLL clock source */
+ pllvco = (HSI_VALUE / pllm) * ((RCC->PLLCFGR & RCC_PLLCFGR_PLLN) >> 6);
+ }
+
+ pllp = (((RCC->PLLCFGR & RCC_PLLCFGR_PLLP) >>16) + 1 ) *2;
+ SystemCoreClock = pllvco/pllp;
+ break;
+ default:
+ SystemCoreClock = HSI_VALUE;
+ break;
+ }
+ /* Compute HCLK frequency --------------------------------------------------*/
+ /* Get HCLK prescaler */
+ tmp = AHBPrescTable[((RCC->CFGR & RCC_CFGR_HPRE) >> 4)];
+ /* HCLK frequency */
+ SystemCoreClock >>= tmp;
+}
+
+/**
+ * @}
+ */
+
+/**
+ * @}
+ */
+
+/**
+ * @}
+ */
+/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/